commit c7539bc0d5ca1bee31003f87894968086ad9f0b9 Author: Victor Date: Sun Dec 6 13:49:35 2015 +0200 First demo diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..d39c78b --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,5 @@ +file.reference.RpyPlayer-public_html=public_html +file.reference.RpyPlayer-test=test +files.encoding=UTF-8 +site.root.folder=${file.reference.RpyPlayer-public_html} +test.folder=${file.reference.RpyPlayer-test} diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..6d0b732 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,9 @@ + + + org.netbeans.modules.web.clientproject + + + RpyPlayer + + + diff --git a/public_html/index.html b/public_html/index.html new file mode 100644 index 0000000..dd0fb26 --- /dev/null +++ b/public_html/index.html @@ -0,0 +1,32 @@ + + + + Everlasting Summer + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+

+
+ + + diff --git a/public_html/resources/css/style.css b/public_html/resources/css/style.css new file mode 100644 index 0000000..f402801 --- /dev/null +++ b/public_html/resources/css/style.css @@ -0,0 +1,54 @@ +html, body { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + overflow: hidden; +} + +html, body, div, span, p { + margin: 0; + padding: 0; +} + +body { + font-family: "Open Sans", sans-serif; + font-size: 18px; + line-height: 1.5; +} + +#background { + width: 100%; + height: 100%; + background: black; + overflow: hidden; + position: relative; + background-attachment: fixed; + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + background-size: cover; +} + +#window { + position: absolute; + bottom: 0px; + width: 100%; + min-height: 20%; + background-color: rgba(0, 0, 0, 0.5); +} + +#textAuthor { + margin: 5px 0 10px 20px; + color: white; +} + +#textContent { + color: #DEC88C; + margin: 0 10px; +} + +.sprite { + position: absolute; + bottom: 0px; +} \ No newline at end of file diff --git a/public_html/resources/js/Characters.js b/public_html/resources/js/Characters.js new file mode 100644 index 0000000..b9b8555 --- /dev/null +++ b/public_html/resources/js/Characters.js @@ -0,0 +1,101 @@ +function NameInfo(name, color) { + this.name = name; + this.color = color; +} + +function Characters() { + this.names = {}; +} + +Characters.prototype.DEFAULT_COLOR = 0xFFC0C0C0; + +Characters.prototype.contains = function (shortName) { + return shortName in this.names; +}; + +Characters.prototype.get = function (shortName) { + return this.names[shortName]; +}; + +Characters.prototype.setName_2 = function (shortName, fullName) { + if (shortName in this.names) { + var info = this.names[shortName]; + info.name = fullName; + } else { + this.names[shortName] = new NameInfo(fullName, this.DEFAULT_COLOR); + } + return shortName in this.names; +}; + +Characters.prototype.setName_3 = function (shortName, fullName, color) { + if (shortName in this.names) { + var info = this.names[shortName]; + info.name = fullName; + info.color = color; + } else { + this.names[shortName] = new NameInfo(fullName, color); + } + return shortName in this.names; +}; +Characters.prototype.setName = function (arg1, arg2, arg3) { + if (arguments.length === 2) return this.setName_2(arg1, arg2); + else return this.setName_2(arg1, arg2, arg3); +}; + +Characters.prototype.makeNamesUnknown = function () { + // https://github.com/yakui-lover/eroge-dopil/blob/master/media.rpy#L365 + this.names["me"] = new NameInfo("Семён", 0xFFE1DD7D); + this.names["un"] = new NameInfo("Пионерка", 0xFFB956FF); + this.names["dv"] = new NameInfo("Пионерка", 0xFFFFAA00); + this.names["sl"] = new NameInfo("Пионерка", 0xFFFFD200); + this.names["us"] = new NameInfo("Пионерка", 0xFFFF3200); + this.names["mt"] = new NameInfo("Вожатая", 0xFF00EA32); + this.names["cs"] = new NameInfo("Медсестра", 0xFFA5A5FF); + this.names["mz"] = new NameInfo("Пионерка", 0xFF4A86FF); + this.names["mi"] = new NameInfo("Пионерка", 0xFF00DEFF); + this.names["uv"] = new NameInfo("Странная девочка", 0xFF4EFF00); + this.names["lk"] = new NameInfo("Луркмор-кун", 0xFFFF8080); + this.names["sh"] = new NameInfo("Пионер", 0xFFFFF226); + this.names["el"] = new NameInfo("Пионер", 0xFFFFFF00); + this.names["pi"] = new NameInfo("Пионер", 0xFFE60101); + + this.names["dy"] = new NameInfo("Голос из динамика", 0xFFC0C0C0); + this.names["voice"] = new NameInfo("Голос", 0xFFE1DD7D); + this.names["voices"] = new NameInfo("Голоса", 0xFFC0C0C0); + this.names["message"] = new NameInfo("Сообщение", 0xFFC0C0C0); + this.names["all"] = new NameInfo("Пионеры", 0xFFED4444); + this.names["kids"] = new NameInfo("Малышня", 0xFFEB7883); + this.names["dreamgirl"] = new NameInfo("...", 0xFFC0C0C0); + this.names["bush"] = new NameInfo("Голос", 0xFFC0C0C0); + this.names["FIXME_voice"] = new NameInfo("Голос", 0xFFC0C0C0); + this.names["odn"] = new NameInfo("Одногруппник", 0xFFC0C0C0); + this.names["mt_voice"] = new NameInfo("Голос", 0xFF00EA32); +}; + +Characters.prototype.makeNamesKnown = function () { + this.setName("me", "Семён"); + this.setName("un", "Лена"); + this.setName("dv", "Алиса"); + this.setName("sl", "Славя"); + this.setName("us", "Ульяна"); + this.setName("mt", "Ольга Дмитриевна"); + this.setName("cs", "Виола"); + this.setName("mz", "Женя"); + this.setName("mi", "Мику"); + this.setName("uv", "Юля"); + this.setName("lk", "Луркмор-кун"); + this.setName("sh", "Шурик"); + this.setName("el", "Электроник"); + this.setName("pi", "Пионер"); + this.setName("dy", "Голос из динамика"); + this.setName("voice", "Голос"); + this.setName("voices", "Голоса"); + this.setName("message", "Сообщение"); + this.setName("all", "Пионеры"); + this.setName("kids", "Малышня"); + this.setName("dreamgirl", "..."); + this.setName("bush", "Голос"); + this.setName("FIXME_voice", "Голос"); + this.setName("odn", "Одногруппник"); + this.setName("mt_voice", "Голос"); +}; diff --git a/public_html/resources/js/Lexer.js b/public_html/resources/js/Lexer.js new file mode 100644 index 0000000..bd0a71b --- /dev/null +++ b/public_html/resources/js/Lexer.js @@ -0,0 +1,228 @@ +/* global TokenType */ + +function Lexer(input) { + this.input = input; + this.tokens = []; + this.length = input.length; + this.pos = 0; + this.buffer = ""; +} + +Lexer.prototype.OPERATOR_CHARS = "=+-<>()[]!$:"; +Lexer.prototype.OPERATOR_TYPES = [ + TokenType.EQ, + TokenType.PLUS, TokenType.MINUS, + TokenType.LT, TokenType.GT, + TokenType.LPAREN, TokenType.RPAREN, TokenType.LBRACKET, TokenType.RBRACKET, + TokenType.EXCL, TokenType.COMMAND, TokenType.COLON +]; + +Lexer.prototype.KEYWORDS = { + "play" : TokenType.PLAY, + "queue" : TokenType.QUEUE, + "stop" : TokenType.STOP, + "music" : TokenType.MUSIC, + "ambience" : TokenType.AMBIENCE, + "sound" : TokenType.SOUND, + "sound_loop" : TokenType.SOUNDLOOP, + "fadein" : TokenType.FADEIN, + "fadeout" : TokenType.FADEOUT, + + "scene" : TokenType.SCENE, + "anim" : TokenType.ANIM, + "bg" : TokenType.BG, + "cg" : TokenType.CG, + "at" : TokenType.AT, + "as" : TokenType.AS, + "define" : TokenType.DEFINE, + "window" : TokenType.WINDOW, + "hide" : TokenType.HIDE, + "show" : TokenType.SHOW, + "with" : TokenType.WITH, + + "return" : TokenType.RETURN, + "menu" : TokenType.MENU, + "endmenu" : TokenType.ENDMENU, + "jump" : TokenType.JUMP, + "label" : TokenType.LABEL, + + "if" : TokenType.IF, + "else" : TokenType.ELSE, + "endif" : TokenType.ENDIF, + "or" : TokenType.OR, + "and" : TokenType.AND, + "not" : TokenType.NOT, + + "renpy.pause" : TokenType.RENPY_PAUSE, + "renpy.say" : TokenType.RENPY_SAY, + "persistent.sprite_time" : TokenType.PERSISTENT_SPRITE_TIME, + "prolog_time" : TokenType.PROLOG_TIME, + "day_time" : TokenType.DAY_TIME, + "sunset_time" : TokenType.SUNSET_TIME, + "night_time" : TokenType.NIGHT_TIME, + "make_names_known" : TokenType.MAKE_NAMES_KNOWN, + "make_names_unknown" : TokenType.MAKE_NAMES_UNKNOWN, + "set_name" : TokenType.SET_NAME, + "meet" : TokenType.SET_NAME, + "disable_all_zones" : TokenType.DISABLE_ALL_ZONES, + "disable_current_zone" : TokenType.DISABLE_CURRENT_ZONE, + "reset_zone" : TokenType.RESET_ZONE, + "set_zone" : TokenType.SET_ZONE, + "show_map" : TokenType.SHOW_MAP +}; + +Lexer.prototype.getTokens = function () { return this.tokens; }; + +Lexer.prototype.process = function () { + this.pos = 0; + while (this.pos < this.length) { + this.tokenize(); + } + return this; +}; + +Lexer.prototype.tokenize = function () { + this.skipWhitespaces(); + var ch = this.peek(0); + if (ch.match(/[a-z]/i)) { + // Слово (ключевое слово или команда) + this.tokenizeWord(); + } else if (ch.match(/[0-9]/i)) { + // Число + this.tokenizeNumber(); + } else if (ch === '"' || ch === '\'') { + // Текст в "кавычках" или 'одинарных' + this.tokenizeText(ch); + } else if (ch === '#') { + this.tokenizeComment(); + } else { + // Операторы и спецсимволы + this.tokenizeOperator(); + } +}; + +Lexer.prototype.tokenizeWord = function () { + var ch = this.peek(0); + // Строка в юникоде u"текст" или u'текст' + if (ch === 'u') { + var textStartChar = this.peek(1); + if (textStartChar === '"' || textStartChar === '\'') { + this.next(); // u + this.tokenizeText(textStartChar); + return; + } + } + + this.clearBuffer(); + while (ch.match(/[a-z0-9_\.]/i)) { + this.buffer += (ch); + ch = this.next(); + } + + var word = this.buffer; + var key = word.toLowerCase(); + if (key in this.KEYWORDS) { + this.addToken(this.KEYWORDS[key]); + } else { + this.addToken(TokenType.WORD, word); + } +}; + +Lexer.prototype.tokenizeNumber = function () { + var ch = this.peek(0); + this.clearBuffer(); + var decimal = false; + while (true) { + // Целое или вещественное число. + if (ch === '.') { + // Пропускаем десятичные точки, если они уже были в числе. + if (!decimal) this.buffer += (ch); + decimal = true; + ch = this.next(); + continue; + } else if (!ch.match(/[0-9]/i)) { + break; + } + this.buffer += (ch); + ch = this.next(); + } + this.addToken(TokenType.NUMBER, this.buffer); +}; + +Lexer.prototype.tokenizeOperator = function () { + var ch = this.peek(0); + var index = this.OPERATOR_CHARS.indexOf(ch); + if (index !== -1) { + this.addToken(this.OPERATOR_TYPES[index]); + } + this.next(); +}; + +Lexer.prototype.tokenizeText = function (textStartChar) { + this.clearBuffer(); + var ch = this.next(); // пропускаем открывающую кавычку + while (true) { + if (ch === textStartChar) break; + if (ch === '\0') break; // не закрыта кавычка, но мы добавим то, что есть + if (ch === '\\') { + ch = this.next(); + switch (ch) { + case 'n': ch = next(); this.buffer += ('\n'); continue; + case 't': ch = next(); this.buffer += ('\t'); continue; + default: + if (ch === textStartChar) { + ch = this.next(); + this.buffer += ('"'); + continue; + } + } + this.buffer += ('\\'); + continue; + } + this.buffer += (ch); + ch = this.next(); + } + this.next(); // пропускаем закрывающую кавычку + this.addToken(TokenType.TEXT, this.buffer); +}; + +Lexer.prototype.tokenizeComment = function () { + var ch = this.peek(0); + while ("\n\r\0".indexOf(ch) === -1) { + ch = this.next(); + } +}; + +Lexer.prototype.skipWhitespaces = function () { + var ch = this.peek(0); + while (ch !== '\0' && ch.match(/\s/)) { + ch = this.next(); + } +}; + +Lexer.prototype.addToken_1 = function (type) { + this.addToken_2(type, ""); +}; +Lexer.prototype.addToken_2 = function (type, text) { + this.tokens.push(new Token(text, type)); +}; +Lexer.prototype.addToken = function (arg1, arg2) { + if (arguments.length === 1) this.addToken_1(arg1); + else this.addToken_2(arg1, arg2); +}; + +Lexer.prototype.clearBuffer = function () { + this.buffer = ""; +}; + +Lexer.prototype.next = function () { + this.pos++; + if (this.pos >= this.length) return '\0'; + return this.input.charAt(this.pos); +}; + +Lexer.prototype.peek = function (relativePosition) { + var tempPos = this.pos + relativePosition; + if (tempPos >= this.length) return '\0'; + return this.input.charAt(tempPos); +}; diff --git a/public_html/resources/js/Main.js b/public_html/resources/js/Main.js new file mode 100644 index 0000000..10d5bd7 --- /dev/null +++ b/public_html/resources/js/Main.js @@ -0,0 +1,28 @@ +/* global TokenType */ +/*var script = { + "name": "Meet Me There", + "content": "# $ mods[\"annimon__meet_you_there\"] = u\"Встретимся там\"\n $ night_time()\n# $ persistent.sprite_time = \"night\"\n \n ######################\n # город\n play music music_list[\"meet_me_there\"] fadein 3\n scene bg black with dissolve\n \"Город застыл под влиянием ночи.\"\n scene bg intro_xx with dspr\n $ renpy.pause(1)\n scene bg black with dissolve2\n \"Подумать только, ещё несколько часов назад по его улицам оживлённо шли прохожие, ревели двигатели сотен автомобилей, а сейчас он как будто нем и обездвижен.\"\n \"А таинственный надзиратель — луна, пристально разглядывает всё вокруг, оберегая сон жителей.\"\n \"Её бледный свет окутывает улицы и здания, врываясь в комнаты, где незадёрнуты шторы.\"\n \n ######################\n # комната\n #scene bg semen_room_window with dissolve2\n scene bg int_house_of_un_night with dissolve2\n \"В одну из таких комнат проникает свет луны и ложится на кровать, где, плотно укутавшись в одеяло, спит девушка.\"\n \"Царит тишина, нарушаемая ровным дыханием.\"\n \"На одеяле лежит книга.{w} \\\"Унесённые ветром\\\".{w} По-видимому, девушка читала её перед сном.\"\n $ renpy.pause(1)\n \"Вот уголки губ чуть заметно пошевелились. При свете луны это отчётливо видно.\"\n \"Девушке снится сон.\"\n \n ######################\n # сон\n $ renpy.pause(2)\n scene cg d6_un_evening_1 with dissolve2\n \"Она сидит на лавочке и, подняв голову вверх, с интересом наблюдает за звёздами.\"\n \"Ночной бриз освежающе обдувает её лицо, из-за чего слезятся глаза, заставляя прерывать лицезрение звёздной карты частыми морганиями.\"\n \"Рядом с ней, всё также высоко устремляя свой взор, сидит парень.\"\n \"Проходят минуты, затем они сменяются на часы.\"\n \n #scene stars with dissolve\n scene anim stars_1\n $ renpy.pause(1.5)\n scene anim stars_3\n $ renpy.pause(1.5)\n \n \"Звёзды успевают сместиться на некоторое расстояние. Исчезает свет одних, зажигаются другие.\"\n \"А девушка и парень не перестают за всем этим наблюдать не проронив ни слова.\"\n window hide\n $ renpy.pause(2)\n window show\n scene cg d6_un_evening_2 with dissolve\n \"Проходит ещё час. Девушка, почувствовав холод, прижимается к парню, так намного теплее. Он сжимает в своих руках её ладонь.\"\n \"Наконец, голос девушки прерывает тишину:\"\n un \"Как же не хочу просыпаться.\"\n me \"Ещё достаточно времени.\"\n $ renpy.pause(1.5)\n me \"Ты не передумала в лагерь ехать?\"\n un \"Издеваешься? Да я только и делаю, что дни считаю. И чем меньше их остаётся, тем труднее ждать.\"\n me \"Понимаю, я и сам сгораю от нетерпения. Но ты должна взять себя в руки. Особенно там.\"\n un \"Я постараюсь.\"\n \n scene cg d6_un_evening_1 with dissolve\n \"Они вновь смотрят на звёзды и отмечают, что их стало значительно меньше, значит, близится утро.\"\n un \"А вдруг у нас что-то не получится? Вдруг тебя там не окажется или я тебя не узнаю?\"\n me \"Оставь эти мысли. Всё у нас получится. Только ты прояви терпение, выжди подходящий момент, наблюдай.\"\n un \"Да. Я уже всё продумала. Буду твоей тенью.\"\n # \"Лицо девушки озаряет милая улыбка.\"\n $ renpy.pause(2.5)\n me \"Я обязательно там появлюсь, ты только жди.{w} А сейчас, кажется, мне пора. Встретимся ночью.\"\n \n \"Девушка едва заметно кивает, а парень растворяется в пустоте.\"\n scene cg epilogue_un with dissolve\n \"Взгляд устремляется куда-то далеко за горизонт.\"\n \"Туда, где уже забрезжил рассвет. Туда, где совсем скоро появится солнце, принося с собой новый день.\"\n stop music fadeout 2\n \"День, приближающий долгожданную встречу.\"\n \n ######################\n # утро\n $ day_time()\n $ persistent.sprite_time = \"day\"\n $ renpy.pause(1)\n scene bg white with dissolve2\n $ renpy.pause(1)\n play music music_list[\"lets_be_friends\"]\n scene bg int_house_of_un_day with dissolve\n \"Уголки губ девушки вновь заметно пошевелились.{w} Вслед за ними начинают дрожать веки, подёргиваться пальцы рук.\"\n \"Спустя мгновение девушка приоткрывает глаза, затем жмурится от яркого света. На лице появляется улыбка — она вспомнила сон.\"\n \"Слышен глубокий вдох, затем глаза вновь открываются.\"\n \n show un smile sport close with dspr\n \"И вот она уже готова встретить этот день.\"\n \"Листок настенного календаря срывается одним резким движением и девушка шепчет:\"\n show un smile2 sport close\n un \"Осталось два дня до отправления в лагерь. Мы обязательно встретимся там.\"\n $ renpy.pause(1)\n return" +};*/ +var script = { + "name": "Test Positions", + "content": "$ day_time()\n$ persistent.sprite_time = \"day\"\nplay music music_list[\"everlasting_summer\"]\nscene bg ext_square_day\nshow mz smile pioneer far at fright\nshow us grin sport far at fleft\nshow mt smile pioneer far at right\nshow mi smile pioneer far at left\nshow dv smile pioneer2 at cright\nshow sl smile pioneer at cleft\nshow un smile2 pioneer at center\nall \"Приглашаем тебя в Бесконечное Лето!\"\n\nwindow hide\n$ renpy.pause(2)\nwindow show\n\nmt \"Ладненько, я побежала, а ты пока можешь осмотреть лагерь!{w} Вечером приходи на ужин, не забудь!\"\nhide mt with fade\n\"Ушла\"\nshow cs smile far at right with fade2 \ncs \"И ко мне загляни… пионер.\"" +}; +var test = script["content"]; + +var ViewActivity = undefined; + +window.onload = function () { +// var test = 'un "Привет :)"'; + var tokens = new Lexer(test).process().getTokens(); + var parser = new Parser(tokens); + ViewActivity = new Views(parser); + parser.next(); + + + document.addEventListener('click', function (e) { + ViewActivity.getInstance().onTouch(e); + }); + //var resultTag = document.getElementById("result"); + //resultTag.innerText = tokens.join("\n"); +}; + diff --git a/public_html/resources/js/Parser.js b/public_html/resources/js/Parser.js new file mode 100644 index 0000000..d8c425e --- /dev/null +++ b/public_html/resources/js/Parser.js @@ -0,0 +1,397 @@ +/* global TokenType, ViewActivity, TextUtils */ + +function Parser(tokens) { + this.tokens = tokens; + this.tokensCount = tokens.length; + this.position = 0; + this.lastPosition = 0; + this.labels = {}; +} + +Parser.prototype.EOF = new Token("", TokenType.EOF); + +Parser.prototype.getInstance = function () { + return this; +}; + +Parser.prototype.next = function () { + this.lastPosition = this.position; + + var terminal = false; + var counter = 0; + do { + try { + terminal = this.statement(); + } catch (re) { + console.log("Parser.next() " + re); + if (this.tokens.length === 0) return; + } + // антизацикливание + counter++; + if (counter >= 1000) { + this.position++; + counter = 0; + } + } while (!terminal); +}; + +Parser.prototype.findFrom = function(from, which, step) { + var pos = from; + while (true) { + pos += step; + if (pos < 0 || pos >= this.tokensCount) break; + + var token = this.tokens[pos]; + if (which === token.getType()) return pos; + } + // Возвращаем текущее значение во избежание лишних проверок. + return from; +}; + +Parser.prototype.statement = function() { + var token = this.get(0); + if (this.match(token, TokenType.COMMAND)) return this.command(); + if (this.match(token, TokenType.SCENE)) return this.scene(); + if (this.match(token, TokenType.PLAY)) return this.play(); +// if (this.match(token, TokenType.QUEUE)) return this.queue(); +// if (this.match(token, TokenType.STOP)) return this.stop(); + if (this.match(token, TokenType.SHOW)) return this.show(); + if (this.match(token, TokenType.HIDE)) return this.hide(); + +// if (this.match(token, TokenType.JUMP)) return this.jump(); +// if (this.match(token, TokenType.IF)) return this.ifStatement(); + + /*if (this.lookMatch(1, TokenType.COLON)) { + // menu: + if (this.match(token, TokenType.MENU)) return this.menu(); + + // Остаток от меню выбора. Пропускаем до появления ENDMENU. + if (this.match(token, TokenType.TEXT)) { + if (this.hasEndMenu) this.position += this.skipMenu(); + return false; + } + + // Остаток от условного выражения. Пропускаем до появления ENDIF. + if (this.match(token, TokenType.ELSE)) { + if (this.hasEndIf) this.position += this.skipIf(); + return false; + } + }*/ + + // Текст с именем автора реплики. + if (this.lookMatch(1, TokenType.TEXT) && this.match(token, TokenType.WORD)) { + var whoid = token.getText(); + ViewActivity.getInstance().text(whoid, this.consume(TokenType.TEXT).getText()); + return true; + } + + // Обычный текст. + if (this.match(token, TokenType.TEXT)) { + ViewActivity.getInstance().text(token.getText()); + return true; + } + + if (this.match(token, TokenType.EOF)) { + //ViewActivity.getInstance().finish(); + return true; + } + + if (this.match(token, TokenType.WINDOW)) { + if (this.match(TokenType.SHOW)) + return ViewActivity.getInstance().windowShow(this.matchWithEffect()); + else if (this.match(TokenType.HIDE)) + return ViewActivity.getInstance().windowHide(this.matchWithEffect()); + return false; + } + + if (!TextUtils.isEmpty(this.matchWithEffect())) return false; + + this.position++; + return false; +}; + +Parser.prototype.command = function() { + var token = this.get(0); + + if (this.match(token, TokenType.RENPY_PAUSE)) { + this.consume(TokenType.LPAREN); + var pause = this.consumeDouble(); + var hard = false; + if (!this.lookMatch(0, TokenType.RPAREN)) { + this.consume(TokenType.WORD); // hard + this.consume(TokenType.EQ); + hard = this.consumeBoolean(); + } + this.consume(TokenType.RPAREN); + ViewActivity.getInstance().pause(Math.floor(1000 * pause), hard); + return true; + } + + if (this.match(token, TokenType.RENPY_SAY)) { + this.consume(TokenType.LPAREN); + var whoid = this.consume(TokenType.WORD).getText(); + // TODO: this.consume(TokenType.COMMA) + var text = this.consume(TokenType.TEXT).getText(); + // TODO: this.consume(TokenType.COMMA) + this.consume(TokenType.WORD); // interact + this.consume(TokenType.EQ); + var interact = this.consumeBoolean(); + this.consume(TokenType.RPAREN); + ViewActivity.getInstance().text(whoid, text); + return interact; + } + + if (this.match(token, TokenType.PERSISTENT_SPRITE_TIME)) { + this.consume(TokenType.EQ); + this.consume(TokenType.TEXT); + return false; + } + + if (this.match(token, TokenType.PROLOG_TIME) || + this.match(token, TokenType.DAY_TIME) || + this.match(token, TokenType.SUNSET_TIME) || + this.match(token, TokenType.NIGHT_TIME)) { + this.consume(TokenType.LPAREN); + this.consume(TokenType.RPAREN); + return false; + } + + if (this.match(token, TokenType.MAKE_NAMES_KNOWN) || + this.match(token, TokenType.MAKE_NAMES_UNKNOWN)) { + this.consume(TokenType.LPAREN); + this.consume(TokenType.RPAREN); + if (token.getType() === TokenType.MAKE_NAMES_KNOWN) { + ViewActivity.getInstance().makeNamesKnown(); + } else ViewActivity.getInstance().makeNamesUnknown(); + return false; + } + + if (this.match(token, TokenType.SET_NAME)) { + this.consume(TokenType.LPAREN); + var whoid = this.consume(TokenType.TEXT).getText(); + // TODO: this.consume(TokenType.COMMA) + var name = this.consume(TokenType.TEXT).getText(); + this.consume(TokenType.RPAREN); + ViewActivity.getInstance().meet(whoid, name); + return false; + } + + // Карта + if (this.match(token, TokenType.DISABLE_ALL_ZONES)) { + this.consume(TokenType.LPAREN); + this.consume(TokenType.RPAREN); + ViewActivity.getInstance().disableAllZones(); + return false; + } + if (this.match(token, TokenType.DISABLE_CURRENT_ZONE)) { + this.consume(TokenType.LPAREN); + this.consume(TokenType.RPAREN); + ViewActivity.getInstance().disableCurrentZone(); + return false; + } + if (this.match(token, TokenType.RESET_ZONE)) { + this.consume(TokenType.LPAREN); + var zone = this.consume(TokenType.TEXT).getText(); + this.consume(TokenType.RPAREN); + ViewActivity.getInstance().resetZone(zone); + return false; + } + if (this.match(token, TokenType.SET_ZONE)) { + this.consume(TokenType.LPAREN); + var zone = this.consume(TokenType.TEXT).getText(); + // TODO: this.consume(TokenType.COMMA) + var label = this.consume(TokenType.TEXT).getText(); + this.consume(TokenType.RPAREN); + ViewActivity.getInstance().setZone(zone, label); + return false; + } + if (this.match(token, TokenType.SHOW_MAP)) { + this.consume(TokenType.LPAREN); + this.consume(TokenType.RPAREN); + ViewActivity.getInstance().showMap(); + return true; + } + + /*if (this.match(token, TokenType.WORD)) { + if (this.match(TokenType.EQ)) { + // variable = expression + Variables.setVariable(token.getText(), expression().eval()); + return false; + } + if (this.lookMatch(1, TokenType.EQ) && this.match(TokenType.PLUS)) { + // variable += expression + this.consume(TokenType.EQ); + var varValue = Variables.getVariable(token.getText()); + Variables.setVariable(token.getText(), varValue + expression().eval()); + return false; + } + if (this.lookMatch(1, TokenType.EQ) && this.match(TokenType.MINUS)) { + // variable -= expression + this.consume(TokenType.EQ); + var varValue = Variables.getVariable(token.getText()); + Variables.setVariable(token.getText(), varValue - expression().eval()); + return false; + } + }*/ + + return false; +}; + +Parser.prototype.scene = function() { + var type = ""; + if (this.match(TokenType.BG)) type = "bg"; + else if (this.match(TokenType.CG)) type = "cg"; + else if (this.match(TokenType.ANIM)) type = "anim"; + + var name = this.consume(TokenType.WORD).getText(); + var effect = this.matchWithEffect(); + ViewActivity.getInstance().background(type, name, effect); + return true; +}; + +Parser.prototype.show = function() { + var whoid = this.consume(TokenType.WORD).getText(); + var params = ""; // emotion? cloth? distance? + while (this.lookMatch(0, TokenType.WORD)) { + var text = this.consume(TokenType.WORD).getText(); + params += text; + if (text.equals("close") || text.equals("far")) break; + } + // Положение (left, cleft, ...) + var position = ""; + if (this.match(TokenType.AT)) { + position = this.consume(TokenType.WORD).getText(); + } + // Псевдоним (для показа одно и того же спрайта в разных местах) + var alias = ""; + if (this.match(TokenType.AS)) { + alias = this.consume(TokenType.WORD).getText(); + } + var effect = this.matchWithEffect(); + ViewActivity.getInstance().sprite(whoid, params, position, alias, effect); + return false; +}; + +Parser.prototype.hide = function() { + var whoid = this.consume(TokenType.WORD).getText(); + var effect = this.matchWithEffect(); + ViewActivity.getInstance().hideSprite(whoid, effect); + return false; +}; + +Parser.prototype.play = function() { + if (this.match(TokenType.MUSIC)) return this.playMusic(); + if (this.match(TokenType.AMBIENCE)) return this.playAmbience(); + if (this.lookMatch(0, TokenType.SOUND) || this.lookMatch(0, TokenType.SOUNDLOOP)) { + return this.playSound(); + } + return false; +}; + +Parser.prototype.playMusic = function() { + var name = this.consumeMusicName(); + var fade = this.matchFade(); + ViewActivity.getInstance().music(name, fade); + return false; +}; + +Parser.prototype.playSound = function() { + var loop = false; + if (this.match(TokenType.SOUND)) loop = false; + else if (this.match(TokenType.SOUNDLOOP)) loop = true; + + var name = this.consumeMusicName(); + var fade = this.matchFade(); + ViewActivity.getInstance().sound(name, loop, fade); + return false; +}; + +Parser.prototype.playAmbience = function() { + var name = this.consumeMusicName(); + var fade = this.matchFade(); + return false; +}; + + +Parser.prototype.consumeMusicName = function() { + var name = ""; + if (this.lookMatch(1, TokenType.LBRACKET)) { + // music_list["music"] + this.consume(TokenType.WORD); + this.consume(TokenType.LBRACKET); + name = this.consume(TokenType.TEXT).getText(); + this.consume(TokenType.RBRACKET); + } else if (this.lookMatch(0, TokenType.TEXT)) { + name = this.consume(TokenType.TEXT).getText(); + } else { + name = this.consume(TokenType.WORD).getText(); + } + return name; +}; + +Parser.prototype.matchFade = function() { + var result = new FadeInfo(); + if (this.match(TokenType.FADEIN)) { + result.fadeIn = true; + result.duration = this.consumeDouble(); + } else if (this.match(TokenType.FADEOUT)) { + result.fadeOut = true; + result.duration = this.consumeDouble(); + } + return result; +}; + +Parser.prototype.matchWithEffect = function() { + if (this.match(TokenType.WITH)) { + return this.consume(TokenType.WORD).getText(); + } + return ""; +}; + +Parser.prototype.consumeDouble = function() { + return parseFloat(this.consume(TokenType.NUMBER).getText()); +}; + +Parser.prototype.consumeBoolean = function() { + return "true" === (this.consume(TokenType.NUMBER).getText().toLowerCase()); +}; + +Parser.prototype.matchWithEffect = function() { + if (this.match(TokenType.WITH)) { + return this.consume(TokenType.WORD).getText(); + } + return ""; +}; + +Parser.prototype.match_1 = function(type) { + if (this.get(0).getType() !== type) return false; + this.position++; + return true; +}; +Parser.prototype.match_2 = function(token, type) { + if (type !== token.getType()) return false; + this.position++; + return true; +}; +Parser.prototype.match = function(arg1, arg2) { + if (arguments.length === 1) return this.match_1(arg1); + else return this.match_2(arg1, arg2); +}; + +Parser.prototype.consume = function(type) { + if (this.get(0).getType() !== type) throw "Ожидался токен " + type + "."; + return this.tokens[this.position++]; +}; + +Parser.prototype.lookMatch = function(pos, type) { + return (type === this.get(pos).getType()); +}; + +Parser.prototype.get = function(offset) { + if (this.position + offset >= this.tokensCount) return this.EOF; + return this.tokens[this.position + offset]; +}; + + + + diff --git a/public_html/resources/js/Token.js b/public_html/resources/js/Token.js new file mode 100644 index 0000000..f125dfb --- /dev/null +++ b/public_html/resources/js/Token.js @@ -0,0 +1,12 @@ +function Token(text, type) { + this.text = text; + this.type = type; +} + +Token.prototype.getText = function () { return this.text; }; + +Token.prototype.getType = function () { return this.type; }; + +Token.prototype.toString = function () { + return this.type + " " + this.text; +}; \ No newline at end of file diff --git a/public_html/resources/js/TokenType.js b/public_html/resources/js/TokenType.js new file mode 100644 index 0000000..af18267 --- /dev/null +++ b/public_html/resources/js/TokenType.js @@ -0,0 +1,76 @@ +TokenType = { + COMMAND : 1, // начинается с $ + WORD : 2, + TEXT : 3, + NUMBER : 4, + + // операторы и спецсимволы + EQ : 5, + PLUS : 6, + MINUS : 7, + LT : 8, + GT : 9, + LPAREN : 10, + RPAREN : 11, + LBRACKET : 12, + RBRACKET : 13, + EXCL : 14, + COLON : 15, + + // ключевые слова + PLAY : 16, + QUEUE : 17, + STOP : 18, + MUSIC : 19, + AMBIENCE : 20, + SOUND : 21, + SOUNDLOOP : 22, + FADEIN : 23, + FADEOUT : 24, + + SCENE : 25, + ANIM : 26, + BG : 27, + CG : 28, + + WINDOW : 29, + HIDE : 30, + SHOW : 31, + + AT : 32, + AS : 33, + WITH : 34, + DEFINE : 35, + + MENU : 36, + ENDMENU : 37, + JUMP : 38, + LABEL : 39, + RETURN : 40, + + IF : 41, + ELSE : 42, + ENDIF : 43, + OR : 44, + AND : 45, + NOT : 46, + + // команды + RENPY_PAUSE : 47, + RENPY_SAY : 48, + PERSISTENT_SPRITE_TIME : 49, + PROLOG_TIME : 50, + DAY_TIME : 51, + SUNSET_TIME : 52, + NIGHT_TIME : 53, + MAKE_NAMES_KNOWN : 54, + MAKE_NAMES_UNKNOWN : 55, + SET_NAME : 56, + DISABLE_ALL_ZONES : 57, + DISABLE_CURRENT_ZONE : 58, + RESET_ZONE : 59, + SET_ZONE : 60, + SHOW_MAP : 61, + + EOF : 63 +}; \ No newline at end of file diff --git a/public_html/resources/js/Transitions.js b/public_html/resources/js/Transitions.js new file mode 100644 index 0000000..48ab41f --- /dev/null +++ b/public_html/resources/js/Transitions.js @@ -0,0 +1,46 @@ +function Transition(type) { + this.type = type; +}; + +Transition.prototype.TYPE_FADE = 0; +Transition.prototype.TYPE_DISSOLVE = 1; + +var transitions = { + "fade": { + "type": Transition.TYPE_FADE, + "outTime": 500, + "holdTime": 0, + "inTime": 500 + }, + "fade2": { + "type": Transition.TYPE_FADE, + "outTime": 1000, + "holdTime": 0, + "inTime": 1000 + }, + "fade3": { + "type": Transition.TYPE_FADE, + "outTime": 1500, + "holdTime": 0, + "inTime": 1500 + }, + + "dspr": { + "type": Transition.TYPE_FADE, + "outTime": 200, + "holdTime": 0, + "inTime": 200 + }, + "dissolve": { + "type": Transition.TYPE_FADE, + "outTime": 1000, + "holdTime": 0, + "inTime": 1000 + }, + "dissolve2": { + "type": Transition.TYPE_FADE, + "outTime": 2000, + "holdTime": 0, + "inTime": 2000 + } +}; \ No newline at end of file diff --git a/public_html/resources/js/Utils.js b/public_html/resources/js/Utils.js new file mode 100644 index 0000000..657bab0 --- /dev/null +++ b/public_html/resources/js/Utils.js @@ -0,0 +1,73 @@ +function FadeInfo() { + this.fadeIn = false; + this.fadeOut = false; + this.duration = 0; +} + + +function TextUtilsImpl() { } + +TextUtilsImpl.prototype.isEmpty = function (text) { + if (text === undefined) return true; + return text.length === 0; +}; + +var TextUtils = new TextUtilsImpl(); + + +String.prototype.equalsIgnoreCase = function(text) { + return this.toLowerCase() == text.toLowerCase(); +}; + +String.prototype.equals = function(text) { + return this == text; +}; + +String.prototype.contains = function(text) { + return this.indexOf(text) >= 0; +}; + +/*String.prototype.startsWith = function(text) { + return this.indexOf(text) == 0; +};*/ + +String.prototype.replaceAll = function (find, replace) { + var str = this; + return str.replace(new RegExp(find, 'g'), replace); +}; + + +function toColor(num) { + num >>>= 0; + var b = num & 0xFF, + g = (num & 0xFF00) >>> 8, + r = (num & 0xFF0000) >>> 16, + a = ( (num & 0xFF000000) >>> 24 ) / 255 ; + return "rgba(" + [r, g, b, a].join(",") + ")"; +} + + +var PathResolver = new function () { + this.background = function (type, name) { + return "resources/images/" + type.toLowerCase() + "/" + name + ".jpg"; + }; + this.sprite = function (whoid, params) { + var path = "file:///E:/everlastingsummer/sprites/"; + path += whoid.toLowerCase() + "/"; + path += (TextUtils.isEmpty(params) ? "normal" : params); + path += ".png"; + return path; + }; + this.music = function (name) { +// return "resources/music/" + name + ".ogg"; + return "file:///E:/everlastingsummer/music/" + name + ".ogg"; + }; + this.sound = function (name) { + var path = "file:///E:/everlastingsummer/sfx/"; + if (path.startsWith("sfx_")) path += name.substring(4); + else path += name; + path += ".ogg"; + return path; +// return "resources/music/" + name + ".ogg"; + }; +}; \ No newline at end of file diff --git a/public_html/resources/js/Views.js b/public_html/resources/js/Views.js new file mode 100644 index 0000000..b88c84b --- /dev/null +++ b/public_html/resources/js/Views.js @@ -0,0 +1,272 @@ +/* global TextUtils, PathResolver, ViewActivity, transitions, Transition */ + +function Views(parser) { + this.parser = parser; + this.screenWidth = window.innerWidth; + this.screenHeight = window.innerHeight; + + this.backgroundTag = document.getElementById("background"); + this.windowTag = document.getElementById("window"); + this.textAuthorTag = document.getElementById("textAuthor"); + this.textContentTag = document.getElementById("textContent"); + + this.musicPlayerAudio = new Audio(); + this.soundPlayerAudio = new Audio(); + + this.backgroundName = ""; + this.backgroundType = ""; + this.characters = new Characters(); + this.characters.makeNamesKnown(); + + this.useSpriteTransitions = true; + this.spriteInContainer = {}; + + this.blockTap = false; + this.cancelNextStep = false; + this.nextCommandRunnable = function () { + Views.blockTap = false; + if (!Views.cancelNextStep) parser.next(); + }; +} + +Views.prototype.getInstance = function () { + return this; +}; + +Views.prototype.onTouch = function (e) { + if (this.blockTap) return; + + this.cancelNextStep = true; + this.parser.next(); +}; + +Views.prototype.windowShow = function (effect) { + if (this.windowTag.style.visibility !== "visible") { + this.windowTag.style.visibility = "visible"; + } + if (!TextUtils.isEmpty(effect)) { + this.background(this.backgroundType, this.backgroundName, effect); + return true; + } + return false; +}; + +Views.prototype.windowHide = function (effect) { + if (this.windowTag.style.visibility !== "hidden") { + this.windowTag.style.visibility = "hidden"; + } + if (!TextUtils.isEmpty(effect)) { + this.background(this.backgroundType, this.backgroundName, effect); + return true; + } + return false; +}; + +Views.prototype.windowSwitchVisibility = function () { + if (this.windowTag.style.visibility === "hidden") { + this.windowTag.style.visibility = "visible"; + } else { + this.windowTag.style.visibility = "hidden"; + } +}; + +Views.prototype.background = function (type, name, effect) { + if (TextUtils.isEmpty(name)) return; + this.backgroundType = type; + this.backgroundName = name; + this.text(""); + + var animationTime = 0; + if (name.equalsIgnoreCase("black")) { + this.backgroundTag.style.background = "black"; + } else if (name.equalsIgnoreCase("white")) { + this.backgroundTag.style.background = "white"; + } else { + this.backgroundTag.style.background = 'url("' + PathResolver.background(type, name) + '") no-repeat center center fixed'; + this.backgroundTag.style.backgroundSize = 'cover'; + } + this.pause(animationTime, false); +}; + +Views.prototype.spritesClear = function () { + $('#container').empty(); + this.spriteInContainer = {}; +}; + +Views.prototype.sprite = function (whoid, params, position, alias, effect) { + var img = undefined; + var key = TextUtils.isEmpty(alias) ? whoid : alias; + if (key in this.spriteInContainer) { + img = this.spriteInContainer[key]; + } else { + //if (this.useSpriteTransitions) img = new AnimatableImageView(this); + //else img = new ImageView(this); + img = $('', {class: "sprite", style: "height: " + this.screenHeight + "px;" }); + this.spriteInContainer[key] = img; + } + var path = PathResolver.sprite(whoid, params); + try { + //if (useSpriteTransitions) ((AnimatableImageView)img).setImageBitmap(bitmap, effect); + //else img.setImageBitmap(bitmap); + img.one("load", function() { + ViewActivity.getInstance().setSpritePosition($(this), position); + }); + img.attr('src', path); + if (!$.contains($('#container'), img)) + $('#container').append(img); + if (effect in transitions) { + var transition = transitions[effect]; + if (transition["type"] === Transition.TYPE_FADE) { + img.hide().fadeIn(transition["inTime"]); + } + } + } catch (ioe) { + console.log("sprite: " + path, ioe); + //if (Logger.DEBUG) Logger.log("sprite: " + path, ioe); + } +}; + +Views.prototype.hideSprite = function (whoid, effect) { + if (!(whoid in this.spriteInContainer)) return; + this.hide(whoid, effect); +}; + +Views.prototype.hide = function (whoid, effect) { + var img = this.spriteInContainer[whoid]; + if (img == null) return; + if (effect in transitions) { + var transition = transitions[effect]; + if (transition["type"] === Transition.TYPE_FADE) { + img.fadeOut(transition["outTime"], function() { + $(this).remove(); + }); + } + } else { + img.remove(); + } + delete this.spriteInContainer[whoid]; +}; + +Views.prototype.setSpritePosition = function (img, position) { + var width = this.screenWidth; + var imgWidth = img.width(); + if (TextUtils.isEmpty(position) || position.equals("center")) { + img.css("left", Math.floor(width / 2 - imgWidth / 2) + "px"); + } else if (position.equals("left")) { + img.css("left", Math.floor(imgWidth / 6) + "px"); + } else if (position.equals("cleft")) { + img.css("left", Math.floor(width / 2 - imgWidth + imgWidth / 8) + "px"); + } else if (position.equals("right")) { + img.css("right", Math.floor(imgWidth / 6) + "px"); + } else if (position.equals("cright")) { + img.css("right", Math.floor(width / 2 - imgWidth + imgWidth / 8) + "px"); + } else if (position.equals("fleft")) { + img.css("left", Math.floor(-imgWidth / 4) + "px"); + } else if (position.equals("fright")) { + img.css("right", Math.floor(-imgWidth / 4) + "px"); + } +}; + +Views.prototype.pause = function (duration, hard) { + this.blockTap = hard; + this.cancelNextStep = false; + /* var now = new Date().getTime(); + while(new Date().getTime() < now + sleepDuration){ ; } */ + setTimeout(this.nextCommandRunnable, duration); +}; + +Views.prototype.text_1 = function (text) { + this.textAuthorTag.innerText = ""; + if (TextUtils.isEmpty(text)) this.windowHide(""); + else { + this.windowShow(""); + this.formatString(this.textContentTag, text); + } +}; +Views.prototype.text_2 = function (whoid, text) { + if (whoid.equalsIgnoreCase("th")) this.text("~ " + text + " ~"); + else if (!this.characters.contains(whoid)) this.text(text); + else { + this.windowShow(""); + var person = this.characters.get(whoid); + this.textAuthorTag.innerText = person.name; + this.textAuthorTag.style.color = toColor(person.color); + this.formatString(this.textContentTag, text); + } +}; +Views.prototype.text = function (arg1, arg2) { + if (arguments.length === 1) this.text_1(arg1); + else this.text_2(arg1, arg2); +}; + +Views.prototype.formatString = function (tag, text) { + var edited = text.replaceAll("\\{w.*?\\}", ""); + if (edited.contains("{center}")) { + edited = text.replaceAll("\\{center\\}", ""); + this.textContentTag.style.textAlign = "center"; + } else { + this.textContentTag.style.textAlign = "left"; + } + if (edited.contains("{html}")) { + edited = edited.replaceAll("\\{html\\}", ""); + return edited; + } + var codes = ["b","i","s","u","big","small"]; + var html = false; + for (var i = 0; i < codes.length; i++) { + var ch = codes[i]; + if (edited.contains("{"+ch+"}")) { + edited = edited.replace("{"+ch+"}", "<"+ch+">"); + edited = edited.replace("{/"+ch+"}", ""); + html = true; + } + } + if (html) { + edited = edited.replace("\n", "
"); + tag.innerHtml = edited; + } else { + tag.innerText = edited; + } +}; + +Views.prototype.makeNamesKnown = function () { + this.characters.makeNamesKnown(); +}; + +Views.prototype.makeNamesUnknown = function () { + this.characters.makeNamesUnknown(); +}; + +Views.prototype.meet = function (whoid, name) { + this.characters.setName(whoid, name); +}; + +Views.prototype.disableAllZones = function () { +}; + +Views.prototype.disableCurrentZone = function () { +}; + +Views.prototype.resetZone = function (zone) { +}; + +Views.prototype.setZone = function (name, label) { +}; + +Views.prototype.showMap = function () { +}; + +Views.prototype.menu = function (menu) { +}; + +Views.prototype.music = function (name, fade) { + // !musicPlayerAudio.paused; + this.musicPlayerAudio.src = PathResolver.music(name); + this.musicPlayerAudio.play(); + if (fade.fadeIn || fade.fadeOut) { + var startVolume = fade.fadeIn ? 0.0 : 1.0; + $(this.musicPlayerAudio).prop("volume", startVolume); + var targetVolume = fade.fadeIn ? 1.0 : 0.0; + $(this.musicPlayerAudio).animate({volume: targetVolume}, fade.duration * 1000); + } +}; diff --git a/public_html/resources/js/jquery-1.11.3.min.js b/public_html/resources/js/jquery-1.11.3.min.js new file mode 100644 index 0000000..0f60b7b --- /dev/null +++ b/public_html/resources/js/jquery-1.11.3.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,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=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.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},m.extend=m.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||m.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&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.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(k.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&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},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=r(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:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.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=r(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),m.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||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=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)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(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 pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(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 p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.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},B=b?function(a,b){if(a===b)return l=!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===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.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=ga.selectors={cacheLength:50,createPseudo:ia,match:X,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(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===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]||ga.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]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(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(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.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.replace(Q," ")+" ").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(),s=!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&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&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]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)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&&(s&&((l[u]||(l[u]={}))[a]=[w,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()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(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),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?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===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.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 Z.test(a.nodeName)},input:function(a){return Y.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:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;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=[w,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[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(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 ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(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 wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(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?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.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]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(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}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(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&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.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){m.each(b,function(b,c){var d=m.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&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.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},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.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?m.extend(a,d):d}},e={};return d.pipe=d.then,m.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&&m.isFunction(a.promise)?e:0,g=1===f?a:m.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]&&m.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 H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.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()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.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=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.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 m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.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},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.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?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.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]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.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||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.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)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.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=((m.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?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._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++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.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)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.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),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).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=wa(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=wa(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?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.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 m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(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,m.cleanData(ua(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,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("