├── examples ├── js │ ├── scripts.js │ ├── jquery.language.detection.min.js │ └── jquery-1.11.0.min.js ├── fr │ ├── page-1.html │ ├── page-2.html │ └── index.html ├── en │ ├── index.html │ ├── page-1.html │ └── page-2.html ├── es │ ├── index.html │ ├── page-1.html │ └── page-2.html ├── page-1.html ├── page-2.html └── index.html ├── language.detection.jquery.json ├── LICENSE.md ├── jquery.language.detection.min.js ├── README.md └── jquery.language.detection.js /examples/js/scripts.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | $(document).languageDetection({ 3 | languages : [ 4 | { 5 | code : 'it', 6 | path : '' 7 | }, 8 | { 9 | code : 'en', 10 | path : 'en', 11 | defaultLanguage : true 12 | }, 13 | { 14 | code : 'fr', 15 | path : 'fr' 16 | }, 17 | { 18 | code : 'es', 19 | path : 'es' 20 | } 21 | ] 22 | }); 23 | }); -------------------------------------------------------------------------------- /language.detection.jquery.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "language.detection", 3 | "version": "1.0.3", 4 | "title": "jQuery Language detection", 5 | "author": { 6 | "name": "Daniele De Santis", 7 | "url": "http://www.danieledesantis.net" 8 | }, 9 | "licenses": [ 10 | { 11 | "type": "MIT", 12 | "url": "https://github.com/danieledesantis/jquery-language-detection/blob/master/LICENSE.md" 13 | } 14 | ], 15 | "dependencies": { 16 | "jquery": ">=1.5" 17 | }, 18 | "homepage": "https://github.com/danieledesantis/jquery-language-detection", 19 | "description": "jQuery plugin for browser language detection with automatic redirection.", 20 | "keywords": [ 21 | "Language", 22 | "Browser", 23 | "Detection", 24 | "Redirect" 25 | ] 26 | } -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Daniele De Santis 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 | -------------------------------------------------------------------------------- /jquery.language.detection.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery Language detection plugin v1.0 3 | * jQuery plugin for browser language detection with automatic redirection 4 | * 5 | * https://github.com/danieledesantis/jquery-language-detection 6 | * 7 | * Released under the MIT License 8 | * Copyright 2014 Daniele De Santis 9 | */ 10 | (function(e){function n(e,t){if(!t){var n=""}else{var n=new Date;n.setDate(n.getDate()+t);n="; expires="+n.toUTCString()}document.cookie="languageDetection="+e+n+"; path=/"}function r(){var e=document.cookie;var t=e.indexOf(" languageDetection=");if(t==-1){t=e.indexOf("languageDetection=")}if(t==-1){var n=null}else{var r=e.indexOf("=",t)+1;var i=e.indexOf(";",t);if(i==-1){i=e.length}n=unescape(e.substring(r,i))}return n}var t={init:function(n){var n=e.extend({domain:window.location.protocol+"//"+window.location.hostname+"/",useFullPaths:false,languages:[{code:"en",path:"",defaultLanguage:true}],expires:null},n);e(document).on("click",".language",function(t){t.preventDefault();e(document).languageDetection("setLanguage",n.domain,n.useFullPaths,n.languages,n.expires,e(this).attr("data-language"))});var i=r();var s=!i?navigator.language||navigator.userLanguage:i;t.setLanguage(n.domain,n.useFullPaths,n.languages,n.expires,s)},setLanguage:function(t,r,i,s,o){var u,a;for(var f=0;f 2 | 3 | 4 | 5 | French page 1 - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

French page 1

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/fr/page-2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | French page 2 - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

French page 2

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/en/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | English homepage - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

English homepage

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/en/page-1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | English page 1 - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

English page 1

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/en/page-2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | English page 2 - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

English page 2

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/es/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Spanish homepage - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

Spanish homepage

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/es/page-1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Spanish page 1 - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

Spanish page 1

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/es/page-2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Spanish page 2 - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

Spanish page 2

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/fr/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | French homepage - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

French homepage

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/page-1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Italian page 1 - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

Italian page 1

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |

www.danieledesantis.net - hello@danieledesantis.net

35 | 36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /examples/page-2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Italian page 2 - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

Italian page 2

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |

www.danieledesantis.net - hello@danieledesantis.net

35 | 36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Italian homepage - jQuery language detection plugin 6 | 7 | 8 | 9 | 10 |
11 | 19 |

jQuery language detection plugin

20 | 27 |

Italian homepage

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget sem quis lacus pharetra interdum nec nec dolor. Nulla auctor cursus felis sed rutrum. Fusce diam tortor, facilisis tristique nisl at, congue interdum quam. Fusce metus ipsum, porttitor sed justo ut, fermentum blandit orci. Nullam blandit dapibus urna. Mauris molestie velit lorem, mollis lobortis risus vehicula sit amet. Curabitur sit amet porta ante. Sed mattis, erat nec tincidunt gravida, enim sem laoreet tortor, in semper erat turpis a elit. Cras non eros mauris. Quisque tincidunt luctus fringilla. In vel pretium risus.

29 | 30 |

Fusce dignissim diam laoreet eros tempus, at placerat risus tristique. Donec sem lorem, condimentum a nulla vitae, mattis placerat quam. Maecenas vel ultricies tortor. Praesent aliquam libero at molestie eleifend. Sed in fringilla lacus. Maecenas luctus pretium fringilla. Mauris accumsan vel enim non ultrices. Curabitur semper auctor eros, bibendum aliquet dui adipiscing ut. Proin vitae iaculis elit. Duis sed est consequat, tempor quam ac, scelerisque ligula. Proin in neque velit. Mauris dictum nisi at mauris ultrices, sed volutpat metus fringilla. Mauris non nisl eros.

31 | 32 |

Ut id molestie dolor. Phasellus non nibh aliquet, venenatis felis a, venenatis urna. Sed id imperdiet velit, in tincidunt orci. Sed massa nisi, bibendum a quam sed, rutrum luctus ante. Nulla iaculis lectus vitae porta porttitor. Pellentesque vehicula sapien sed justo faucibus hendrerit. Duis convallis nibh lectus, vel ornare nibh facilisis non. Praesent ac varius risus. Phasellus et magna blandit ipsum posuere cursus ac in felis.

33 | 34 |

www.danieledesantis.net - hello@danieledesantis.net

35 | 36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | jQuery Language detection plugin 2 | ================================ 3 | 4 | jQuery plugin for browser language detection with automatic redirection. 5 | 6 | ## Installation 7 | 8 | Include the production file after jquery. 9 | 10 | ```html 11 | 12 | 13 | ``` 14 | 15 | ## Usage 16 | 17 | ### HTML 18 | 19 | Set the `lang` attribute for your `html` elements in the whole website. 20 | 21 | ```html 22 | 23 | ``` 24 | 25 | Assign to each `a` element in your language menu the `.language` class and the `data-language` attribute set to the right ISO Language Code. 26 | 27 | ```html 28 | English 29 | Italian 30 | French 31 | Spanish 32 | ``` 33 | 34 | ### jQuery 35 | 36 | Initialize the plugin in your main scripts file (the one included in all of your pages). 37 | 38 | ```javascript 39 | $(document).ready(function() { 40 | $(document).languageDetection({ 41 | languages : [ 42 | { 43 | code : 'en', 44 | path : '', 45 | defaultLanguage : true 46 | }, 47 | { 48 | code : 'it', 49 | path : 'it' 50 | }, 51 | { 52 | code : 'fr', 53 | path : 'fr' 54 | }, 55 | { 56 | code : 'es', 57 | path : 'es' 58 | } 59 | ] 60 | }); 61 | }); 62 | ``` 63 | 64 | ## Options 65 | 66 | ### domain 67 | 68 | The root of your website (use this option if it is inside a subfolder). 69 | Deafult:http://www.mydomain.xx/ 70 | 71 | ### useFullPaths 72 | 73 | Set this option to `true` if you want to use absolute paths for languages folders (you have to use it if each language is in a different subdomain). 74 | Default:false 75 | 76 | ### languages 77 | 78 | An array of objects, one for each language. 79 | Each object has 3 properties: 80 | 81 | #### code 82 | 83 | The ISO Language Code. 84 | 85 | #### path 86 | 87 | The relative path to the folder which contains the files for the language. 88 | You have to specify the absolute path if you set to `true` the `useFullPaths` option. 89 | 90 | #### defaultLanguage 91 | 92 | This must be `true` for the default language of the website. 93 | Users will be redirected to this language if their browser language is not in the `languages` array. 94 | 95 | Default: 96 | ```javascript 97 | [ 98 | { 99 | code : 'en', 100 | path : '', 101 | defaultLanguage : true 102 | } 103 | ] 104 | ``` 105 | 106 | ### expires 107 | 108 | The expiration date of the cookie used to store the user's language preference. 109 | It is expressed in days. 110 | Default: null 111 | 112 | ### Example with custom options 113 | 114 | ```javascript 115 | $(document).ready(function() { 116 | $(document).languageDetection({ 117 | domain : 'http://www.mydomain.xx/subfolder/', 118 | languages : [ 119 | { 120 | code : 'it', 121 | path : '' 122 | }, 123 | { 124 | code : 'en', 125 | path : 'en', 126 | defaultLanguage : true 127 | }, 128 | { 129 | code : 'fr', 130 | path : 'fr' 131 | }, 132 | { 133 | code : 'es', 134 | path : 'es' 135 | } 136 | ], 137 | expires : 10 138 | }); 139 | }); 140 | ``` 141 | -------------------------------------------------------------------------------- /jquery.language.detection.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery Language detection plugin v1.0 3 | * jQuery plugin for browser language detection with automatic redirection 4 | * 5 | * https://github.com/danieledesantis/jquery-language-detection 6 | * 7 | * Released under the MIT License 8 | * Copyright 2014 Daniele De Santis 9 | */ 10 | (function($) { 11 | 12 | // METHODS 13 | var methods = { 14 | // INIT 15 | init : function(options) { 16 | var options = $.extend({ 17 | domain : window.location.protocol + '//' + window.location.hostname + '/', 18 | useFullPaths: false, 19 | languages : [ 20 | { 21 | code : 'en', 22 | path : '', 23 | defaultLanguage : true 24 | } 25 | ], 26 | expires : null 27 | }, options); 28 | $(document).on('click', '.language', function(e) { 29 | e.preventDefault(); 30 | $(document).languageDetection('setLanguage', options.domain, options.useFullPaths, options.languages, options.expires, $(this).attr('data-language')); 31 | }); 32 | var cookie = getCookieLang(); 33 | var language = !cookie ? navigator.language || navigator.userLanguage : cookie; 34 | methods.setLanguage(options.domain, options.useFullPaths, options.languages, options.expires, language); 35 | }, 36 | // SETLANGUAGE 37 | setLanguage : function(domain, useFullPaths, languages, expires, lang) { 38 | var newPath, newLanguage; 39 | for(var i = 0; i < languages.length; i++) { 40 | if(languages[i]['code']==lang.substr(0,2)) { 41 | newPath = languages[i]['path']; 42 | newLanguage = languages[i]['code']; 43 | } 44 | } 45 | if(!newPath && newPath!='') { 46 | for(var i = 0; i < languages.length; i++) { 47 | if(languages[i]['defaultLanguage']==true) { 48 | newPath = languages[i]['path']; 49 | newLanguage = languages[i]['code']; 50 | } 51 | } 52 | } 53 | if($('html').attr('lang') == newLanguage) { return; } 54 | setCookieLang(newLanguage, expires); 55 | var newUrl = !useFullPaths ? domain + newPath : newPath; 56 | window.location.replace(newUrl); 57 | } 58 | } 59 | 60 | // COOKIE MANAGEMENT 61 | function setCookieLang(newLanguage, days) { 62 | if(!days) { 63 | var expires = ''; 64 | } else { 65 | var expires = new Date(); 66 | expires.setDate(expires.getDate() + days); 67 | expires = '; expires=' + expires.toUTCString(); 68 | } 69 | document.cookie = 'languageDetection=' + newLanguage + expires + '; path=/'; 70 | } 71 | 72 | function getCookieLang() { 73 | var siteCookie = document.cookie; 74 | var cookieLang = siteCookie.indexOf(' languageDetection='); 75 | if (cookieLang == -1) { 76 | cookieLang = siteCookie.indexOf('languageDetection='); 77 | } 78 | if (cookieLang == -1) { 79 | var cookieLangValue = null; 80 | } else { 81 | var cookieLangStart = siteCookie.indexOf('=', cookieLang) + 1; 82 | var cookieLangEnd = siteCookie.indexOf(';', cookieLang); 83 | if (cookieLangEnd == -1) { 84 | cookieLangEnd = siteCookie.length; 85 | } 86 | cookieLangValue = unescape(siteCookie.substring(cookieLangStart,cookieLangEnd)); 87 | } 88 | return cookieLangValue; 89 | } 90 | 91 | // PLUGIN 92 | $.fn.languageDetection = function() { 93 | var method = arguments[0]; 94 | if(methods[method]) { 95 | method = methods[method]; 96 | arguments = Array.prototype.slice.call(arguments, 1); 97 | } else if( typeof(method) == 'object' || !method ) { 98 | method = methods.init; 99 | } else { 100 | $.error( 'Method ' + method + ' does not exist.' ); 101 | return this; 102 | } 103 | return method.apply(this, arguments); 104 | } 105 | 106 | })(jQuery); -------------------------------------------------------------------------------- /examples/js/jquery-1.11.0.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ 2 | !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f 3 | }}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="
a",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/\s*$/g,sb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?""!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("