├── lab-snowtooth-express
├── public
│ ├── main.js
│ ├── img
│ │ ├── band.png
│ │ ├── hotel.png
│ │ ├── kids.png
│ │ ├── lessons.png
│ │ ├── get-some-lg.jpg
│ │ ├── get-some-md.jpg
│ │ └── get-some-sm.jpg
│ ├── _dependencies
│ │ ├── normalize.min.css
│ │ ├── modernizr.min.js
│ │ └── jquery.min.js
│ ├── style.css
│ ├── source.scss
│ └── index.html
├── app.js
└── readme.md
├── lab-best-of-3
├── lib
│ └── coinflip.js
├── bestof.js
└── readme.md
├── MH - Node js Kickoff.pdf
├── http servers
├── img
│ └── pilot.png
├── html
│ └── index.html
├── servers.js
└── readme.md
├── lab-moodserver
├── public
│ ├── img
│ │ ├── happy.jpg
│ │ └── sad.jpg
│ ├── sad.html
│ └── happy.html
├── mood-server.js
└── readme.md
├── modules
├── game-function.js
├── bin
│ ├── dice.js
│ └── dice-function.js
├── game.js
└── readme.md
├── node core
├── util.js
├── path.js
├── process-argv.js
├── global.js
├── process-stdin-stdout.js
├── timers.js
└── readme.md
├── optimist
├── arguments.js
└── readme.md
├── fs
├── directories.js
├── readme.md
└── files.js
├── readme.md
├── .jshintrc
├── Intro
├── hello-world.js
└── readme.md
├── EventEmitter
├── emitter.js
├── say-something.js
└── readme.md
├── request
├── request-binary.js
├── readme.md
└── request.js
├── .gitignore
├── package.json
├── formidable
├── readme.md
└── formidable-server.js
├── LICENSE
├── GruntFile.js
├── parsing post bodies
├── server.js
├── server-upload.js
└── readme.md
└── npm
└── readme.md
/lab-snowtooth-express/public/main.js:
--------------------------------------------------------------------------------
1 | $(document).foundation();
--------------------------------------------------------------------------------
/lab-best-of-3/lib/coinflip.js:
--------------------------------------------------------------------------------
1 | //
2 | // TODO: Export a coin flip function
3 | //
--------------------------------------------------------------------------------
/lab-best-of-3/bestof.js:
--------------------------------------------------------------------------------
1 | //
2 | // TODO: Code this module, consume ./lib/coinflip
3 | //
--------------------------------------------------------------------------------
/MH - Node js Kickoff.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoonHighway/node-js-kickoff/HEAD/MH - Node js Kickoff.pdf
--------------------------------------------------------------------------------
/http servers/img/pilot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoonHighway/node-js-kickoff/HEAD/http servers/img/pilot.png
--------------------------------------------------------------------------------
/lab-moodserver/public/img/happy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoonHighway/node-js-kickoff/HEAD/lab-moodserver/public/img/happy.jpg
--------------------------------------------------------------------------------
/lab-moodserver/public/img/sad.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoonHighway/node-js-kickoff/HEAD/lab-moodserver/public/img/sad.jpg
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/img/band.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoonHighway/node-js-kickoff/HEAD/lab-snowtooth-express/public/img/band.png
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/img/hotel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoonHighway/node-js-kickoff/HEAD/lab-snowtooth-express/public/img/hotel.png
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/img/kids.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoonHighway/node-js-kickoff/HEAD/lab-snowtooth-express/public/img/kids.png
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/img/lessons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoonHighway/node-js-kickoff/HEAD/lab-snowtooth-express/public/img/lessons.png
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/img/get-some-lg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoonHighway/node-js-kickoff/HEAD/lab-snowtooth-express/public/img/get-some-lg.jpg
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/img/get-some-md.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoonHighway/node-js-kickoff/HEAD/lab-snowtooth-express/public/img/get-some-md.jpg
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/img/get-some-sm.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MoonHighway/node-js-kickoff/HEAD/lab-snowtooth-express/public/img/get-some-sm.jpg
--------------------------------------------------------------------------------
/modules/game-function.js:
--------------------------------------------------------------------------------
1 | var roll = require("./bin/dice-function")(100);
2 |
3 | console.log("Rolling a default sided die and the results are:", roll());
4 | console.log("Rolling a 20 sided die:", roll());
5 |
--------------------------------------------------------------------------------
/http servers/html/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HTML Files
6 |
7 |
8 | Serving HTML FILES!!!
9 |
10 |
--------------------------------------------------------------------------------
/node core/util.js:
--------------------------------------------------------------------------------
1 | var util = require('util');
2 |
3 | util.print("Gives more control ");
4 | util.print("over how things \n are written \n and formatted \n to the console.\n\n\n\n\n");
5 |
6 | util.log("Some more options");
7 |
--------------------------------------------------------------------------------
/modules/bin/dice.js:
--------------------------------------------------------------------------------
1 | console.log("Initializing the dice module");
2 |
3 | var defaultFaces = 6;
4 |
5 | exports.roll = function(faces) {
6 | faces = (typeof faces == "number" && faces > 0) ? faces : defaultFaces;
7 | return Math.ceil(Math.random() * faces);
8 | };
--------------------------------------------------------------------------------
/lab-snowtooth-express/app.js:
--------------------------------------------------------------------------------
1 | //
2 | // TODO: Create an Express App that runs on port 3000
3 | //
4 |
5 | //
6 | // TODO: Add Express Static Middleware to serve from public folder
7 | //
8 |
9 | //
10 | // TODO: Add logging middleware
11 | //
12 |
13 | //
14 | // TODO: Add dependencies and scripts to a package.json file
15 | //
--------------------------------------------------------------------------------
/modules/bin/dice-function.js:
--------------------------------------------------------------------------------
1 | console.log("Initializing the dice module");
2 |
3 | var defaultFaces = 6;
4 |
5 | module.exports = function(faces) {
6 |
7 | defaultFaces = faces;
8 |
9 | return function() {
10 |
11 | return Math.floor(Math.random() * defaultFaces);
12 |
13 | }
14 |
15 | };
16 |
17 |
18 |
--------------------------------------------------------------------------------
/optimist/arguments.js:
--------------------------------------------------------------------------------
1 | var argv = require('optimist').argv;
2 |
3 | if (!argv.adj) {
4 | console.log("You need to run this again with arguments --adj, --verb, --pastVerb, --noun");
5 | process.exit();
6 | }
7 |
8 | console.log('The %s man %s the dishes before he %s to his %s.', argv.adj, argv.pastVerb, argv.verb, argv.noun);
9 |
--------------------------------------------------------------------------------
/node core/path.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var url = "/some//Path\/that is a bit//broken/../..";
3 |
4 | url = path.normalize(url);
5 |
6 | console.log(url);
7 |
8 | url = path.join('courses', 'class', 'javascript', 'students');
9 |
10 | console.log(url);
11 |
12 | url += "/studentList.html";
13 |
14 | console.log(url);
15 |
16 | url = path.basename(__filename);
17 |
18 | console.log(url);
19 |
--------------------------------------------------------------------------------
/node core/process-argv.js:
--------------------------------------------------------------------------------
1 | console.log(process.argv);
2 |
3 | function getArgument(name) {
4 | return process.argv[process.argv.indexOf(name)+1];
5 | }
6 |
7 | /* process argv always contains 'node' and 'filename'
8 | *
9 | */
10 | if (process.argv.length > 2) {
11 | console.log("INFO: " + getArgument('-info'));
12 | } else {
13 | console.log("This process ran without arguments");
14 | }
15 |
--------------------------------------------------------------------------------
/lab-moodserver/mood-server.js:
--------------------------------------------------------------------------------
1 | // TODO: Create a variable to hold mood 'happy' or 'sad'
2 | // TODO: Create a webserver and serve './public/happy.html' or './public/sad.html'
3 | // TODO: Make sure the server also serves images
4 | // TODO: Collect data from the user using process.stdin.on('data', callback);
5 | // TODO: Allow user to set happy or sad from console
6 | // TODO: Allow user to exit by typing exit into the console
--------------------------------------------------------------------------------
/node core/global.js:
--------------------------------------------------------------------------------
1 | var user = {
2 | first: "Leroy",
3 | last: "Brown"
4 | };
5 |
6 | console.log("This code is located in the file %s", __filename);
7 | console.log("This file is located in the directory %s", __dirname);
8 |
9 | console.log("=======================================================");
10 |
11 | console.log(global);
12 |
13 | console.log("=======================================================");
14 |
15 |
--------------------------------------------------------------------------------
/node core/process-stdin-stdout.js:
--------------------------------------------------------------------------------
1 | //Standard Output
2 | process.stdout.write("\nInput: ");
3 |
4 | //Standard Input
5 | process.stdin.on('data', function(data) {
6 |
7 | var input = data.toString().toLowerCase().trim();
8 |
9 | if (input === "exit") {
10 |
11 | //Exit
12 | process.exit();
13 |
14 | }
15 |
16 | //Standard Output
17 | process.stdout.write("Output: " + input +"\nInput: ");
18 |
19 | });
--------------------------------------------------------------------------------
/modules/game.js:
--------------------------------------------------------------------------------
1 | var dice = require("./bin/dice");
2 |
3 | console.log("Rolling a default sided die and the results are:", dice.roll());
4 | console.log("Rolling a 20 sided die:", dice.roll(20));
5 |
6 | var roll = require("./bin/dice").roll;
7 | console.log("Rolling with just the imported roll function:", roll(1000));
8 |
9 | console.log("The typeof defaultFaces is:", typeof defaultFaces);
10 | console.log("The typeof dice.defaultFaces is:", typeof dice.defaultFaces);
--------------------------------------------------------------------------------
/lab-moodserver/public/sad.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Soooooo Sad
6 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/lab-moodserver/public/happy.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Happy Happy Happy
6 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/fs/directories.js:
--------------------------------------------------------------------------------
1 | var fs = require('fs');
2 |
3 | var students = {
4 |
5 | "Leroy": "JAVA",
6 | "Paul": "Javascript",
7 | "JuJuBee": "HTML"
8 |
9 | };
10 |
11 | if (!fs.existsSync(__dirname + "/students")) {
12 | fs.mkdirSync("./students");
13 | }
14 |
15 | fs.appendFile('students/index.json', JSON.stringify(students), function(err) {
16 |
17 | if (err) {
18 | throw err;
19 | }
20 |
21 | console.log("Directory and File Created");
22 |
23 | });
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | Introduction to Node js
2 | =======================
3 | This course introduces Javascript Engineers to Node js. This course covers how node works, when to use it,
4 | and how to use it. In this introduction we will look mostly at the core components of node js that
5 | were developed by Joyent. This course wraps with with building a module to publish on the NPM registry.
6 |
7 | Topics
8 | ------
9 | * Introducing Node js
10 | * Node Core
11 | * fs Module
12 | * Making Requests
13 | * HTTP Servers
14 | * Node Package Manager, NPM
15 | * Using Node Modules
16 | * Introducing Express
17 |
18 |
--------------------------------------------------------------------------------
/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "curly" : true,
3 | "eqeqeq" : true,
4 | "immed" : true,
5 | "latedef" : true,
6 | "newcap" : true,
7 | "noarg" : true,
8 | "sub" : true,
9 | "undef" : true,
10 | "laxbreak": true,
11 | "boss" : true,
12 | "eqnull" : true,
13 | "node" : true,
14 | "globals" : {
15 | "it" : false,
16 | "xit" : false,
17 | "describe" : false,
18 | "xdescribe" : false,
19 | "beforeEach" : false,
20 | "afterEach" : false,
21 | "expect" : false,
22 | "spyOn" : false
23 | }
24 | }
--------------------------------------------------------------------------------
/Intro/hello-world.js:
--------------------------------------------------------------------------------
1 | // Setting h to a String "Hello"
2 | var h = "Hello";
3 |
4 | // Setting w to a String "Hello"
5 | var w = "World";
6 |
7 | /**
8 | * Concatenates two strings with a space and appends an explanation point and "From Node js ;)"
9 | * @param first {string} The first word
10 | * @param second {string} The second word
11 | * @returns {string} A sentence containing the first and second word
12 | */
13 | function print(first, second) {
14 | return first + " " + second + "! From Node js ;)";
15 | }
16 |
17 | // Executes the print function
18 | var r = print(h, w);
19 |
20 | // Outputs the results
21 | console.log(r);
22 |
--------------------------------------------------------------------------------
/EventEmitter/emitter.js:
--------------------------------------------------------------------------------
1 | var EventEmitter = require('events').EventEmitter;
2 |
3 | var event = new EventEmitter();
4 | var count = 0;
5 |
6 | event.on("customEvent", function (message, count) {
7 | console.log(count + " custom: ", message);
8 | });
9 |
10 | process.stdin.on('data', function (data) {
11 |
12 | var input = data.toString().toLowerCase().trim();
13 |
14 | if (input === 'exit') {
15 | process.exit();
16 | }
17 |
18 | event.emit("customEvent", input, ++count);
19 |
20 | });
21 |
22 | process.on('exit', function () {
23 |
24 | console.log('leaving after ' + count + ' events were emitted');
25 |
26 | });
27 |
--------------------------------------------------------------------------------
/request/request-binary.js:
--------------------------------------------------------------------------------
1 | var http = require('http'),
2 | fs = require('fs');
3 |
4 | var options = {
5 | hostname: 'topics.nytimes.com',
6 | port: 80,
7 | path: '/top/reference/timestopics/subjects/a/avalanches/index.html',
8 | method: 'GET'
9 | };
10 |
11 | var req = http.request(options, function(res) {
12 |
13 | res.on('data', function (chunk) {
14 | fs.appendFile('avi-binary.html.download', chunk);
15 | });
16 |
17 | res.on('end', function () {
18 | fs.rename('avi-binary.html.download', 'avi-binary.html');
19 | });
20 |
21 | });
22 |
23 |
24 | req.on('error', function(e) {
25 | console.log('problem with request: ' + e.message);
26 | });
27 |
28 | req.end();
29 |
--------------------------------------------------------------------------------
/request/readme.md:
--------------------------------------------------------------------------------
1 | Making HTTP Requests
2 | ============
3 | You can use the HTTP object to make a HTTP request for a webpage or a file.
4 |
5 | Making a Request
6 | ----------------
7 |
8 | ```javascript
9 | var http = require('http');
10 |
11 | http.request({
12 | hostname: 'en.wikipedia.org',
13 | port: 80,
14 | path: '/wiki/Mchammer',
15 | method: 'GET'
16 | }, function(res) {
17 |
18 | var body = "";
19 |
20 | res.on('data', function (chunk) {
21 | body += chunk;
22 | });
23 |
24 | res.on('end', function() {
25 | console.log(body);
26 | });
27 |
28 | }).end();
29 |
30 | ```
31 |
32 |
33 |
--------------------------------------------------------------------------------
/lab-moodserver/readme.md:
--------------------------------------------------------------------------------
1 | Mood Server
2 | ===========
3 | The mood server is an http server that serves html pages 'happy' or 'sad' depending upon the mood variable. The
4 | mood variable is set by collecting console data using process.stdin
5 |
6 | Topics
7 | ------
8 | * http server
9 | * serving html
10 | * serving img
11 | * process.stdin
12 |
13 |
14 | Instructions
15 | ------------
16 | 1. Create a variable to hold mood 'happy' or 'sad'
17 | 2. Create a webserver and serve './public/happy.html' or './public/sad.html'
18 | 3. Make sure the server also serves images
19 | 4. Collect data from the user using process.stdin.on('data', callback);
20 | 4. Allow user to set happy or sad from console
21 | 5. Allow user to exit by typing exit into the console
22 |
23 |
24 |
--------------------------------------------------------------------------------
/node core/timers.js:
--------------------------------------------------------------------------------
1 | var waitTime = 3000;
2 | var currentTime = 0;
3 | var percentWaited = 0;
4 | var waitInterval = 100;
5 |
6 | function writeWaitingPercent(p) {
7 | process.stdout.clearLine();
8 | process.stdout.cursorTo(0);
9 | process.stdout.write(`waiting ... ${p}%`);
10 | }
11 |
12 | setTimeout(function () {
13 |
14 | clearInterval(interval);
15 | writeWaitingPercent(100);
16 | process.stdout.write('\n\n\n');
17 |
18 | }, waitTime);
19 |
20 | var interval = setInterval(function () {
21 |
22 | currentTime += waitInterval;
23 | percentWaited = Math.floor((currentTime / waitTime) * 100);
24 | writeWaitingPercent(percentWaited);
25 |
26 | }, waitInterval);
27 |
28 |
29 | process.stdout.write('\n\n');
30 | writeWaitingPercent(percentWaited);
--------------------------------------------------------------------------------
/optimist/readme.md:
--------------------------------------------------------------------------------
1 | npm optimist module
2 | ===================
3 | A node modules that takes terminal arguments and places them on a hash.
4 |
5 | Installing Optimist
6 | -------------------
7 | [optimist](https://www.npmjs.org/package/optimist)
8 |
9 | ```
10 | $ npm install optimist
11 | ```
12 |
13 | Sending Data to your node app
14 | -----------------------------
15 |
16 | ```
17 | $ node arguments.js --adj nice --pastVerb ate --verb ran --noun car
18 | ```
19 |
20 | Getting the data in the node app
21 | -----------------------------------
22 |
23 | ```javascript
24 |
25 | var argv = require('optimist').argv;
26 |
27 | argv.adj; // 'nice'
28 | argv.pastVerb; // 'ate'
29 | argv.verb; // 'ran'
30 | argv.noun; // 'car'
31 |
32 | ```
33 |
34 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by .gitignore support plugin (hsz.mobi)
2 | ### Node template
3 | # Logs
4 | logs
5 | *.log
6 |
7 | # Runtime data
8 | pids
9 | *.pid
10 | *.seed
11 |
12 | # Directory for instrumented libs generated by jscoverage/JSCover
13 | lib-cov
14 |
15 | # Coverage directory used by tools like istanbul
16 | coverage
17 |
18 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
19 | .grunt
20 |
21 | # Compiled binary addons (http://nodejs.org/api/addons.html)
22 | build/Release
23 |
24 | # Dependency directory
25 | # Commenting this out is preferred by some people, see
26 | # https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git
27 | node_modules
28 |
29 | # Users Environment Variables
30 | .lock-wscript
31 |
32 | # IDE Assets
33 | .idea/
34 |
--------------------------------------------------------------------------------
/fs/readme.md:
--------------------------------------------------------------------------------
1 | Node js fs module
2 | =================
3 | Node js manages the file system through the fs module. This module contains everything required to manage files and
4 | directories. Files can be read as Binary or as a number of different file formats.
5 |
6 | Files
7 | -----
8 |
9 | ###Reading Files
10 | ```javascript
11 |
12 | fs.readFile("/path/file.txt", 'UTF-8', function(err, fileText) { });
13 | fs.readFile("/path/file.txt", function(err, buffer) { });
14 |
15 | ```
16 |
17 | ###Appending Files
18 | ```javascript
19 |
20 | fs.appendFile("/path/file.txt", "A New Text File", function(err) { });
21 | fs.appendFileSync("/path/file.txt", "A New Text File");
22 |
23 | ```
24 |
25 | ###Removing Files
26 | ```javascript
27 |
28 | fs.unlink("/path/file.txt", function(err) { });
29 | fs.unlinkSync("/path/file.txt");
30 |
31 | ```
32 |
--------------------------------------------------------------------------------
/lab-snowtooth-express/readme.md:
--------------------------------------------------------------------------------
1 | Snowtooth Express Static Site
2 | =============================
3 | In this lab students will create a new website using the express framework. The goal is to create a
4 | package.json file and install the required frameworks using npm. Once the required framewroks are
5 | installed they will be used to host a static website from the public folder.
6 |
7 | Topics
8 | ------
9 | * npm install
10 | * package.json
11 | * express
12 | * express.static
13 | * morgan
14 |
15 |
16 | Instructions
17 | ------------
18 | 1. Create a new package.json file for this website
19 | 2. Install express and morgan
20 | 3. Use express.static to serve static files from the __public__ folder
21 | 4. Use the morgan logger to display logging info on the console
22 | 5. Run you app, you should see the snowtooth webpage
23 |
24 | Citations
25 | ---------
26 | [Bassnectar Snowglobe](http://www.bassnectar.net/2012/01/snowglobe-tahoe-family-photo/)
27 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "node-js-intro",
3 | "version": "1.1.4",
4 | "description": "A series of topics and examples designed to introduce developers to node js",
5 | "main": "GruntFile.js",
6 | "dependencies": {
7 | "grunt": "^0.4.5",
8 | "grunt-contrib-jshint": "^0.10.0",
9 | "grunt-bump": "^0.0.15"
10 | },
11 | "devDependencies": {
12 | "grunt": "^0.4.5",
13 | "grunt-bump": "0.0.15",
14 | "grunt-contrib-jshint": "^0.10.0"
15 | },
16 | "scripts": {
17 | "test": "echo \"Error: no test specified\" && exit 1"
18 | },
19 | "repository": {
20 | "type": "git",
21 | "url": "https://github.com/MoonTahoe/node-js-intro.git"
22 | },
23 | "keywords": [
24 | "Node",
25 | "js",
26 | "intro",
27 | "tutorial"
28 | ],
29 | "author": "Moon Highway (Alex Banks)",
30 | "license": "MIT",
31 | "bugs": {
32 | "url": "https://github.com/MoonTahoe/node-js-intro/issues"
33 | },
34 | "homepage": "https://github.com/MoonTahoe/node-js-intro"
35 | }
36 |
--------------------------------------------------------------------------------
/formidable/readme.md:
--------------------------------------------------------------------------------
1 | npm formidable module
2 | =====================
3 | Formidable is a node module that can speed up your workflow by parsing your post data and injecting the form variables
4 | and uploaded files neatly into a callback function.
5 |
6 |
7 | Installing formidable
8 | ---------------------
9 |
10 | ```
11 | $ npm install formidable
12 | ```
13 |
14 | parsing forms data with formidable
15 | ----------------------------------
16 |
17 | ```javascript
18 | var form = new formidable.IncomingForm();
19 |
20 | form.uploadDir = __dirname + "/Uploads/";
21 |
22 | form.parse(req, function (err, fields, files) {
23 |
24 | fs.rename(files['upload-file'].path,
25 | form.uploadDir + "/"
26 | + fields['stoke-level'] + "-"
27 | + fields['fav-color'] + "-"
28 | + files['upload-file'].name);
29 |
30 | res.writeHead(200, {'Content-Type': 'text/plain'});
31 | res.end('File Uploaded: ' + files['upload-file'].name);
32 |
33 | });
34 | ```
35 |
36 |
--------------------------------------------------------------------------------
/EventEmitter/say-something.js:
--------------------------------------------------------------------------------
1 | var EventEmitter = require('events').EventEmitter,
2 | util = require('util');
3 |
4 | var Person = function (name, sayings) {
5 |
6 | var p = this;
7 |
8 | p.name = name;
9 | p.sayings = sayings;
10 |
11 | setInterval(function () {
12 | p.emit('speak', p.saySomething());
13 | }, 750);
14 |
15 | };
16 |
17 | util.inherits(Person, EventEmitter);
18 |
19 | Person.prototype.saySomething = function () {
20 | return this.sayings[Math.floor(Math.random() * this.sayings.length)];
21 | };
22 |
23 |
24 |
25 | var Leroy = new Person("Leroy Brown", [
26 | "What's Shaking?",
27 | "I'm all out of Razor Blades!",
28 | "Ain't nobody badder than me",
29 | "Did you know they wrote a song about me?",
30 | "That ain't pizza!",
31 | "That Junk Yard Dog ain't mean!",
32 | "Who is King Kong anyways"
33 | ]);
34 |
35 | Leroy.once('speak', function (say) {
36 | console.log("Leroy Brown won't shut up!");
37 | });
38 |
39 | Leroy.on('speak', function (say) {
40 | console.log("Say mannnn, " + say);
41 | });
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/lab-best-of-3/readme.md:
--------------------------------------------------------------------------------
1 | Challenge Best of 3
2 | =====================
3 | Create an app that flips a coin 3, 5, 7 or any odd number of times above 3 and records the results. This app
4 | should display the results as well as the winner.
5 |
6 | Requirements
7 | -------------
8 | 1. The coin flip function must return "heads" or "tails" 50/50 chance
9 | 2. The coin flip function must be located in a separate module
10 | 3. Running __bestof.js__ consumes the __./lib/coinflip.js__ module
11 | 4. First : Invoke coin flip three times and display the results
12 | 5. Next : Allow user to send 3, 5, 7, or any odd number as an argument when starting the __bestof.js__ module
13 | 6. Then : Check the argument to make sure it is odd and greater than 3
14 | 7. Finally : Flip the coin based on the argument 5 times, 7 times, or any odd number of times
15 | 8. Report on the results
16 |
17 | __Demo : Iteration 1__
18 |
19 | ```
20 | $ node bestof
21 | Heads it is
22 | { heads: 2, tails: 1 }
23 | ```
24 | __Demo : Iteration 2__
25 |
26 | ```
27 | $ node bestof 9
28 | Tails it is
29 | { heads: 4, tails: 5 }
30 | ```
31 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Moon Highway
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/request/request.js:
--------------------------------------------------------------------------------
1 | var http = require('http'),
2 | fs = require('fs');
3 |
4 | var options = {
5 | hostname: 'topics.nytimes.com',
6 | port: 80,
7 | path: '/top/reference/timestopics/subjects/a/avalanches/index.html',
8 | method: 'GET'
9 | };
10 |
11 | var req = http.request(options, function(res) {
12 |
13 | var responseBody = "";
14 |
15 | console.log("Response from server started.");
16 | console.log('Server status: %s', res.statusCode);
17 | console.log('Response headers: %j', res.headers);
18 |
19 | res.setEncoding('utf8');
20 |
21 | res.once('data', function(chunk) {
22 | console.log(chunk);
23 | });
24 |
25 | res.on('data', function (chunk) {
26 | console.log("--chunk--" + chunk.length);
27 | responseBody += chunk;
28 | });
29 |
30 | res.on('end', function() {
31 | fs.writeFile('avi-article.html', responseBody, function(err) {
32 | if (err) {
33 | throw err;
34 | }
35 | console.log("File Downloaded");
36 | });
37 | });
38 | });
39 |
40 | req.on('error', function(e) {
41 | console.log('problem with request: ' + e.message);
42 | });
43 |
44 | req.end();
45 |
--------------------------------------------------------------------------------
/EventEmitter/readme.md:
--------------------------------------------------------------------------------
1 | EventEmitter
2 | ============
3 | The node js EventEmitter allows us to add event handlers to objects and emit events. Any object that handles or
4 | emits events extends the EventEmitter.
5 |
6 | Topics
7 | ------
8 | * Using EventEmittr
9 | * Emitting Events
10 | * Handling Events
11 | * Passing Parameters
12 | * Extending Objects with EventEmitter
13 |
14 |
15 | ###Emiting Custom Events
16 | ```javascript
17 | var EventEmitter = require('events').EventEmitter;
18 |
19 | var event = new EventEmitter();
20 |
21 | event.on("customEvent", function(message) {
22 | console.log(message);
23 | });
24 |
25 | event.emit("customEvent", "Emitted a custom event");
26 |
27 | ```
28 |
29 | ###Creating EventEmitter Objects
30 | ```javascript
31 | var EventEmitter = require('events').EventEmitter;
32 |
33 | var Person = function(name){
34 | this.name = name;
35 | };
36 | Person.prototype = new EventEmitter();
37 |
38 | var Leroy = new Person("Leroy Brown");
39 |
40 | Leroy.on('speak', function(say) {
41 | console.log("Hey mannnn, " + say);
42 | });
43 |
44 | Leroy.emit('speak', "what's shaking?");
45 |
46 |
47 | ```
--------------------------------------------------------------------------------
/GruntFile.js:
--------------------------------------------------------------------------------
1 | module.exports = function (grunt) {
2 |
3 | grunt.initConfig({
4 | pkg: grunt.file.readJSON('package.json'),
5 | jshint: {
6 | all: [
7 | "*.js",
8 | "*.json",
9 | "./*/*.js",
10 | "./*/*.json"
11 | ],
12 | options: {
13 | jshintrc: ".jshintrc"
14 | }
15 | },
16 | bump: {
17 | options: {
18 | files: ['package.json'],
19 | updateConfigs: [],
20 | commit: true,
21 | commitMessage: 'Release v%VERSION%',
22 | commitFiles: ['package.json'],
23 | createTag: true,
24 | tagName: 'v%VERSION%',
25 | tagMessage: 'Version %VERSION%',
26 | push: true,
27 | pushTo: 'https://github.com/MoonHighway/node-js-intro.git',
28 | gitDescribeOptions: '--tags --always --abbrev=1 --dirty=-d'
29 | }
30 | }
31 | });
32 |
33 | grunt.loadNpmTasks('grunt-bump');
34 | grunt.loadNpmTasks('grunt-contrib-jshint');
35 | grunt.registerTask('check', ['jshint']);
36 | grunt.registerTask('default', ['check', 'bump']);
37 |
38 | };
--------------------------------------------------------------------------------
/modules/readme.md:
--------------------------------------------------------------------------------
1 | Node Modules
2 | ============
3 | Node js uses the Common js module patterns for exporting and importing modules.
4 |
5 | Creating Modules
6 | ----------------
7 |
8 | __counter.js__
9 | ```javascript
10 |
11 | var privateName = "Leroy Brown";
12 |
13 | function splitName() {
14 | return privateName.split(" ");
15 | }
16 |
17 | function countWords() {
18 | return splitName().length;
19 | }
20 |
21 |
22 | exports.name = "Counter";
23 | exports.description = "To learn modules";
24 | exports.count = countWords;
25 |
26 | ```
27 |
28 | Consuming Modules
29 | -----------------
30 |
31 | __counter.js__
32 | ```javascript
33 | var counter = require('./counter');
34 | ```
35 |
36 | __bin/counter.js__
37 | ```javascript
38 | var counter = require('./bin/counter');
39 | ```
40 |
41 | __node_modules/counter.js__
42 | ```javascript
43 | var counter = require('counter');
44 | ```
45 |
46 | Using Modules
47 | -------------
48 | ```javascript
49 | var counter = require('./counter');
50 |
51 | console.log( counter.name );
52 | console.log( counter.description );
53 | console.log( counter.count() );
54 |
55 | console.log( counter.privateName );
56 |
57 | ```
--------------------------------------------------------------------------------
/parsing post bodies/server.js:
--------------------------------------------------------------------------------
1 | var http = require('http');
2 |
3 | http.createServer(function (req, res) {
4 |
5 | if (req.method === 'GET') {
6 |
7 | var htmlForm = 'Post Body Example'
8 | + 'Fill out the Form
';
13 |
14 | res.writeHead(200, {'Content-Type': 'text/html'});
15 | res.end(htmlForm);
16 |
17 | } else if (req.method === 'POST') {
18 |
19 | var body = '';
20 |
21 | req.on('data', function (chunk) {
22 | body += chunk;
23 | });
24 |
25 | req.on('end', function () {
26 |
27 | res.writeHead(200, {'Content-Type': 'text/plain'});
28 | res.end("Request Body: " + body);
29 |
30 | });
31 |
32 | }
33 |
34 | }).listen(3000);
35 |
36 | console.log("Server running on port 3000");
37 |
--------------------------------------------------------------------------------
/fs/files.js:
--------------------------------------------------------------------------------
1 | var fs = require('fs');
2 |
3 | process.stdin.on('data', function(data) {
4 |
5 | var input = data.toString().toLowerCase().trim(),
6 | fileName = 'theFile.txt';
7 |
8 | switch(input) {
9 |
10 | case "create" :
11 |
12 | fs.writeFileSync(fileName, "A New Text File\n===================\n\r\n\r");
13 | console.log("File Created");
14 |
15 | break;
16 |
17 | case "append" :
18 |
19 | fs.appendFile(fileName, "* Item Appended\n\r", function(err) {
20 |
21 | if (err) {
22 | throw err;
23 | }
24 |
25 | console.log("File Appended");
26 |
27 | });
28 |
29 |
30 | break;
31 |
32 | case "read" :
33 |
34 | fs.readFile(fileName, 'UTF-8', function(err, data) {
35 | if (err) {
36 | console.error(err);
37 | } else {
38 | console.log(data);
39 | }
40 | });
41 |
42 |
43 | break;
44 |
45 | case "remove" :
46 |
47 |
48 | fs.unlinkSync(fileName);
49 | console.log("File Removed");
50 |
51 | break;
52 |
53 | case "exit" :
54 |
55 | process.exit();
56 |
57 | break;
58 |
59 | }
60 |
61 |
62 | });
63 |
64 | console.log("create | append | read | remove | exit");
65 |
--------------------------------------------------------------------------------
/parsing post bodies/server-upload.js:
--------------------------------------------------------------------------------
1 | var http = require('http'),
2 | fs = require('fs');
3 |
4 | http.createServer(function (req, res) {
5 |
6 | if (req.method === 'GET') {
7 |
8 | var htmlForm = 'Post Body Example'
9 | + 'Fill out the Form
';
15 |
16 | res.writeHead(200, {'Content-Type': 'text/html'});
17 | res.end(htmlForm);
18 |
19 | } else if (req.method === 'POST') {
20 |
21 | var body = '';
22 |
23 | req.on('data', function (chunk) {
24 | body += chunk;
25 | });
26 |
27 | req.on('end', function () {
28 | res.writeHead(200, {'Content-Type': 'text/plain'});
29 | res.end(body);
30 | });
31 |
32 | }
33 |
34 | }).listen(3000);
35 |
36 | console.log("Server running on port 3000");
37 |
--------------------------------------------------------------------------------
/parsing post bodies/readme.md:
--------------------------------------------------------------------------------
1 | parsing post bodies
2 | ===================
3 | Whenever form data is sent to the post data needs to be collected from the request in chunks. Once we have the post data
4 | we have to parse it. That could get ugly, so we will use one of many parsing frameworks after this example.
5 |
6 | topic
7 | -----
8 | * handling a post request
9 | * handling a multi-part post body
10 | * why we need frameworks
11 |
12 | Handling POST Requests
13 | ----------------------
14 |
15 | ```javascript
16 | http.createServer(function (req, res) {
17 |
18 | if (req.method == 'POST') {
19 |
20 | var body = '';
21 |
22 | req.on('data', function (chunk) {
23 | body += chunk;
24 | });
25 |
26 | req.on('end', function () {
27 |
28 | body; // name=value;name2=value2;name3=value3
29 |
30 | });
31 |
32 | }
33 |
34 | }).listen(3000);
35 | ```
36 |
37 | Handling File Uploads
38 | ---------------------
39 | When parsing files the form post data and the file post data are handled in the same body.
40 |
41 | ```
42 | ------WebKitFormBoundaryGsTefag7g3LFBijB
43 | Content-Disposition: form-data; name="fav-color"
44 |
45 | #000000
46 | ------WebKitFormBoundaryGsTefag7g3LFBijB
47 | Content-Disposition: form-data; name="stoke-level"
48 |
49 | 6
50 | ------WebKitFormBoundaryGsTefag7g3LFBijB
51 | Content-Disposition: form-data; name="upload-file"; filename="working.js"
52 | Content-Type: application/javascript
53 |
54 | This is where the file body is placed...
55 | ```
56 |
--------------------------------------------------------------------------------
/Intro/readme.md:
--------------------------------------------------------------------------------
1 | Introduction
2 | ============
3 | Node js is Javascript on the server, without a browser. The project is officially called node, but we add the js
4 | to eliminate confusion.
5 |
6 | What
7 | ----
8 | * Javascript without a browser
9 | * Based on Chromes V8 engine
10 | * The project is offically called node
11 |
12 | How
13 | ---
14 | * Open source project
15 | * Hosted on Github
16 | * Community developed modules
17 | * Event Based IO
18 |
19 | What it can do
20 | --------------
21 | * Act as a web server
22 | * Build Command Line Tools
23 | * Build Socket Applications
24 | * Anything you can do in JS
25 | * Ideal For "Web Stuff"
26 | * Dynamic Websites
27 | * Rest API's
28 | * Web socket Applications
29 | * Sharing Code
30 |
31 | Source
32 | ------
33 | * [Source on GitHub](https://github.com/joyent/node)
34 |
35 |
36 |
37 | REPL
38 | ====
39 | ```
40 | $ node
41 | > var h = "Hello";
42 | undefined
43 | > var w = "World";
44 | undefined
45 | > function print(first, second) {
46 | > ... return first + " " + second + "! From Node js ;)"
47 | > ... }
48 | undefined
49 | > var r = print(h, w);
50 | undefined
51 | > console.log(r);
52 | Hello World! From Node js ;)
53 | undefined
54 | > .save hello-world.js
55 | Session saved to:hello-world.js
56 | >
57 | (^C again to quit)
58 | >
59 |
60 | $ node hello-world.js
61 | Hello World! From Node js ;)
62 |
63 | $
64 |
65 | ```
66 |
67 | Stopping Node js
68 | ----------------
69 | 1) Node REPL processes run continuously until stopped.
70 | 2) You can exit by typing "Ctl C" twice
71 |
72 | Commenting a Node js file
73 | -------------------------
74 | * // Can be used to comment out a line
75 | * /* will continuously comment until */
76 | * /** Is typically used to describe functions and objects for documentation parsers */
77 |
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/_dependencies/normalize.min.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}
--------------------------------------------------------------------------------
/formidable/formidable-server.js:
--------------------------------------------------------------------------------
1 | var http = require('http'),
2 | fs = require('fs'),
3 | formidable = require('formidable');
4 |
5 | http.createServer(function (req, res) {
6 |
7 | if (req.method === 'GET') {
8 |
9 | var htmlForm = 'Post Body Example'
10 | + 'Fill out the Form
';
16 |
17 | res.writeHead(200, {'Content-Type': 'text/html'});
18 | res.end(htmlForm);
19 |
20 | } else if (req.method === 'POST') {
21 |
22 | var form = new formidable.IncomingForm();
23 |
24 | if (!fs.existsSync(__dirname + "/Uploads/")) {
25 | fs.mkdirSync("./Uploads/");
26 | }
27 |
28 | form.uploadDir = __dirname + "/Uploads/";
29 |
30 | form.parse(req, function (err, fields, files) {
31 |
32 | fs.rename(files['upload-file'].path,
33 | form.uploadDir + "/"
34 | + fields['stoke-level'] + "-"
35 | + fields['fav-color'] + "-"
36 | + files['upload-file'].name);
37 |
38 | res.writeHead(200, {'Content-Type': 'text/plain'});
39 | res.end('File Uploaded: ' + files['upload-file'].name);
40 |
41 | });
42 |
43 | }
44 |
45 | }).listen(3000);
46 |
47 | console.log("Server running on port 3000");
48 |
--------------------------------------------------------------------------------
/http servers/servers.js:
--------------------------------------------------------------------------------
1 | var http = require('http'),
2 | fs = require('fs');
3 |
4 | /**
5 | * Text Server
6 | */
7 | http.createServer(function (req, res) {
8 |
9 | res.writeHead(200, {'Content-Type': 'text/plain'});
10 | res.end('Simple Text\n\r\n\rServer...');
11 |
12 | }).listen(3000);
13 |
14 | /**
15 | * HTML Server
16 | */
17 | http.createServer(function (req, res) {
18 |
19 | var html = "HTML FilesServed from '"
20 | + req.url
21 | + "'
";
22 |
23 | res.writeHead(200, {'Content-Type': 'text/html'});
24 | res.end(html);
25 |
26 | }).listen(3001);
27 |
28 | /**
29 | * JSON Server
30 | */
31 | http.createServer(function (req, res) {
32 |
33 | var people = [
34 | {
35 | first: 'Leroy',
36 | last: 'Brown'
37 | },
38 | {
39 | first: 'Paul',
40 | last: 'Bunyan'
41 | }
42 | ];
43 |
44 | res.writeHead(200, {
45 | 'Access-Control-Allow-Origin': '*',
46 | 'Access-Control-Allow-Methods': 'GET, POST',
47 | 'Access-Control-Allow-Headers': 'X-Requested-With, Content-Type',
48 | 'Content-Type': 'text/json'
49 | });
50 | res.end(JSON.stringify(people));
51 |
52 | }).listen(3002);
53 |
54 | /**
55 | * File Server
56 | */
57 | http.createServer(function (req, res) {
58 |
59 | fs.readFile('./html/index.html', 'UTF-8', function (err, data) {
60 |
61 | if (err) {
62 | throw err;
63 | }
64 |
65 | res.writeHead(200, {'Content-Type': 'text/html'});
66 | res.end(data);
67 |
68 | });
69 |
70 | }).listen(3003);
71 |
72 | /**
73 | * Img Server
74 | */
75 | http.createServer(function (req, res) {
76 |
77 | fs.readFile('./img/pilot.png', function (err, data) {
78 |
79 | if (err) {
80 | throw err;
81 | }
82 |
83 | res.writeHead(200, {'Content-Type': 'image/png'});
84 | res.end(data);
85 |
86 | });
87 |
88 | }).listen(3004);
89 |
90 | console.log("All Servers are running on ports 3000 - 3004");
91 |
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/style.css:
--------------------------------------------------------------------------------
1 | @import url(http://fonts.googleapis.com/css?family=Architects+Daughter);
2 | body > h1:first-child,
3 | section > h2:first-child,
4 | nav > h2:first-child,
5 | section > h1:first-child,
6 | footer > h2:first-child {
7 | display: none;
8 | }
9 |
10 | body {
11 | padding: 0;
12 | background-color: #f1f7f5;
13 | font-size: 100%;
14 | }
15 |
16 | main {
17 | width: 100%;
18 | max-width: 1000px;
19 | background-color: #c2dde4;
20 | margin: 0 auto;
21 | }
22 | @media screen and (min-width: 1000px) {
23 | main {
24 | border-left: solid 1px #3600b6;
25 | border-right: solid 1px #3600b6;
26 | box-shadow: 2px 0px 5px #999;
27 | }
28 | }
29 |
30 | header section#related ul:first-of-type {
31 | text-align: center;
32 | margin: 0;
33 | list-style-type: none;
34 | }
35 | header section#related ul > li > a {
36 | display: block;
37 | padding: 1em 0;
38 | }
39 | @media screen and (min-width: 640px) {
40 | header section#related ul > li > a {
41 | padding: .25em 0;
42 | }
43 | }
44 | header div.logo {
45 | border-top: solid 1px #7462b6;
46 | border-bottom: solid 1px #7462b6;
47 | font-family: "Architects Daughter", cursive, sans-serif;
48 | font-size: 3em;
49 | color: #3600b6;
50 | text-shadow: 2px 2px lightgray;
51 | background-color: snow;
52 | }
53 | header div.logo img {
54 | width: 1em;
55 | }
56 | header div.img-get-some {
57 | position: relative;
58 | }
59 | header div.img-get-some img {
60 | position: relative;
61 | top: -3px;
62 | padding: 0;
63 | }
64 |
65 | nav {
66 | position: relative;
67 | top: -3px;
68 | }
69 | nav div {
70 | text-align: center;
71 | background-color: #3600b6;
72 | }
73 | nav div:hover {
74 | background-color: yellow;
75 | }
76 | nav div a {
77 | font-size: 2em;
78 | color: snow;
79 | padding: .25em;
80 | }
81 | nav div a:hover {
82 | color: #3600b6;
83 | }
84 |
85 | section#calendar {
86 | background-color: snow;
87 | position: relative;
88 | top: -3px;
89 | }
90 | section#calendar section {
91 | margin: 2em 0;
92 | }
93 | section#calendar section h1 {
94 | font-size: 1.5em;
95 | margin: 0;
96 | }
97 | section#calendar section p {
98 | font-size: 1em;
99 | }
100 | section#calendar section a {
101 | padding: 0;
102 | }
103 | section#calendar section a img {
104 | width: 100%;
105 | }
106 | @media screen and (min-width: 1025px) {
107 | section#calendar section a {
108 | width: 50%;
109 | }
110 | }
111 |
112 | section#quotes {
113 | background-color: #7462b6;
114 | position: relative;
115 | top: -3px;
116 | }
117 | section#quotes blockquote {
118 | color: snow;
119 | margin: 1em 0;
120 | }
121 | section#quotes blockquote cite {
122 | color: yellow;
123 | }
124 |
125 | footer {
126 | text-align: center;
127 | font-size: .2em;
128 | }
129 |
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/source.scss:
--------------------------------------------------------------------------------
1 | @import url(http://fonts.googleapis.com/css?family=Architects+Daughter);
2 |
3 | $font-logo: "Architects Daughter", cursive, sans-serif;
4 | $dark: black;
5 | $light-bg-a: #f1f7f5;
6 | $light-bg-b: #c2dde4;
7 | $dark-bg-a: #7462B6;
8 | $dark-bg-b: #3600B6;
9 | $light: #d3d3d3;
10 | $contrast: green;
11 | $white: snow;
12 |
13 | body>h1:first-child,
14 | section>h2:first-child,
15 | nav>h2:first-child,
16 | section>h1:first-child,
17 | footer>h2:first-child {
18 | display:none;
19 | }
20 |
21 | body {
22 | padding: 0;
23 | background-color: $light-bg-a;
24 | font-size: 100%;
25 | }
26 |
27 | main {
28 | width: 100%;
29 | max-width: 1000px;
30 | background-color: $light-bg-b;
31 | margin: 0 auto;
32 |
33 | @media screen and (min-width: 1000px) {
34 | border-left: solid 1px $dark-bg-b;
35 | border-right: solid 1px $dark-bg-b;
36 | box-shadow: 2px 0px 5px #999;
37 | }
38 | }
39 |
40 | header {
41 |
42 | section#related {
43 | ul:first-of-type {
44 | text-align: center;
45 | margin: 0;
46 | list-style-type: none;
47 | }
48 |
49 | ul>li>a {
50 | display: block;
51 | padding: 1em 0;
52 |
53 | @media screen and (min-width: 640px) {
54 | padding: .25em 0;
55 | }
56 |
57 | }
58 | }
59 |
60 | div.logo {
61 | border-top: solid 1px $dark-bg-a;
62 | border-bottom: solid 1px $dark-bg-a;
63 | font-family: $font-logo;
64 | font-size: 3em;
65 | color: $dark-bg-b;
66 | text-shadow: 2px 2px $light;
67 | background-color: $white;
68 |
69 | img {
70 | width: 1em;
71 | }
72 |
73 | }
74 |
75 | div.img-get-some {
76 |
77 | position: relative;
78 |
79 | img {
80 | position: relative;
81 | top: -3px;
82 | padding: 0;
83 | }
84 |
85 | }
86 |
87 | }
88 |
89 | nav {
90 |
91 | position: relative;
92 | top: -3px;
93 |
94 | div {
95 | text-align: center;
96 | background-color: $dark-bg-b;
97 |
98 | &:hover {
99 | background-color: yellow;
100 | }
101 |
102 | a {
103 | font-size: 2em;
104 | color: $white;
105 | padding: .25em;
106 |
107 | &:hover {
108 | color: $dark-bg-b;
109 | }
110 |
111 | }
112 |
113 | }
114 |
115 | }
116 |
117 | section#calendar {
118 | background-color: $white;
119 | position: relative;
120 | top: -3px;
121 |
122 | section {
123 | margin: 2em 0;
124 | h1 {
125 | font-size: 1.5em;
126 | margin: 0;
127 |
128 | }
129 | p {
130 | font-size: 1em;
131 | }
132 | a {
133 | padding: 0;
134 |
135 | img {
136 | width: 100%;
137 | }
138 |
139 | @media screen and (min-width: 1025px) {
140 | width: 50%;
141 | }
142 |
143 | }
144 | }
145 | }
146 |
147 | section#quotes {
148 | background-color: $dark-bg-a;
149 | position: relative;
150 | top: -3px;
151 |
152 | blockquote {
153 | color: $white;
154 | margin: 1em 0;
155 | cite {
156 | color: yellow;
157 | }
158 | }
159 |
160 |
161 | }
162 |
163 | footer {
164 | text-align: center;
165 | font-size: .2em;
166 | }
167 |
--------------------------------------------------------------------------------
/http servers/readme.md:
--------------------------------------------------------------------------------
1 | http.Server
2 | ===========
3 | One of the most powerful features of Node js is the ability to create http servers. You can program one file... in javascript...
4 | that can act as a webserver on any machine running Node js. Servers are a part of the http module that comes with Node js.
5 |
6 | http.createServer
7 | -----------------
8 | Creates a new instance of a server. The server then listens on a given port and ip address.
9 | [HTTP](http://nodejs.org/api/http.html)
10 |
11 |
12 | http.ServerRequest
13 | ------------------
14 | An object representing the request, contains url, all request headers, and any data or files sent with the request.
15 |
16 | http.ServerResponse
17 | -------------------
18 | A object that handles the server's response.
19 | [resonse status codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Response_codes)
20 |
21 | * http status codes
22 |
23 |
24 | Serving Text
25 | -------------
26 |
27 | ```javascript
28 | http.createServer(function (req, res) {
29 |
30 | res.writeHead(200, {'Content-Type': 'text/plain'});
31 | res.end('Simple Text\n\r\n\rServer...');
32 |
33 | }).listen(3000);
34 | ```
35 |
36 | Serving Html
37 | -------------
38 |
39 | ```javascript
40 | http.createServer(function (req, res) {
41 |
42 | var html = "HTML FilesServed from '"
43 | + req.url
44 | + "'
";
45 |
46 | res.writeHead(200, {'Content-Type': 'text/html'});
47 | res.end(html);
48 |
49 | }).listen(3001);
50 | ```
51 |
52 | Serving JSON with CORS
53 | ----------------------
54 |
55 | ```javascript
56 | http.createServer(function (req, res) {
57 |
58 | var people = [
59 | {
60 | first: 'Leroy',
61 | last: 'Brown'
62 | },
63 | {
64 | first: 'Paul',
65 | last: 'Bunyan'
66 | }
67 | ];
68 |
69 | res.writeHead(200, {
70 | 'Access-Control-Allow-Origin': '*',
71 | 'Access-Control-Allow-Methods': 'GET, POST',
72 | 'Access-Control-Allow-Headers': 'X-Requested-With, Content-Type',
73 | 'Content-Type': 'text/json'
74 | });
75 | res.end(JSON.stringify(people));
76 |
77 | }).listen(3002);
78 | ```
79 |
80 | Serving Files
81 | -------------
82 |
83 | ```javascript
84 | fs.readFile(url, 'UTF-8', function (err, data) {
85 |
86 | if (err) {
87 | throw err;
88 | }
89 |
90 | res.writeHead(200, {'Content-Type': 'text/html'});
91 | res.end(data);
92 |
93 | });
94 |
95 | ```
96 |
97 | Serving Binary
98 | --------------
99 |
100 | ```javascript
101 | fs.readFile(img, function (err, data) {
102 |
103 | if (err) {
104 | throw err;
105 | }
106 |
107 | res.writeHead(200, {'Content-Type': 'image/jpeg'});
108 | res.end(data);
109 |
110 | });
111 | ```
112 |
113 | Citations
114 | ---------
115 |
116 | ####Leroy Brown JPG
117 | Sample Image from Deviant Art
118 | * [Deviant Art](http://www.deviantart.com/)
119 | * [Leroy Brown JPG](http://obscuremailman.deviantart.com/art/Big-Bad-Leroy-Brown-186914374)
--------------------------------------------------------------------------------
/node core/readme.md:
--------------------------------------------------------------------------------
1 | Node js Core
2 | ============
3 | The node core covers the Javascript objects that can be used upon installing node js.
4 |
5 | Global Modules
6 | --------------
7 | The following objects are already present when you start a Node process. You do not need to require anything
8 | in you document to use them.
9 |
10 | * global
11 | * process
12 | * console
13 | * Class: Buffer
14 | * require()
15 | * __filename
16 | * __dirname
17 | * module
18 | * exports
19 | * setTimeout(cb, ms)
20 | * clearTimeout(t)
21 | * setInterval(cb, ms)
22 | * clearInterval(t)
23 |
24 | ### globals
25 | ```javascript
26 |
27 | console.log("This file: " + __filename);
28 | console.log("The directory: " + __dirname);
29 | console.log("Environment Port: " + process.env.port || 3000);
30 |
31 | ```
32 |
33 | ###process.argv
34 | ```javascript
35 |
36 | console.log(process.argv);
37 |
38 | /* process argv always contains 'node' and 'filename'
39 | *
40 | */
41 | if (process.argv.length > 2) {
42 | console.log("INFO: " + getArgument('info'));
43 | } else {
44 | console.log("This process ran without arguments")
45 | }
46 |
47 | function getArgument(name) {
48 | return process.argv[process.argv.indexOf(name)+1];
49 | }
50 |
51 | ```
52 |
53 | ```
54 | $ node process.js varname value varname value info something
55 | [ 'node',
56 | 'C:\\Users\\admin\\Documents\\Moon Highway Training Materials\\Subjects Catalog\\Node\\Topics\\node core\\process.js',
57 | 'varname',
58 | 'value',
59 | 'varname',
60 | 'value',
61 | 'info',
62 | 'something' ]
63 | INFO: something
64 |
65 | $
66 |
67 | ```
68 |
69 | ###STDIN, STDOUT, STDERROR
70 | ```javascript
71 | //Standard Output
72 | process.stdout.write("\n\n\nInput: ");
73 |
74 | //Standard Input
75 | process.stdin.on('data', function(data) {
76 |
77 | var input = data.toString().toLowerCase().trim();
78 |
79 | if (input == "exit") {
80 |
81 | //Exit
82 | process.exit();
83 |
84 | }
85 |
86 | //Standard Output
87 | process.stdout.write("Output: " + input +"\nInput: ");
88 |
89 | });
90 | ```
91 |
92 | Core Modules
93 | ------------
94 | There are modules that come with your node js installation that need to be loaded in your process using require(). Here
95 | are a few of these modules that we will look at today.
96 |
97 | * util
98 | * path
99 | * http
100 | * fs
101 | * EventEmitter
102 |
103 | ###path module
104 | ```javascript
105 |
106 | var path = require('path');
107 | var url = "/some//Path\/that is a bit//broken/../..";
108 |
109 | url = path.normalize(url);
110 |
111 | console.log(url); // \some\Path
112 |
113 | url = path.join('courses', 'class', 'javascript', 'students');
114 |
115 | console.log(url); // courses\class\javascript\students
116 |
117 | url += "\\studentList.html";
118 |
119 | console.log(url); // courses\class\javascript\students\studentList.html
120 |
121 | url = path.basename(url);
122 |
123 | console.log(url); // studentList.html
124 |
125 | ```
126 |
127 | ###util module
128 | ```javascript
129 |
130 | var util = require('util');
131 |
132 | util.print("Gives more control ");
133 | util.print("over how things \n are written \n and formatted \n to the console.\n\n\n\n\n");
134 |
135 | util.log("Some more options");
136 |
137 | ```
138 |
--------------------------------------------------------------------------------
/npm/readme.md:
--------------------------------------------------------------------------------
1 | Node Package Manager NPM
2 | ========================
3 | The Node Package manager is where we get modules from the node js community. Node modules hosted at github can
4 | be registered here as well. Once we find a module that we like, all we need is it's name.
5 | [npmjs.org](https://www.npmjs.org/)
6 |
7 | ##Create A Package.json
8 | ```
9 | $ npm init
10 | ```
11 |
12 | ##Install a Node Module
13 | ```
14 | $ npm install module
15 | ```
16 |
17 | ##Save a node module to package.json
18 | ```
19 | $ npm install module --save
20 | ```
21 |
22 | ##Save a dev module to package.json
23 | ```
24 | $ npm install module --save-dev
25 | ```
26 |
27 | ##Install a global module
28 | ```
29 | $ npm install module -g
30 | ```
31 |
32 | ##List Global Modules
33 | ```
34 | $ npm list -g
35 | ```
36 |
37 | node_modules
38 | ------------
39 | Any node package that you install will be located in the node_modules folder. You have access to the source right
40 | within your project!
41 |
42 | Package JSON
43 | ------------
44 |
45 | ###Package.json for Express
46 | [Express Package.json](https://github.com/visionmedia/express/blob/master/package.json)
47 | ```javascript
48 | {
49 | "name": "express",
50 | "description": "Sinatra inspired web development framework",
51 | "version": "4.2.0",
52 | "author": "TJ Holowaychuk ",
53 | "contributors": [
54 | {
55 | "name": "TJ Holowaychuk",
56 | "email": "tj@vision-media.ca"
57 | },
58 | {
59 | "name": "Aaron Heckmann",
60 | "email": "aaron.heckmann+github@gmail.com"
61 | },
62 | {
63 | "name": "Ciaran Jessup",
64 | "email": "ciaranj@gmail.com"
65 | },
66 | {
67 | "name": "Douglas Christopher Wilson",
68 | "email": "doug@somethingdoug.com"
69 | },
70 | {
71 | "name": "Guillermo Rauch",
72 | "email": "rauchg@gmail.com"
73 | },
74 | {
75 | "name": "Jonathan Ong",
76 | "email": "me@jongleberry.com"
77 | },
78 | {
79 | "name": "Roman Shtylman",
80 | "email": "shtylman+expressjs@gmail.com"
81 | }
82 | ],
83 | "dependencies": {
84 | "parseurl": "1.0.1",
85 | "accepts": "1.0.1",
86 | "type-is": "1.1.0",
87 | "range-parser": "1.0.0",
88 | "cookie": "0.1.2",
89 | "buffer-crc32": "0.2.1",
90 | "fresh": "0.2.2",
91 | "methods": "1.0.0",
92 | "send": "0.3.0",
93 | "cookie-signature": "1.0.3",
94 | "merge-descriptors": "0.0.2",
95 | "utils-merge": "1.0.0",
96 | "escape-html": "1.0.1",
97 | "qs": "0.6.6",
98 | "serve-static": "1.1.0",
99 | "path-to-regexp": "0.1.2",
100 | "debug": "0.8.1"
101 | },
102 | "devDependencies": {
103 | "mocha": "~1.18.2",
104 | "body-parser": "~1.1.2",
105 | "connect-redis": "~2.0.0",
106 | "ejs": "~1.0.0",
107 | "jade": "~0.35.0",
108 | "marked": "0.3.2",
109 | "multiparty": "~3.2.4",
110 | "hjs": "~0.0.6",
111 | "should": "~3.3.1",
112 | "supertest": "~0.12.0",
113 | "method-override": "1.0.0",
114 | "cookie-parser": "1.0.1",
115 | "express-session": "1.0.4",
116 | "morgan": "1.0.1",
117 | "vhost": "1.0.0"
118 | },
119 | "keywords": [
120 | "express",
121 | "framework",
122 | "sinatra",
123 | "web",
124 | "rest",
125 | "restful",
126 | "router",
127 | "app",
128 | "api"
129 | ],
130 | "repository": "git://github.com/visionmedia/express",
131 | "scripts": {
132 | "prepublish": "npm prune",
133 | "test": "make test"
134 | },
135 | "engines": {
136 | "node": ">= 0.10.0"
137 | },
138 | "license": "MIT"
139 | }
140 | ```
141 |
142 |
143 |
144 |
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | Snowtooth Ski Resort
13 |
14 |
15 | Snowtooth Mountain
16 |
17 |
41 |
42 |
57 |
58 |
61 |
62 |
63 | Events Calendar
64 |
65 |
66 |
67 |
68 |
69 | Learn
70 | jan 24 - feb 10
71 | Our learn to ride packages provide everything you need to master the mountain.
72 |
73 |
74 |
75 |
76 |
77 |
78 | Music
79 | feb 12 & feb 14
80 | Join us in welcoming Sierra bluegrass sensation Green Sky for two nights in February.
81 |
82 |
83 |
84 |
85 |
86 |
87 | Play
88 | mar 2 - apr 30
89 | Kids ride free every Monday-Thursday this spring. Join us for a full day of fun.
90 |
91 |
92 |
93 |
94 |
95 |
96 | Stay
97 | apr 21 - may 30
98 | Save up to 40% with advance booking. Mountain views, hot spas, and luxury linens.
99 |
100 |
101 |
102 |
103 |
104 |
105 | High speed lifts and no lines. Nice.
106 | Charley C
107 |
108 |
109 | I really like the all day lessons for kids. That way my husband and I get to go skiing
110 | Mary Mom
111 |
112 |
113 |
114 |
118 |
119 |
120 |
121 |
122 |
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/_dependencies/modernizr.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Modernizr v2.8.3
3 | * www.modernizr.com
4 | *
5 | * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton
6 | * Available under the BSD and MIT licenses: www.modernizr.com/license/
7 | */
8 | window.Modernizr=function(a,b,c){function d(a){t.cssText=a}function e(a,b){return d(x.join(a+";")+(b||""))}function f(a,b){return typeof a===b}function g(a,b){return!!~(""+a).indexOf(b)}function h(a,b){for(var d in a){var e=a[d];if(!g(e,"-")&&t[e]!==c)return"pfx"==b?e:!0}return!1}function i(a,b,d){for(var e in a){var g=b[a[e]];if(g!==c)return d===!1?a[e]:f(g,"function")?g.bind(d||b):g}return!1}function j(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+z.join(d+" ")+d).split(" ");return f(b,"string")||f(b,"undefined")?h(e,b):(e=(a+" "+A.join(d+" ")+d).split(" "),i(e,b,c))}function k(){o.input=function(c){for(var d=0,e=c.length;e>d;d++)E[c[d]]=!!(c[d]in u);return E.list&&(E.list=!(!b.createElement("datalist")||!a.HTMLDataListElement)),E}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),o.inputtypes=function(a){for(var d,e,f,g=0,h=a.length;h>g;g++)u.setAttribute("type",e=a[g]),d="text"!==u.type,d&&(u.value=v,u.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(e)&&u.style.WebkitAppearance!==c?(q.appendChild(u),f=b.defaultView,d=f.getComputedStyle&&"textfield"!==f.getComputedStyle(u,null).WebkitAppearance&&0!==u.offsetHeight,q.removeChild(u)):/^(search|tel)$/.test(e)||(d=/^(url|email)$/.test(e)?u.checkValidity&&u.checkValidity()===!1:u.value!=v)),D[a[g]]=!!d;return D}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var l,m,n="2.8.3",o={},p=!0,q=b.documentElement,r="modernizr",s=b.createElement(r),t=s.style,u=b.createElement("input"),v=":)",w={}.toString,x=" -webkit- -moz- -o- -ms- ".split(" "),y="Webkit Moz O ms",z=y.split(" "),A=y.toLowerCase().split(" "),B={svg:"http://www.w3.org/2000/svg"},C={},D={},E={},F=[],G=F.slice,H=function(a,c,d,e){var f,g,h,i,j=b.createElement("div"),k=b.body,l=k||b.createElement("body");if(parseInt(d,10))for(;d--;)h=b.createElement("div"),h.id=e?e[d]:r+(d+1),j.appendChild(h);return f=["",'"].join(""),j.id=r,(k?j:l).innerHTML+=f,l.appendChild(j),k||(l.style.background="",l.style.overflow="hidden",i=q.style.overflow,q.style.overflow="hidden",q.appendChild(l)),g=c(j,a),k?j.parentNode.removeChild(j):(l.parentNode.removeChild(l),q.style.overflow=i),!!g},I=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b)&&c(b).matches||!1;var d;return H("@media "+b+" { #"+r+" { position: absolute; } }",function(b){d="absolute"==(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position}),d},J=function(){function a(a,e){e=e||b.createElement(d[a]||"div"),a="on"+a;var g=a in e;return g||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(a,""),g=f(e[a],"function"),f(e[a],"undefined")||(e[a]=c),e.removeAttribute(a))),e=null,g}var d={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return a}(),K={}.hasOwnProperty;m=f(K,"undefined")||f(K.call,"undefined")?function(a,b){return b in a&&f(a.constructor.prototype[b],"undefined")}:function(a,b){return K.call(a,b)},Function.prototype.bind||(Function.prototype.bind=function(a){var b=this;if("function"!=typeof b)throw new TypeError;var c=G.call(arguments,1),d=function(){if(this instanceof d){var e=function(){};e.prototype=b.prototype;var f=new e,g=b.apply(f,c.concat(G.call(arguments)));return Object(g)===g?g:f}return b.apply(a,c.concat(G.call(arguments)))};return d}),C.flexbox=function(){return j("flexWrap")},C.flexboxlegacy=function(){return j("boxDirection")},C.canvas=function(){var a=b.createElement("canvas");return!(!a.getContext||!a.getContext("2d"))},C.canvastext=function(){return!(!o.canvas||!f(b.createElement("canvas").getContext("2d").fillText,"function"))},C.webgl=function(){return!!a.WebGLRenderingContext},C.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:H(["@media (",x.join("touch-enabled),("),r,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=9===a.offsetTop}),c},C.geolocation=function(){return"geolocation"in navigator},C.postmessage=function(){return!!a.postMessage},C.websqldatabase=function(){return!!a.openDatabase},C.indexedDB=function(){return!!j("indexedDB",a)},C.hashchange=function(){return J("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},C.history=function(){return!(!a.history||!history.pushState)},C.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},C.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},C.rgba=function(){return d("background-color:rgba(150,255,150,.5)"),g(t.backgroundColor,"rgba")},C.hsla=function(){return d("background-color:hsla(120,40%,100%,.5)"),g(t.backgroundColor,"rgba")||g(t.backgroundColor,"hsla")},C.multiplebgs=function(){return d("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(t.background)},C.backgroundsize=function(){return j("backgroundSize")},C.borderimage=function(){return j("borderImage")},C.borderradius=function(){return j("borderRadius")},C.boxshadow=function(){return j("boxShadow")},C.textshadow=function(){return""===b.createElement("div").style.textShadow},C.opacity=function(){return e("opacity:.55"),/^0.55$/.test(t.opacity)},C.cssanimations=function(){return j("animationName")},C.csscolumns=function(){return j("columnCount")},C.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return d((a+"-webkit- ".split(" ").join(b+a)+x.join(c+a)).slice(0,-a.length)),g(t.backgroundImage,"gradient")},C.cssreflections=function(){return j("boxReflect")},C.csstransforms=function(){return!!j("transform")},C.csstransforms3d=function(){var a=!!j("perspective");return a&&"webkitPerspective"in q.style&&H("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=9===b.offsetLeft&&3===b.offsetHeight}),a},C.csstransitions=function(){return j("transition")},C.fontface=function(){var a;return H('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&0===g.indexOf(d.split(" ")[0])}),a},C.generatedcontent=function(){var a;return H(["#",r,"{font:0/0 a}#",r,':after{content:"',v,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},C.video=function(){var a=b.createElement("video"),c=!1;try{(c=!!a.canPlayType)&&(c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,""))}catch(d){}return c},C.audio=function(){var a=b.createElement("audio"),c=!1;try{(c=!!a.canPlayType)&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,""))}catch(d){}return c},C.localstorage=function(){try{return localStorage.setItem(r,r),localStorage.removeItem(r),!0}catch(a){return!1}},C.sessionstorage=function(){try{return sessionStorage.setItem(r,r),sessionStorage.removeItem(r),!0}catch(a){return!1}},C.webworkers=function(){return!!a.Worker},C.applicationcache=function(){return!!a.applicationCache},C.svg=function(){return!!b.createElementNS&&!!b.createElementNS(B.svg,"svg").createSVGRect},C.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==B.svg},C.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(w.call(b.createElementNS(B.svg,"animate")))},C.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(w.call(b.createElementNS(B.svg,"clipPath")))};for(var L in C)m(C,L)&&(l=L.toLowerCase(),o[l]=C[L](),F.push((o[l]?"":"no-")+l));return o.input||k(),o.addTest=function(a,b){if("object"==typeof a)for(var d in a)m(a,d)&&o.addTest(d,a[d]);else{if(a=a.toLowerCase(),o[a]!==c)return o;b="function"==typeof b?b():b,"undefined"!=typeof p&&p&&(q.className+=" "+(b?"":"no-")+a),o[a]=b}return o},d(""),s=u=null,function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=s.elements;return"string"==typeof a?a.split(" "):a}function e(a){var b=r[a[p]];return b||(b={},q++,a[p]=q,r[q]=b),b}function f(a,c,d){if(c||(c=b),k)return c.createElement(a);d||(d=e(c));var f;return f=d.cache[a]?d.cache[a].cloneNode():o.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!f.canHaveChildren||n.test(a)||f.tagUrn?f:d.frag.appendChild(f)}function g(a,c){if(a||(a=b),k)return a.createDocumentFragment();c=c||e(a);for(var f=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)f.createElement(h[g]);return f}function h(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?f(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(s,b.frag)}function i(a){a||(a=b);var d=e(a);return!s.shivCSS||j||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),k||h(a,d),a}var j,k,l="3.7.0",m=a.html5||{},n=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,o=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,p="_html5shiv",q=0,r={};!function(){try{var a=b.createElement("a");a.innerHTML="",j="hidden"in a,k=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){j=!0,k=!0}}();var s={elements:m.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:l,shivCSS:m.shivCSS!==!1,supportsUnknownElements:k,shivMethods:m.shivMethods!==!1,type:"default",shivDocument:i,createElement:f,createDocumentFragment:g};a.html5=s,i(b)}(this,b),o._version=n,o._prefixes=x,o._domPrefixes=A,o._cssomPrefixes=z,o.mq=I,o.hasEvent=J,o.testProp=function(a){return h([a])},o.testAllProps=j,o.testStyles=H,o.prefixed=function(a,b,c){return b?j(a,b,c):j(a,"pfx")},q.className=q.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(p?" js "+F.join(" "):""),o}(this,this.document);
--------------------------------------------------------------------------------
/lab-snowtooth-express/public/_dependencies/jquery.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * jQuery JavaScript Library v2.1.4
3 | * http://jquery.com/
4 | *
5 | * Includes Sizzle.js
6 | * http://sizzlejs.com/
7 | *
8 | * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
9 | * Released under the MIT license
10 | * http://jquery.org/license
11 | *
12 | * Date: 2015-04-28T16:01Z
13 | */
14 | !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){function c(a){var b="length"in a&&a.length,c=_.type(a);return"function"===c||_.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}function d(a,b,c){if(_.isFunction(b))return _.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return _.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(ha.test(b))return _.filter(b,a,c);b=_.filter(b,a)}return _.grep(a,function(a){return U.call(b,a)>=0!==c})}function e(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function f(a){var b=oa[a]={};return _.each(a.match(na)||[],function(a,c){b[c]=!0}),b}function g(){Z.removeEventListener("DOMContentLoaded",g,!1),a.removeEventListener("load",g,!1),_.ready()}function h(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=_.expando+h.uid++}function i(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(ua,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:ta.test(c)?_.parseJSON(c):c}catch(e){}sa.set(a,b,c)}else c=void 0;return c}function j(){return!0}function k(){return!1}function l(){try{return Z.activeElement}catch(a){}}function m(a,b){return _.nodeName(a,"table")&&_.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function n(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function o(a){var b=Ka.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function p(a,b){for(var c=0,d=a.length;d>c;c++)ra.set(a[c],"globalEval",!b||ra.get(b[c],"globalEval"))}function q(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(ra.hasData(a)&&(f=ra.access(a),g=ra.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)_.event.add(b,e,j[e][c])}sa.hasData(a)&&(h=sa.access(a),i=_.extend({},h),sa.set(b,i))}}function r(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&_.nodeName(a,b)?_.merge([a],c):c}function s(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ya.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function t(b,c){var d,e=_(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:_.css(e[0],"display");return e.detach(),f}function u(a){var b=Z,c=Oa[a];return c||(c=t(a,b),"none"!==c&&c||(Na=(Na||_("")).appendTo(b.documentElement),b=Na[0].contentDocument,b.write(),b.close(),c=t(a,b),Na.detach()),Oa[a]=c),c}function v(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||_.contains(a.ownerDocument,a)||(g=_.style(a,b)),Qa.test(g)&&Pa.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function w(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}function x(a,b){if(b in a)return b;for(var c=b[0].toUpperCase()+b.slice(1),d=b,e=Xa.length;e--;)if(b=Xa[e]+c,b in a)return b;return d}function y(a,b,c){var d=Ta.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function z(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=_.css(a,c+wa[f],!0,e)),d?("content"===c&&(g-=_.css(a,"padding"+wa[f],!0,e)),"margin"!==c&&(g-=_.css(a,"border"+wa[f]+"Width",!0,e))):(g+=_.css(a,"padding"+wa[f],!0,e),"padding"!==c&&(g+=_.css(a,"border"+wa[f]+"Width",!0,e)));return g}function A(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g="border-box"===_.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=v(a,b,f),(0>e||null==e)&&(e=a.style[b]),Qa.test(e))return e;d=g&&(Y.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+z(a,b,c||(g?"border":"content"),d,f)+"px"}function B(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=ra.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&xa(d)&&(f[g]=ra.access(d,"olddisplay",u(d.nodeName)))):(e=xa(d),"none"===c&&e||ra.set(d,"olddisplay",e?c:_.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function C(a,b,c,d,e){return new C.prototype.init(a,b,c,d,e)}function D(){return setTimeout(function(){Ya=void 0}),Ya=_.now()}function E(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=wa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function F(a,b,c){for(var d,e=(cb[b]||[]).concat(cb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function G(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},n=a.style,o=a.nodeType&&xa(a),p=ra.get(a,"fxshow");c.queue||(h=_._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,_.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[n.overflow,n.overflowX,n.overflowY],j=_.css(a,"display"),k="none"===j?ra.get(a,"olddisplay")||u(a.nodeName):j,"inline"===k&&"none"===_.css(a,"float")&&(n.display="inline-block")),c.overflow&&(n.overflow="hidden",l.always(function(){n.overflow=c.overflow[0],n.overflowX=c.overflow[1],n.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],$a.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(o?"hide":"show")){if("show"!==e||!p||void 0===p[d])continue;o=!0}m[d]=p&&p[d]||_.style(a,d)}else j=void 0;if(_.isEmptyObject(m))"inline"===("none"===j?u(a.nodeName):j)&&(n.display=j);else{p?"hidden"in p&&(o=p.hidden):p=ra.access(a,"fxshow",{}),f&&(p.hidden=!o),o?_(a).show():l.done(function(){_(a).hide()}),l.done(function(){var b;ra.remove(a,"fxshow");for(b in m)_.style(a,b,m[b])});for(d in m)g=F(o?p[d]:0,d,l),d in p||(p[d]=g.start,o&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function H(a,b){var c,d,e,f,g;for(c in a)if(d=_.camelCase(c),e=b[d],f=a[c],_.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=_.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function I(a,b,c){var d,e,f=0,g=bb.length,h=_.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||D(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:_.extend({},b),opts:_.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Ya||D(),duration:c.duration,tweens:[],createTween:function(b,c){var d=_.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(H(k,j.opts.specialEasing);g>f;f++)if(d=bb[f].call(j,a,k,j.opts))return d;return _.map(k,F,j),_.isFunction(j.opts.start)&&j.opts.start.call(a,j),_.fx.timer(_.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function J(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(na)||[];if(_.isFunction(c))for(;d=f[e++];)"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function K(a,b,c,d){function e(h){var i;return f[h]=!0,_.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||g||f[j]?g?!(i=j):void 0:(b.dataTypes.unshift(j),e(j),!1)}),i}var f={},g=a===tb;return e(b.dataTypes[0])||!f["*"]&&e("*")}function L(a,b){var c,d,e=_.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&_.extend(!0,a,d),a}function M(a,b,c){for(var d,e,f,g,h=a.contents,i=a.dataTypes;"*"===i[0];)i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function N(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];for(f=k.shift();f;)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}function O(a,b,c,d){var e;if(_.isArray(b))_.each(b,function(b,e){c||yb.test(a)?d(a,e):O(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==_.type(b))d(a,b);else for(e in b)O(a+"["+e+"]",b[e],c,d)}function P(a){return _.isWindow(a)?a:9===a.nodeType&&a.defaultView}var Q=[],R=Q.slice,S=Q.concat,T=Q.push,U=Q.indexOf,V={},W=V.toString,X=V.hasOwnProperty,Y={},Z=a.document,$="2.1.4",_=function(a,b){return new _.fn.init(a,b)},aa=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ba=/^-ms-/,ca=/-([\da-z])/gi,da=function(a,b){return b.toUpperCase()};_.fn=_.prototype={jquery:$,constructor:_,selector:"",length:0,toArray:function(){return R.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:R.call(this)},pushStack:function(a){var b=_.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return _.each(this,a,b)},map:function(a){return this.pushStack(_.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(R.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:T,sort:Q.sort,splice:Q.splice},_.extend=_.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||_.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(_.isPlainObject(d)||(e=_.isArray(d)))?(e?(e=!1,f=c&&_.isArray(c)?c:[]):f=c&&_.isPlainObject(c)?c:{},g[b]=_.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},_.extend({expando:"jQuery"+($+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===_.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!_.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==_.type(a)||a.nodeType||_.isWindow(a)?!1:a.constructor&&!X.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?V[W.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=_.trim(a),a&&(1===a.indexOf("use strict")?(b=Z.createElement("script"),b.text=a,Z.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(ba,"ms-").replace(ca,da)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var e,f=0,g=a.length,h=c(a);if(d){if(h)for(;g>f&&(e=b.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=b.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=b.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=b.call(a[f],f,a[f]),e===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(aa,"")},makeArray:function(a,b){var d=b||[];return null!=a&&(c(Object(a))?_.merge(d,"string"==typeof a?[a]:a):T.call(d,a)),d},inArray:function(a,b,c){return null==b?-1:U.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;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,d){var e,f=0,g=a.length,h=c(a),i=[];if(h)for(;g>f;f++)e=b(a[f],f,d),null!=e&&i.push(e);else for(f in a)e=b(a[f],f,d),null!=e&&i.push(e);return S.apply([],i)},guid:1,proxy:function(a,b){var c,d,e;return"string"==typeof b&&(c=a[b],b=a,a=c),_.isFunction(a)?(d=R.call(arguments,2),e=function(){return a.apply(b||this,d.concat(R.call(arguments)))},e.guid=a.guid=a.guid||_.guid++,e):void 0},now:Date.now,support:Y}),_.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){V["[object "+b+"]"]=b.toLowerCase()});var ea=/*!
15 | * Sizzle CSS Selector Engine v2.2.0-pre
16 | * http://sizzlejs.com/
17 | *
18 | * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
19 | * Released under the MIT license
20 | * http://jquery.org/license
21 | *
22 | * Date: 2014-12-16
23 | */
24 | function(a){function b(a,b,c,d){var e,f,g,h,i,j,l,n,o,p;if((b?b.ownerDocument||b:O)!==G&&F(b),b=b||G,c=c||[],h=b.nodeType,"string"!=typeof a||!a||1!==h&&9!==h&&11!==h)return c;if(!d&&I){if(11!==h&&(e=sa.exec(a)))if(g=e[1]){if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&M(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return $.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&v.getElementsByClassName)return $.apply(c,b.getElementsByClassName(g)),c}if(v.qsa&&(!J||!J.test(a))){if(n=l=N,o=b,p=1!==h&&a,1===h&&"object"!==b.nodeName.toLowerCase()){for(j=z(a),(l=b.getAttribute("id"))?n=l.replace(ua,"\\$&"):b.setAttribute("id",n),n="[id='"+n+"'] ",i=j.length;i--;)j[i]=n+m(j[i]);o=ta.test(a)&&k(b.parentNode)||b,p=j.join(",")}if(p)try{return $.apply(c,o.querySelectorAll(p)),c}catch(q){}finally{l||b.removeAttribute("id")}}}return B(a.replace(ia,"$1"),b,c,d)}function c(){function a(c,d){return b.push(c+" ")>w.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function d(a){return a[N]=!0,a}function e(a){var b=G.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function f(a,b){for(var c=a.split("|"),d=a.length;d--;)w.attrHandle[c[d]]=b}function g(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||V)-(~a.sourceIndex||V);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function h(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function i(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function j(a){return d(function(b){return b=+b,d(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function k(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}function l(){}function m(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function n(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=Q++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[P,f];if(g){for(;b=b[d];)if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e){if(i=b[N]||(b[N]={}),(h=i[d])&&h[0]===P&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function o(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function p(a,c,d){for(var e=0,f=c.length;f>e;e++)b(a,c[e],d);return d}function q(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 r(a,b,c,e,f,g){return e&&!e[N]&&(e=r(e)),f&&!f[N]&&(f=r(f,g)),d(function(d,g,h,i){var j,k,l,m=[],n=[],o=g.length,r=d||p(b||"*",h.nodeType?[h]:h,[]),s=!a||!d&&b?r:q(r,m,a,h,i),t=c?f||(d?a:o||e)?[]:g:s;if(c&&c(s,t,h,i),e)for(j=q(t,n),e(j,[],h,i),k=j.length;k--;)(l=j[k])&&(t[n[k]]=!(s[n[k]]=l));if(d){if(f||a){if(f){for(j=[],k=t.length;k--;)(l=t[k])&&j.push(s[k]=l);f(null,t=[],j,i)}for(k=t.length;k--;)(l=t[k])&&(j=f?aa(d,l):m[k])>-1&&(d[j]=!(g[j]=l))}}else t=q(t===g?t.splice(o,t.length):t),f?f(null,g,t,i):$.apply(g,t)})}function s(a){for(var b,c,d,e=a.length,f=w.relative[a[0].type],g=f||w.relative[" "],h=f?1:0,i=n(function(a){return a===b},g,!0),j=n(function(a){return aa(b,a)>-1},g,!0),k=[function(a,c,d){var e=!f&&(d||c!==C)||((b=c).nodeType?i(a,c,d):j(a,c,d));return b=null,e}];e>h;h++)if(c=w.relative[a[h].type])k=[n(o(k),c)];else{if(c=w.filter[a[h].type].apply(null,a[h].matches),c[N]){for(d=++h;e>d&&!w.relative[a[d].type];d++);return r(h>1&&o(k),h>1&&m(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ia,"$1"),c,d>h&&s(a.slice(h,d)),e>d&&s(a=a.slice(d)),e>d&&m(a))}k.push(c)}return o(k)}function t(a,c){var e=c.length>0,f=a.length>0,g=function(d,g,h,i,j){var k,l,m,n=0,o="0",p=d&&[],r=[],s=C,t=d||f&&w.find.TAG("*",j),u=P+=null==s?1:Math.random()||.1,v=t.length;for(j&&(C=g!==G&&g);o!==v&&null!=(k=t[o]);o++){if(f&&k){for(l=0;m=a[l++];)if(m(k,g,h)){i.push(k);break}j&&(P=u)}e&&((k=!m&&k)&&n--,d&&p.push(k))}if(n+=o,e&&o!==n){for(l=0;m=c[l++];)m(p,r,g,h);if(d){if(n>0)for(;o--;)p[o]||r[o]||(r[o]=Y.call(i));r=q(r)}$.apply(i,r),j&&!d&&r.length>0&&n+c.length>1&&b.uniqueSort(i)}return j&&(P=u,C=s),p};return e?d(g):g}var u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N="sizzle"+1*new Date,O=a.document,P=0,Q=0,R=c(),S=c(),T=c(),U=function(a,b){return a===b&&(E=!0),0},V=1<<31,W={}.hasOwnProperty,X=[],Y=X.pop,Z=X.push,$=X.push,_=X.slice,aa=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},ba="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ca="[\\x20\\t\\r\\n\\f]",da="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ea=da.replace("w","w#"),fa="\\["+ca+"*("+da+")(?:"+ca+"*([*^$|!~]?=)"+ca+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ea+"))|)"+ca+"*\\]",ga=":("+da+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+fa+")*)|.*)\\)|)",ha=new RegExp(ca+"+","g"),ia=new RegExp("^"+ca+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ca+"+$","g"),ja=new RegExp("^"+ca+"*,"+ca+"*"),ka=new RegExp("^"+ca+"*([>+~]|"+ca+")"+ca+"*"),la=new RegExp("="+ca+"*([^\\]'\"]*?)"+ca+"*\\]","g"),ma=new RegExp(ga),na=new RegExp("^"+ea+"$"),oa={ID:new RegExp("^#("+da+")"),CLASS:new RegExp("^\\.("+da+")"),TAG:new RegExp("^("+da.replace("w","w*")+")"),ATTR:new RegExp("^"+fa),PSEUDO:new RegExp("^"+ga),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ca+"*(even|odd|(([+-]|)(\\d*)n|)"+ca+"*(?:([+-]|)"+ca+"*(\\d+)|))"+ca+"*\\)|)","i"),bool:new RegExp("^(?:"+ba+")$","i"),needsContext:new RegExp("^"+ca+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ca+"*((?:-\\d)?\\d*)"+ca+"*\\)|)(?=[^-]|$)","i")},pa=/^(?:input|select|textarea|button)$/i,qa=/^h\d$/i,ra=/^[^{]+\{\s*\[native \w/,sa=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ta=/[+~]/,ua=/'|\\/g,va=new RegExp("\\\\([\\da-f]{1,6}"+ca+"?|("+ca+")|.)","ig"),wa=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)},xa=function(){F()};try{$.apply(X=_.call(O.childNodes),O.childNodes),X[O.childNodes.length].nodeType}catch(ya){$={apply:X.length?function(a,b){Z.apply(a,_.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}v=b.support={},y=b.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},F=b.setDocument=function(a){var b,c,d=a?a.ownerDocument||a:O;return d!==G&&9===d.nodeType&&d.documentElement?(G=d,H=d.documentElement,c=d.defaultView,c&&c!==c.top&&(c.addEventListener?c.addEventListener("unload",xa,!1):c.attachEvent&&c.attachEvent("onunload",xa)),I=!y(d),v.attributes=e(function(a){return a.className="i",!a.getAttribute("className")}),v.getElementsByTagName=e(function(a){return a.appendChild(d.createComment("")),!a.getElementsByTagName("*").length}),v.getElementsByClassName=ra.test(d.getElementsByClassName),v.getById=e(function(a){return H.appendChild(a).id=N,!d.getElementsByName||!d.getElementsByName(N).length}),v.getById?(w.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&I){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},w.filter.ID=function(a){var b=a.replace(va,wa);return function(a){return a.getAttribute("id")===b}}):(delete w.find.ID,w.filter.ID=function(a){var b=a.replace(va,wa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),w.find.TAG=v.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):v.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},w.find.CLASS=v.getElementsByClassName&&function(a,b){return I?b.getElementsByClassName(a):void 0},K=[],J=[],(v.qsa=ra.test(d.querySelectorAll))&&(e(function(a){H.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&J.push("[*^$]="+ca+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||J.push("\\["+ca+"*(?:value|"+ba+")"),a.querySelectorAll("[id~="+N+"-]").length||J.push("~="),a.querySelectorAll(":checked").length||J.push(":checked"),a.querySelectorAll("a#"+N+"+*").length||J.push(".#.+[+~]")}),e(function(a){var b=d.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&J.push("name"+ca+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||J.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),J.push(",.*:")})),(v.matchesSelector=ra.test(L=H.matches||H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&e(function(a){v.disconnectedMatch=L.call(a,"div"),L.call(a,"[s!='']:x"),K.push("!=",ga)}),J=J.length&&new RegExp(J.join("|")),K=K.length&&new RegExp(K.join("|")),b=ra.test(H.compareDocumentPosition),M=b||ra.test(H.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)for(;b=b.parentNode;)if(b===a)return!0;return!1},U=b?function(a,b){if(a===b)return E=!0,0;var c=!a.compareDocumentPosition-!b.compareDocumentPosition;return c?c:(c=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&c||!v.sortDetached&&b.compareDocumentPosition(a)===c?a===d||a.ownerDocument===O&&M(O,a)?-1:b===d||b.ownerDocument===O&&M(O,b)?1:D?aa(D,a)-aa(D,b):0:4&c?-1:1)}:function(a,b){if(a===b)return E=!0,0;var c,e=0,f=a.parentNode,h=b.parentNode,i=[a],j=[b];if(!f||!h)return a===d?-1:b===d?1:f?-1:h?1:D?aa(D,a)-aa(D,b):0;if(f===h)return g(a,b);for(c=a;c=c.parentNode;)i.unshift(c);for(c=b;c=c.parentNode;)j.unshift(c);for(;i[e]===j[e];)e++;return e?g(i[e],j[e]):i[e]===O?-1:j[e]===O?1:0},d):G},b.matches=function(a,c){return b(a,null,null,c)},b.matchesSelector=function(a,c){if((a.ownerDocument||a)!==G&&F(a),c=c.replace(la,"='$1']"),!(!v.matchesSelector||!I||K&&K.test(c)||J&&J.test(c)))try{var d=L.call(a,c);if(d||v.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return b(c,G,null,[a]).length>0},b.contains=function(a,b){return(a.ownerDocument||a)!==G&&F(a),M(a,b)},b.attr=function(a,b){(a.ownerDocument||a)!==G&&F(a);var c=w.attrHandle[b.toLowerCase()],d=c&&W.call(w.attrHandle,b.toLowerCase())?c(a,b,!I):void 0;return void 0!==d?d:v.attributes||!I?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},b.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},b.uniqueSort=function(a){var b,c=[],d=0,e=0;if(E=!v.detectDuplicates,D=!v.sortStable&&a.slice(0),a.sort(U),E){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return D=null,a},x=b.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=x(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=x(b);return c},w=b.selectors={cacheLength:50,createPseudo:d,match:oa,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(va,wa),a[3]=(a[3]||a[4]||a[5]||"").replace(va,wa),"~="===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]||b.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]&&b.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return oa.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&ma.test(c)&&(b=z(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(va,wa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=R[a+" "];return b||(b=new RegExp("(^|"+ca+")"+a+"("+ca+"|$)"))&&R(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,c,d){return function(e){var f=b.attr(e,a);return null==f?"!="===c:c?(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f.replace(ha," ")+" ").indexOf(d)>-1:"|="===c?f===d||f.slice(0,d.length+1)===d+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;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&&s){for(k=q[N]||(q[N]={}),j=k[a]||[],n=j[0]===P&&j[1],m=j[0]===P&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[P,n,m];break}}else if(s&&(j=(b[N]||(b[N]={}))[a])&&j[0]===P)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[N]||(l[N]={}))[a]=[P,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,c){var e,f=w.pseudos[a]||w.setFilters[a.toLowerCase()]||b.error("unsupported pseudo: "+a);return f[N]?f(c):f.length>1?(e=[a,a,"",c],w.setFilters.hasOwnProperty(a.toLowerCase())?d(function(a,b){for(var d,e=f(a,c),g=e.length;g--;)d=aa(a,e[g]),a[d]=!(b[d]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:d(function(a){var b=[],c=[],e=A(a.replace(ia,"$1"));return e[N]?d(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,d,f){return b[0]=a,e(b,null,f,c),b[0]=null,!c.pop()}}),has:d(function(a){return function(c){return b(a,c).length>0}}),contains:d(function(a){return a=a.replace(va,wa),function(b){return(b.textContent||b.innerText||x(b)).indexOf(a)>-1}}),lang:d(function(a){return na.test(a||"")||b.error("unsupported lang: "+a),a=a.replace(va,wa).toLowerCase(),function(b){var c;do if(c=I?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===H},focus:function(a){return a===G.activeElement&&(!G.hasFocus||G.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!w.pseudos.empty(a)},header:function(a){return qa.test(a.nodeName)},input:function(a){return pa.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:j(function(){return[0]}),last:j(function(a,b){return[b-1]}),eq:j(function(a,b,c){return[0>c?c+b:c]}),even:j(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:j(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:j(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:j(function(a,b,c){for(var d=0>c?c+b:c;++d2&&"ID"===(g=f[0]).type&&v.getById&&9===b.nodeType&&I&&w.relative[f[1].type]){if(b=(w.find.ID(g.matches[0].replace(va,wa),b)||[])[0],!b)return c;j&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=oa.needsContext.test(a)?0:f.length;e--&&(g=f[e],!w.relative[h=g.type]);)if((i=w.find[h])&&(d=i(g.matches[0].replace(va,wa),ta.test(f[0].type)&&k(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&m(f),!a)return $.apply(c,d),c;break}}return(j||A(a,l))(d,b,!I,c,ta.test(a)&&k(b.parentNode)||b),c},v.sortStable=N.split("").sort(U).join("")===N,v.detectDuplicates=!!E,F(),v.sortDetached=e(function(a){return 1&a.compareDocumentPosition(G.createElement("div"))}),e(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||f("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),v.attributes&&e(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||f("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),e(function(a){return null==a.getAttribute("disabled")})||f(ba,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),b}(a);_.find=ea,_.expr=ea.selectors,_.expr[":"]=_.expr.pseudos,_.unique=ea.uniqueSort,_.text=ea.getText,_.isXMLDoc=ea.isXML,_.contains=ea.contains;var fa=_.expr.match.needsContext,ga=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ha=/^.[^:#\[\.,]*$/;_.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?_.find.matchesSelector(d,a)?[d]:[]:_.find.matches(a,_.grep(b,function(a){return 1===a.nodeType}))},_.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(_(a).filter(function(){for(b=0;c>b;b++)if(_.contains(e[b],this))return!0}));for(b=0;c>b;b++)_.find(a,e[b],d);return d=this.pushStack(c>1?_.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(d(this,a||[],!1))},not:function(a){return this.pushStack(d(this,a||[],!0))},is:function(a){return!!d(this,"string"==typeof a&&fa.test(a)?_(a):a||[],!1).length}});var ia,ja=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ka=_.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:ja.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||ia).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof _?b[0]:b,_.merge(this,_.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:Z,!0)),ga.test(c[1])&&_.isPlainObject(b))for(c in b)_.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=Z.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=Z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):_.isFunction(a)?"undefined"!=typeof ia.ready?ia.ready(a):a(_):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),_.makeArray(a,this))};ka.prototype=_.fn,ia=_(Z);var la=/^(?:parents|prev(?:Until|All))/,ma={children:!0,contents:!0,next:!0,prev:!0};_.extend({dir:function(a,b,c){for(var d=[],e=void 0!==c;(a=a[b])&&9!==a.nodeType;)if(1===a.nodeType){if(e&&_(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),_.fn.extend({has:function(a){var b=_(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(_.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=fa.test(a)||"string"!=typeof a?_(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&&_.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?_.unique(f):f)},index:function(a){return a?"string"==typeof a?U.call(_(a),this[0]):U.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(_.unique(_.merge(this.get(),_(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),_.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return _.dir(a,"parentNode")},parentsUntil:function(a,b,c){return _.dir(a,"parentNode",c)},next:function(a){return e(a,"nextSibling")},prev:function(a){return e(a,"previousSibling")},nextAll:function(a){return _.dir(a,"nextSibling")},prevAll:function(a){return _.dir(a,"previousSibling")},nextUntil:function(a,b,c){return _.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return _.dir(a,"previousSibling",c)},siblings:function(a){return _.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return _.sibling(a.firstChild)},contents:function(a){return a.contentDocument||_.merge([],a.childNodes)}},function(a,b){_.fn[a]=function(c,d){var e=_.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=_.filter(d,e)),this.length>1&&(ma[a]||_.unique(e),la.test(a)&&e.reverse()),this.pushStack(e)}});var na=/\S+/g,oa={};_.Callbacks=function(a){a="string"==typeof a?oa[a]||f(a):_.extend({},a);var b,c,d,e,g,h,i=[],j=!a.once&&[],k=function(f){for(b=a.memory&&f,c=!0,h=e||0,e=0,g=i.length,d=!0;i&&g>h;h++)if(i[h].apply(f[0],f[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,i&&(j?j.length&&k(j.shift()):b?i=[]:l.disable())},l={add:function(){if(i){var c=i.length;!function f(b){_.each(b,function(b,c){var d=_.type(c);"function"===d?a.unique&&l.has(c)||i.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),d?g=i.length:b&&(e=c,k(b))}return this},remove:function(){return i&&_.each(arguments,function(a,b){for(var c;(c=_.inArray(b,i,c))>-1;)i.splice(c,1),d&&(g>=c&&g--,h>=c&&h--)}),this},has:function(a){return a?_.inArray(a,i)>-1:!(!i||!i.length)},empty:function(){return i=[],g=0,this},disable:function(){return i=j=b=void 0,this},disabled:function(){return!i},lock:function(){return j=void 0,b||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return!i||c&&!j||(b=b||[],b=[a,b.slice?b.slice():b],d?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!c}};return l},_.extend({Deferred:function(a){var b=[["resolve","done",_.Callbacks("once memory"),"resolved"],["reject","fail",_.Callbacks("once memory"),"rejected"],["notify","progress",_.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return _.Deferred(function(c){_.each(b,function(b,f){var g=_.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&_.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?_.extend(a,d):d}},e={};return d.pipe=d.then,_.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,c,d,e=0,f=R.call(arguments),g=f.length,h=1!==g||a&&_.isFunction(a.promise)?g:0,i=1===h?a:_.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?R.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=new Array(g),c=new Array(g),d=new Array(g);g>e;e++)f[e]&&_.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}});var pa;_.fn.ready=function(a){return _.ready.promise().done(a),this},_.extend({isReady:!1,readyWait:1,holdReady:function(a){a?_.readyWait++:_.ready(!0)},ready:function(a){(a===!0?--_.readyWait:_.isReady)||(_.isReady=!0,a!==!0&&--_.readyWait>0||(pa.resolveWith(Z,[_]),_.fn.triggerHandler&&(_(Z).triggerHandler("ready"),_(Z).off("ready"))))}}),_.ready.promise=function(b){return pa||(pa=_.Deferred(),"complete"===Z.readyState?setTimeout(_.ready):(Z.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1))),pa.promise(b)},_.ready.promise();var qa=_.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===_.type(c)){e=!0;for(h in c)_.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,_.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(_(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};_.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType},h.uid=1,h.accepts=_.acceptData,h.prototype={key:function(a){if(!h.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=h.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,_.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(_.isEmptyObject(f))_.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,_.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{_.isArray(b)?d=b.concat(b.map(_.camelCase)):(e=_.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(na)||[])),c=d.length;for(;c--;)delete g[d[c]]}},hasData:function(a){return!_.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var ra=new h,sa=new h,ta=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ua=/([A-Z])/g;_.extend({hasData:function(a){return sa.hasData(a)||ra.hasData(a)},data:function(a,b,c){return sa.access(a,b,c)},removeData:function(a,b){sa.remove(a,b)},_data:function(a,b,c){return ra.access(a,b,c)},_removeData:function(a,b){ra.remove(a,b)}}),_.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=sa.get(f),1===f.nodeType&&!ra.get(f,"hasDataAttrs"))){for(c=g.length;c--;)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=_.camelCase(d.slice(5)),i(f,d,e[d])));ra.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){sa.set(this,a)}):qa(this,function(b){var c,d=_.camelCase(a);if(f&&void 0===b){if(c=sa.get(f,a),void 0!==c)return c;if(c=sa.get(f,d),void 0!==c)return c;if(c=i(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=sa.get(this,d);sa.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&sa.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){sa.remove(this,a)})}}),_.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=ra.get(a,b),c&&(!d||_.isArray(c)?d=ra.access(a,b,_.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=_.queue(a,b),d=c.length,e=c.shift(),f=_._queueHooks(a,b),g=function(){_.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 ra.get(a,c)||ra.access(a,c,{empty:_.Callbacks("once memory").add(function(){ra.remove(a,[b+"queue",c])})})}}),_.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",Y.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var za="undefined";Y.focusinBubbles="onfocusin"in a;var Aa=/^key/,Ba=/^(?:mouse|pointer|contextmenu)|click/,Ca=/^(?:focusinfocus|focusoutblur)$/,Da=/^([^.]*)(?:\.(.+)|)$/;_.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ra.get(a);if(q)for(c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=_.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return typeof _!==za&&_.event.triggered!==b.type?_.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(na)||[""],j=b.length;j--;)h=Da.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=_.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=_.event.special[n]||{},k=_.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&_.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),_.event.global[n]=!0)},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ra.hasData(a)&&ra.get(a);if(q&&(i=q.events)){for(b=(b||"").match(na)||[""],j=b.length;j--;)if(h=Da.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){for(l=_.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;f--;)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||_.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)_.event.remove(a,n+b[j],c,d,!0);_.isEmptyObject(i)&&(delete q.handle,ra.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,j,k,l,m=[d||Z],n=X.call(b,"type")?b.type:b,o=X.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||Z,3!==d.nodeType&&8!==d.nodeType&&!Ca.test(n+_.event.triggered)&&(n.indexOf(".")>=0&&(o=n.split("."),n=o.shift(),o.sort()),j=n.indexOf(":")<0&&"on"+n,b=b[_.expando]?b:new _.Event(n,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=o.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),
25 | c=null==c?[b]:_.makeArray(c,[b]),l=_.event.special[n]||{},e||!l.trigger||l.trigger.apply(d,c)!==!1)){if(!e&&!l.noBubble&&!_.isWindow(d)){for(i=l.delegateType||n,Ca.test(i+n)||(g=g.parentNode);g;g=g.parentNode)m.push(g),h=g;h===(d.ownerDocument||Z)&&m.push(h.defaultView||h.parentWindow||a)}for(f=0;(g=m[f++])&&!b.isPropagationStopped();)b.type=f>1?i:l.bindType||n,k=(ra.get(g,"events")||{})[b.type]&&ra.get(g,"handle"),k&&k.apply(g,c),k=j&&g[j],k&&k.apply&&_.acceptData(g)&&(b.result=k.apply(g,c),b.result===!1&&b.preventDefault());return b.type=n,e||b.isDefaultPrevented()||l._default&&l._default.apply(m.pop(),c)!==!1||!_.acceptData(d)||j&&_.isFunction(d[n])&&!_.isWindow(d)&&(h=d[j],h&&(d[j]=null),_.event.triggered=n,d[n](),_.event.triggered=void 0,h&&(d[j]=h)),b.result}},dispatch:function(a){a=_.event.fix(a);var b,c,d,e,f,g=[],h=R.call(arguments),i=(ra.get(this,"events")||{})[a.type]||[],j=_.event.special[a.type]||{};if(h[0]=a,a.delegateTarget=this,!j.preDispatch||j.preDispatch.call(this,a)!==!1){for(g=_.event.handlers.call(this,a,i),b=0;(e=g[b++])&&!a.isPropagationStopped();)for(a.currentTarget=e.elem,c=0;(f=e.handlers[c++])&&!a.isImmediatePropagationStopped();)(!a.namespace_re||a.namespace_re.test(f.namespace))&&(a.handleObj=f,a.data=f.data,d=((_.event.special[f.origType]||{}).handle||f.handler).apply(e.elem,h),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return j.postDispatch&&j.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(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?_(e,this).index(i)>=0:_.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,Fa=/<([\w:]+)/,Ga=/<|?\w+;/,Ha=/<(?:script|style|link)/i,Ia=/checked\s*(?:[^=]|=\s*.checked.)/i,Ja=/^$|\/(?:java|ecma)script/i,Ka=/^true\/(.*)/,La=/^\s*\s*$/g,Ma={option:[1,""],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};Ma.optgroup=Ma.option,Ma.tbody=Ma.tfoot=Ma.colgroup=Ma.caption=Ma.thead,Ma.th=Ma.td,_.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=_.contains(a.ownerDocument,a);if(!(Y.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||_.isXMLDoc(a)))for(g=r(h),f=r(a),d=0,e=f.length;e>d;d++)s(f[d],g[d]);if(b)if(c)for(f=f||r(a),g=g||r(h),d=0,e=f.length;e>d;d++)q(f[d],g[d]);else q(a,h);return g=r(h,"script"),g.length>0&&p(g,!i&&r(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===_.type(e))_.merge(l,e.nodeType?[e]:e);else if(Ga.test(e)){for(f=f||k.appendChild(b.createElement("div")),g=(Fa.exec(e)||["",""])[1].toLowerCase(),h=Ma[g]||Ma._default,f.innerHTML=h[1]+e.replace(Ea,"<$1>$2>")+h[2],j=h[0];j--;)f=f.lastChild;_.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));for(k.textContent="",m=0;e=l[m++];)if((!d||-1===_.inArray(e,d))&&(i=_.contains(e.ownerDocument,e),f=r(k.appendChild(e),"script"),i&&p(f),c))for(j=0;e=f[j++];)Ja.test(e.type||"")&&c.push(e);return k},cleanData:function(a){for(var b,c,d,e,f=_.event.special,g=0;void 0!==(c=a[g]);g++){if(_.acceptData(c)&&(e=c[ra.expando],e&&(b=ra.cache[e]))){if(b.events)for(d in b.events)f[d]?_.event.remove(c,d):_.removeEvent(c,d,b.handle);ra.cache[e]&&delete ra.cache[e]}delete sa.cache[c[sa.expando]]}}}),_.fn.extend({text:function(a){return qa(this,function(a){return void 0===a?_.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=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=m(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=m(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?_.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||_.cleanData(r(c)),c.parentNode&&(b&&_.contains(c.ownerDocument,c)&&p(r(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(_.cleanData(r(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return _.clone(this,a,b)})},html:function(a){return qa(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Ha.test(a)&&!Ma[(Fa.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ea,"<$1>$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(_.cleanData(r(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,_.cleanData(r(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=S.apply([],a);var c,d,e,f,g,h,i=0,j=this.length,k=this,l=j-1,m=a[0],p=_.isFunction(m);if(p||j>1&&"string"==typeof m&&!Y.checkClone&&Ia.test(m))return this.each(function(c){var d=k.eq(c);p&&(a[0]=m.call(this,c,d.html())),d.domManip(a,b)});if(j&&(c=_.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(e=_.map(r(c,"script"),n),f=e.length;j>i;i++)g=c,i!==l&&(g=_.clone(g,!0,!0),f&&_.merge(e,r(g,"script"))),b.call(this[i],g,i);if(f)for(h=e[e.length-1].ownerDocument,_.map(e,o),i=0;f>i;i++)g=e[i],Ja.test(g.type||"")&&!ra.access(g,"globalEval")&&_.contains(h,g)&&(g.src?_._evalUrl&&_._evalUrl(g.src):_.globalEval(g.textContent.replace(La,"")))}return this}}),_.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){_.fn[a]=function(a){for(var c,d=[],e=_(a),f=e.length-1,g=0;f>=g;g++)c=g===f?this:this.clone(!0),_(e[g])[b](c),T.apply(d,c.get());return this.pushStack(d)}});var Na,Oa={},Pa=/^margin/,Qa=new RegExp("^("+va+")(?!px)[a-z%]+$","i"),Ra=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};!function(){function b(){g.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",g.innerHTML="",e.appendChild(f);var b=a.getComputedStyle(g,null);c="1%"!==b.top,d="4px"===b.width,e.removeChild(f)}var c,d,e=Z.documentElement,f=Z.createElement("div"),g=Z.createElement("div");g.style&&(g.style.backgroundClip="content-box",g.cloneNode(!0).style.backgroundClip="",Y.clearCloneStyle="content-box"===g.style.backgroundClip,f.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",f.appendChild(g),a.getComputedStyle&&_.extend(Y,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return null==d&&b(),d},reliableMarginRight:function(){var b,c=g.appendChild(Z.createElement("div"));return c.style.cssText=g.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",g.style.width="1px",e.appendChild(f),b=!parseFloat(a.getComputedStyle(c,null).marginRight),e.removeChild(f),g.removeChild(c),b}}))}(),_.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Sa=/^(none|table(?!-c[ea]).+)/,Ta=new RegExp("^("+va+")(.*)$","i"),Ua=new RegExp("^([+-])=("+va+")","i"),Va={position:"absolute",visibility:"hidden",display:"block"},Wa={letterSpacing:"0",fontWeight:"400"},Xa=["Webkit","O","Moz","ms"];_.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=v(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=_.camelCase(b),i=a.style;return b=_.cssProps[h]||(_.cssProps[h]=x(i,h)),g=_.cssHooks[b]||_.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ua.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(_.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||_.cssNumber[h]||(c+="px"),Y.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=_.camelCase(b);return b=_.cssProps[h]||(_.cssProps[h]=x(a.style,h)),g=_.cssHooks[b]||_.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=v(a,b,d)),"normal"===e&&b in Wa&&(e=Wa[b]),""===c||c?(f=parseFloat(e),c===!0||_.isNumeric(f)?f||0:e):e}}),_.each(["height","width"],function(a,b){_.cssHooks[b]={get:function(a,c,d){return c?Sa.test(_.css(a,"display"))&&0===a.offsetWidth?_.swap(a,Va,function(){return A(a,b,d)}):A(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return y(a,c,d?z(a,b,d,"border-box"===_.css(a,"boxSizing",!1,e),e):0)}}}),_.cssHooks.marginRight=w(Y.reliableMarginRight,function(a,b){return b?_.swap(a,{display:"inline-block"},v,[a,"marginRight"]):void 0}),_.each({margin:"",padding:"",border:"Width"},function(a,b){_.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+wa[d]+b]=f[d]||f[d-2]||f[0];return e}},Pa.test(a)||(_.cssHooks[a+b].set=y)}),_.fn.extend({css:function(a,b){return qa(this,function(a,b,c){var d,e,f={},g=0;if(_.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=_.css(a,b[g],!1,d);return f}return void 0!==c?_.style(a,b,c):_.css(a,b)},a,b,arguments.length>1)},show:function(){return B(this,!0)},hide:function(){return B(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){xa(this)?_(this).show():_(this).hide()})}}),_.Tween=C,C.prototype={constructor:C,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(_.cssNumber[c]?"":"px")},cur:function(){var a=C.propHooks[this.prop];return a&&a.get?a.get(this):C.propHooks._default.get(this)},run:function(a){var b,c=C.propHooks[this.prop];return this.options.duration?this.pos=b=_.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):C.propHooks._default.set(this),this}},C.prototype.init.prototype=C.prototype,C.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=_.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){_.fx.step[a.prop]?_.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[_.cssProps[a.prop]]||_.cssHooks[a.prop])?_.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},C.propHooks.scrollTop=C.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},_.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},_.fx=C.prototype.init,_.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=new RegExp("^(?:([+-])=|)("+va+")([a-z%]*)$","i"),ab=/queueHooks$/,bb=[G],cb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=_a.exec(b),f=e&&e[3]||(_.cssNumber[a]?"":"px"),g=(_.cssNumber[a]||"px"!==f&&+d)&&_a.exec(_.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,_.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};_.Animation=_.extend(I,{tweener:function(a,b){_.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],cb[c]=cb[c]||[],cb[c].unshift(b)},prefilter:function(a,b){b?bb.unshift(a):bb.push(a)}}),_.speed=function(a,b,c){var d=a&&"object"==typeof a?_.extend({},a):{complete:c||!c&&b||_.isFunction(a)&&a,duration:a,easing:c&&b||b&&!_.isFunction(b)&&b};return d.duration=_.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in _.fx.speeds?_.fx.speeds[d.duration]:_.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){_.isFunction(d.old)&&d.old.call(this),d.queue&&_.dequeue(this,d.queue)},d},_.fn.extend({fadeTo:function(a,b,c,d){return this.filter(xa).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=_.isEmptyObject(a),f=_.speed(b,c,d),g=function(){var b=I(this,_.extend({},a),f);(e||ra.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=_.timers,g=ra.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&ab.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&_.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=ra.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=_.timers,g=d?d.length:0;for(c.finish=!0,_.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),_.each(["toggle","show","hide"],function(a,b){var c=_.fn[b];_.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(E(b,!0),a,d,e)}}),_.each({slideDown:E("show"),slideUp:E("hide"),slideToggle:E("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){_.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),_.timers=[],_.fx.tick=function(){var a,b=0,c=_.timers;for(Ya=_.now();b1)},removeAttr:function(a){return this.each(function(){_.removeAttr(this,a)})}}),_.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===za?_.prop(a,b,c):(1===f&&_.isXMLDoc(a)||(b=b.toLowerCase(),d=_.attrHooks[b]||(_.expr.match.bool.test(b)?eb:db)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=_.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void _.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(na);if(f&&1===a.nodeType)for(;c=f[e++];)d=_.propFix[c]||c,_.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!Y.radioValue&&"radio"===b&&_.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),eb={set:function(a,b,c){return b===!1?_.removeAttr(a,c):a.setAttribute(c,c),c}},_.each(_.expr.match.bool.source.match(/\w+/g),function(a,b){var c=fb[b]||_.find.attr;fb[b]=function(a,b,d){var e,f;return d||(f=fb[b],fb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,fb[b]=f),e}});var gb=/^(?:input|select|textarea|button)$/i;_.fn.extend({prop:function(a,b){return qa(this,_.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[_.propFix[a]||a]})}}),_.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!_.isXMLDoc(a),f&&(b=_.propFix[b]||b,e=_.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||gb.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),Y.optSelected||(_.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),_.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){_.propFix[this.toLowerCase()]=this});var hb=/[\t\r\n\f]/g;_.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(_.isFunction(a))return this.each(function(b){_(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(na)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(hb," "):" ")){for(f=0;e=b[f++];)d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=_.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(_.isFunction(a))return this.each(function(b){_(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(na)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(hb," "):"")){for(f=0;e=b[f++];)for(;d.indexOf(" "+e+" ")>=0;)d=d.replace(" "+e+" "," ");g=a?_.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(_.isFunction(a)?function(c){_(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c)for(var b,d=0,e=_(this),f=a.match(na)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else(c===za||"boolean"===c)&&(this.className&&ra.set(this,"__className__",this.className),this.className=this.className||a===!1?"":ra.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(hb," ").indexOf(b)>=0)return!0;return!1}});var ib=/\r/g;_.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=_.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,_(this).val()):a,null==e?e="":"number"==typeof e?e+="":_.isArray(e)&&(e=_.map(e,function(a){return null==a?"":a+""})),b=_.valHooks[this.type]||_.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=_.valHooks[e.type]||_.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ib,""):null==c?"":c)}}}),_.extend({valHooks:{option:{get:function(a){var b=_.find.attr(a,"value");return null!=b?b:_.trim(_.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(Y.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&_.nodeName(c.parentNode,"optgroup"))){if(b=_(c).val(),f)return b;g.push(b)}return g},set:function(a,b){for(var c,d,e=a.options,f=_.makeArray(b),g=e.length;g--;)d=e[g],(d.selected=_.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),_.each(["radio","checkbox"],function(){_.valHooks[this]={set:function(a,b){return _.isArray(b)?a.checked=_.inArray(_(a).val(),b)>=0:void 0}},Y.checkOn||(_.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),_.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){_.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),_.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var jb=_.now(),kb=/\?/;_.parseJSON=function(a){return JSON.parse(a+"")},_.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&_.error("Invalid XML: "+a),b};var lb=/#.*$/,mb=/([?&])_=[^&]*/,nb=/^(.*?):[ \t]*([^\r\n]*)$/gm,ob=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,pb=/^(?:GET|HEAD)$/,qb=/^\/\//,rb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,sb={},tb={},ub="*/".concat("*"),vb=a.location.href,wb=rb.exec(vb.toLowerCase())||[];_.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:vb,type:"GET",isLocal:ob.test(wb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":ub,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":_.parseJSON,"text xml":_.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?L(L(a,_.ajaxSettings),b):L(_.ajaxSettings,a)},ajaxPrefilter:J(sb),ajaxTransport:J(tb),ajax:function(a,b){function c(a,b,c,g){var i,k,r,s,u,w=b;2!==t&&(t=2,h&&clearTimeout(h),d=void 0,f=g||"",v.readyState=a>0?4:0,i=a>=200&&300>a||304===a,c&&(s=M(l,v,c)),s=N(l,s,v,i),i?(l.ifModified&&(u=v.getResponseHeader("Last-Modified"),u&&(_.lastModified[e]=u),u=v.getResponseHeader("etag"),u&&(_.etag[e]=u)),204===a||"HEAD"===l.type?w="nocontent":304===a?w="notmodified":(w=s.state,k=s.data,r=s.error,i=!r)):(r=w,(a||!w)&&(w="error",0>a&&(a=0))),v.status=a,v.statusText=(b||w)+"",i?o.resolveWith(m,[k,w,v]):o.rejectWith(m,[v,w,r]),v.statusCode(q),q=void 0,j&&n.trigger(i?"ajaxSuccess":"ajaxError",[v,l,i?k:r]),p.fireWith(m,[v,w]),j&&(n.trigger("ajaxComplete",[v,l]),--_.active||_.event.trigger("ajaxStop")))}"object"==typeof a&&(b=a,a=void 0),b=b||{};var d,e,f,g,h,i,j,k,l=_.ajaxSetup({},b),m=l.context||l,n=l.context&&(m.nodeType||m.jquery)?_(m):_.event,o=_.Deferred(),p=_.Callbacks("once memory"),q=l.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!g)for(g={};b=nb.exec(f);)g[b[1].toLowerCase()]=b[2];b=g[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return d&&d.abort(b),c(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,l.url=((a||l.url||vb)+"").replace(lb,"").replace(qb,wb[1]+"//"),l.type=b.method||b.type||l.method||l.type,l.dataTypes=_.trim(l.dataType||"*").toLowerCase().match(na)||[""],null==l.crossDomain&&(i=rb.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]===wb[1]&&i[2]===wb[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(wb[3]||("http:"===wb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=_.param(l.data,l.traditional)),K(sb,l,b,v),2===t)return v;j=_.event&&l.global,j&&0===_.active++&&_.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!pb.test(l.type),e=l.url,l.hasContent||(l.data&&(e=l.url+=(kb.test(e)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=mb.test(e)?e.replace(mb,"$1_="+jb++):e+(kb.test(e)?"&":"?")+"_="+jb++)),l.ifModified&&(_.lastModified[e]&&v.setRequestHeader("If-Modified-Since",_.lastModified[e]),_.etag[e]&&v.setRequestHeader("If-None-Match",_.etag[e])),(l.data&&l.hasContent&&l.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",l.contentType),v.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+ub+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)v.setRequestHeader(k,l.headers[k]);if(l.beforeSend&&(l.beforeSend.call(m,v,l)===!1||2===t))return v.abort();u="abort";for(k in{success:1,error:1,complete:1})v[k](l[k]);if(d=K(tb,l,b,v)){v.readyState=1,j&&n.trigger("ajaxSend",[v,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){v.abort("timeout")},l.timeout));try{t=1,d.send(r,c)}catch(w){if(!(2>t))throw w;c(-1,w)}}else c(-1,"No Transport");return v},getJSON:function(a,b,c){return _.get(a,b,c,"json")},getScript:function(a,b){return _.get(a,void 0,b,"script")}}),_.each(["get","post"],function(a,b){_[b]=function(a,c,d,e){return _.isFunction(c)&&(e=e||d,d=c,c=void 0),_.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),_._evalUrl=function(a){return _.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},_.fn.extend({wrapAll:function(a){var b;return _.isFunction(a)?this.each(function(b){_(this).wrapAll(a.call(this,b))}):(this[0]&&(b=_(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(_.isFunction(a)?function(b){_(this).wrapInner(a.call(this,b))}:function(){var b=_(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=_.isFunction(a);return this.each(function(c){_(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){_.nodeName(this,"body")||_(this).replaceWith(this.childNodes)}).end()}}),_.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},_.expr.filters.visible=function(a){return!_.expr.filters.hidden(a)};var xb=/%20/g,yb=/\[\]$/,zb=/\r?\n/g,Ab=/^(?:submit|button|image|reset|file)$/i,Bb=/^(?:input|select|textarea|keygen)/i;_.param=function(a,b){var c,d=[],e=function(a,b){b=_.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b);
26 |
27 | };if(void 0===b&&(b=_.ajaxSettings&&_.ajaxSettings.traditional),_.isArray(a)||a.jquery&&!_.isPlainObject(a))_.each(a,function(){e(this.name,this.value)});else for(c in a)O(c,a[c],b,e);return d.join("&").replace(xb,"+")},_.fn.extend({serialize:function(){return _.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=_.prop(this,"elements");return a?_.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!_(this).is(":disabled")&&Bb.test(this.nodeName)&&!Ab.test(a)&&(this.checked||!ya.test(a))}).map(function(a,b){var c=_(this).val();return null==c?null:_.isArray(c)?_.map(c,function(a){return{name:b.name,value:a.replace(zb,"\r\n")}}):{name:b.name,value:c.replace(zb,"\r\n")}}).get()}}),_.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cb=0,Db={},Eb={0:200,1223:204},Fb=_.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Db)Db[a]()}),Y.cors=!!Fb&&"withCredentials"in Fb,Y.ajax=Fb=!!Fb,_.ajaxTransport(function(a){var b;return Y.cors||Fb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Db[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Eb[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Db[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),_.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return _.globalEval(a),a}}}),_.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),_.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=_("