├── .gitignore ├── README.md ├── index.html ├── jquery.event.move.js ├── jquery.js ├── jquery.twentytwenty.js ├── map.jpg ├── map_erased.jpg ├── style.css └── twentytwenty.css /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .gitignore support plugin (hsz.mobi) 2 | ### JetBrains template 3 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm 4 | 5 | ## Directory-based project format 6 | .idea/ 7 | /*.iml 8 | # if you remove the above rule, at least ignore user-specific stuff: 9 | # .idea/workspace.xml 10 | # .idea/tasks.xml 11 | # .idea/dictionaries 12 | # and these sensitive or high-churn files: 13 | # .idea/dataSources.ids 14 | # .idea/dataSources.xml 15 | # .idea/sqlDataSources.xml 16 | # .idea/dynamic.xml 17 | # and, if using gradle:: 18 | # .idea/gradle.xml 19 | # .idea/libraries 20 | 21 | ## File-based project format 22 | *.ipr 23 | *.iws 24 | 25 | ## Additional for IntelliJ 26 | out/ 27 | 28 | # generated by mpeltonen/sbt-idea plugin 29 | .idea_modules/ 30 | 31 | # generated by JIRA plugin 32 | atlassian-ide-plugin.xml 33 | 34 | # generated by Crashlytics plugin (for Android Studio and Intellij) 35 | com_crashlytics_export_strings.xml 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

What is the Access-Map?

2 | 3 | The Access Map is a tool that visualizes a handicapped person's perspective by wiping out all the stations that are not accessible. The map was originally created by the initiative Mappable from Hamburg. The idea: 4 | 5 |
Taking the tube or suburban railway for your daily commute is quite comfortable if you live in a city with a well developed public transport network. But as so often in life we quickly take things for granted and tend to forget that such amenities are not accessible for everyone. [...] Fortunately there are projects like Raul Krauthausen's phenomenal wheelmap [...] While this and other tools help to improve the situation of handicapped people, we nevertheless think that from time to time it's useful and necessary to remind 'the public' about the limitations of 'public transport'.
6 | 7 |

I think, apps that support people with mobility restrictions in their everyday life are great - but they are not the final answer to the greater problem that needs to be solved, namely too few accesible stations. With this map we want to raise more awareness for the topic, by visualizing how a city looks like for a person in a wheelchair.
8 | We strongly encourage you to redploy this tool in your city. It's really easy and no coding skills are needed. We'll explain how to do that below. In case you have any questions that are not answered here, feel free to contactme and ask.

9 | 10 |


11 | 12 |

How does it work?

13 | 14 |

This Readme explains step by step how to redeploy the Access Map in your city. You will make your own maps, copy the repository and adapt it to your city. In the end we will put your map online with github-pages and you're done!

15 | 16 | You'll need: 17 | 24 | 25 | 1. Find a map 26 | 27 |

First you need to chose a map for the visualization. It certainly makes sense to use the public transportation map by your city, but often these are restricted by copyright laws. Nevertheless you could ask for permission or check whether there is a free version available. This can be quite a hassle, decide for yourself, how you want to proceed on that, just keep in mind that you might be breaking a law if you simply use the map from your city without permission.

28 | 29 | 2. Edit the map 30 | 31 |

This is probably the part that consumes most of the time - which isn't much though. Make a copy of whatever map image you want to use and rename it for example map_erased.jpg. Open it in an editing program and erase all the stations that are not accessible. I used the stamp tool in GIMP which worked perfectly fine. It took me about half an hour.

32 | 33 | 3. Set up a github account 34 | 35 |

Now we want to join the maps and put them online. For that matter you need to create a github account, if you don't have one yet, go to github and create one. After that, I would recommend to install the github App. I'll be going through the How-To expecting you to use the app. You can also use the command line for that, but I won't explain that here.

36 | 37 | 4. clone the repository 38 | 39 |

After you've created your account, go to the repository on my account and "clone" it to your Desktop. You will see the repository appearing in your github app. You can see the changes you made here and "push" them to the repository when you sync it. By syncing you also "pull" all the changes that were made by other people, in case you have other collaborators. This is now your very own repository. You can also rename it if you want to and add other people on github in the "settings" section.

40 | 41 | 5. Adjust it to your city 42 | 43 |

Now you should find out where the repository has been saved on your computer. Probably in your home folder. Drag the entire folder in a text editor like Sublime. Go to the index.html file and adjus the text between the "" tags to whatever you want to say. You can also change the font and the color in the style.css file, if you want to. Save your changes. Then you need to go back to your folder and replace the images with your pictures.

44 | 45 | 6. Does it work? Check locally. 46 | 47 |

This is not mandatory: If you have python installed, you can see whether your adjustments work by going into your terminal and typing:

48 | 49 | python -m SimpleHTTPServer 50 | 51 |

You can then go to your browser, type in "localhost:8000" or replace the 8000 with whatever port python is serving (It usually says that when you execute the command). Does it work? Perfect!

52 | 53 | 7. Push it! 54 | 55 |

You are now ready to put everything online. See whether the github app noted all the changes you made, then you can sync everything. Check your github repository on the github site. Is everything in there? Good!

56 | 57 | 8. Go online! 58 | 59 |

Now go ahead and check your new awesome website on http://username.github.io/access_map. Replace "username" with the name you chose for your account and "access_map" with the name of your respository. You did it, awesome!

60 | 61 |

You can now make an important statement on accessibility. Share this and talk to people about accessibility. It's important. Feel free to teach other people how to build this app. Thank you for your commitment <3

62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Accessibility of the Berlin Nahverkehrssystem 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 75 | 76 | 77 | 78 |

What does Berlin look like for people in a wheelchair?

79 | 80 |

This is a visualization of the Berlin Public Transport System's degree of accessibility. The idea for this comes from 81 | the Hamburg initiative Mappable.
82 | You can find an elaborate How-to here.

83 | 84 |

Drag the handle in the middle of the screen to the left or to the right. You can also use the left/right cursor keys 85 | on your keyboard instead of the mouse.

86 | 87 |
88 | 89 | 90 |
91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /jquery.event.move.js: -------------------------------------------------------------------------------- 1 | // jquery.event.move 2 | // 3 | // 1.3.6 4 | // 5 | // Stephen Band 6 | // 7 | // Triggers 'movestart', 'move' and 'moveend' events after 8 | // mousemoves following a mousedown cross a distance threshold, 9 | // similar to the native 'dragstart', 'drag' and 'dragend' events. 10 | // Move events are throttled to animation frames. Move event objects 11 | // have the properties: 12 | // 13 | // pageX: 14 | // pageY: Page coordinates of pointer. 15 | // startX: 16 | // startY: Page coordinates of pointer at movestart. 17 | // distX: 18 | // distY: Distance the pointer has moved since movestart. 19 | // deltaX: 20 | // deltaY: Distance the finger has moved since last event. 21 | // velocityX: 22 | // velocityY: Average velocity over last few events. 23 | 24 | 25 | (function (module) { 26 | if (typeof define === 'function' && define.amd) { 27 | // AMD. Register as an anonymous module. 28 | define(['jquery'], module); 29 | } else { 30 | // Browser globals 31 | module(jQuery); 32 | } 33 | })(function (jQuery, undefined) { 34 | 35 | var // Number of pixels a pressed pointer travels before movestart 36 | // event is fired. 37 | threshold = 6, 38 | 39 | add = jQuery.event.add, 40 | 41 | remove = jQuery.event.remove, 42 | 43 | // Just sugar, so we can have arguments in the same order as 44 | // add and remove. 45 | trigger = function (node, type, data) { 46 | jQuery.event.trigger(type, data, node); 47 | }, 48 | 49 | // Shim for requestAnimationFrame, falling back to timer. See: 50 | // see http://paulirish.com/2011/requestanimationframe-for-smart-animating/ 51 | requestFrame = (function () { 52 | return ( 53 | window.requestAnimationFrame || 54 | window.webkitRequestAnimationFrame || 55 | window.mozRequestAnimationFrame || 56 | window.oRequestAnimationFrame || 57 | window.msRequestAnimationFrame || 58 | function (fn, element) { 59 | return window.setTimeout(function () { 60 | fn(); 61 | }, 25); 62 | } 63 | ); 64 | })(), 65 | 66 | ignoreTags = { 67 | textarea: true, 68 | input: true, 69 | select: true, 70 | button: true 71 | }, 72 | 73 | mouseevents = { 74 | move: 'mousemove', 75 | cancel: 'mouseup dragstart', 76 | end: 'mouseup' 77 | }, 78 | 79 | touchevents = { 80 | move: 'touchmove', 81 | cancel: 'touchend', 82 | end: 'touchend' 83 | }; 84 | 85 | 86 | // Constructors 87 | 88 | function Timer(fn) { 89 | var callback = fn, 90 | active = false, 91 | running = false; 92 | 93 | function trigger(time) { 94 | if (active) { 95 | callback(); 96 | requestFrame(trigger); 97 | running = true; 98 | active = false; 99 | } 100 | else { 101 | running = false; 102 | } 103 | } 104 | 105 | this.kick = function (fn) { 106 | active = true; 107 | if (!running) { 108 | trigger(); 109 | } 110 | }; 111 | 112 | this.end = function (fn) { 113 | var cb = callback; 114 | 115 | if (!fn) { 116 | return; 117 | } 118 | 119 | // If the timer is not running, simply call the end callback. 120 | if (!running) { 121 | fn(); 122 | } 123 | // If the timer is running, and has been kicked lately, then 124 | // queue up the current callback and the end callback, otherwise 125 | // just the end callback. 126 | else { 127 | callback = active ? 128 | function () { 129 | cb(); 130 | fn(); 131 | } : 132 | fn; 133 | 134 | active = true; 135 | } 136 | }; 137 | } 138 | 139 | 140 | // Functions 141 | 142 | function returnTrue() { 143 | return true; 144 | } 145 | 146 | function returnFalse() { 147 | return false; 148 | } 149 | 150 | function preventDefault(e) { 151 | e.preventDefault(); 152 | } 153 | 154 | function preventIgnoreTags(e) { 155 | // Don't prevent interaction with form elements. 156 | if (ignoreTags[ e.target.tagName.toLowerCase() ]) { 157 | return; 158 | } 159 | 160 | e.preventDefault(); 161 | } 162 | 163 | function isLeftButton(e) { 164 | // Ignore mousedowns on any button other than the left (or primary) 165 | // mouse button, or when a modifier key is pressed. 166 | return (e.which === 1 && !e.ctrlKey && !e.altKey); 167 | } 168 | 169 | function identifiedTouch(touchList, id) { 170 | var i, l; 171 | 172 | if (touchList.identifiedTouch) { 173 | return touchList.identifiedTouch(id); 174 | } 175 | 176 | // touchList.identifiedTouch() does not exist in 177 | // webkit yet… we must do the search ourselves... 178 | 179 | i = -1; 180 | l = touchList.length; 181 | 182 | while (++i < l) { 183 | if (touchList[i].identifier === id) { 184 | return touchList[i]; 185 | } 186 | } 187 | } 188 | 189 | function changedTouch(e, event) { 190 | var touch = identifiedTouch(e.changedTouches, event.identifier); 191 | 192 | // This isn't the touch you're looking for. 193 | if (!touch) { 194 | return; 195 | } 196 | 197 | // Chrome Android (at least) includes touches that have not 198 | // changed in e.changedTouches. That's a bit annoying. Check 199 | // that this touch has changed. 200 | if (touch.pageX === event.pageX && touch.pageY === event.pageY) { 201 | return; 202 | } 203 | 204 | return touch; 205 | } 206 | 207 | 208 | // Handlers that decide when the first movestart is triggered 209 | 210 | function mousedown(e) { 211 | var data; 212 | 213 | if (!isLeftButton(e)) { 214 | return; 215 | } 216 | 217 | data = { 218 | target: e.target, 219 | startX: e.pageX, 220 | startY: e.pageY, 221 | timeStamp: e.timeStamp 222 | }; 223 | 224 | add(document, mouseevents.move, mousemove, data); 225 | add(document, mouseevents.cancel, mouseend, data); 226 | } 227 | 228 | function mousemove(e) { 229 | var data = e.data; 230 | 231 | checkThreshold(e, data, e, removeMouse); 232 | } 233 | 234 | function mouseend(e) { 235 | removeMouse(); 236 | } 237 | 238 | function removeMouse() { 239 | remove(document, mouseevents.move, mousemove); 240 | remove(document, mouseevents.cancel, mouseend); 241 | } 242 | 243 | function touchstart(e) { 244 | var touch, template; 245 | 246 | // Don't get in the way of interaction with form elements. 247 | if (ignoreTags[ e.target.tagName.toLowerCase() ]) { 248 | return; 249 | } 250 | 251 | touch = e.changedTouches[0]; 252 | 253 | // iOS live updates the touch objects whereas Android gives us copies. 254 | // That means we can't trust the touchstart object to stay the same, 255 | // so we must copy the data. This object acts as a template for 256 | // movestart, move and moveend event objects. 257 | template = { 258 | target: touch.target, 259 | startX: touch.pageX, 260 | startY: touch.pageY, 261 | timeStamp: e.timeStamp, 262 | identifier: touch.identifier 263 | }; 264 | 265 | // Use the touch identifier as a namespace, so that we can later 266 | // remove handlers pertaining only to this touch. 267 | add(document, touchevents.move + '.' + touch.identifier, touchmove, template); 268 | add(document, touchevents.cancel + '.' + touch.identifier, touchend, template); 269 | } 270 | 271 | function touchmove(e) { 272 | var data = e.data, 273 | touch = changedTouch(e, data); 274 | 275 | if (!touch) { 276 | return; 277 | } 278 | 279 | checkThreshold(e, data, touch, removeTouch); 280 | } 281 | 282 | function touchend(e) { 283 | var template = e.data, 284 | touch = identifiedTouch(e.changedTouches, template.identifier); 285 | 286 | if (!touch) { 287 | return; 288 | } 289 | 290 | removeTouch(template.identifier); 291 | } 292 | 293 | function removeTouch(identifier) { 294 | remove(document, '.' + identifier, touchmove); 295 | remove(document, '.' + identifier, touchend); 296 | } 297 | 298 | 299 | // Logic for deciding when to trigger a movestart. 300 | 301 | function checkThreshold(e, template, touch, fn) { 302 | var distX = touch.pageX - template.startX, 303 | distY = touch.pageY - template.startY; 304 | 305 | // Do nothing if the threshold has not been crossed. 306 | if ((distX * distX) + (distY * distY) < (threshold * threshold)) { 307 | return; 308 | } 309 | 310 | triggerStart(e, template, touch, distX, distY, fn); 311 | } 312 | 313 | function handled() { 314 | // this._handled should return false once, and after return true. 315 | this._handled = returnTrue; 316 | return false; 317 | } 318 | 319 | function flagAsHandled(e) { 320 | e._handled(); 321 | } 322 | 323 | function triggerStart(e, template, touch, distX, distY, fn) { 324 | var node = template.target, 325 | touches, time; 326 | 327 | touches = e.targetTouches; 328 | time = e.timeStamp - template.timeStamp; 329 | 330 | // Create a movestart object with some special properties that 331 | // are passed only to the movestart handlers. 332 | template.type = 'movestart'; 333 | template.distX = distX; 334 | template.distY = distY; 335 | template.deltaX = distX; 336 | template.deltaY = distY; 337 | template.pageX = touch.pageX; 338 | template.pageY = touch.pageY; 339 | template.velocityX = distX / time; 340 | template.velocityY = distY / time; 341 | template.targetTouches = touches; 342 | template.finger = touches ? 343 | touches.length : 344 | 1; 345 | 346 | // The _handled method is fired to tell the default movestart 347 | // handler that one of the move events is bound. 348 | template._handled = handled; 349 | 350 | // Pass the touchmove event so it can be prevented if or when 351 | // movestart is handled. 352 | template._preventTouchmoveDefault = function () { 353 | e.preventDefault(); 354 | }; 355 | 356 | // Trigger the movestart event. 357 | trigger(template.target, template); 358 | 359 | // Unbind handlers that tracked the touch or mouse up till now. 360 | fn(template.identifier); 361 | } 362 | 363 | 364 | // Handlers that control what happens following a movestart 365 | 366 | function activeMousemove(e) { 367 | var timer = e.data.timer; 368 | 369 | e.data.touch = e; 370 | e.data.timeStamp = e.timeStamp; 371 | timer.kick(); 372 | } 373 | 374 | function activeMouseend(e) { 375 | var event = e.data.event, 376 | timer = e.data.timer; 377 | 378 | removeActiveMouse(); 379 | 380 | endEvent(event, timer, function () { 381 | // Unbind the click suppressor, waiting until after mouseup 382 | // has been handled. 383 | setTimeout(function () { 384 | remove(event.target, 'click', returnFalse); 385 | }, 0); 386 | }); 387 | } 388 | 389 | function removeActiveMouse(event) { 390 | remove(document, mouseevents.move, activeMousemove); 391 | remove(document, mouseevents.end, activeMouseend); 392 | } 393 | 394 | function activeTouchmove(e) { 395 | var event = e.data.event, 396 | timer = e.data.timer, 397 | touch = changedTouch(e, event); 398 | 399 | if (!touch) { 400 | return; 401 | } 402 | 403 | // Stop the interface from gesturing 404 | e.preventDefault(); 405 | 406 | event.targetTouches = e.targetTouches; 407 | e.data.touch = touch; 408 | e.data.timeStamp = e.timeStamp; 409 | timer.kick(); 410 | } 411 | 412 | function activeTouchend(e) { 413 | var event = e.data.event, 414 | timer = e.data.timer, 415 | touch = identifiedTouch(e.changedTouches, event.identifier); 416 | 417 | // This isn't the touch you're looking for. 418 | if (!touch) { 419 | return; 420 | } 421 | 422 | removeActiveTouch(event); 423 | endEvent(event, timer); 424 | } 425 | 426 | function removeActiveTouch(event) { 427 | remove(document, '.' + event.identifier, activeTouchmove); 428 | remove(document, '.' + event.identifier, activeTouchend); 429 | } 430 | 431 | 432 | // Logic for triggering move and moveend events 433 | 434 | function updateEvent(event, touch, timeStamp, timer) { 435 | var time = timeStamp - event.timeStamp; 436 | 437 | event.type = 'move'; 438 | event.distX = touch.pageX - event.startX; 439 | event.distY = touch.pageY - event.startY; 440 | event.deltaX = touch.pageX - event.pageX; 441 | event.deltaY = touch.pageY - event.pageY; 442 | 443 | // Average the velocity of the last few events using a decay 444 | // curve to even out spurious jumps in values. 445 | event.velocityX = 0.3 * event.velocityX + 0.7 * event.deltaX / time; 446 | event.velocityY = 0.3 * event.velocityY + 0.7 * event.deltaY / time; 447 | event.pageX = touch.pageX; 448 | event.pageY = touch.pageY; 449 | } 450 | 451 | function endEvent(event, timer, fn) { 452 | timer.end(function () { 453 | event.type = 'moveend'; 454 | 455 | trigger(event.target, event); 456 | 457 | return fn && fn(); 458 | }); 459 | } 460 | 461 | 462 | // jQuery special event definition 463 | 464 | function setup(data, namespaces, eventHandle) { 465 | // Stop the node from being dragged 466 | //add(this, 'dragstart.move drag.move', preventDefault); 467 | 468 | // Prevent text selection and touch interface scrolling 469 | //add(this, 'mousedown.move', preventIgnoreTags); 470 | 471 | // Tell movestart default handler that we've handled this 472 | add(this, 'movestart.move', flagAsHandled); 473 | 474 | // Don't bind to the DOM. For speed. 475 | return true; 476 | } 477 | 478 | function teardown(namespaces) { 479 | remove(this, 'dragstart drag', preventDefault); 480 | remove(this, 'mousedown touchstart', preventIgnoreTags); 481 | remove(this, 'movestart', flagAsHandled); 482 | 483 | // Don't bind to the DOM. For speed. 484 | return true; 485 | } 486 | 487 | function addMethod(handleObj) { 488 | // We're not interested in preventing defaults for handlers that 489 | // come from internal move or moveend bindings 490 | if (handleObj.namespace === "move" || handleObj.namespace === "moveend") { 491 | return; 492 | } 493 | 494 | // Stop the node from being dragged 495 | add(this, 'dragstart.' + handleObj.guid + ' drag.' + handleObj.guid, preventDefault, undefined, handleObj.selector); 496 | 497 | // Prevent text selection and touch interface scrolling 498 | add(this, 'mousedown.' + handleObj.guid, preventIgnoreTags, undefined, handleObj.selector); 499 | } 500 | 501 | function removeMethod(handleObj) { 502 | if (handleObj.namespace === "move" || handleObj.namespace === "moveend") { 503 | return; 504 | } 505 | 506 | remove(this, 'dragstart.' + handleObj.guid + ' drag.' + handleObj.guid); 507 | remove(this, 'mousedown.' + handleObj.guid); 508 | } 509 | 510 | jQuery.event.special.movestart = { 511 | setup: setup, 512 | teardown: teardown, 513 | add: addMethod, 514 | remove: removeMethod, 515 | 516 | _default: function (e) { 517 | var event, data; 518 | 519 | // If no move events were bound to any ancestors of this 520 | // target, high tail it out of here. 521 | if (!e._handled()) { 522 | return; 523 | } 524 | 525 | function update(time) { 526 | updateEvent(event, data.touch, data.timeStamp); 527 | trigger(e.target, event); 528 | } 529 | 530 | event = { 531 | target: e.target, 532 | startX: e.startX, 533 | startY: e.startY, 534 | pageX: e.pageX, 535 | pageY: e.pageY, 536 | distX: e.distX, 537 | distY: e.distY, 538 | deltaX: e.deltaX, 539 | deltaY: e.deltaY, 540 | velocityX: e.velocityX, 541 | velocityY: e.velocityY, 542 | timeStamp: e.timeStamp, 543 | identifier: e.identifier, 544 | targetTouches: e.targetTouches, 545 | finger: e.finger 546 | }; 547 | 548 | data = { 549 | event: event, 550 | timer: new Timer(update), 551 | touch: undefined, 552 | timeStamp: undefined 553 | }; 554 | 555 | if (e.identifier === undefined) { 556 | // We're dealing with a mouse 557 | // Stop clicks from propagating during a move 558 | add(e.target, 'click', returnFalse); 559 | add(document, mouseevents.move, activeMousemove, data); 560 | add(document, mouseevents.end, activeMouseend, data); 561 | } 562 | else { 563 | // We're dealing with a touch. Stop touchmove doing 564 | // anything defaulty. 565 | e._preventTouchmoveDefault(); 566 | add(document, touchevents.move + '.' + e.identifier, activeTouchmove, data); 567 | add(document, touchevents.end + '.' + e.identifier, activeTouchend, data); 568 | } 569 | } 570 | }; 571 | 572 | jQuery.event.special.move = { 573 | setup: function () { 574 | // Bind a noop to movestart. Why? It's the movestart 575 | // setup that decides whether other move events are fired. 576 | add(this, 'movestart.move', jQuery.noop); 577 | }, 578 | 579 | teardown: function () { 580 | remove(this, 'movestart.move', jQuery.noop); 581 | } 582 | }; 583 | 584 | jQuery.event.special.moveend = { 585 | setup: function () { 586 | // Bind a noop to movestart. Why? It's the movestart 587 | // setup that decides whether other move events are fired. 588 | add(this, 'movestart.moveend', jQuery.noop); 589 | }, 590 | 591 | teardown: function () { 592 | remove(this, 'movestart.moveend', jQuery.noop); 593 | } 594 | }; 595 | 596 | add(document, 'mousedown.move', mousedown); 597 | add(document, 'touchstart.move', touchstart); 598 | 599 | // Make jQuery copy touch event properties over to the jQuery event 600 | // object, if they are not already listed. But only do the ones we 601 | // really need. IE7/8 do not have Array#indexOf(), but nor do they 602 | // have touch events, so let's assume we can ignore them. 603 | if (typeof Array.prototype.indexOf === 'function') { 604 | (function (jQuery, undefined) { 605 | var props = ["changedTouches", "targetTouches"], 606 | l = props.length; 607 | 608 | while (l--) { 609 | if (jQuery.event.props.indexOf(props[l]) === -1) { 610 | jQuery.event.props.push(props[l]); 611 | } 612 | } 613 | })(jQuery); 614 | } 615 | ; 616 | }); 617 | -------------------------------------------------------------------------------- /jquery.js: -------------------------------------------------------------------------------- 1 | /*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ 2 | !function (a, b) { 3 | "object" == typeof module && "object" == typeof module.exports ? module.exports = a.document ? b(a, !0) : function (a) { 4 | if (!a.document)throw new Error("jQuery requires a window with a document"); 5 | return b(a) 6 | } : b(a) 7 | }("undefined" != typeof window ? window : this, function (a, b) { 8 | var c = [], d = c.slice, e = c.concat, f = c.push, g = c.indexOf, h = {}, i = h.toString, j = h.hasOwnProperty, k = "".trim, l = {}, m = a.document, n = "2.1.0", o = function (a, b) { 9 | return new o.fn.init(a, b) 10 | }, p = /^-ms-/, q = /-([\da-z])/gi, r = function (a, b) { 11 | return b.toUpperCase() 12 | }; 13 | o.fn = o.prototype = {jquery: n, constructor: o, selector: "", length: 0, toArray: function () { 14 | return d.call(this) 15 | }, get: function (a) { 16 | return null != a ? 0 > a ? this[a + this.length] : this[a] : d.call(this) 17 | }, pushStack: function (a) { 18 | var b = o.merge(this.constructor(), a); 19 | return b.prevObject = this, b.context = this.context, b 20 | }, each: function (a, b) { 21 | return o.each(this, a, b) 22 | }, map: function (a) { 23 | return this.pushStack(o.map(this, function (b, c) { 24 | return a.call(b, c, b) 25 | })) 26 | }, slice: function () { 27 | return this.pushStack(d.apply(this, arguments)) 28 | }, first: function () { 29 | return this.eq(0) 30 | }, last: function () { 31 | return this.eq(-1) 32 | }, eq: function (a) { 33 | var b = this.length, c = +a + (0 > a ? b : 0); 34 | return this.pushStack(c >= 0 && b > c ? [this[c]] : []) 35 | }, end: function () { 36 | return this.prevObject || this.constructor(null) 37 | }, push: f, sort: c.sort, splice: c.splice}, o.extend = o.fn.extend = function () { 38 | var a, b, c, d, e, f, g = arguments[0] || {}, h = 1, i = arguments.length, j = !1; 39 | for ("boolean" == typeof g && (j = g, g = arguments[h] || {}, h++), "object" == typeof g || o.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 && (o.isPlainObject(d) || (e = o.isArray(d))) ? (e ? (e = !1, f = c && o.isArray(c) ? c : []) : f = c && o.isPlainObject(c) ? c : {}, g[b] = o.extend(j, f, d)) : void 0 !== d && (g[b] = d)); 40 | return g 41 | }, o.extend({expando: "jQuery" + (n + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (a) { 42 | throw new Error(a) 43 | }, noop: function () { 44 | }, isFunction: function (a) { 45 | return"function" === o.type(a) 46 | }, isArray: Array.isArray, isWindow: function (a) { 47 | return null != a && a === a.window 48 | }, isNumeric: function (a) { 49 | return a - parseFloat(a) >= 0 50 | }, isPlainObject: function (a) { 51 | if ("object" !== o.type(a) || a.nodeType || o.isWindow(a))return!1; 52 | try { 53 | if (a.constructor && !j.call(a.constructor.prototype, "isPrototypeOf"))return!1 54 | } catch (b) { 55 | return!1 56 | } 57 | return!0 58 | }, isEmptyObject: function (a) { 59 | var b; 60 | for (b in a)return!1; 61 | return!0 62 | }, type: function (a) { 63 | return null == a ? a + "" : "object" == typeof a || "function" == typeof a ? h[i.call(a)] || "object" : typeof a 64 | }, globalEval: function (a) { 65 | var b, c = eval; 66 | a = o.trim(a), a && (1 === a.indexOf("use strict") ? (b = m.createElement("script"), b.text = a, m.head.appendChild(b).parentNode.removeChild(b)) : c(a)) 67 | }, camelCase: function (a) { 68 | return a.replace(p, "ms-").replace(q, r) 69 | }, nodeName: function (a, b) { 70 | return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase() 71 | }, each: function (a, b, c) { 72 | var d, e = 0, f = a.length, g = s(a); 73 | if (c) { 74 | if (g) { 75 | for (; f > e; e++)if (d = b.apply(a[e], c), d === !1)break 76 | } else for (e in a)if (d = b.apply(a[e], c), d === !1)break 77 | } else if (g) { 78 | for (; f > e; e++)if (d = b.call(a[e], e, a[e]), d === !1)break 79 | } else for (e in a)if (d = b.call(a[e], e, a[e]), d === !1)break; 80 | return a 81 | }, trim: function (a) { 82 | return null == a ? "" : k.call(a) 83 | }, makeArray: function (a, b) { 84 | var c = b || []; 85 | return null != a && (s(Object(a)) ? o.merge(c, "string" == typeof a ? [a] : a) : f.call(c, a)), c 86 | }, inArray: function (a, b, c) { 87 | return null == b ? -1 : g.call(b, a, c) 88 | }, merge: function (a, b) { 89 | for (var c = +b.length, d = 0, e = a.length; c > d; d++)a[e++] = b[d]; 90 | return a.length = e, a 91 | }, grep: function (a, b, c) { 92 | 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]); 93 | return e 94 | }, map: function (a, b, c) { 95 | var d, f = 0, g = a.length, h = s(a), i = []; 96 | if (h)for (; g > f; f++)d = b(a[f], f, c), null != d && i.push(d); else for (f in a)d = b(a[f], f, c), null != d && i.push(d); 97 | return e.apply([], i) 98 | }, guid: 1, proxy: function (a, b) { 99 | var c, e, f; 100 | return"string" == typeof b && (c = a[b], b = a, a = c), o.isFunction(a) ? (e = d.call(arguments, 2), f = function () { 101 | return a.apply(b || this, e.concat(d.call(arguments))) 102 | }, f.guid = a.guid = a.guid || o.guid++, f) : void 0 103 | }, now: Date.now, support: l}), o.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (a, b) { 104 | h["[object " + b + "]"] = b.toLowerCase() 105 | }); 106 | function s(a) { 107 | var b = a.length, c = o.type(a); 108 | return"function" === c || o.isWindow(a) ? !1 : 1 === a.nodeType && b ? !0 : "array" === c || 0 === b || "number" == typeof b && b > 0 && b - 1 in a 109 | } 110 | 111 | var t = function (a) { 112 | var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s = "sizzle" + -new Date, t = a.document, u = 0, v = 0, w = eb(), x = eb(), y = eb(), z = function (a, b) { 113 | return a === b && (j = !0), 0 114 | }, A = "undefined", B = 1 << 31, C = {}.hasOwnProperty, D = [], E = D.pop, F = D.push, G = D.push, H = D.slice, I = D.indexOf || function (a) { 115 | for (var b = 0, c = this.length; c > b; b++)if (this[b] === a)return b; 116 | return-1 117 | }, J = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", K = "[\\x20\\t\\r\\n\\f]", L = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", M = L.replace("w", "w#"), N = "\\[" + K + "*(" + L + ")" + K + "*(?:([*^$|!~]?=)" + K + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + M + ")|)|)" + K + "*\\]", O = ":(" + L + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + N.replace(3, 8) + ")*)|.*)\\)|)", P = new RegExp("^" + K + "+|((?:^|[^\\\\])(?:\\\\.)*)" + K + "+$", "g"), Q = new RegExp("^" + K + "*," + K + "*"), R = new RegExp("^" + K + "*([>+~]|" + K + ")" + K + "*"), S = new RegExp("=" + K + "*([^\\]'\"]*?)" + K + "*\\]", "g"), T = new RegExp(O), U = new RegExp("^" + M + "$"), V = {ID: new RegExp("^#(" + L + ")"), CLASS: new RegExp("^\\.(" + L + ")"), TAG: new RegExp("^(" + L.replace("w", "w*") + ")"), ATTR: new RegExp("^" + N), PSEUDO: new RegExp("^" + O), CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + K + "*(even|odd|(([+-]|)(\\d*)n|)" + K + "*(?:([+-]|)" + K + "*(\\d+)|))" + K + "*\\)|)", "i"), bool: new RegExp("^(?:" + J + ")$", "i"), needsContext: new RegExp("^" + K + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + K + "*((?:-\\d)?\\d*)" + K + "*\\)|)(?=[^-]|$)", "i")}, W = /^(?:input|select|textarea|button)$/i, X = /^h\d$/i, Y = /^[^{]+\{\s*\[native \w/, Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, $ = /[+~]/, _ = /'|\\/g, ab = new RegExp("\\\\([\\da-f]{1,6}" + K + "?|(" + K + ")|.)", "ig"), bb = function (a, b, c) { 118 | var d = "0x" + b - 65536; 119 | return d !== d || c ? b : 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320) 120 | }; 121 | try { 122 | G.apply(D = H.call(t.childNodes), t.childNodes), D[t.childNodes.length].nodeType 123 | } catch (cb) { 124 | G = {apply: D.length ? function (a, b) { 125 | F.apply(a, H.call(b)) 126 | } : function (a, b) { 127 | var c = a.length, d = 0; 128 | while (a[c++] = b[d++]); 129 | a.length = c - 1 130 | }} 131 | } 132 | function db(a, b, d, e) { 133 | var f, g, h, i, j, m, p, q, u, v; 134 | if ((b ? b.ownerDocument || b : t) !== l && k(b), b = b || l, d = d || [], !a || "string" != typeof a)return d; 135 | if (1 !== (i = b.nodeType) && 9 !== i)return[]; 136 | if (n && !e) { 137 | if (f = Z.exec(a))if (h = f[1]) { 138 | if (9 === i) { 139 | if (g = b.getElementById(h), !g || !g.parentNode)return d; 140 | if (g.id === h)return d.push(g), d 141 | } else if (b.ownerDocument && (g = b.ownerDocument.getElementById(h)) && r(b, g) && g.id === h)return d.push(g), d 142 | } else { 143 | if (f[2])return G.apply(d, b.getElementsByTagName(a)), d; 144 | if ((h = f[3]) && c.getElementsByClassName && b.getElementsByClassName)return G.apply(d, b.getElementsByClassName(h)), d 145 | } 146 | if (c.qsa && (!o || !o.test(a))) { 147 | if (q = p = s, u = b, v = 9 === i && a, 1 === i && "object" !== b.nodeName.toLowerCase()) { 148 | m = ob(a), (p = b.getAttribute("id")) ? q = p.replace(_, "\\$&") : b.setAttribute("id", q), q = "[id='" + q + "'] ", j = m.length; 149 | while (j--)m[j] = q + pb(m[j]); 150 | u = $.test(a) && mb(b.parentNode) || b, v = m.join(",") 151 | } 152 | if (v)try { 153 | return G.apply(d, u.querySelectorAll(v)), d 154 | } catch (w) { 155 | } finally { 156 | p || b.removeAttribute("id") 157 | } 158 | } 159 | } 160 | return xb(a.replace(P, "$1"), b, d, e) 161 | } 162 | 163 | function eb() { 164 | var a = []; 165 | 166 | function b(c, e) { 167 | return a.push(c + " ") > d.cacheLength && delete b[a.shift()], b[c + " "] = e 168 | } 169 | 170 | return b 171 | } 172 | 173 | function fb(a) { 174 | return a[s] = !0, a 175 | } 176 | 177 | function gb(a) { 178 | var b = l.createElement("div"); 179 | try { 180 | return!!a(b) 181 | } catch (c) { 182 | return!1 183 | } finally { 184 | b.parentNode && b.parentNode.removeChild(b), b = null 185 | } 186 | } 187 | 188 | function hb(a, b) { 189 | var c = a.split("|"), e = a.length; 190 | while (e--)d.attrHandle[c[e]] = b 191 | } 192 | 193 | function ib(a, b) { 194 | var c = b && a, d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || B) - (~a.sourceIndex || B); 195 | if (d)return d; 196 | if (c)while (c = c.nextSibling)if (c === b)return-1; 197 | return a ? 1 : -1 198 | } 199 | 200 | function jb(a) { 201 | return function (b) { 202 | var c = b.nodeName.toLowerCase(); 203 | return"input" === c && b.type === a 204 | } 205 | } 206 | 207 | function kb(a) { 208 | return function (b) { 209 | var c = b.nodeName.toLowerCase(); 210 | return("input" === c || "button" === c) && b.type === a 211 | } 212 | } 213 | 214 | function lb(a) { 215 | return fb(function (b) { 216 | return b = +b, fb(function (c, d) { 217 | var e, f = a([], c.length, b), g = f.length; 218 | while (g--)c[e = f[g]] && (c[e] = !(d[e] = c[e])) 219 | }) 220 | }) 221 | } 222 | 223 | function mb(a) { 224 | return a && typeof a.getElementsByTagName !== A && a 225 | } 226 | 227 | c = db.support = {}, f = db.isXML = function (a) { 228 | var b = a && (a.ownerDocument || a).documentElement; 229 | return b ? "HTML" !== b.nodeName : !1 230 | }, k = db.setDocument = function (a) { 231 | var b, e = a ? a.ownerDocument || a : t, g = e.defaultView; 232 | return e !== l && 9 === e.nodeType && e.documentElement ? (l = e, m = e.documentElement, n = !f(e), g && g !== g.top && (g.addEventListener ? g.addEventListener("unload", function () { 233 | k() 234 | }, !1) : g.attachEvent && g.attachEvent("onunload", function () { 235 | k() 236 | })), c.attributes = gb(function (a) { 237 | return a.className = "i", !a.getAttribute("className") 238 | }), c.getElementsByTagName = gb(function (a) { 239 | return a.appendChild(e.createComment("")), !a.getElementsByTagName("*").length 240 | }), c.getElementsByClassName = Y.test(e.getElementsByClassName) && gb(function (a) { 241 | return a.innerHTML = "
", a.firstChild.className = "i", 2 === a.getElementsByClassName("i").length 242 | }), c.getById = gb(function (a) { 243 | return m.appendChild(a).id = s, !e.getElementsByName || !e.getElementsByName(s).length 244 | }), c.getById ? (d.find.ID = function (a, b) { 245 | if (typeof b.getElementById !== A && n) { 246 | var c = b.getElementById(a); 247 | return c && c.parentNode ? [c] : [] 248 | } 249 | }, d.filter.ID = function (a) { 250 | var b = a.replace(ab, bb); 251 | return function (a) { 252 | return a.getAttribute("id") === b 253 | } 254 | }) : (delete d.find.ID, d.filter.ID = function (a) { 255 | var b = a.replace(ab, bb); 256 | return function (a) { 257 | var c = typeof a.getAttributeNode !== A && a.getAttributeNode("id"); 258 | return c && c.value === b 259 | } 260 | }), d.find.TAG = c.getElementsByTagName ? function (a, b) { 261 | return typeof b.getElementsByTagName !== A ? b.getElementsByTagName(a) : void 0 262 | } : function (a, b) { 263 | var c, d = [], e = 0, f = b.getElementsByTagName(a); 264 | if ("*" === a) { 265 | while (c = f[e++])1 === c.nodeType && d.push(c); 266 | return d 267 | } 268 | return f 269 | }, d.find.CLASS = c.getElementsByClassName && function (a, b) { 270 | return typeof b.getElementsByClassName !== A && n ? b.getElementsByClassName(a) : void 0 271 | }, p = [], o = [], (c.qsa = Y.test(e.querySelectorAll)) && (gb(function (a) { 272 | a.innerHTML = "", a.querySelectorAll("[t^='']").length && o.push("[*^$]=" + K + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || o.push("\\[" + K + "*(?:value|" + J + ")"), a.querySelectorAll(":checked").length || o.push(":checked") 273 | }), gb(function (a) { 274 | var b = e.createElement("input"); 275 | b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && o.push("name" + K + "*[*^$|!~]?="), a.querySelectorAll(":enabled").length || o.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), o.push(",.*:") 276 | })), (c.matchesSelector = Y.test(q = m.webkitMatchesSelector || m.mozMatchesSelector || m.oMatchesSelector || m.msMatchesSelector)) && gb(function (a) { 277 | c.disconnectedMatch = q.call(a, "div"), q.call(a, "[s!='']:x"), p.push("!=", O) 278 | }), o = o.length && new RegExp(o.join("|")), p = p.length && new RegExp(p.join("|")), b = Y.test(m.compareDocumentPosition), r = b || Y.test(m.contains) ? function (a, b) { 279 | var c = 9 === a.nodeType ? a.documentElement : a, d = b && b.parentNode; 280 | return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d))) 281 | } : function (a, b) { 282 | if (b)while (b = b.parentNode)if (b === a)return!0; 283 | return!1 284 | }, z = b ? function (a, b) { 285 | if (a === b)return j = !0, 0; 286 | var d = !a.compareDocumentPosition - !b.compareDocumentPosition; 287 | return d ? d : (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & d || !c.sortDetached && b.compareDocumentPosition(a) === d ? a === e || a.ownerDocument === t && r(t, a) ? -1 : b === e || b.ownerDocument === t && r(t, b) ? 1 : i ? I.call(i, a) - I.call(i, b) : 0 : 4 & d ? -1 : 1) 288 | } : function (a, b) { 289 | if (a === b)return j = !0, 0; 290 | var c, d = 0, f = a.parentNode, g = b.parentNode, h = [a], k = [b]; 291 | if (!f || !g)return a === e ? -1 : b === e ? 1 : f ? -1 : g ? 1 : i ? I.call(i, a) - I.call(i, b) : 0; 292 | if (f === g)return ib(a, b); 293 | c = a; 294 | while (c = c.parentNode)h.unshift(c); 295 | c = b; 296 | while (c = c.parentNode)k.unshift(c); 297 | while (h[d] === k[d])d++; 298 | return d ? ib(h[d], k[d]) : h[d] === t ? -1 : k[d] === t ? 1 : 0 299 | }, e) : l 300 | }, db.matches = function (a, b) { 301 | return db(a, null, null, b) 302 | }, db.matchesSelector = function (a, b) { 303 | if ((a.ownerDocument || a) !== l && k(a), b = b.replace(S, "='$1']"), !(!c.matchesSelector || !n || p && p.test(b) || o && o.test(b)))try { 304 | var d = q.call(a, b); 305 | if (d || c.disconnectedMatch || a.document && 11 !== a.document.nodeType)return d 306 | } catch (e) { 307 | } 308 | return db(b, l, null, [a]).length > 0 309 | }, db.contains = function (a, b) { 310 | return(a.ownerDocument || a) !== l && k(a), r(a, b) 311 | }, db.attr = function (a, b) { 312 | (a.ownerDocument || a) !== l && k(a); 313 | var e = d.attrHandle[b.toLowerCase()], f = e && C.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !n) : void 0; 314 | return void 0 !== f ? f : c.attributes || !n ? a.getAttribute(b) : (f = a.getAttributeNode(b)) && f.specified ? f.value : null 315 | }, db.error = function (a) { 316 | throw new Error("Syntax error, unrecognized expression: " + a) 317 | }, db.uniqueSort = function (a) { 318 | var b, d = [], e = 0, f = 0; 319 | if (j = !c.detectDuplicates, i = !c.sortStable && a.slice(0), a.sort(z), j) { 320 | while (b = a[f++])b === a[f] && (e = d.push(f)); 321 | while (e--)a.splice(d[e], 1) 322 | } 323 | return i = null, a 324 | }, e = db.getText = function (a) { 325 | var b, c = "", d = 0, f = a.nodeType; 326 | if (f) { 327 | if (1 === f || 9 === f || 11 === f) { 328 | if ("string" == typeof a.textContent)return a.textContent; 329 | for (a = a.firstChild; a; a = a.nextSibling)c += e(a) 330 | } else if (3 === f || 4 === f)return a.nodeValue 331 | } else while (b = a[d++])c += e(b); 332 | return c 333 | }, d = db.selectors = {cacheLength: 50, createPseudo: fb, match: V, attrHandle: {}, find: {}, relative: {">": {dir: "parentNode", first: !0}, " ": {dir: "parentNode"}, "+": {dir: "previousSibling", first: !0}, "~": {dir: "previousSibling"}}, preFilter: {ATTR: function (a) { 334 | return a[1] = a[1].replace(ab, bb), a[3] = (a[4] || a[5] || "").replace(ab, bb), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4) 335 | }, CHILD: function (a) { 336 | return a[1] = a[1].toLowerCase(), "nth" === a[1].slice(0, 3) ? (a[3] || db.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && db.error(a[0]), a 337 | }, PSEUDO: function (a) { 338 | var b, c = !a[5] && a[2]; 339 | return V.CHILD.test(a[0]) ? null : (a[3] && void 0 !== a[4] ? a[2] = a[4] : c && T.test(c) && (b = ob(c, !0)) && (b = c.indexOf(")", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3)) 340 | }}, filter: {TAG: function (a) { 341 | var b = a.replace(ab, bb).toLowerCase(); 342 | return"*" === a ? function () { 343 | return!0 344 | } : function (a) { 345 | return a.nodeName && a.nodeName.toLowerCase() === b 346 | } 347 | }, CLASS: function (a) { 348 | var b = w[a + " "]; 349 | return b || (b = new RegExp("(^|" + K + ")" + a + "(" + K + "|$)")) && w(a, function (a) { 350 | return b.test("string" == typeof a.className && a.className || typeof a.getAttribute !== A && a.getAttribute("class") || "") 351 | }) 352 | }, ATTR: function (a, b, c) { 353 | return function (d) { 354 | var e = db.attr(d, a); 355 | return null == e ? "!=" === b : b ? (e += "", "=" === b ? e === c : "!=" === b ? e !== c : "^=" === b ? c && 0 === e.indexOf(c) : "*=" === b ? c && e.indexOf(c) > -1 : "$=" === b ? c && e.slice(-c.length) === c : "~=" === b ? (" " + e + " ").indexOf(c) > -1 : "|=" === b ? e === c || e.slice(0, c.length + 1) === c + "-" : !1) : !0 356 | } 357 | }, CHILD: function (a, b, c, d, e) { 358 | var f = "nth" !== a.slice(0, 3), g = "last" !== a.slice(-4), h = "of-type" === b; 359 | return 1 === d && 0 === e ? function (a) { 360 | return!!a.parentNode 361 | } : function (b, c, i) { 362 | var j, k, l, m, n, o, p = f !== g ? "nextSibling" : "previousSibling", q = b.parentNode, r = h && b.nodeName.toLowerCase(), t = !i && !h; 363 | if (q) { 364 | if (f) { 365 | while (p) { 366 | l = b; 367 | while (l = l[p])if (h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType)return!1; 368 | o = p = "only" === a && !o && "nextSibling" 369 | } 370 | return!0 371 | } 372 | if (o = [g ? q.firstChild : q.lastChild], g && t) { 373 | k = q[s] || (q[s] = {}), j = k[a] || [], n = j[0] === u && j[1], m = j[0] === u && j[2], l = n && q.childNodes[n]; 374 | while (l = ++n && l && l[p] || (m = n = 0) || o.pop())if (1 === l.nodeType && ++m && l === b) { 375 | k[a] = [u, n, m]; 376 | break 377 | } 378 | } else if (t && (j = (b[s] || (b[s] = {}))[a]) && j[0] === u)m = j[1]; else while (l = ++n && l && l[p] || (m = n = 0) || o.pop())if ((h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) && ++m && (t && ((l[s] || (l[s] = {}))[a] = [u, m]), l === b))break; 379 | return m -= e, m === d || m % d === 0 && m / d >= 0 380 | } 381 | } 382 | }, PSEUDO: function (a, b) { 383 | var c, e = d.pseudos[a] || d.setFilters[a.toLowerCase()] || db.error("unsupported pseudo: " + a); 384 | return e[s] ? e(b) : e.length > 1 ? (c = [a, a, "", b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? fb(function (a, c) { 385 | var d, f = e(a, b), g = f.length; 386 | while (g--)d = I.call(a, f[g]), a[d] = !(c[d] = f[g]) 387 | }) : function (a) { 388 | return e(a, 0, c) 389 | }) : e 390 | }}, pseudos: {not: fb(function (a) { 391 | var b = [], c = [], d = g(a.replace(P, "$1")); 392 | return d[s] ? fb(function (a, b, c, e) { 393 | var f, g = d(a, null, e, []), h = a.length; 394 | while (h--)(f = g[h]) && (a[h] = !(b[h] = f)) 395 | }) : function (a, e, f) { 396 | return b[0] = a, d(b, null, f, c), !c.pop() 397 | } 398 | }), has: fb(function (a) { 399 | return function (b) { 400 | return db(a, b).length > 0 401 | } 402 | }), contains: fb(function (a) { 403 | return function (b) { 404 | return(b.textContent || b.innerText || e(b)).indexOf(a) > -1 405 | } 406 | }), lang: fb(function (a) { 407 | return U.test(a || "") || db.error("unsupported lang: " + a), a = a.replace(ab, bb).toLowerCase(), function (b) { 408 | var c; 409 | do if (c = n ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang"))return c = c.toLowerCase(), c === a || 0 === c.indexOf(a + "-"); while ((b = b.parentNode) && 1 === b.nodeType); 410 | return!1 411 | } 412 | }), target: function (b) { 413 | var c = a.location && a.location.hash; 414 | return c && c.slice(1) === b.id 415 | }, root: function (a) { 416 | return a === m 417 | }, focus: function (a) { 418 | return a === l.activeElement && (!l.hasFocus || l.hasFocus()) && !!(a.type || a.href || ~a.tabIndex) 419 | }, enabled: function (a) { 420 | return a.disabled === !1 421 | }, disabled: function (a) { 422 | return a.disabled === !0 423 | }, checked: function (a) { 424 | var b = a.nodeName.toLowerCase(); 425 | return"input" === b && !!a.checked || "option" === b && !!a.selected 426 | }, selected: function (a) { 427 | return a.parentNode && a.parentNode.selectedIndex, a.selected === !0 428 | }, empty: function (a) { 429 | for (a = a.firstChild; a; a = a.nextSibling)if (a.nodeType < 6)return!1; 430 | return!0 431 | }, parent: function (a) { 432 | return!d.pseudos.empty(a) 433 | }, header: function (a) { 434 | return X.test(a.nodeName) 435 | }, input: function (a) { 436 | return W.test(a.nodeName) 437 | }, button: function (a) { 438 | var b = a.nodeName.toLowerCase(); 439 | return"input" === b && "button" === a.type || "button" === b 440 | }, text: function (a) { 441 | var b; 442 | return"input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || "text" === b.toLowerCase()) 443 | }, first: lb(function () { 444 | return[0] 445 | }), last: lb(function (a, b) { 446 | return[b - 1] 447 | }), eq: lb(function (a, b, c) { 448 | return[0 > c ? c + b : c] 449 | }), even: lb(function (a, b) { 450 | for (var c = 0; b > c; c += 2)a.push(c); 451 | return a 452 | }), odd: lb(function (a, b) { 453 | for (var c = 1; b > c; c += 2)a.push(c); 454 | return a 455 | }), lt: lb(function (a, b, c) { 456 | for (var d = 0 > c ? c + b : c; --d >= 0;)a.push(d); 457 | return a 458 | }), gt: lb(function (a, b, c) { 459 | for (var d = 0 > c ? c + b : c; ++d < b;)a.push(d); 460 | return a 461 | })}}, d.pseudos.nth = d.pseudos.eq; 462 | for (b in{radio: !0, checkbox: !0, file: !0, password: !0, image: !0})d.pseudos[b] = jb(b); 463 | for (b in{submit: !0, reset: !0})d.pseudos[b] = kb(b); 464 | function nb() { 465 | } 466 | 467 | nb.prototype = d.filters = d.pseudos, d.setFilters = new nb; 468 | function ob(a, b) { 469 | var c, e, f, g, h, i, j, k = x[a + " "]; 470 | if (k)return b ? 0 : k.slice(0); 471 | h = a, i = [], j = d.preFilter; 472 | while (h) { 473 | (!c || (e = Q.exec(h))) && (e && (h = h.slice(e[0].length) || h), i.push(f = [])), c = !1, (e = R.exec(h)) && (c = e.shift(), f.push({value: c, type: e[0].replace(P, " ")}), h = h.slice(c.length)); 474 | for (g in d.filter)!(e = V[g].exec(h)) || j[g] && !(e = j[g](e)) || (c = e.shift(), f.push({value: c, type: g, matches: e}), h = h.slice(c.length)); 475 | if (!c)break 476 | } 477 | return b ? h.length : h ? db.error(a) : x(a, i).slice(0) 478 | } 479 | 480 | function pb(a) { 481 | for (var b = 0, c = a.length, d = ""; c > b; b++)d += a[b].value; 482 | return d 483 | } 484 | 485 | function qb(a, b, c) { 486 | var d = b.dir, e = c && "parentNode" === d, f = v++; 487 | return b.first ? function (b, c, f) { 488 | while (b = b[d])if (1 === b.nodeType || e)return a(b, c, f) 489 | } : function (b, c, g) { 490 | var h, i, j = [u, f]; 491 | if (g) { 492 | while (b = b[d])if ((1 === b.nodeType || e) && a(b, c, g))return!0 493 | } else while (b = b[d])if (1 === b.nodeType || e) { 494 | if (i = b[s] || (b[s] = {}), (h = i[d]) && h[0] === u && h[1] === f)return j[2] = h[2]; 495 | if (i[d] = j, j[2] = a(b, c, g))return!0 496 | } 497 | } 498 | } 499 | 500 | function rb(a) { 501 | return a.length > 1 ? function (b, c, d) { 502 | var e = a.length; 503 | while (e--)if (!a[e](b, c, d))return!1; 504 | return!0 505 | } : a[0] 506 | } 507 | 508 | function sb(a, b, c, d, e) { 509 | 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)); 510 | return g 511 | } 512 | 513 | function tb(a, b, c, d, e, f) { 514 | return d && !d[s] && (d = tb(d)), e && !e[s] && (e = tb(e, f)), fb(function (f, g, h, i) { 515 | var j, k, l, m = [], n = [], o = g.length, p = f || wb(b || "*", h.nodeType ? [h] : h, []), q = !a || !f && b ? p : sb(p, m, a, h, i), r = c ? e || (f ? a : o || d) ? [] : g : q; 516 | if (c && c(q, r, h, i), d) { 517 | j = sb(r, n), d(j, [], h, i), k = j.length; 518 | while (k--)(l = j[k]) && (r[n[k]] = !(q[n[k]] = l)) 519 | } 520 | if (f) { 521 | if (e || a) { 522 | if (e) { 523 | j = [], k = r.length; 524 | while (k--)(l = r[k]) && j.push(q[k] = l); 525 | e(null, r = [], j, i) 526 | } 527 | k = r.length; 528 | while (k--)(l = r[k]) && (j = e ? I.call(f, l) : m[k]) > -1 && (f[j] = !(g[j] = l)) 529 | } 530 | } else r = sb(r === g ? r.splice(o, r.length) : r), e ? e(null, g, r, i) : G.apply(g, r) 531 | }) 532 | } 533 | 534 | function ub(a) { 535 | for (var b, c, e, f = a.length, g = d.relative[a[0].type], i = g || d.relative[" "], j = g ? 1 : 0, k = qb(function (a) { 536 | return a === b 537 | }, i, !0), l = qb(function (a) { 538 | return I.call(b, a) > -1 539 | }, i, !0), m = [function (a, c, d) { 540 | return!g && (d || c !== h) || ((b = c).nodeType ? k(a, c, d) : l(a, c, d)) 541 | }]; f > j; j++)if (c = d.relative[a[j].type])m = [qb(rb(m), c)]; else { 542 | if (c = d.filter[a[j].type].apply(null, a[j].matches), c[s]) { 543 | for (e = ++j; f > e; e++)if (d.relative[a[e].type])break; 544 | return tb(j > 1 && rb(m), j > 1 && pb(a.slice(0, j - 1).concat({value: " " === a[j - 2].type ? "*" : ""})).replace(P, "$1"), c, e > j && ub(a.slice(j, e)), f > e && ub(a = a.slice(e)), f > e && pb(a)) 545 | } 546 | m.push(c) 547 | } 548 | return rb(m) 549 | } 550 | 551 | function vb(a, b) { 552 | var c = b.length > 0, e = a.length > 0, f = function (f, g, i, j, k) { 553 | var m, n, o, p = 0, q = "0", r = f && [], s = [], t = h, v = f || e && d.find.TAG("*", k), w = u += null == t ? 1 : Math.random() || .1, x = v.length; 554 | for (k && (h = g !== l && g); q !== x && null != (m = v[q]); q++) { 555 | if (e && m) { 556 | n = 0; 557 | while (o = a[n++])if (o(m, g, i)) { 558 | j.push(m); 559 | break 560 | } 561 | k && (u = w) 562 | } 563 | c && ((m = !o && m) && p--, f && r.push(m)) 564 | } 565 | if (p += q, c && q !== p) { 566 | n = 0; 567 | while (o = b[n++])o(r, s, g, i); 568 | if (f) { 569 | if (p > 0)while (q--)r[q] || s[q] || (s[q] = E.call(j)); 570 | s = sb(s) 571 | } 572 | G.apply(j, s), k && !f && s.length > 0 && p + b.length > 1 && db.uniqueSort(j) 573 | } 574 | return k && (u = w, h = t), r 575 | }; 576 | return c ? fb(f) : f 577 | } 578 | 579 | g = db.compile = function (a, b) { 580 | var c, d = [], e = [], f = y[a + " "]; 581 | if (!f) { 582 | b || (b = ob(a)), c = b.length; 583 | while (c--)f = ub(b[c]), f[s] ? d.push(f) : e.push(f); 584 | f = y(a, vb(e, d)) 585 | } 586 | return f 587 | }; 588 | function wb(a, b, c) { 589 | for (var d = 0, e = b.length; e > d; d++)db(a, b[d], c); 590 | return c 591 | } 592 | 593 | function xb(a, b, e, f) { 594 | var h, i, j, k, l, m = ob(a); 595 | if (!f && 1 === m.length) { 596 | if (i = m[0] = m[0].slice(0), i.length > 2 && "ID" === (j = i[0]).type && c.getById && 9 === b.nodeType && n && d.relative[i[1].type]) { 597 | if (b = (d.find.ID(j.matches[0].replace(ab, bb), b) || [])[0], !b)return e; 598 | a = a.slice(i.shift().value.length) 599 | } 600 | h = V.needsContext.test(a) ? 0 : i.length; 601 | while (h--) { 602 | if (j = i[h], d.relative[k = j.type])break; 603 | if ((l = d.find[k]) && (f = l(j.matches[0].replace(ab, bb), $.test(i[0].type) && mb(b.parentNode) || b))) { 604 | if (i.splice(h, 1), a = f.length && pb(i), !a)return G.apply(e, f), e; 605 | break 606 | } 607 | } 608 | } 609 | return g(a, m)(f, b, !n, e, $.test(a) && mb(b.parentNode) || b), e 610 | } 611 | 612 | return c.sortStable = s.split("").sort(z).join("") === s, c.detectDuplicates = !!j, k(), c.sortDetached = gb(function (a) { 613 | return 1 & a.compareDocumentPosition(l.createElement("div")) 614 | }), gb(function (a) { 615 | return a.innerHTML = "", "#" === a.firstChild.getAttribute("href") 616 | }) || hb("type|href|height|width", function (a, b, c) { 617 | return c ? void 0 : a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2) 618 | }), c.attributes && gb(function (a) { 619 | return a.innerHTML = "", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value") 620 | }) || hb("value", function (a, b, c) { 621 | return c || "input" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue 622 | }), gb(function (a) { 623 | return null == a.getAttribute("disabled") 624 | }) || hb(J, function (a, b, c) { 625 | var d; 626 | return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null 627 | }), db 628 | }(a); 629 | o.find = t, o.expr = t.selectors, o.expr[":"] = o.expr.pseudos, o.unique = t.uniqueSort, o.text = t.getText, o.isXMLDoc = t.isXML, o.contains = t.contains; 630 | var u = o.expr.match.needsContext, v = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, w = /^.[^:#\[\.,]*$/; 631 | 632 | function x(a, b, c) { 633 | if (o.isFunction(b))return o.grep(a, function (a, d) { 634 | return!!b.call(a, d, a) !== c 635 | }); 636 | if (b.nodeType)return o.grep(a, function (a) { 637 | return a === b !== c 638 | }); 639 | if ("string" == typeof b) { 640 | if (w.test(b))return o.filter(b, a, c); 641 | b = o.filter(b, a) 642 | } 643 | return o.grep(a, function (a) { 644 | return g.call(b, a) >= 0 !== c 645 | }) 646 | } 647 | 648 | o.filter = function (a, b, c) { 649 | var d = b[0]; 650 | return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? o.find.matchesSelector(d, a) ? [d] : [] : o.find.matches(a, o.grep(b, function (a) { 651 | return 1 === a.nodeType 652 | })) 653 | }, o.fn.extend({find: function (a) { 654 | var b, c = this.length, d = [], e = this; 655 | if ("string" != typeof a)return this.pushStack(o(a).filter(function () { 656 | for (b = 0; c > b; b++)if (o.contains(e[b], this))return!0 657 | })); 658 | for (b = 0; c > b; b++)o.find(a, e[b], d); 659 | return d = this.pushStack(c > 1 ? o.unique(d) : d), d.selector = this.selector ? this.selector + " " + a : a, d 660 | }, filter: function (a) { 661 | return this.pushStack(x(this, a || [], !1)) 662 | }, not: function (a) { 663 | return this.pushStack(x(this, a || [], !0)) 664 | }, is: function (a) { 665 | return!!x(this, "string" == typeof a && u.test(a) ? o(a) : a || [], !1).length 666 | }}); 667 | var y, z = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, A = o.fn.init = function (a, b) { 668 | var c, d; 669 | if (!a)return this; 670 | if ("string" == typeof a) { 671 | if (c = "<" === a[0] && ">" === a[a.length - 1] && a.length >= 3 ? [null, a, null] : z.exec(a), !c || !c[1] && b)return!b || b.jquery ? (b || y).find(a) : this.constructor(b).find(a); 672 | if (c[1]) { 673 | if (b = b instanceof o ? b[0] : b, o.merge(this, o.parseHTML(c[1], b && b.nodeType ? b.ownerDocument || b : m, !0)), v.test(c[1]) && o.isPlainObject(b))for (c in b)o.isFunction(this[c]) ? this[c](b[c]) : this.attr(c, b[c]); 674 | return this 675 | } 676 | return d = m.getElementById(c[2]), d && d.parentNode && (this.length = 1, this[0] = d), this.context = m, this.selector = a, this 677 | } 678 | return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : o.isFunction(a) ? "undefined" != typeof y.ready ? y.ready(a) : a(o) : (void 0 !== a.selector && (this.selector = a.selector, this.context = a.context), o.makeArray(a, this)) 679 | }; 680 | A.prototype = o.fn, y = o(m); 681 | var B = /^(?:parents|prev(?:Until|All))/, C = {children: !0, contents: !0, next: !0, prev: !0}; 682 | o.extend({dir: function (a, b, c) { 683 | var d = [], e = void 0 !== c; 684 | while ((a = a[b]) && 9 !== a.nodeType)if (1 === a.nodeType) { 685 | if (e && o(a).is(c))break; 686 | d.push(a) 687 | } 688 | return d 689 | }, sibling: function (a, b) { 690 | for (var c = []; a; a = a.nextSibling)1 === a.nodeType && a !== b && c.push(a); 691 | return c 692 | }}), o.fn.extend({has: function (a) { 693 | var b = o(a, this), c = b.length; 694 | return this.filter(function () { 695 | for (var a = 0; c > a; a++)if (o.contains(this, b[a]))return!0 696 | }) 697 | }, closest: function (a, b) { 698 | for (var c, d = 0, e = this.length, f = [], g = u.test(a) || "string" != typeof a ? o(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 && o.find.matchesSelector(c, a))) { 699 | f.push(c); 700 | break 701 | } 702 | return this.pushStack(f.length > 1 ? o.unique(f) : f) 703 | }, index: function (a) { 704 | return a ? "string" == typeof a ? g.call(o(a), this[0]) : g.call(this, a.jquery ? a[0] : a) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 705 | }, add: function (a, b) { 706 | return this.pushStack(o.unique(o.merge(this.get(), o(a, b)))) 707 | }, addBack: function (a) { 708 | return this.add(null == a ? this.prevObject : this.prevObject.filter(a)) 709 | }}); 710 | function D(a, b) { 711 | while ((a = a[b]) && 1 !== a.nodeType); 712 | return a 713 | } 714 | 715 | o.each({parent: function (a) { 716 | var b = a.parentNode; 717 | return b && 11 !== b.nodeType ? b : null 718 | }, parents: function (a) { 719 | return o.dir(a, "parentNode") 720 | }, parentsUntil: function (a, b, c) { 721 | return o.dir(a, "parentNode", c) 722 | }, next: function (a) { 723 | return D(a, "nextSibling") 724 | }, prev: function (a) { 725 | return D(a, "previousSibling") 726 | }, nextAll: function (a) { 727 | return o.dir(a, "nextSibling") 728 | }, prevAll: function (a) { 729 | return o.dir(a, "previousSibling") 730 | }, nextUntil: function (a, b, c) { 731 | return o.dir(a, "nextSibling", c) 732 | }, prevUntil: function (a, b, c) { 733 | return o.dir(a, "previousSibling", c) 734 | }, siblings: function (a) { 735 | return o.sibling((a.parentNode || {}).firstChild, a) 736 | }, children: function (a) { 737 | return o.sibling(a.firstChild) 738 | }, contents: function (a) { 739 | return a.contentDocument || o.merge([], a.childNodes) 740 | }}, function (a, b) { 741 | o.fn[a] = function (c, d) { 742 | var e = o.map(this, b, c); 743 | return"Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = o.filter(d, e)), this.length > 1 && (C[a] || o.unique(e), B.test(a) && e.reverse()), this.pushStack(e) 744 | } 745 | }); 746 | var E = /\S+/g, F = {}; 747 | 748 | function G(a) { 749 | var b = F[a] = {}; 750 | return o.each(a.match(E) || [], function (a, c) { 751 | b[c] = !0 752 | }), b 753 | } 754 | 755 | o.Callbacks = function (a) { 756 | a = "string" == typeof a ? F[a] || G(a) : o.extend({}, a); 757 | var b, c, d, e, f, g, h = [], i = !a.once && [], j = function (l) { 758 | for (b = a.memory && l, c = !0, g = e || 0, e = 0, f = h.length, d = !0; h && f > g; g++)if (h[g].apply(l[0], l[1]) === !1 && a.stopOnFalse) { 759 | b = !1; 760 | break 761 | } 762 | d = !1, h && (i ? i.length && j(i.shift()) : b ? h = [] : k.disable()) 763 | }, k = {add: function () { 764 | if (h) { 765 | var c = h.length; 766 | !function g(b) { 767 | o.each(b, function (b, c) { 768 | var d = o.type(c); 769 | "function" === d ? a.unique && k.has(c) || h.push(c) : c && c.length && "string" !== d && g(c) 770 | }) 771 | }(arguments), d ? f = h.length : b && (e = c, j(b)) 772 | } 773 | return this 774 | }, remove: function () { 775 | return h && o.each(arguments, function (a, b) { 776 | var c; 777 | while ((c = o.inArray(b, h, c)) > -1)h.splice(c, 1), d && (f >= c && f--, g >= c && g--) 778 | }), this 779 | }, has: function (a) { 780 | return a ? o.inArray(a, h) > -1 : !(!h || !h.length) 781 | }, empty: function () { 782 | return h = [], f = 0, this 783 | }, disable: function () { 784 | return h = i = b = void 0, this 785 | }, disabled: function () { 786 | return!h 787 | }, lock: function () { 788 | return i = void 0, b || k.disable(), this 789 | }, locked: function () { 790 | return!i 791 | }, fireWith: function (a, b) { 792 | return!h || c && !i || (b = b || [], b = [a, b.slice ? b.slice() : b], d ? i.push(b) : j(b)), this 793 | }, fire: function () { 794 | return k.fireWith(this, arguments), this 795 | }, fired: function () { 796 | return!!c 797 | }}; 798 | return k 799 | }, o.extend({Deferred: function (a) { 800 | var b = [ 801 | ["resolve", "done", o.Callbacks("once memory"), "resolved"], 802 | ["reject", "fail", o.Callbacks("once memory"), "rejected"], 803 | ["notify", "progress", o.Callbacks("memory")] 804 | ], c = "pending", d = {state: function () { 805 | return c 806 | }, always: function () { 807 | return e.done(arguments).fail(arguments), this 808 | }, then: function () { 809 | var a = arguments; 810 | return o.Deferred(function (c) { 811 | o.each(b, function (b, f) { 812 | var g = o.isFunction(a[b]) && a[b]; 813 | e[f[1]](function () { 814 | var a = g && g.apply(this, arguments); 815 | a && o.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) 816 | }) 817 | }), a = null 818 | }).promise() 819 | }, promise: function (a) { 820 | return null != a ? o.extend(a, d) : d 821 | }}, e = {}; 822 | return d.pipe = d.then, o.each(b, function (a, f) { 823 | var g = f[2], h = f[3]; 824 | d[f[1]] = g.add, h && g.add(function () { 825 | c = h 826 | }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function () { 827 | return e[f[0] + "With"](this === e ? d : this, arguments), this 828 | }, e[f[0] + "With"] = g.fireWith 829 | }), d.promise(e), a && a.call(e, e), e 830 | }, when: function (a) { 831 | var b = 0, c = d.call(arguments), e = c.length, f = 1 !== e || a && o.isFunction(a.promise) ? e : 0, g = 1 === f ? a : o.Deferred(), h = function (a, b, c) { 832 | return function (e) { 833 | b[a] = this, c[a] = arguments.length > 1 ? d.call(arguments) : e, c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c) 834 | } 835 | }, i, j, k; 836 | if (e > 1)for (i = new Array(e), j = new Array(e), k = new Array(e); e > b; b++)c[b] && o.isFunction(c[b].promise) ? c[b].promise().done(h(b, k, c)).fail(g.reject).progress(h(b, j, i)) : --f; 837 | return f || g.resolveWith(k, c), g.promise() 838 | }}); 839 | var H; 840 | o.fn.ready = function (a) { 841 | return o.ready.promise().done(a), this 842 | }, o.extend({isReady: !1, readyWait: 1, holdReady: function (a) { 843 | a ? o.readyWait++ : o.ready(!0) 844 | }, ready: function (a) { 845 | (a === !0 ? --o.readyWait : o.isReady) || (o.isReady = !0, a !== !0 && --o.readyWait > 0 || (H.resolveWith(m, [o]), o.fn.trigger && o(m).trigger("ready").off("ready"))) 846 | }}); 847 | function I() { 848 | m.removeEventListener("DOMContentLoaded", I, !1), a.removeEventListener("load", I, !1), o.ready() 849 | } 850 | 851 | o.ready.promise = function (b) { 852 | return H || (H = o.Deferred(), "complete" === m.readyState ? setTimeout(o.ready) : (m.addEventListener("DOMContentLoaded", I, !1), a.addEventListener("load", I, !1))), H.promise(b) 853 | }, o.ready.promise(); 854 | var J = o.access = function (a, b, c, d, e, f, g) { 855 | var h = 0, i = a.length, j = null == c; 856 | if ("object" === o.type(c)) { 857 | e = !0; 858 | for (h in c)o.access(a, b, h, c[h], !0, f, g) 859 | } else if (void 0 !== d && (e = !0, o.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function (a, b, c) { 860 | return j.call(o(a), c) 861 | })), b))for (; i > h; h++)b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c))); 862 | return e ? a : j ? b.call(a) : i ? b(a[0], c) : f 863 | }; 864 | o.acceptData = function (a) { 865 | return 1 === a.nodeType || 9 === a.nodeType || !+a.nodeType 866 | }; 867 | function K() { 868 | Object.defineProperty(this.cache = {}, 0, {get: function () { 869 | return{} 870 | }}), this.expando = o.expando + Math.random() 871 | } 872 | 873 | K.uid = 1, K.accepts = o.acceptData, K.prototype = {key: function (a) { 874 | if (!K.accepts(a))return 0; 875 | var b = {}, c = a[this.expando]; 876 | if (!c) { 877 | c = K.uid++; 878 | try { 879 | b[this.expando] = {value: c}, Object.defineProperties(a, b) 880 | } catch (d) { 881 | b[this.expando] = c, o.extend(a, b) 882 | } 883 | } 884 | return this.cache[c] || (this.cache[c] = {}), c 885 | }, set: function (a, b, c) { 886 | var d, e = this.key(a), f = this.cache[e]; 887 | if ("string" == typeof b)f[b] = c; else if (o.isEmptyObject(f))o.extend(this.cache[e], b); else for (d in b)f[d] = b[d]; 888 | return f 889 | }, get: function (a, b) { 890 | var c = this.cache[this.key(a)]; 891 | return void 0 === b ? c : c[b] 892 | }, access: function (a, b, c) { 893 | var d; 894 | return void 0 === b || b && "string" == typeof b && void 0 === c ? (d = this.get(a, b), void 0 !== d ? d : this.get(a, o.camelCase(b))) : (this.set(a, b, c), void 0 !== c ? c : b) 895 | }, remove: function (a, b) { 896 | var c, d, e, f = this.key(a), g = this.cache[f]; 897 | if (void 0 === b)this.cache[f] = {}; else { 898 | o.isArray(b) ? d = b.concat(b.map(o.camelCase)) : (e = o.camelCase(b), b in g ? d = [b, e] : (d = e, d = d in g ? [d] : d.match(E) || [])), c = d.length; 899 | while (c--)delete g[d[c]] 900 | } 901 | }, hasData: function (a) { 902 | return!o.isEmptyObject(this.cache[a[this.expando]] || {}) 903 | }, discard: function (a) { 904 | a[this.expando] && delete this.cache[a[this.expando]] 905 | }}; 906 | var L = new K, M = new K, N = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, O = /([A-Z])/g; 907 | 908 | function P(a, b, c) { 909 | var d; 910 | if (void 0 === c && 1 === a.nodeType)if (d = "data-" + b.replace(O, "-$1").toLowerCase(), c = a.getAttribute(d), "string" == typeof c) { 911 | try { 912 | c = "true" === c ? !0 : "false" === c ? !1 : "null" === c ? null : +c + "" === c ? +c : N.test(c) ? o.parseJSON(c) : c 913 | } catch (e) { 914 | } 915 | M.set(a, b, c) 916 | } else c = void 0; 917 | return c 918 | } 919 | 920 | o.extend({hasData: function (a) { 921 | return M.hasData(a) || L.hasData(a) 922 | }, data: function (a, b, c) { 923 | return M.access(a, b, c) 924 | }, removeData: function (a, b) { 925 | M.remove(a, b) 926 | }, _data: function (a, b, c) { 927 | return L.access(a, b, c) 928 | }, _removeData: function (a, b) { 929 | L.remove(a, b) 930 | }}), o.fn.extend({data: function (a, b) { 931 | var c, d, e, f = this[0], g = f && f.attributes; 932 | if (void 0 === a) { 933 | if (this.length && (e = M.get(f), 1 === f.nodeType && !L.get(f, "hasDataAttrs"))) { 934 | c = g.length; 935 | while (c--)d = g[c].name, 0 === d.indexOf("data-") && (d = o.camelCase(d.slice(5)), P(f, d, e[d])); 936 | L.set(f, "hasDataAttrs", !0) 937 | } 938 | return e 939 | } 940 | return"object" == typeof a ? this.each(function () { 941 | M.set(this, a) 942 | }) : J(this, function (b) { 943 | var c, d = o.camelCase(a); 944 | if (f && void 0 === b) { 945 | if (c = M.get(f, a), void 0 !== c)return c; 946 | if (c = M.get(f, d), void 0 !== c)return c; 947 | if (c = P(f, d, void 0), void 0 !== c)return c 948 | } else this.each(function () { 949 | var c = M.get(this, d); 950 | M.set(this, d, b), -1 !== a.indexOf("-") && void 0 !== c && M.set(this, a, b) 951 | }) 952 | }, null, b, arguments.length > 1, null, !0) 953 | }, removeData: function (a) { 954 | return this.each(function () { 955 | M.remove(this, a) 956 | }) 957 | }}), o.extend({queue: function (a, b, c) { 958 | var d; 959 | return a ? (b = (b || "fx") + "queue", d = L.get(a, b), c && (!d || o.isArray(c) ? d = L.access(a, b, o.makeArray(c)) : d.push(c)), d || []) : void 0 960 | }, dequeue: function (a, b) { 961 | b = b || "fx"; 962 | var c = o.queue(a, b), d = c.length, e = c.shift(), f = o._queueHooks(a, b), g = function () { 963 | o.dequeue(a, b) 964 | }; 965 | "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() 966 | }, _queueHooks: function (a, b) { 967 | var c = b + "queueHooks"; 968 | return L.get(a, c) || L.access(a, c, {empty: o.Callbacks("once memory").add(function () { 969 | L.remove(a, [b + "queue", c]) 970 | })}) 971 | }}), o.fn.extend({queue: function (a, b) { 972 | var c = 2; 973 | return"string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? o.queue(this[0], a) : void 0 === b ? this : this.each(function () { 974 | var c = o.queue(this, a, b); 975 | o._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && o.dequeue(this, a) 976 | }) 977 | }, dequeue: function (a) { 978 | return this.each(function () { 979 | o.dequeue(this, a) 980 | }) 981 | }, clearQueue: function (a) { 982 | return this.queue(a || "fx", []) 983 | }, promise: function (a, b) { 984 | var c, d = 1, e = o.Deferred(), f = this, g = this.length, h = function () { 985 | --d || e.resolveWith(f, [f]) 986 | }; 987 | "string" != typeof a && (b = a, a = void 0), a = a || "fx"; 988 | while (g--)c = L.get(f[g], a + "queueHooks"), c && c.empty && (d++, c.empty.add(h)); 989 | return h(), e.promise(b) 990 | }}); 991 | var Q = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, R = ["Top", "Right", "Bottom", "Left"], S = function (a, b) { 992 | return a = b || a, "none" === o.css(a, "display") || !o.contains(a.ownerDocument, a) 993 | }, T = /^(?:checkbox|radio)$/i; 994 | !function () { 995 | var a = m.createDocumentFragment(), b = a.appendChild(m.createElement("div")); 996 | b.innerHTML = "", l.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked, b.innerHTML = "", l.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue 997 | }(); 998 | var U = "undefined"; 999 | l.focusinBubbles = "onfocusin"in a; 1000 | var V = /^key/, W = /^(?:mouse|contextmenu)|click/, X = /^(?:focusinfocus|focusoutblur)$/, Y = /^([^.]*)(?:\.(.+)|)$/; 1001 | 1002 | function Z() { 1003 | return!0 1004 | } 1005 | 1006 | function $() { 1007 | return!1 1008 | } 1009 | 1010 | function _() { 1011 | try { 1012 | return m.activeElement 1013 | } catch (a) { 1014 | } 1015 | } 1016 | 1017 | o.event = {global: {}, add: function (a, b, c, d, e) { 1018 | var f, g, h, i, j, k, l, m, n, p, q, r = L.get(a); 1019 | if (r) { 1020 | c.handler && (f = c, c = f.handler, e = f.selector), c.guid || (c.guid = o.guid++), (i = r.events) || (i = r.events = {}), (g = r.handle) || (g = r.handle = function (b) { 1021 | return typeof o !== U && o.event.triggered !== b.type ? o.event.dispatch.apply(a, arguments) : void 0 1022 | }), b = (b || "").match(E) || [""], j = b.length; 1023 | while (j--)h = Y.exec(b[j]) || [], n = q = h[1], p = (h[2] || "").split(".").sort(), n && (l = o.event.special[n] || {}, n = (e ? l.delegateType : l.bindType) || n, l = o.event.special[n] || {}, k = o.extend({type: n, origType: q, data: d, handler: c, guid: c.guid, selector: e, needsContext: e && o.expr.match.needsContext.test(e), namespace: p.join(".")}, f), (m = i[n]) || (m = i[n] = [], m.delegateCount = 0, l.setup && l.setup.call(a, d, p, 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), o.event.global[n] = !0) 1024 | } 1025 | }, remove: function (a, b, c, d, e) { 1026 | var f, g, h, i, j, k, l, m, n, p, q, r = L.hasData(a) && L.get(a); 1027 | if (r && (i = r.events)) { 1028 | b = (b || "").match(E) || [""], j = b.length; 1029 | while (j--)if (h = Y.exec(b[j]) || [], n = q = h[1], p = (h[2] || "").split(".").sort(), n) { 1030 | l = o.event.special[n] || {}, n = (d ? l.delegateType : l.bindType) || n, m = i[n] || [], h = h[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), g = f = m.length; 1031 | while (f--)k = m[f], !e && q !== 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)); 1032 | g && !m.length && (l.teardown && l.teardown.call(a, p, r.handle) !== !1 || o.removeEvent(a, n, r.handle), delete i[n]) 1033 | } else for (n in i)o.event.remove(a, n + b[j], c, d, !0); 1034 | o.isEmptyObject(i) && (delete r.handle, L.remove(a, "events")) 1035 | } 1036 | }, trigger: function (b, c, d, e) { 1037 | var f, g, h, i, k, l, n, p = [d || m], q = j.call(b, "type") ? b.type : b, r = j.call(b, "namespace") ? b.namespace.split(".") : []; 1038 | if (g = h = d = d || m, 3 !== d.nodeType && 8 !== d.nodeType && !X.test(q + o.event.triggered) && (q.indexOf(".") >= 0 && (r = q.split("."), q = r.shift(), r.sort()), k = q.indexOf(":") < 0 && "on" + q, b = b[o.expando] ? b : new o.Event(q, "object" == typeof b && b), b.isTrigger = e ? 2 : 3, b.namespace = r.join("."), b.namespace_re = b.namespace ? new RegExp("(^|\\.)" + r.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = d), c = null == c ? [b] : o.makeArray(c, [b]), n = o.event.special[q] || {}, e || !n.trigger || n.trigger.apply(d, c) !== !1)) { 1039 | if (!e && !n.noBubble && !o.isWindow(d)) { 1040 | for (i = n.delegateType || q, X.test(i + q) || (g = g.parentNode); g; g = g.parentNode)p.push(g), h = g; 1041 | h === (d.ownerDocument || m) && p.push(h.defaultView || h.parentWindow || a) 1042 | } 1043 | f = 0; 1044 | while ((g = p[f++]) && !b.isPropagationStopped())b.type = f > 1 ? i : n.bindType || q, l = (L.get(g, "events") || {})[b.type] && L.get(g, "handle"), l && l.apply(g, c), l = k && g[k], l && l.apply && o.acceptData(g) && (b.result = l.apply(g, c), b.result === !1 && b.preventDefault()); 1045 | return b.type = q, e || b.isDefaultPrevented() || n._default && n._default.apply(p.pop(), c) !== !1 || !o.acceptData(d) || k && o.isFunction(d[q]) && !o.isWindow(d) && (h = d[k], h && (d[k] = null), o.event.triggered = q, d[q](), o.event.triggered = void 0, h && (d[k] = h)), b.result 1046 | } 1047 | }, dispatch: function (a) { 1048 | a = o.event.fix(a); 1049 | var b, c, e, f, g, h = [], i = d.call(arguments), j = (L.get(this, "events") || {})[a.type] || [], k = o.event.special[a.type] || {}; 1050 | if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) { 1051 | h = o.event.handlers.call(this, a, j), b = 0; 1052 | while ((f = h[b++]) && !a.isPropagationStopped()) { 1053 | a.currentTarget = f.elem, c = 0; 1054 | while ((g = f.handlers[c++]) && !a.isImmediatePropagationStopped())(!a.namespace_re || a.namespace_re.test(g.namespace)) && (a.handleObj = g, a.data = g.data, e = ((o.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, i), void 0 !== e && (a.result = e) === !1 && (a.preventDefault(), a.stopPropagation())) 1055 | } 1056 | return k.postDispatch && k.postDispatch.call(this, a), a.result 1057 | } 1058 | }, handlers: function (a, b) { 1059 | var c, d, e, f, g = [], h = b.delegateCount, i = a.target; 1060 | if (h && i.nodeType && (!a.button || "click" !== a.type))for (; i !== this; i = i.parentNode || this)if (i.disabled !== !0 || "click" !== a.type) { 1061 | for (d = [], c = 0; h > c; c++)f = b[c], e = f.selector + " ", void 0 === d[e] && (d[e] = f.needsContext ? o(e, this).index(i) >= 0 : o.find(e, this, null, [i]).length), d[e] && d.push(f); 1062 | d.length && g.push({elem: i, handlers: d}) 1063 | } 1064 | return h < b.length && g.push({elem: this, handlers: b.slice(h)}), g 1065 | }, props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: {props: "char charCode key keyCode".split(" "), filter: function (a, b) { 1066 | return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a 1067 | }}, mouseHooks: {props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function (a, b) { 1068 | var c, d, e, f = b.button; 1069 | return null == a.pageX && null != b.clientX && (c = a.target.ownerDocument || m, d = c.documentElement, e = c.body, a.pageX = b.clientX + (d && d.scrollLeft || e && e.scrollLeft || 0) - (d && d.clientLeft || e && e.clientLeft || 0), a.pageY = b.clientY + (d && d.scrollTop || e && e.scrollTop || 0) - (d && d.clientTop || e && e.clientTop || 0)), a.which || void 0 === f || (a.which = 1 & f ? 1 : 2 & f ? 3 : 4 & f ? 2 : 0), a 1070 | }}, fix: function (a) { 1071 | if (a[o.expando])return a; 1072 | var b, c, d, e = a.type, f = a, g = this.fixHooks[e]; 1073 | g || (this.fixHooks[e] = g = W.test(e) ? this.mouseHooks : V.test(e) ? this.keyHooks : {}), d = g.props ? this.props.concat(g.props) : this.props, a = new o.Event(f), b = d.length; 1074 | while (b--)c = d[b], a[c] = f[c]; 1075 | return a.target || (a.target = m), 3 === a.target.nodeType && (a.target = a.target.parentNode), g.filter ? g.filter(a, f) : a 1076 | }, special: {load: {noBubble: !0}, focus: {trigger: function () { 1077 | return this !== _() && this.focus ? (this.focus(), !1) : void 0 1078 | }, delegateType: "focusin"}, blur: {trigger: function () { 1079 | return this === _() && this.blur ? (this.blur(), !1) : void 0 1080 | }, delegateType: "focusout"}, click: {trigger: function () { 1081 | return"checkbox" === this.type && this.click && o.nodeName(this, "input") ? (this.click(), !1) : void 0 1082 | }, _default: function (a) { 1083 | return o.nodeName(a.target, "a") 1084 | }}, beforeunload: {postDispatch: function (a) { 1085 | void 0 !== a.result && (a.originalEvent.returnValue = a.result) 1086 | }}}, simulate: function (a, b, c, d) { 1087 | var e = o.extend(new o.Event, c, {type: a, isSimulated: !0, originalEvent: {}}); 1088 | d ? o.event.trigger(e, null, b) : o.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault() 1089 | }}, o.removeEvent = function (a, b, c) { 1090 | a.removeEventListener && a.removeEventListener(b, c, !1) 1091 | }, o.Event = function (a, b) { 1092 | return this instanceof o.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && a.getPreventDefault && a.getPreventDefault() ? Z : $) : this.type = a, b && o.extend(this, b), this.timeStamp = a && a.timeStamp || o.now(), void(this[o.expando] = !0)) : new o.Event(a, b) 1093 | }, o.Event.prototype = {isDefaultPrevented: $, isPropagationStopped: $, isImmediatePropagationStopped: $, preventDefault: function () { 1094 | var a = this.originalEvent; 1095 | this.isDefaultPrevented = Z, a && a.preventDefault && a.preventDefault() 1096 | }, stopPropagation: function () { 1097 | var a = this.originalEvent; 1098 | this.isPropagationStopped = Z, a && a.stopPropagation && a.stopPropagation() 1099 | }, stopImmediatePropagation: function () { 1100 | this.isImmediatePropagationStopped = Z, this.stopPropagation() 1101 | }}, o.each({mouseenter: "mouseover", mouseleave: "mouseout"}, function (a, b) { 1102 | o.event.special[a] = {delegateType: b, bindType: b, handle: function (a) { 1103 | var c, d = this, e = a.relatedTarget, f = a.handleObj; 1104 | return(!e || e !== d && !o.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c 1105 | }} 1106 | }), l.focusinBubbles || o.each({focus: "focusin", blur: "focusout"}, function (a, b) { 1107 | var c = function (a) { 1108 | o.event.simulate(b, a.target, o.event.fix(a), !0) 1109 | }; 1110 | o.event.special[b] = {setup: function () { 1111 | var d = this.ownerDocument || this, e = L.access(d, b); 1112 | e || d.addEventListener(a, c, !0), L.access(d, b, (e || 0) + 1) 1113 | }, teardown: function () { 1114 | var d = this.ownerDocument || this, e = L.access(d, b) - 1; 1115 | e ? L.access(d, b, e) : (d.removeEventListener(a, c, !0), L.remove(d, b)) 1116 | }} 1117 | }), o.fn.extend({on: function (a, b, c, d, e) { 1118 | var f, g; 1119 | if ("object" == typeof a) { 1120 | "string" != typeof b && (c = c || b, b = void 0); 1121 | for (g in a)this.on(g, b, c, a[g], e); 1122 | return this 1123 | } 1124 | if (null == c && null == d ? (d = b, c = b = void 0) : null == d && ("string" == typeof b ? (d = c, c = void 0) : (d = c, c = b, b = void 0)), d === !1)d = $; else if (!d)return this; 1125 | return 1 === e && (f = d, d = function (a) { 1126 | return o().off(a), f.apply(this, arguments) 1127 | }, d.guid = f.guid || (f.guid = o.guid++)), this.each(function () { 1128 | o.event.add(this, a, d, c, b) 1129 | }) 1130 | }, one: function (a, b, c, d) { 1131 | return this.on(a, b, c, d, 1) 1132 | }, off: function (a, b, c) { 1133 | var d, e; 1134 | if (a && a.preventDefault && a.handleObj)return d = a.handleObj, o(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this; 1135 | if ("object" == typeof a) { 1136 | for (e in a)this.off(e, b, a[e]); 1137 | return this 1138 | } 1139 | return(b === !1 || "function" == typeof b) && (c = b, b = void 0), c === !1 && (c = $), this.each(function () { 1140 | o.event.remove(this, a, c, b) 1141 | }) 1142 | }, trigger: function (a, b) { 1143 | return this.each(function () { 1144 | o.event.trigger(a, b, this) 1145 | }) 1146 | }, triggerHandler: function (a, b) { 1147 | var c = this[0]; 1148 | return c ? o.event.trigger(a, b, c, !0) : void 0 1149 | }}); 1150 | var ab = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, bb = /<([\w:]+)/, cb = /<|&#?\w+;/, db = /<(?:script|style|link)/i, eb = /checked\s*(?:[^=]|=\s*.checked.)/i, fb = /^$|\/(?:java|ecma)script/i, gb = /^true\/(.*)/, hb = /^\s*\s*$/g, ib = {option: [1, ""], thead: [1, "", "
"], col: [2, "", "
"], tr: [2, "", "
"], td: [3, "", "
"], _default: [0, "", ""]}; 1151 | ib.optgroup = ib.option, ib.tbody = ib.tfoot = ib.colgroup = ib.caption = ib.thead, ib.th = ib.td; 1152 | function jb(a, b) { 1153 | return o.nodeName(a, "table") && o.nodeName(11 !== b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a 1154 | } 1155 | 1156 | function kb(a) { 1157 | return a.type = (null !== a.getAttribute("type")) + "/" + a.type, a 1158 | } 1159 | 1160 | function lb(a) { 1161 | var b = gb.exec(a.type); 1162 | return b ? a.type = b[1] : a.removeAttribute("type"), a 1163 | } 1164 | 1165 | function mb(a, b) { 1166 | for (var c = 0, d = a.length; d > c; c++)L.set(a[c], "globalEval", !b || L.get(b[c], "globalEval")) 1167 | } 1168 | 1169 | function nb(a, b) { 1170 | var c, d, e, f, g, h, i, j; 1171 | if (1 === b.nodeType) { 1172 | if (L.hasData(a) && (f = L.access(a), g = L.set(b, f), j = f.events)) { 1173 | delete g.handle, g.events = {}; 1174 | for (e in j)for (c = 0, d = j[e].length; d > c; c++)o.event.add(b, e, j[e][c]) 1175 | } 1176 | M.hasData(a) && (h = M.access(a), i = o.extend({}, h), M.set(b, i)) 1177 | } 1178 | } 1179 | 1180 | function ob(a, b) { 1181 | var c = a.getElementsByTagName ? a.getElementsByTagName(b || "*") : a.querySelectorAll ? a.querySelectorAll(b || "*") : []; 1182 | return void 0 === b || b && o.nodeName(a, b) ? o.merge([a], c) : c 1183 | } 1184 | 1185 | function pb(a, b) { 1186 | var c = b.nodeName.toLowerCase(); 1187 | "input" === c && T.test(a.type) ? b.checked = a.checked : ("input" === c || "textarea" === c) && (b.defaultValue = a.defaultValue) 1188 | } 1189 | 1190 | o.extend({clone: function (a, b, c) { 1191 | var d, e, f, g, h = a.cloneNode(!0), i = o.contains(a.ownerDocument, a); 1192 | if (!(l.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || o.isXMLDoc(a)))for (g = ob(h), f = ob(a), d = 0, e = f.length; e > d; d++)pb(f[d], g[d]); 1193 | if (b)if (c)for (f = f || ob(a), g = g || ob(h), d = 0, e = f.length; e > d; d++)nb(f[d], g[d]); else nb(a, h); 1194 | return g = ob(h, "script"), g.length > 0 && mb(g, !i && ob(a, "script")), h 1195 | }, buildFragment: function (a, b, c, d) { 1196 | 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" === o.type(e))o.merge(l, e.nodeType ? [e] : e); else if (cb.test(e)) { 1197 | f = f || k.appendChild(b.createElement("div")), g = (bb.exec(e) || ["", ""])[1].toLowerCase(), h = ib[g] || ib._default, f.innerHTML = h[1] + e.replace(ab, "<$1>") + h[2], j = h[0]; 1198 | while (j--)f = f.lastChild; 1199 | o.merge(l, f.childNodes), f = k.firstChild, f.textContent = "" 1200 | } else l.push(b.createTextNode(e)); 1201 | k.textContent = "", m = 0; 1202 | while (e = l[m++])if ((!d || -1 === o.inArray(e, d)) && (i = o.contains(e.ownerDocument, e), f = ob(k.appendChild(e), "script"), i && mb(f), c)) { 1203 | j = 0; 1204 | while (e = f[j++])fb.test(e.type || "") && c.push(e) 1205 | } 1206 | return k 1207 | }, cleanData: function (a) { 1208 | for (var b, c, d, e, f, g, h = o.event.special, i = 0; void 0 !== (c = a[i]); i++) { 1209 | if (o.acceptData(c) && (f = c[L.expando], f && (b = L.cache[f]))) { 1210 | if (d = Object.keys(b.events || {}), d.length)for (g = 0; void 0 !== (e = d[g]); g++)h[e] ? o.event.remove(c, e) : o.removeEvent(c, e, b.handle); 1211 | L.cache[f] && delete L.cache[f] 1212 | } 1213 | delete M.cache[c[M.expando]] 1214 | } 1215 | }}), o.fn.extend({text: function (a) { 1216 | return J(this, function (a) { 1217 | return void 0 === a ? o.text(this) : this.empty().each(function () { 1218 | (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) && (this.textContent = a) 1219 | }) 1220 | }, null, a, arguments.length) 1221 | }, append: function () { 1222 | return this.domManip(arguments, function (a) { 1223 | if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { 1224 | var b = jb(this, a); 1225 | b.appendChild(a) 1226 | } 1227 | }) 1228 | }, prepend: function () { 1229 | return this.domManip(arguments, function (a) { 1230 | if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { 1231 | var b = jb(this, a); 1232 | b.insertBefore(a, b.firstChild) 1233 | } 1234 | }) 1235 | }, before: function () { 1236 | return this.domManip(arguments, function (a) { 1237 | this.parentNode && this.parentNode.insertBefore(a, this) 1238 | }) 1239 | }, after: function () { 1240 | return this.domManip(arguments, function (a) { 1241 | this.parentNode && this.parentNode.insertBefore(a, this.nextSibling) 1242 | }) 1243 | }, remove: function (a, b) { 1244 | for (var c, d = a ? o.filter(a, this) : this, e = 0; null != (c = d[e]); e++)b || 1 !== c.nodeType || o.cleanData(ob(c)), c.parentNode && (b && o.contains(c.ownerDocument, c) && mb(ob(c, "script")), c.parentNode.removeChild(c)); 1245 | return this 1246 | }, empty: function () { 1247 | for (var a, b = 0; null != (a = this[b]); b++)1 === a.nodeType && (o.cleanData(ob(a, !1)), a.textContent = ""); 1248 | return this 1249 | }, clone: function (a, b) { 1250 | return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function () { 1251 | return o.clone(this, a, b) 1252 | }) 1253 | }, html: function (a) { 1254 | return J(this, function (a) { 1255 | var b = this[0] || {}, c = 0, d = this.length; 1256 | if (void 0 === a && 1 === b.nodeType)return b.innerHTML; 1257 | if ("string" == typeof a && !db.test(a) && !ib[(bb.exec(a) || ["", ""])[1].toLowerCase()]) { 1258 | a = a.replace(ab, "<$1>"); 1259 | try { 1260 | for (; d > c; c++)b = this[c] || {}, 1 === b.nodeType && (o.cleanData(ob(b, !1)), b.innerHTML = a); 1261 | b = 0 1262 | } catch (e) { 1263 | } 1264 | } 1265 | b && this.empty().append(a) 1266 | }, null, a, arguments.length) 1267 | }, replaceWith: function () { 1268 | var a = arguments[0]; 1269 | return this.domManip(arguments, function (b) { 1270 | a = this.parentNode, o.cleanData(ob(this)), a && a.replaceChild(b, this) 1271 | }), a && (a.length || a.nodeType) ? this : this.remove() 1272 | }, detach: function (a) { 1273 | return this.remove(a, !0) 1274 | }, domManip: function (a, b) { 1275 | a = e.apply([], a); 1276 | var c, d, f, g, h, i, j = 0, k = this.length, m = this, n = k - 1, p = a[0], q = o.isFunction(p); 1277 | if (q || k > 1 && "string" == typeof p && !l.checkClone && eb.test(p))return this.each(function (c) { 1278 | var d = m.eq(c); 1279 | q && (a[0] = p.call(this, c, d.html())), d.domManip(a, b) 1280 | }); 1281 | if (k && (c = o.buildFragment(a, this[0].ownerDocument, !1, this), d = c.firstChild, 1 === c.childNodes.length && (c = d), d)) { 1282 | for (f = o.map(ob(c, "script"), kb), g = f.length; k > j; j++)h = c, j !== n && (h = o.clone(h, !0, !0), g && o.merge(f, ob(h, "script"))), b.call(this[j], h, j); 1283 | if (g)for (i = f[f.length - 1].ownerDocument, o.map(f, lb), j = 0; g > j; j++)h = f[j], fb.test(h.type || "") && !L.access(h, "globalEval") && o.contains(i, h) && (h.src ? o._evalUrl && o._evalUrl(h.src) : o.globalEval(h.textContent.replace(hb, ""))) 1284 | } 1285 | return this 1286 | }}), o.each({appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith"}, function (a, b) { 1287 | o.fn[a] = function (a) { 1288 | for (var c, d = [], e = o(a), g = e.length - 1, h = 0; g >= h; h++)c = h === g ? this : this.clone(!0), o(e[h])[b](c), f.apply(d, c.get()); 1289 | return this.pushStack(d) 1290 | } 1291 | }); 1292 | var qb, rb = {}; 1293 | 1294 | function sb(b, c) { 1295 | var d = o(c.createElement(b)).appendTo(c.body), e = a.getDefaultComputedStyle ? a.getDefaultComputedStyle(d[0]).display : o.css(d[0], "display"); 1296 | return d.detach(), e 1297 | } 1298 | 1299 | function tb(a) { 1300 | var b = m, c = rb[a]; 1301 | return c || (c = sb(a, b), "none" !== c && c || (qb = (qb || o("