{"version":3,"file":"common.js","mappings":"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","sources":["webpack:///./ancillary-editor.js","webpack:///./core.js","webpack:///./filter-tables.js","webpack:///./form-editor-helper.js","webpack:///./form-editor.js","webpack:///./image-dialog.js","webpack:///./messagebox.js","webpack:///./popup.js","webpack:///./string-table.js","webpack:///./vendor/jquery-ui-1.10.4.custom.js","webpack:///./vendor/jquery.form.min.js","webpack:///./vendor/js-cookie.js","webpack:///./vendor/combobox.js","webpack:///../../node_modules/jquery/dist/jquery.js"],"sourcesContent":["define(\"ancillary-editor\", [\"jquery\", \"core\", \"form-editor\", \"filter-tables\", \"string-table\"], function ($, core, formEditor, filterTables, stringTable)\r\n{\r\n\r\n // private\r\n\r\n var root = null;\r\n var metaUrl = null;\r\n\r\n var setupLinksForm = function ()\r\n {\r\n\r\n root.find(\"a[data-entity-edit]\").each(function ()\r\n {\r\n var a = $(this);\r\n\r\n if (a.hasClass(\"--data-entity-edit\"))\r\n {\r\n return;\r\n }\r\n\r\n a.addClass(\"--data-entity-edit\");\r\n\r\n a.on(\"click\", function() {\r\n\r\n var url = a.attr(\"href\");\r\n\r\n editor.click(url, true);\r\n\r\n return false;\r\n\r\n });\r\n\r\n });\r\n };\r\n\r\n var setupLinks = function()\r\n {\r\n\r\n var links = root.find(\"a[data-entity-edit]\");\r\n\r\n links.each(function () {\r\n var a = $(this);\r\n\r\n if (a.hasClass(\"--data-entity-edit\")) {\r\n return;\r\n }\r\n\r\n a.addClass(\"--data-entity-edit\");\r\n\r\n a.on(\"click\", function () {\r\n var section = a.closest(\"section\");\r\n var url = a.attr(\"href\");\r\n\r\n if (section.length == 0) {\r\n return true;\r\n }\r\n\r\n // reset all links in this section to not be active\r\n section.find(\"a[data-entity-edit]\").removeAttr(\"aria-selected\");\r\n a.attr(\"aria-selected\", \"true\");\r\n\r\n editor.click(url, true);\r\n\r\n return false;\r\n });\r\n\r\n });\r\n\r\n var highlight = $(\"[data-highlight-listing]\").data(\"highlight-listing\");\r\n\r\n if (typeof highlight != \"undefined\")\r\n {\r\n var target = root.find(\"a[href='\" + highlight + \"']\");\r\n\r\n target.attr(\"aria-selected\", \"true\");\r\n }\r\n\r\n };\r\n\r\n var setupPaging = function()\r\n {\r\n\r\n var links = $(\"ul.paging_links a\");\r\n\r\n links.off(\"click\");\r\n links.on(\"click\", function () {\r\n filterTables.paging({\r\n root: root,\r\n urlMatch: null,\r\n url: $(this).attr(\"href\"),\r\n callback: function () {\r\n setupLinks();\r\n setupFilter();\r\n setupPaging();\r\n }\r\n });\r\n\r\n return false;\r\n });\r\n\r\n };\r\n\r\n var setupFilter = function()\r\n {\r\n var ctrl = root.find(\"form[role='search']\");\r\n\r\n if (ctrl.length == 0) {\r\n return;\r\n }\r\n\r\n core.autoComplete();\r\n\r\n ctrl.off(\"submit\");\r\n ctrl.on(\"submit\", function () {\r\n filterTables.execute({\r\n root: root,\r\n urlMatch: null,\r\n callback: function()\r\n {\r\n setupLinks();\r\n setupFilter();\r\n setupPaging();\r\n }\r\n });\r\n\r\n return false;\r\n });\r\n\r\n };\r\n\r\n var checkForInitialFormToLoad = function (target) {\r\n\r\n var templateUrl = $(target).data('template-url');\r\n var hash = window.location.hash ? window.location.hash.substring(1) : null;\r\n\r\n if (!templateUrl || !hash)\r\n return;\r\n\r\n var url = templateUrl + hash;\r\n editor.click(templateUrl + hash, true);\r\n\r\n // Find the correct link on the page if it exists, it may not due to pagination though.\r\n $(\"a[href='\" + url + \"']\").attr(\"aria-selected\", \"true\");\r\n window.location.hash = ''; // Reset the hash so that if they do other things and refresh they won't see the old form. Could be removed if all other links used the hash tag though.\r\n };\r\n\r\n // public\r\n\r\n var editor = {};\r\n\r\n editor.refreshListing = function(url)\r\n {\r\n filterTables.execute({\r\n root: root,\r\n urlMatch: url,\r\n callback: function()\r\n {\r\n setupLinks();\r\n setupFilter();\r\n }\r\n });\r\n };\r\n\r\n editor.refreshEditor = function(url)\r\n {\r\n editor.click(url, false);\r\n };\r\n\r\n editor.refreshMeta = function ()\r\n {\r\n\r\n if (metaUrl == null || metaUrl === \"\")\r\n {\r\n return;\r\n }\r\n\r\n $.ajax({\r\n url: metaUrl,\r\n headers: { \"X-Requested-With\": \"AjaxClient\" },\r\n cache: false\r\n }).done(function (data, status, xhr)\r\n {\r\n $(\"div.overview_meta\").replaceWith(data);\r\n });\r\n\r\n };\r\n\r\n editor.hideEditor = function()\r\n {\r\n formEditor.close({ container: root, message: stringTable.get(\"LABEL_SCRIPTS_MESSAGE_DELETED\") });\r\n };\r\n\r\n editor.click = function (url, showLoading)\r\n {\r\n\r\n var settings = {\r\n container: root,\r\n url: url,\r\n showLoading: showLoading,\r\n callbackLoaded: function()\r\n {\r\n $(document).trigger('ancillary-editor.loaded');\r\n setupLinksForm();\r\n },\r\n callbackSave: function(saveUrl)\r\n {\r\n editor.refreshListing(saveUrl);\r\n editor.refreshEditor(saveUrl);\r\n editor.refreshMeta();\r\n },\r\n callbackDelete: function (redirect, redirectUrl)\r\n {\r\n if (redirect == \"full\")\r\n {\r\n document.location.href = redirectUrl;\r\n\r\n return;\r\n }\r\n\r\n editor.refreshListing(null);\r\n\r\n if (redirect == \"true\") {\r\n editor.click(redirectUrl);\r\n } else {\r\n editor.hideEditor();\r\n }\r\n editor.refreshMeta();\r\n }\r\n };\r\n\r\n formEditor.create(settings);\r\n\r\n };\r\n\r\n editor.standalone = function (target, redirectOnSave)\r\n {\r\n\r\n root = target.closest(\"div.l-colgroup,div.tabpanel,div#popup,div.page_main\");\r\n\r\n if (root.length === 0)\r\n {\r\n console.warn(\"no root found for editor to hook into\");\r\n }\r\n\r\n var settings = {\r\n container: root,\r\n callbackSave: function (saveUrl)\r\n {\r\n if(redirectOnSave) {\r\n document.location.replace(saveUrl);\r\n\r\n return;\r\n }\r\n\r\n editor.refreshListing(saveUrl);\r\n editor.refreshEditor(saveUrl);\r\n editor.refreshMeta();\r\n },\r\n callbackDelete: function (redirect, redirectUrl)\r\n {\r\n if (redirect == \"full\")\r\n {\r\n document.location.href = redirectUrl;\r\n\r\n return;\r\n }\r\n\r\n editor.refreshListing(null);\r\n\r\n if (redirect == \"true\")\r\n {\r\n editor.click(redirectUrl);\r\n } else\r\n {\r\n editor.hideEditor();\r\n }\r\n editor.refreshMeta();\r\n }\r\n };\r\n\r\n formEditor.setup(settings);\r\n\r\n };\r\n\r\n editor.init = function(target)\r\n {\r\n\r\n var clone = null;\r\n\r\n var rootEl = $(\"<div data-ancillary-editor />\");\r\n\r\n if (target.siblings(\"section.l-col-1-2\").length == 1) { // \r\n clone = target.siblings(\"section.l-col-1-2\").clone();\r\n\r\n clone.attr(\"data-editor-root\", \"\");\r\n\r\n target.siblings(\"section.l-col-1-2\").remove();\r\n }\r\n\r\n target.wrap(rootEl);\r\n\r\n rootEl = target.closest(\"div[data-ancillary-editor]\");\r\n\r\n if (clone != null) {\r\n rootEl.append(clone);\r\n\r\n var forms = rootEl.find(\"form[data-editor-form]\");\r\n\r\n if(forms.length == 1) {\r\n editor.standalone(forms, false);\r\n }\r\n\r\n }\r\n\r\n root = rootEl;\r\n\r\n var meta = $(\"section[data-meta-url]\");\r\n\r\n if (meta.length == 1) {\r\n metaUrl = meta.data(\"meta-url\");\r\n }\r\n\r\n setupLinks();\r\n setupFilter();\r\n setupPaging();\r\n checkForInitialFormToLoad(target);\r\n\r\n };\r\n\r\n return editor;\r\n\r\n});","define(\"core\", [\"jquery\", \"combobox\", \"image-dialog\", \"cookies\"], function ($, combobox, imageDialog, Cookies)\r\n{\r\n /*\r\n\t* Private\r\n\t*/\r\n\r\n /*\r\n\t* Public\r\n\t*/\r\n var core = function () { };\r\n\r\n core.LISTING_REFRESH_EVENT = \"refresh-listing\";\r\n core.AJAX_HEADER_VALUE = \"AjaxClient\";\r\n\r\n var keyCodeMap = {\r\n 48: \"0\", 49: \"1\", 50: \"2\", 51: \"3\", 52: \"4\", 53: \"5\", 54: \"6\", 55: \"7\", 56: \"8\", 57: \"9\", 59: \";\",\r\n 65: \"a\", 66: \"b\", 67: \"c\", 68: \"d\", 69: \"e\", 70: \"f\", 71: \"g\", 72: \"h\", 73: \"i\", 74: \"j\", 75: \"k\", 76: \"l\",\r\n 77: \"m\", 78: \"n\", 79: \"o\", 80: \"p\", 81: \"q\", 82: \"r\", 83: \"s\", 84: \"t\", 85: \"u\", 86: \"v\", 87: \"w\", 88: \"x\", 89: \"y\", 90: \"z\",\r\n 96: \"0\", 97: \"1\", 98: \"2\", 99: \"3\", 100: \"4\", 101: \"5\", 102: \"6\", 103: \"7\", 104: \"8\", 105: \"9\"\r\n }\r\n\r\n $.fn.setupNavigation = function (settings) {\r\n\r\n settings = $.extend({\r\n menuHoverClass: 'show-menu'\r\n }, settings);\r\n\r\n // Add ARIA role to menubar and menu items\r\n $(this).attr('role', 'menubar').find('li').attr('role', 'menuitem');\r\n\r\n var top_level_links = $(this).find('> li > a');\r\n var all_level_links = $(this).find('> li a');\r\n\r\n $(this).find(\"ul ul\")\r\n .closest(\"li\")\r\n .addClass(\"show-more\")\r\n .append($(\"<span />\"));\r\n\r\n // Added by Terrill: (removed temporarily: doesn't fix the JAWS problem after all)\r\n // Add tabindex=\"0\" to all top-level links \r\n // Without at least one of these, JAWS doesn't read widget as a menu, despite all the other ARIA\r\n //$(top_level_links).attr('tabindex','0');\r\n\r\n // Set tabIndex to -1 so that top_level_links can't receive focus until menu is open\r\n $(top_level_links).next('ul')\r\n .attr('data-test', 'true')\r\n .attr({ 'aria-hidden': 'true', 'role': 'menu' })\r\n .find('a')\r\n .attr('tabIndex', -1);\r\n\r\n // Adding aria-haspopup for appropriate items\r\n $(this).find('li > a').each(function () {\r\n if ($(this).next('ul').length > 0)\r\n $(this).parent('li').attr('aria-haspopup', 'true');\r\n });\r\n\r\n $(all_level_links).hover(function ()\r\n {\r\n $(this).closest('ul.dropdown-nav')\r\n .find('.' + settings.menuHoverClass)\r\n .attr('aria-hidden', 'true')\r\n .removeClass(settings.menuHoverClass)\r\n .find('a')\r\n .attr('tabIndex', -1);\r\n $(this).next('ul')\r\n .attr('aria-hidden', 'false')\r\n .addClass(settings.menuHoverClass)\r\n .find('a')\r\n .attr('tabIndex', 0);\r\n });\r\n $(top_level_links).focus(function () {\r\n $(this).closest('ul')\r\n // Removed by Terrill \r\n // The following was adding aria-hidden=\"false\" to root ul since menu is never hidden\r\n // and seemed to be causing flakiness in JAWS (needs more testing) \r\n // .attr('aria-hidden', 'false') \r\n .find('.' + settings.menuHoverClass)\r\n .attr('aria-hidden', 'true')\r\n .removeClass(settings.menuHoverClass)\r\n .find('a')\r\n .attr('tabIndex', -1);\r\n $(this).next('ul')\r\n .attr('aria-hidden', 'false')\r\n .addClass(settings.menuHoverClass)\r\n .find('a').attr('tabIndex', 0);\r\n });\r\n\r\n // Bind arrow keys for navigation\r\n $(top_level_links).keydown(function (e) {\r\n if (e.keyCode == 37) {\r\n e.preventDefault();\r\n // This is the first item\r\n if ($(this).parent('li').prev('li').length == 0) {\r\n $(this).parents('ul').find('> li').last().find('a').first().focus();\r\n } else {\r\n $(this).parent('li').prev('li').find('a').first().focus();\r\n }\r\n } else if (e.keyCode == 38) {\r\n e.preventDefault();\r\n if ($(this).parent('li').find('ul').length > 0) {\r\n $(this).parent('li').find('ul')\r\n .attr('aria-hidden', 'false')\r\n .addClass(settings.menuHoverClass)\r\n .find('a').attr('tabIndex', 0)\r\n .last().focus();\r\n }\r\n } else if (e.keyCode == 39) {\r\n e.preventDefault();\r\n // This is the last item\r\n if ($(this).parent('li').next('li').length == 0) {\r\n $(this).parents('ul').find('> li').first().find('a').first().focus();\r\n } else {\r\n $(this).parent('li').next('li').find('a').first().focus();\r\n }\r\n } else if (e.keyCode == 40) {\r\n e.preventDefault();\r\n if ($(this).parent('li').find('ul').length > 0) {\r\n $(this).parent('li').find('ul')\r\n .attr('aria-hidden', 'false')\r\n .addClass(settings.menuHoverClass)\r\n .find('a').attr('tabIndex', 0)\r\n .first().focus();\r\n }\r\n } else if (e.keyCode == 13 || e.keyCode == 32) {\r\n // If submenu is hidden, open it\r\n e.preventDefault();\r\n $(this).parent('li').find('ul[aria-hidden=true]')\r\n .attr('aria-hidden', 'false')\r\n .addClass(settings.menuHoverClass)\r\n .find('a').attr('tabIndex', 0)\r\n .first().focus();\r\n } else if (e.keyCode == 27) {\r\n e.preventDefault();\r\n $('.' + settings.menuHoverClass)\r\n .attr('aria-hidden', 'true')\r\n .removeClass(settings.menuHoverClass)\r\n .find('a')\r\n .attr('tabIndex', -1);\r\n } else {\r\n $(this).parent('li').find('ul[aria-hidden=false] a').each(function () {\r\n if ($(this).text().substring(0, 1).toLowerCase() == keyCodeMap[e.keyCode]) {\r\n $(this).focus();\r\n return false;\r\n }\r\n });\r\n }\r\n });\r\n\r\n var links = $(top_level_links).parent('li').find('ul').find('a');\r\n $(links).keydown(function (e) {\r\n if (e.keyCode == 38) {\r\n e.preventDefault();\r\n // This is the first item\r\n if ($(this).parent('li').prev('li').length == 0) {\r\n $(this).parents('ul').parents('li').find('a').first().focus();\r\n } else {\r\n $(this).parent('li').prev('li').find('a').first().focus();\r\n }\r\n } else if (e.keyCode == 40) {\r\n e.preventDefault();\r\n if ($(this).parent('li').next('li').length == 0) {\r\n $(this).parents('ul').parents('li').find('a').first().focus();\r\n } else {\r\n $(this).parent('li').next('li').find('a').first().focus();\r\n }\r\n } else if (e.keyCode == 27 || e.keyCode == 37) {\r\n e.preventDefault();\r\n $(this)\r\n .parents('ul').first()\r\n .prev('a').focus()\r\n .parents('ul').first().find('.' + settings.menuHoverClass)\r\n .attr('aria-hidden', 'true')\r\n .removeClass(settings.menuHoverClass)\r\n .find('a')\r\n .attr('tabIndex', -1);\r\n } else if (e.keyCode == 32) {\r\n e.preventDefault();\r\n window.location = $(this).attr('href');\r\n } else {\r\n var found = false;\r\n $(this).parent('li').nextAll('li').find('a').each(function () {\r\n if ($(this).text().substring(0, 1).toLowerCase() == keyCodeMap[e.keyCode]) {\r\n $(this).focus();\r\n found = true;\r\n return false;\r\n }\r\n });\r\n\r\n if (!found) {\r\n $(this).parent('li').prevAll('li').find('a').each(function () {\r\n if ($(this).text().substring(0, 1).toLowerCase() == keyCodeMap[e.keyCode]) {\r\n $(this).focus();\r\n return false;\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n // Hide menu if click or focus occurs outside of navigation\r\n $(this).find('a').last().keydown(function (e) {\r\n if (e.keyCode == 9) {\r\n // If the user tabs out of the navigation hide all menus\r\n $('.' + settings.menuHoverClass)\r\n .attr('aria-hidden', 'true')\r\n .removeClass(settings.menuHoverClass)\r\n .find('a')\r\n .attr('tabIndex', -1);\r\n }\r\n });\r\n\r\n var selectedLink = $(this).find('[aria-selected=\"true\"]');\r\n\r\n if (selectedLink.length > 0)\r\n {\r\n var closest = selectedLink.parentsUntil(\"ul.dropdown-nav\", '[aria-haspopup=\"true\"][role=\"menuitem\"]');\r\n closest.addClass('child-selected');\r\n }\r\n\r\n $(document).click(function () { $('.' + settings.menuHoverClass).attr('aria-hidden', 'true').removeClass(settings.menuHoverClass).find('a').attr('tabIndex', -1); });\r\n\r\n $(this).click(function (e) {\r\n e.stopPropagation();\r\n });\r\n }\r\n\r\n $.fn.buttonDropdown = function () {\r\n\r\n $(this).each(function() {\r\n var $this = $(this);\r\n\r\n if ($this.attr('role') == 'menubar') {\r\n return;\r\n }\r\n\r\n // Add ARIA role to menubar and menu items\r\n $this.attr('role', 'menubar');\r\n var $openbutton = $this.find('> a, > button').attr('aria-haspopup', 'true');\r\n var $menu = $this.find('ul').attr('role', 'menu').attr('aria-expanded', 'false');\r\n\r\n var closeMenu = function () {\r\n $this.removeClass('open');\r\n $menu.attr('aria-expanded', 'false');\r\n\r\n $(document).off('click.dropdown-menu');\r\n $(document).off('keydown.dropdown-menu');\r\n };\r\n\r\n var keyCloseMenu = function(e) {\r\n if (e.keyCode == 27) {\r\n closeMenu();\r\n $openbutton.focus();\r\n }\r\n }\r\n\r\n $openbutton.click(function (e) {\r\n e.preventDefault();\r\n\r\n if ($openbutton.attr('aria-disabled') === \"true\") {\r\n return;\r\n }\r\n\r\n $('.btn-dropdown.open').trigger('close.dropdown');\r\n\r\n var openMenu = !$this.hasClass('open');\r\n\r\n if (openMenu) {\r\n $this\r\n .addClass('open')\r\n .on('close.dropdown', closeMenu);\r\n $menu.attr('aria-expanded', 'true');\r\n\r\n // Once opened, hook up events to automatically close it based on clicks or esc key\r\n $(document)\r\n .on('click.dropdown-menu', closeMenu)\r\n .on('keydown.dropdown-menu', keyCloseMenu);\r\n } else {\r\n closeMenu();\r\n }\r\n });\r\n\r\n $this.click(function (e) {\r\n // don't propogate so the above doesn't fire as soon as we click within this area.\r\n e.stopPropagation();\r\n });\r\n\r\n // Try and automatically close the menu once you tab out of it.\r\n var timeoutId = null;\r\n $menu.focusout(function () {\r\n timeoutId = setTimeout(closeMenu, 100);\r\n });\r\n $menu.focusin(function () {\r\n clearTimeout(timeoutId);\r\n });\r\n });\r\n }\r\n\r\n //btn-dropdown\r\n\r\n $.extend({\r\n getUrlVars: function() {\r\n var vars = [], hash;\r\n var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');\r\n for (var i = 0; i < hashes.length; i++) {\r\n hash = hashes[i].split('=');\r\n vars.push(hash[0]);\r\n vars[hash[0]] = hash[1];\r\n }\r\n return vars;\r\n },\r\n getUrlVar: function(name) {\r\n return $.getUrlVars()[name];\r\n }\r\n });\r\n\r\n $.fn.highlightText = function(options) {\r\n\r\n var settings = $.extend({\r\n value: \"\",\r\n completeMatch: false,\r\n split: false,\r\n reg: null,\r\n tagName: \"span\"\r\n }, options);\r\n\r\n if (settings.reg === null) {\r\n settings.reg = new RegExp(settings.value, \"ig\");\r\n }\r\n\r\n var NODE_TYPE_NODE = 1;\r\n var NODE_TYPE_TEXT = 3;\r\n\r\n var root = $(this);\r\n\r\n if (root.length === 0) {\r\n return;\r\n }\r\n\r\n var stack = [];\r\n\r\n if (settings.split) {\r\n var spl = settings.value.split(\" \");\r\n\r\n settings.reg = new RegExp(spl.join(\"|\"), \"ig\");\r\n }\r\n else {\r\n settings.reg = new RegExp(settings.value, \"ig\");\r\n }\r\n\r\n stack.push(root);\r\n\r\n while (stack.length > 0) {\r\n\r\n var pop = stack.pop();\r\n\r\n var node = pop[0];\r\n\r\n var ignore = false;\r\n var completeMatch = settings.completeMatch;\r\n var prematched = false;\r\n var tagName = settings.tagName;\r\n\r\n if (node.attributes != undefined) {\r\n ignore = node.attributes.getNamedItem(\"data-no-highlight\") != null;\r\n completeMatch = node.attributes.getNamedItem(\"data-highlight-complete\") != null;\r\n prematched = node.attributes.getNamedItem(\"data-highlight-result\") != null;\r\n }\r\n\r\n if (ignore || prematched) {\r\n continue;\r\n }\r\n\r\n if (node.nodeType === NODE_TYPE_TEXT) {\r\n if (completeMatch) {\r\n var v = value + \"\";\r\n\r\n if (node.nodeValue.toLowerCase() === v.toLowerCase()) {\r\n pop.replaceWith(\"<\" + tagName + \" data-highlight-result=\\\"\\\">\" + node.nodeValue + \"</\" + tagName + \">\");\r\n }\r\n }\r\n else {\r\n var nodeValue = node.nodeValue;\r\n var rep = nodeValue.replace(settings.reg, \"<\" + tagName + \" data-highlight-result=\\\"\\\">\\$&</\" + tagName + \">\");\r\n\r\n if (nodeValue !== rep) // replacement, so add to stack and continue\r\n {\r\n pop.replaceWith(rep);\r\n }\r\n\r\n }\r\n }\r\n\r\n if (node.nodeType !== NODE_TYPE_NODE) {\r\n continue;\r\n }\r\n\r\n pop.contents().each(function() {\r\n var object = $(this);\r\n stack.push(object);\r\n });\r\n\r\n }\r\n\r\n };\r\n\r\n // does an existing element have a named attribute attached to it?\r\n $.fn.attrExists = function (name)\r\n {\r\n var attr = $(this).attr(name);\r\n\r\n // For some browsers, `attr` is undefined; for others,\r\n // `attr` is false. Check for both.\r\n if (typeof attr !== typeof undefined && attr !== false)\r\n {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n // Scrolls the page to a specific location in order to show the defined element, but only if it is off the page\r\n $.fn.scrollToShow = function (options)\r\n {\r\n\r\n var settings = $.extend({\r\n time: 500,\r\n callback: function () { }\r\n }, options);\r\n\r\n var el = $(this);\r\n\r\n var scroll = $(\"html,body\").scrollTop();\r\n var target = el.offset().top;\r\n\r\n if (el.closest(\"#popup\").length > 0)\r\n {\r\n el.closest(\"#popup\").animate({\r\n scrollTop: 0\r\n }, settings.time, settings.callback);\r\n\r\n return el;\r\n }\r\n\r\n if (scroll > target)\r\n {\r\n $('html, body').animate({\r\n scrollTop: target\r\n }, settings.time, settings.callback);\r\n }\r\n else\r\n {\r\n $('html, body').animate({\r\n scrollTop: target - scroll // TODO: Check this is correct\r\n }, settings.time, settings.callback);\r\n }\r\n\r\n return el;\r\n\r\n };\r\n\r\n $.fn.checkboxController = function (options)\r\n {\r\n\r\n var settings = $.extend({\r\n childSelector: \"input.checkbox\",\r\n allChecked: function ()\r\n {\r\n // event fired when a change in the checked state results in all checkboxes being checked\r\n },\r\n noneChecked: function ()\r\n {\r\n // event fired when a change in the checked state results in no checkboxes being checked\r\n }\r\n }, options);\r\n\r\n var master = $(this);\r\n\r\n master.data(\"--checkboxController-settings\", settings);\r\n\r\n $.fn.checkboxControllerToggleSelected = function ()\r\n {\r\n var chk = $(this);\r\n var set = chk.data(\"--checkboxController-settings\");\r\n var children = $(set.childSelector);\r\n var checked = chk.is(\":checked\");\r\n\r\n if (checked)\r\n {\r\n children.prop(\"checked\", \"checked\");\r\n } else\r\n {\r\n children.removeAttr(\"checked\");\r\n }\r\n\r\n return chk;\r\n\r\n };\r\n\r\n $.fn.checkboxControllerSetMasterState = function ()\r\n {\r\n var chk = $(this);\r\n var set = chk.data(\"--checkboxController-settings\");\r\n var children = $(set.childSelector);\r\n\r\n var count = children.length;\r\n var checked = children.filter(\":checked\").length;\r\n\r\n if (checked == count)\r\n {\r\n chk.prop(\"checked\", true);\r\n }\r\n else\r\n {\r\n chk.removeAttr(\"checked\");\r\n }\r\n\r\n return chk;\r\n };\r\n\r\n $.fn.checkboxControllerCheckMasterState = function ()\r\n {\r\n var chk = $(this);\r\n var set = chk.data(\"--checkboxController-settings\");\r\n var children = $(set.childSelector);\r\n\r\n var count = children.length;\r\n var checked = children.filter(\":checked\").length;\r\n\r\n if (checked == count)\r\n {\r\n set.allChecked();\r\n } else if (checked == 0)\r\n {\r\n set.noneChecked();\r\n }\r\n\r\n return chk;\r\n\r\n };\r\n\r\n master.click(function ()\r\n {\r\n master\r\n .checkboxControllerToggleSelected()\r\n .checkboxControllerCheckMasterState();\r\n });\r\n\r\n $(settings.childSelector).on(\"click\", function ()\r\n {\r\n master.checkboxControllerSetMasterState().checkboxControllerCheckMasterState();\r\n });\r\n\r\n master.checkboxControllerSetMasterState();\r\n\r\n return master;\r\n\r\n };\r\n\r\n $.fn.conflictLinks = function ()\r\n {\r\n var root = $(this);\r\n\r\n root.find(\"a[data-filing-conflicts]\").each(function ()\r\n {\r\n var a = $(this);\r\n\r\n a.on(\"click\", function ()\r\n {\r\n\r\n var type = a.attr(\"data-filing-conflicts\");\r\n var fs = root.find(\"[data-conflicting-items]\");\r\n\r\n if (fs.hasClass(\"visuallyhidden\"))\r\n {\r\n fs.removeClass(\"visuallyhidden\").hide().slideDown();\r\n }\r\n\r\n fs.find(\"div[data-conflicting-items-type='\" + type + \"'] input[type='checkbox']\").prop(\"checked\", true);\r\n\r\n fs.closest(\"form\").trigger(\"submit\");\r\n\r\n return false;\r\n });\r\n\r\n });\r\n\r\n return root;\r\n };\r\n\r\n core.bulletins = function() {\r\n\r\n $(\"table.news-border-management\").each(function () {\r\n\r\n let expand = $(this).data(\"show-expanded\");\r\n\r\n $(\"[data-toggle-bulletin-content]\").each(function () {\r\n var td = $(this);\r\n var id = td.data(\"toggle-bulletin-content\");\r\n var tgt = $(\"[data-bulletin-content='\" + id + \"']\");\r\n\r\n if (tgt.length === 0)\r\n return;\r\n\r\n var a = $(\"<a />\", {\"href\": \"\"});\r\n var s = $(\"<span />\", {\"class\": \"ico-24-down\"});\r\n\r\n a.append([\"View\", s]);\r\n td.append([a]);\r\n\r\n a.on(\"click\", function () {\r\n console.log(a.find(\"span\"));\r\n if (tgt.is(\":hidden\")) {\r\n a.find(\"span\").attr(\"class\", \"ico-24-up\");\r\n tgt.show();\r\n } else {\r\n a.find(\"span\").attr(\"class\", \"ico-24-down\");\r\n tgt.hide();\r\n }\r\n return false;\r\n });\r\n\r\n tgt.hide();\r\n\r\n if (expand === id) {\r\n a.trigger(\"click\");\r\n }\r\n\r\n });\r\n });\r\n }\r\n\r\n core.corona = function() {\r\n\r\n $(\"[data-corona-table]\").each(function () {\r\n\r\n let show = $(this).data(\"corona-open\");\r\n\r\n console.log(\"show: \" + show);\r\n\r\n $(\"[data-toggle-log-entries]\").each(function () {\r\n var td = $(this);\r\n var id = td.data(\"toggle-log-entries\");\r\n var tgt = $(\"[data-previous-log-entries='\" + id + \"']\");\r\n\r\n if(tgt.length === 0)\r\n return;\r\n\r\n //<a data-net-rates-details=\"\" href=\"@Url.Action(\"Details\", \"RatesQueryNetRates\", new { @id = Model.Charge.RouteId })\"><span class=\"ico-24-down\"></span></a>\r\n\r\n var a = $(\"<a />\", { \"href\": \"\" });\r\n var s = $(\"<span />\", { \"class\": \"ico-24-down\" });\r\n\r\n a.append([\"View details\", s]);\r\n td.append([a]);\r\n\r\n a.on(\"click\", function () {\r\n console.log(a.find(\"span\"));\r\n if(tgt.is(\":hidden\")) {\r\n a.find(\"span\").attr(\"class\", \"ico-24-up\");\r\n tgt.show();\r\n }else {\r\n a.find(\"span\").attr(\"class\", \"ico-24-down\");\r\n tgt.hide();\r\n }\r\n return false;\r\n });\r\n\r\n tgt.hide();\r\n\r\n if(id === show){\r\n a.trigger(\"click\");\r\n tgt.show();\r\n }\r\n\r\n });\r\n });\r\n }\r\n\r\n core.setAccessibleMenu = function () {\r\n $('.dropdown-nav').setupNavigation();\r\n }\r\n\r\n core.setupDropdownButtons = function () {\r\n $('.btn-dropdown').buttonDropdown();\r\n }\r\n\r\n core.highlightBodyText = function ()\r\n {\r\n\r\n //data-highlight-target\r\n\r\n var query = document.location.search || \"\";\r\n\r\n if (query === \"\")\r\n {\r\n return;\r\n }\r\n\r\n var allVars = $.getUrlVars();\r\n\r\n if (allVars === null || typeof allVars[\"q\"] == \"undefined\")\r\n {\r\n return;\r\n }\r\n\r\n console.log(\"start \" + (new Date()).getSeconds() + \"/\" + (new Date()).getMilliseconds());\r\n\r\n var r = new RegExp(\"\\\\+\", \"ig\");\r\n var q = allVars[\"q\"].replace(r, \" \");\r\n\r\n $(\"[data-highlight-target]\").highlightText({\r\n value: decodeURI(q),\r\n completeMatch: false,\r\n split: true,\r\n tagName: \"mark\"\r\n });\r\n\r\n console.log(\"done \" + (new Date()).getSeconds() + \"/\" + (new Date()).getMilliseconds());\r\n };\r\n\r\n core.handleLogOut = function (data)\r\n {\r\n\r\n if (typeof data == \"undefined\" || data == null)\r\n {\r\n return false;\r\n }\r\n\r\n if (data.status && data.status === \"logged-out\")\r\n {\r\n var urlLogin = data.url;\r\n\r\n document.location.replace(urlLogin);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n core.fieldNotes = function ()\r\n {\r\n\r\n console.log(\"core.fieldNotes\");\r\n\r\n var root = $(\"[data-field-notes]\");\r\n\r\n console.log(root);\r\n\r\n root.each(function ()\r\n {\r\n var note = $(this);\r\n var field = note.closest(\"div[class|='field']\");\r\n var icon = $(\"<button type=\\\"button\\\" class=\\\"text lnk field-note-control\\\"><span class=\\\"ico-24-question\\\" title=\\\"Notes\\\"></span></button>\");\r\n\r\n note.before(icon);\r\n\r\n field.wrapInner(\"<div data-field-note-contained />\");\r\n\r\n icon.on(\"click\", function ()\r\n {\r\n $(this).find(\"[class|='ico']\").toggleClass(\"ico-24-question\").toggleClass(\"ico-24-question-w\");\r\n note.toggleClass(\"visiblenote\");\r\n });\r\n\r\n });\r\n };\r\n\r\n core.disableInputButtons = function (options)\r\n {\r\n\r\n var settings = $.extend({\r\n buttonSelector: \"button.primary,button.secondary,button.tertiary,button.btn\",\r\n parent: null,\r\n inputs: false,\r\n links: false // disable links?\r\n }, options);\r\n\r\n if (settings.parent === null)\r\n {\r\n settings.parent = $(\"body,html\");\r\n }\r\n\r\n var disabledClick = function ()\r\n {\r\n var a = $(this);\r\n\r\n if (a.attrExists(\"aria-disabled\"))\r\n {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n // todo: does this want to disable links and inputs?\r\n\r\n var disabler = {\r\n _items: [],\r\n start: function ()\r\n {\r\n var $this = this;\r\n\r\n $this._items.length = 0; // Reset the _items\r\n\r\n var buttons = settings.parent.find(settings.buttonSelector);\r\n\r\n console.log(buttons);\r\n\r\n buttons.each(function ()\r\n {\r\n var btn = $(this);\r\n var force = btn.attr(\"data-force-disable-reset\") === \"true\";\r\n\r\n if (btn.attrExists(\"aria-disabled\") && !force) // already disabled, so cannot toggle this one\r\n {\r\n return;\r\n }\r\n\r\n $this._items.push(btn);\r\n\r\n btn.attr(\"aria-disabled\", \"true\");\r\n\r\n });\r\n\r\n if (settings.links === true)\r\n {\r\n var links = settings.parent.find(\"a\");\r\n\r\n links.each(function ()\r\n {\r\n var link = $(this);\r\n var force = link.attr(\"data-force-disable-reset\") === \"true\";\r\n\r\n if (link.attrExists(\"aria-disabled\") && !force) // already disabled, so cannot toggle this one\r\n {\r\n return;\r\n }\r\n\r\n $this._items.push(link);\r\n\r\n link.attr(\"aria-disabled\", \"true\");\r\n link.on(\"click\", disabledClick);\r\n\r\n });\r\n }\r\n\r\n if (settings.inputs === true) {\r\n var inputs = settings.parent.find(\"input,select,textarea\");\r\n\r\n inputs.each(function () {\r\n var link = $(this);\r\n var force = link.attr(\"data-force-disable-reset\") === \"true\";\r\n\r\n if (link.attrExists(\"aria-disabled\") && !force) // already disabled, so cannot toggle this one\r\n {\r\n return;\r\n }\r\n\r\n $this._items.push(link);\r\n\r\n link.attr(\"aria-disabled\", \"true\");\r\n link.attr(\"disabled\", true);\r\n });\r\n }\r\n\r\n },\r\n revert: function ()\r\n {\r\n var $this = this;\r\n\r\n for (var i = 0; i < $this._items.length; i++)\r\n {\r\n var item = $this._items[i];\r\n\r\n item.removeAttr(\"aria-disabled\");\r\n item.off(\"click\", disabledClick);\r\n item.removeAttr(\"disabled\");\r\n }\r\n\r\n }\r\n };\r\n\r\n disabler.start();\r\n\r\n return disabler; // return this so it can be called to revert the changes\r\n };\r\n\r\n core.waitNotice = function (options)\r\n {\r\n\r\n options = options || {};\r\n\r\n var settings = $.extend({\r\n message: \"loading...\",\r\n cancelMessage: \"Cancel\",\r\n delay: 2000,\r\n cancel: false,\r\n cancelCallback: function () { }\r\n }, options);\r\n\r\n var progressMessage = $(\"<div class=loading_message />\").append(settings.message);\r\n var progressCancel = $(\"<a class=loading_cancel />\").append(settings.cancelMessage);\r\n var progressBar = $(\"<div class=loading_bar />\");\r\n var div = $(\"<div data-wait-notice class=loading />\").append([progressMessage, progressCancel, progressBar]);\r\n\r\n if (!settings.cancel)\r\n {\r\n progressCancel.hide();\r\n }\r\n\r\n var waiter = {\r\n _timeout: null,\r\n _cancelling: false,\r\n target: div,\r\n targetBar: progressBar,\r\n targetMessage: progressMessage,\r\n start: function ()\r\n {\r\n if (this._cancelling)\r\n {\r\n return;\r\n }\r\n var tgt = this.target;\r\n var prgrss = this.targetBar;\r\n this._timeout = setTimeout(function ()\r\n {\r\n if (this._cancelling)\r\n {\r\n return;\r\n }\r\n\r\n $(\"#site-wrapper\").append(tgt);\r\n\r\n prgrss.progressbar({ value: false });\r\n\r\n tgt.hide().fadeIn(\"fast\", function ()\r\n {\r\n if (this._cancelling)\r\n {\r\n tgt.fadeOut(\"fast\");\r\n }\r\n });\r\n }, settings.delay);\r\n },\r\n setMessage: function (message)\r\n {\r\n var tgt = this.targetMessage;\r\n\r\n tgt.html(message);\r\n },\r\n showCancel: function ()\r\n {\r\n progressCancel.show();\r\n },\r\n hideCancel: function ()\r\n {\r\n progressCancel.hide();\r\n },\r\n cancel: function ()\r\n {\r\n this._cancelling = true;\r\n var tgt = this.target;\r\n if (tgt.is(\":visible\"))\r\n {\r\n tgt.fadeOut(\"fast\", function ()\r\n {\r\n tgt.remove();\r\n });\r\n }\r\n else\r\n {\r\n tgt.remove();\r\n }\r\n if (this._timeout == null)\r\n {\r\n return;\r\n }\r\n clearTimeout(this._timeout);\r\n this._timeout = null;\r\n }\r\n };\r\n\r\n progressCancel.on(\"click\", function() {\r\n settings.cancelCallback();\r\n waiter.cancel();\r\n });\r\n\r\n return waiter;\r\n\r\n };\r\n\r\n core.filingsBulkActions = function ()\r\n {\r\n\r\n var root = $(\"[data-bulk-actions]\");\r\n\r\n if (root.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"filing-bulk-actions\"], function (bulkActions)\r\n {\r\n bulkActions.init(root);\r\n });\r\n\r\n\r\n };\r\n\r\n core.filingDetails = function ()\r\n {\r\n\r\n var root = $(\"[data-filing-details]\");\r\n\r\n if (root.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"filing-details\"], function (filingDetails)\r\n {\r\n filingDetails.init(root);\r\n });\r\n\r\n };\r\n\r\n core.addOns = function ()\r\n {\r\n\r\n var form = $(\"form[data-query-form-add-ons]\");\r\n\r\n if (form.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n if ($(\"[data-query-results-wrapper]\").length === 0 && $(\"[data-query-results]\").length !== 0)\r\n {\r\n $(\"[data-query-results]\").wrap(\"<div data-query-results-wrapper/>\");\r\n }\r\n\r\n require([\"add-on-rates\"], function (rates)\r\n {\r\n $(\"form[data-query-form-add-ons]\").on(\"results-complete\", function (a, b, c)\r\n {\r\n var root = $(\"table[data-add-on-rates-results]\");\r\n\r\n core.alternateTableRows();\r\n\r\n if (root.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n rates.init(root.closest(\"[data-query-results]\"));\r\n\r\n });\r\n });\r\n\r\n };\r\n\r\n core.filings = function ()\r\n {\r\n var root = $(\"div[data-filings]\");\r\n\r\n if (root.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"filings\"], function (filings)\r\n {\r\n filings.init(root);\r\n });\r\n\r\n };\r\n\r\n core.publications = function ()\r\n {\r\n var root = $(\"div[data-publications]\");\r\n\r\n if (root.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"publications\"], function (publications)\r\n {\r\n publications.init(root);\r\n });\r\n\r\n };\r\n\r\n // used to allow the status display to be set up in pages where there is no controlling parent script\r\n core.asyncStatus = function ()\r\n {\r\n var async = $(\"[data-async-status-display],[data-async-status-display-delayed]\");\r\n\r\n if (async.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"async-status\"], function (asyncStatus)\r\n {\r\n asyncStatus.init();\r\n });\r\n\r\n };\r\n\r\n core.filingImport = function ()\r\n {\r\n\r\n var root = $(\"div[data-filing-import]\");\r\n\r\n if (root.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"filing-import\"], function (filingForm)\r\n {\r\n filingForm.init(root);\r\n });\r\n\r\n };\r\n\r\n core.filingCommit = function ()\r\n {\r\n\r\n var roots = $(\"div[data-commit-workflow]\");\r\n\r\n if (roots.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"filing-commit\"], function (filingCommit)\r\n {\r\n filingCommit.init(roots);\r\n });\r\n\r\n };\r\n\r\n core.filingRateForm = function ()\r\n {\r\n //data-filing-rate-form\r\n\r\n var forms = $(\"form[data-filing-rate-form]\");\r\n\r\n if (forms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"filing-charge-editor\"], function (filingForm)\r\n {\r\n filingForm.init(forms);\r\n });\r\n\r\n };\r\n\r\n core.shippingRequestForm = function ()\r\n {\r\n //data-shipment-request-form\r\n\r\n var forms = $(\"form[data-shipment-request-form]\");\r\n\r\n if (forms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"shipment-request-editor\"], function (shipmentRequestEditor)\r\n {\r\n shipmentRequestEditor.init(forms);\r\n });\r\n };\r\n\r\n\r\n core.shipmentBookingForm = function ()\r\n {\r\n var bookingForms = $('[data-shipment-booking-form]');\r\n\r\n if (bookingForms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"shipment-request-editor\"], function (shipmentRequestEditor)\r\n {\r\n shipmentRequestEditor.initBookingForm(bookingForms);\r\n });\r\n };\r\n\r\n // TODO: Remove this and it's dependency of List.js\r\n core.shipmentQuotes = function ()\r\n {\r\n var forms = $(\"form[data-quote-filters]\");\r\n\r\n if (forms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"shipment-quotes\"], function (shipmentQuotesPage)\r\n {\r\n shipmentQuotesPage.init(forms);\r\n });\r\n };\r\n\r\n core.inlineEditor = function() {\r\n\r\n var inputs = $(\"input[data-inline-editor]\");\r\n\r\n if (inputs.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n // dirty-hack.com: require autocomplete, and the fields should have been set up before the inline editor is created\r\n require([\"autocomplete\"], function (ac)\r\n {\r\n require([\"inline-editor\"], function (editor)\r\n {\r\n editor.init($(\"input[data-inline-editor]\")); // get the items again as the autocomplete scipt will remove some inputs\r\n });\r\n });\r\n\r\n };\r\n\r\n core.filingReport = function ()\r\n {\r\n\r\n var root = $(\"[data-import-report]\");\r\n\r\n if (root.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n $(\"[data-import-report]\").on(\"submit\", function() {\r\n var $that = $(this);\r\n\r\n var url = $that.attr(\"action\");\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n headers: { \"X-Requested-With\": \"AjaxClient\" },\r\n cache: false\r\n }).done(function (data, status, xhr)\r\n {\r\n console.log(data);\r\n console.log(status);\r\n console.log(xhr);\r\n });\r\n\r\n var to = setTimeout(function() {\r\n $that.trigger(\"start-status\");\r\n }, 2500);\r\n\r\n return false;\r\n });\r\n\r\n };\r\n\r\n core.covidEditor = function ()\r\n {\r\n //data-shipment-request-form\r\n\r\n let form = $(\"form[data-covid-query-form],form[data-covid-editor]\");\r\n\r\n if (form.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"covid-editor\"], function (editor)\r\n {\r\n editor.init(form);\r\n });\r\n };\r\n\r\n core.toolTipsData = function ()\r\n {\r\n $(\"[data-tooltip-text]\").each(function ()\r\n {\r\n var a = $(this);\r\n\r\n if (a.attr(\"data-tooltip-text-linked\"))\r\n {\r\n return;\r\n }\r\n\r\n a.attr(\"data-tooltip-text-linked\", \"\");\r\n\r\n //data-extended-tooltip-text\r\n\r\n if (a.attr(\"data-extended-tooltip-text\"))\r\n {\r\n a.on(\"click\", function ()\r\n {\r\n\r\n var url = a.data(\"extended-tooltip-text\");\r\n\r\n $.ajax({\r\n url: url,\r\n headers: { \"X-Requested-With\": \"AjaxClient\" }\r\n }).done(function (data, status, xhr)\r\n {\r\n\r\n require([\"popup\"], function (popup)\r\n {\r\n\r\n popup.element(a.text(), data, {});\r\n\r\n });\r\n\r\n //$(\"[data-display-extended-tooltip]\").remove();\r\n\r\n //var div = $(\"<div data-display-extended-tooltip />\");\r\n\r\n //div.html(data).hide();\r\n\r\n //$(\"#site-wrapper\").append(div);\r\n\r\n });\r\n\r\n });\r\n }\r\n\r\n a.on(\"mouseover\", function ()\r\n {\r\n var url = a.data(\"tooltip-text\");\r\n\r\n if (url == \"\")\r\n {\r\n return;\r\n }\r\n\r\n if (a.attr(\"data-tooltip-text-linked\") != \"\")\r\n {\r\n return;\r\n }\r\n\r\n $.ajax({\r\n url: url,\r\n headers: { \"X-Requested-With\": \"AjaxClient\" }\r\n }).done(function (data, status, xhr)\r\n {\r\n\r\n var note = data.name;\r\n\r\n $(\"[data-tooltip-text='\" + url + \"']\")\r\n .attr(\"title\", data.name)\r\n .attr(\"data-tooltip-text-linked\", data.name);\r\n\r\n });\r\n\r\n\r\n });\r\n\r\n\r\n });\r\n\r\n //data-tooltip-text\r\n };\r\n\r\n core.limitTextareaLength = function ()\r\n {\r\n $(\"textarea[data-val-length-max]\").each(function ()\r\n {\r\n var area = $(this);\r\n\r\n if (area.attr(\"data-val-length-max-applied\"))\r\n {\r\n return;\r\n }\r\n\r\n area.attr(\"data-val-length-max-applied\", true);\r\n\r\n var note = $(\"<div class=textarea-length-guide />\");\r\n\r\n area.after(note);\r\n\r\n area.on(\"keydown keyup\", function ()\r\n {\r\n var max = area.data(\"val-length-max\");\r\n var val = area.val();\r\n\r\n note.text(val.length + \"/\" + max);\r\n\r\n note.removeClass(\"textarea-length-guide-warning\");\r\n\r\n if (val.length >= 0.9 * max)\r\n {\r\n note.addClass(\"textarea-length-guide-warning\");\r\n }\r\n\r\n });\r\n area.trigger(\"keyup\");\r\n\r\n });\r\n };\r\n\r\n core.webServiceSandbox = function()\r\n {\r\n var root = $(\"[data-web-service-sandbox]\");\r\n\r\n if (root.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"web-service-sandbox\"], function (sandbox)\r\n {\r\n sandbox.init(root);\r\n });\r\n\r\n };\r\n\r\n core.autoComplete = function (options, callback)\r\n {\r\n options = $.extend({\r\n selector: \"input[data-auto-complete]\",\r\n dataUrl: \"auto-complete\",\r\n url: null,\r\n selected: function () { },\r\n select: function (e, ui) { },\r\n bound: function () { },\r\n change: function (input, e, ui) { }\r\n }, options);\r\n\r\n var fields = $(options.selector);\r\n\r\n console.log(fields);\r\n\r\n if (fields.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"autocomplete\"], function (autocomplete)\r\n {\r\n autocomplete.init(options);\r\n\r\n if (typeof callback === \"function\")\r\n {\r\n callback();\r\n }\r\n });\r\n\r\n };\r\n\r\n core.switchCmsPageView = function() {\r\n\r\n $(\"select[data-switch-cms-view]\").on(\"change\", function() {\r\n $(this).closest(\"form\").submit();\r\n });\r\n\r\n };\r\n\r\n // TODO: Commented out in this round, can be deleted soon.\r\n // Highcharts can also go.\r\n // core.statsViewer = function() {\r\n\r\n // var container = $(\"[data-stats-quarters],[data-stats-days]\");\r\n\r\n // if (container.length === 0) {\r\n // return;\r\n // }\r\n\r\n // require([\"stats-viewer\"], function (viewer)\r\n // {\r\n // viewer.init();\r\n // });\r\n\r\n // };\r\n\r\n core.checkboxListController = function (reset)\r\n {\r\n\r\n reset = reset || false;\r\n\r\n core.checkboxListController.update = function (root, id)\r\n {\r\n var data = root.data(\"check-data\");\r\n\r\n for (var i = 0; i < data.complete.length; i++)\r\n {\r\n var item = data.complete[i];\r\n\r\n if (item.value == id)\r\n {\r\n item.checked = !item.checked; // toggle the status\r\n break;\r\n }\r\n\r\n }\r\n\r\n data.binder.show();\r\n\r\n data.binder.find(\"input[type='checkbox']\").each(function ()\r\n {\r\n var chk = $(this);\r\n\r\n if (chk.val() == id)\r\n {\r\n chk.prop(\"checked\", !chk.is(\":checked\"));\r\n }\r\n\r\n });\r\n\r\n data.binder.hide();\r\n };\r\n\r\n core.checkboxListController.add = function (root, option, id)\r\n {\r\n var data = root.data(\"check-data\");\r\n\r\n core.checkboxListController.update(root, id);\r\n\r\n data.checked.empty();\r\n\r\n for (var i = 0; i < data.complete.length; i++)\r\n {\r\n var item = data.complete[i];\r\n\r\n if (!item.checked)\r\n {\r\n continue;\r\n }\r\n var val = item.value;\r\n\r\n var link = $(\"<button type='button' class='text' />\");\r\n var li = $(\"<li />\");\r\n\r\n li.append(link);\r\n\r\n link.append(item.text);\r\n link.data(\"value\", val);\r\n\r\n link.on(\"click\", function ()\r\n {\r\n var el = $(this);\r\n\r\n core.checkboxListController.remove(root, el.closest(\"li\"), el.data(\"value\"));\r\n });\r\n\r\n data.checked.append(li);\r\n\r\n }\r\n\r\n option.remove();\r\n };\r\n\r\n core.checkboxListController.remove = function (root, link, id)\r\n {\r\n var data = root.data(\"check-data\");\r\n\r\n core.checkboxListController.update(root, id);\r\n\r\n data.unchecked.empty();\r\n\r\n for (var i = 0; i < data.complete.length; i++)\r\n {\r\n var item = data.complete[i];\r\n\r\n if (item.checked)\r\n {\r\n continue;\r\n }\r\n var val = item.value + \"\";\r\n\r\n var option = $(\"<option />\", { value: val });\r\n\r\n option.append(item.text);\r\n\r\n data.unchecked.append(option);\r\n }\r\n\r\n data.unchecked.val(id);\r\n\r\n link.remove();\r\n\r\n root.trigger(\"chkbx-removed\");\r\n };\r\n\r\n $(\"div[data-checkbox-array]\").each(function ()\r\n {\r\n var root = $(this);\r\n var ctrl = {};\r\n var target = $(\"<div class='fixedpicker' data-checkbox-listing-controller />\");\r\n var left = $(\"<div />\");\r\n var right = $(\"<div class='fixedpicker_existing' />\");\r\n var select = $(\"<select />\");\r\n var button = $(\"<button type='button' />\");\r\n var list = $(\"<ul />\");\r\n\r\n if(reset)\r\n root.parent().find(\".fixedpicker\").remove();\r\n\r\n right.append(list);\r\n select.append(\"<option value='' />\");\r\n\r\n $.extend(ctrl, root.data(\"checkbox-array\"));\r\n\r\n button.append(ctrl.button);\r\n\r\n var data = {\r\n binder: root,\r\n complete: [],\r\n unchecked: select,\r\n checked: list,\r\n removeMessage: ctrl.remove\r\n };\r\n\r\n root.find(\"input[type='checkbox']\").each(function ()\r\n {\r\n var chk = $(this);\r\n var val = chk.val();\r\n var txt = chk.siblings(\"span\").text();\r\n var checked = chk.is(\":checked\");\r\n\r\n data.complete.push({\r\n value: val,\r\n checked: checked,\r\n text: txt\r\n });\r\n\r\n if (checked)\r\n {\r\n var link = $(\"<button type='button' class='text' />\");\r\n var li = $(\"<li />\");\r\n\r\n li.append(link);\r\n\r\n link.append(txt);\r\n list.append(li);\r\n\r\n link.on(\"click\", function ()\r\n {\r\n core.checkboxListController.remove(root, $(this).closest(\"li\"), val);\r\n });\r\n\r\n }\r\n else\r\n {\r\n var option = $(\"<option />\", { value: val });\r\n\r\n option.append(txt);\r\n\r\n select.append(option);\r\n }\r\n\r\n });\r\n\r\n button.on(\"click\", function ()\r\n {\r\n var val = select.val();\r\n var opt = null;\r\n\r\n if (val === \"\")\r\n {\r\n return false;\r\n }\r\n\r\n select.find(\"option\").each(function ()\r\n {\r\n if (opt != null)\r\n {\r\n return;\r\n }\r\n\r\n var el = $(this);\r\n\r\n if (val == el.attr(\"value\"))\r\n {\r\n opt = el;\r\n }\r\n });\r\n\r\n select.combobox(\"clear\");\r\n\r\n core.checkboxListController.add(root, opt, val);\r\n\r\n return false;\r\n });\r\n\r\n right.append($(\"<div />\").append(data.removeMessage));\r\n left.append([select, button]);\r\n target.append([left, right]);\r\n\r\n select.combobox();\r\n\r\n root.before(target);\r\n\r\n root.data(\"check-data\", data);\r\n root.hide();\r\n\r\n });\r\n };\r\n\r\n core.checkboxListWithDetailsController = function (reset) {\r\n\r\n\r\n reset = reset || false;\r\n\r\n console.debug(\"reset: \" + reset);\r\n\r\n core.checkboxListWithDetailsController.update = function (root, id, toggle) {\r\n var data = root.data(\"check-data\");\r\n\r\n for (var i = 0; i < data.complete.length; i++) {\r\n var item = data.complete[i];\r\n\r\n if (item.value == id) {\r\n item.checked = toggle; // toggle the status\r\n break;\r\n }\r\n\r\n }\r\n\r\n data.binder.show();\r\n\r\n data.binder.find(\"input[type='checkbox']\").each(function () {\r\n var chk = $(this);\r\n\r\n if (chk.val() == id) {\r\n chk.prop(\"checked\", toggle);\r\n }\r\n\r\n });\r\n\r\n data.binder.hide();\r\n };\r\n\r\n core.checkboxListWithDetailsController.refreshList = function(root) {\r\n var data = root.data(\"check-data\");\r\n\r\n data.checked.empty();\r\n\r\n for (var i = 0; i < data.complete.length; i++) {\r\n var item = data.complete[i];\r\n\r\n if (!item.checked) {\r\n continue;\r\n }\r\n var val = item.value;\r\n\r\n var link = $(\"<a />\");\r\n var removeButton = $(\"<button type='button' class='text' ><span class='ico-16-delete'></span><span class='visuallyhidden'>Remove</span></button>\");\r\n var li = $(\"<li />\");\r\n\r\n li.append(link);\r\n li.append(\" \");\r\n li.append(removeButton);\r\n\r\n link.append(item.text);\r\n link.attr('href', data.detailsUrl + val);\r\n removeButton.data(\"value\", val);\r\n\r\n removeButton.on(\"click\", function () {\r\n\r\n if (confirm(data.removeMessage)) {\r\n var el = $(this);\r\n\r\n core.checkboxListWithDetailsController.remove(root, el.closest(\"li\"), el.data(\"value\"));\r\n }\r\n });\r\n\r\n data.checked.append(li);\r\n\r\n }\r\n };\r\n\r\n core.checkboxListWithDetailsController.add = function (root, option, id) {\r\n var data = root.data(\"check-data\");\r\n\r\n core.checkboxListWithDetailsController.update(root, id, true);\r\n\r\n core.checkboxListWithDetailsController.refreshList(root);\r\n\r\n option.remove();\r\n };\r\n\r\n core.checkboxListWithDetailsController.remove = function (root, link, id) {\r\n var data = root.data(\"check-data\");\r\n\r\n core.checkboxListWithDetailsController.update(root, id, false);\r\n\r\n data.unchecked.empty();\r\n\r\n for (var i = 0; i < data.complete.length; i++) {\r\n var item = data.complete[i];\r\n\r\n if (item.checked) {\r\n continue;\r\n }\r\n var val = item.value + \"\";\r\n\r\n var option = $(\"<option />\", { value: val });\r\n\r\n option.append(item.text);\r\n\r\n data.unchecked.append(option);\r\n }\r\n\r\n data.unchecked.val(id);\r\n\r\n link.remove();\r\n };\r\n\r\n $(\".forwarder-admin-contacts\").each(function () {\r\n var root = $(this);\r\n var ctrl = {};\r\n var target = $(\"<div class='fixedpicker' data-checkbox-listing-controller />\");\r\n var left = $(\"<div />\");\r\n var right = $(\"<div class='fixedpicker-with-remove_existing' />\");\r\n var select = $(\"<select />\");\r\n var addButton = $(\"<button type='button' />\");\r\n var list = $(\"<ul />\");\r\n\r\n if(reset)\r\n root.parent().find(\".fixedpicker\").remove();\r\n\r\n right.append(list);\r\n select.append(\"<option value='' />\");\r\n\r\n $.extend(ctrl, root.data(\"with-details-array\"));\r\n\r\n console.log(root);\r\n\r\n addButton.append(ctrl.button);\r\n\r\n var data = {\r\n binder: root,\r\n complete: [],\r\n unchecked: select,\r\n checked: list,\r\n removeMessage: ctrl.remove,\r\n detailsUrl: ctrl.detailsUrl\r\n };\r\n\r\n if (!data.detailsUrl) {\r\n alert('Please ensure a details URL has been set against the root item.');\r\n }\r\n\r\n root.find(\"input[type='checkbox']\").each(function () {\r\n var chk = $(this);\r\n var val = chk.val();\r\n var txt = chk.siblings(\"span\").text();\r\n var checked = chk.is(\":checked\");\r\n\r\n data.complete.push({\r\n value: val,\r\n checked: checked,\r\n text: txt\r\n });\r\n\r\n if (!checked) {\r\n var option = $(\"<option />\", { value: val });\r\n\r\n option.append(txt);\r\n\r\n select.append(option);\r\n }\r\n });\r\n\r\n addButton.on(\"click\", function () {\r\n var val = select.val();\r\n var opt = null;\r\n\r\n if (val === \"\") {\r\n return false;\r\n }\r\n\r\n select.find(\"option\").each(function () {\r\n if (opt != null) {\r\n return;\r\n }\r\n\r\n var el = $(this);\r\n\r\n if (val == el.attr(\"value\")) {\r\n opt = el;\r\n }\r\n });\r\n\r\n select.combobox(\"clear\");\r\n\r\n core.checkboxListWithDetailsController.add(root, opt, val);\r\n\r\n return false;\r\n });\r\n\r\n left.append([select, addButton]);\r\n target.append([left, right]);\r\n\r\n select.combobox();\r\n\r\n root.before(target);\r\n\r\n root.data(\"check-data\", data);\r\n root.hide();\r\n\r\n core.checkboxListWithDetailsController.refreshList(root);\r\n\r\n });\r\n };\r\n\r\n core.datePickerFields = function (options) {\r\n\r\n options = $.extend({\r\n selector: \"input.date-picker\",\r\n skipPreload: false,\r\n changeMonth: true,\r\n changeYear: true,\r\n dateFormat: \"yy-mm-dd\",\r\n onClose: null,\r\n onSelect: function () {\r\n $(this).trigger('date-change');\r\n },\r\n beforeShowDay: function (d) { return [true, \"\"]; },\r\n onChangeMonthYear: function(y, m, inst) {}\r\n }, options);\r\n\r\n if (options.skipPreload) // not always needed to force UI to be loaded, so skip if jquery UI is definitely already loaded\r\n {\r\n $(options.selector).datepicker(options);\r\n\r\n return;\r\n }\r\n\r\n require([\"jquery-ui\"], function ($ui)\r\n {\r\n $(options.selector).datepicker(options);\r\n });\r\n\r\n };\r\n\r\n core.notificationEditor = function ()\r\n {\r\n\r\n var fields = $(\"form[data-notification-edit]\");\r\n\r\n if (fields.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"notification-editor\"], function (editor)\r\n {\r\n editor.init();\r\n });\r\n\r\n };\r\n\r\n core.fullTextEditor = function ()\r\n {\r\n\r\n const fields = $(\"textarea[data-full-editor]\");\r\n\r\n if (fields.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"html-text-editor\"], function (editor)\r\n {\r\n let large = fields.data(\"full-editor\") === \"large\";\r\n\r\n editor.init(large);\r\n });\r\n\r\n };\r\n\r\n core.autoGrowTextArea = function ()\r\n {\r\n var fields = $(\"textarea[data-autogrow]\");\r\n\r\n if (fields.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"autogrow\"], function (editor)\r\n {\r\n fields.autogrow({\r\n fixMinHeight: false,\r\n onInitialize: true\r\n });\r\n });\r\n };\r\n\r\n core.queryForm = function ()\r\n {\r\n\r\n const forms = $(\"form[data-query-form]\");\r\n\r\n if (forms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n let online = forms.data(\"query-form\") === \"online\";\r\n\r\n console.log(\"queryForm: \" + online);\r\n\r\n if (online) {\r\n\r\n require([\"query-form-online\"], function (queryForm)\r\n {\r\n queryForm.init(forms);\r\n });\r\n\r\n return;\r\n }\r\n\r\n require([\"query-form\"], function (queryForm)\r\n {\r\n queryForm.init(forms);\r\n });\r\n\r\n };\r\n\r\n core.cargoRouteControl = function ()\r\n {\r\n var tables = $(\"table[data-cargo-route-table]\");\r\n\r\n if (tables.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"cargo-routes\"], function (cargoRoutes)\r\n {\r\n cargoRoutes.init(tables);\r\n });\r\n };\r\n\r\n //// AJAX controlled listings tables/forms to allow faster access to entities\r\n //core.filterListings = function ()\r\n //{\r\n // var containers = $(\"section[data-index-listing]\");\r\n\r\n // if (containers.length == 0) {\r\n // return;\r\n // }\r\n\r\n // require([\"filter-tables\"], function (tableFilter) {\r\n // tableFilter.init(containers);\r\n // });\r\n\r\n //};\r\n\r\n // used to create the entry point to the floating editors\r\n core.ancillaryEditor = function ()\r\n {\r\n\r\n var containers = $(\"section[data-index-listing]\");\r\n\r\n if (containers.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"ancillary-editor\"], function (editor)\r\n {\r\n editor.init(containers);\r\n });\r\n\r\n };\r\n\r\n core.editorForms = function ()\r\n {\r\n var forms = $(\"form[data-editor-form='standalone']\");\r\n\r\n if (forms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"ancillary-editor\"], function (editor)\r\n {\r\n editor.standalone(forms, true);\r\n });\r\n\r\n };\r\n\r\n core.formUtilities = function () {\r\n require([\"form-utilities\"], function (utilties)\r\n {\r\n utilties.initialise();\r\n });\r\n };\r\n\r\n core.checkboxToggle = function ()\r\n {\r\n $(\"[data-checkbox-toggle-enabled]\").each(function ()\r\n {\r\n var $this = $(this);\r\n var that = $this;\r\n\r\n if ($this.attr(\"data-checkbox-toggle-enabled\") === \"active\")\r\n {\r\n return;\r\n }\r\n\r\n var invert = $this.attr(\"data-checkbox-toggle-invert\") === \"true\";\r\n\r\n var targetName = $this.attr(\"data-checkbox-toggle-enabled\");\r\n\r\n if (targetName !== \"\")\r\n {\r\n that = $(\"[data-checkbox-toggle-target='\" + targetName + \"']\");\r\n\r\n if (that.length === 0)\r\n {\r\n that = $this;\r\n }\r\n }\r\n\r\n var chk = $this.find(\"input[type='checkbox']\");\r\n var tgt = that.find(\"input[type='password'],input[type='text'],textarea,select\");\r\n\r\n if (chk.length === 0 || tgt.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n $this.attr(\"data-checkbox-toggle-enabled\", \"active\")\r\n .on(\"checkbox-toggled\", function ()\r\n {\r\n tgt = that.find(\"input[type='password'],input[type='text'],textarea,select\");\r\n\r\n if (invert) {\r\n tgt.prop(\"disabled\", chk.is(\":checked\"));\r\n } else {\r\n tgt.prop(\"disabled\", !chk.is(\":checked\"));\r\n }\r\n });\r\n\r\n chk.on(\"click\", function ()\r\n {\r\n that.trigger(\"checkbox-toggled\");\r\n tgt.focus();\r\n });\r\n\r\n that.trigger(\"checkbox-toggled\");\r\n });\r\n };\r\n\r\n core.checkboxDisplayToggle = function ()\r\n {\r\n $(\"[data-checkbox-display-toggle-enabled]\").each(function ()\r\n {\r\n var $this = $(this);\r\n\r\n console.log($this);\r\n\r\n if ($this.attr(\"data-checkbox-display-toggle-enabled\") === \"active\")\r\n {\r\n return;\r\n }\r\n\r\n var invert = $this.attr(\"data-checkbox-display-toggle-invert\") === \"true\";\r\n var targetName = $this.attr(\"data-checkbox-display-toggle-enabled\");\r\n\r\n if (targetName === \"\")\r\n {\r\n console.warn(\"Missing targetName in checkboxDisplayToggle\");\r\n\r\n return;\r\n }\r\n\r\n var that = $(\"[data-checkbox-display-toggle-target='\" + targetName + \"']\");\r\n\r\n if (that.length === 0)\r\n {\r\n console.warn(\"Missing element from targetName in checkboxDisplayToggle\");\r\n\r\n return;\r\n }\r\n\r\n var chk = $this.find(\"input[type='checkbox']\");\r\n\r\n if (chk.length === 0)\r\n {\r\n console.warn(\"No checkbox in source element of checkboxDisplayToggle\");\r\n\r\n return;\r\n }\r\n\r\n $this.attr(\"data-checkbox-display-toggle-enabled\", \"active\");\r\n\r\n var setStateOfFields = function (inputs, disabled)\r\n {\r\n inputs.prop(\"disabled\", disabled);\r\n };\r\n\r\n var setDisplayStateAction = function(check, target, inverted) {\r\n var inp = target.find(\"input[type='password'],input[type='text'],textarea,select\");\r\n\r\n if (inverted) {\r\n if (check.is(\":checked\")) {\r\n setStateOfFields(inp, true);\r\n target.hide();\r\n } else {\r\n setStateOfFields(inp, false);\r\n target.show();\r\n }\r\n } else {\r\n if (check.is(\":checked\")) {\r\n setStateOfFields(inp, false);\r\n target.show();\r\n } else {\r\n setStateOfFields(inp, true);\r\n target.hide();\r\n }\r\n }\r\n };\r\n\r\n chk.on(\"click\", function ()\r\n {\r\n var inp = that.find(\"input[type='password'],input[type='text'],textarea,select\");\r\n\r\n setDisplayStateAction(chk, that, invert);\r\n\r\n inp.first().focus();\r\n });\r\n\r\n setDisplayStateAction(chk, that, invert);\r\n\r\n });\r\n };\r\n\r\n core.groupedSelects = function ()\r\n {\r\n $(\"[data-grouped-selects]\").each(function ()\r\n {\r\n var $this = $(this);\r\n var selects = $this.find(\"select\");\r\n var total = selects.length;\r\n\r\n var updateAll = function ()\r\n {\r\n selects.not(\":first-of-type\").hide();\r\n\r\n for (var i = 0; i < total; i++)\r\n {\r\n var curSelect = $(selects[i]);\r\n\r\n if (curSelect.val() === \"\")\r\n {\r\n selects.filter(\":gt(\" + i + \")\").val(\"\");\r\n break;\r\n }\r\n\r\n curSelect.show();\r\n\r\n if (i < total - 1)\r\n {\r\n $(selects[i + 1]).show();\r\n }\r\n }\r\n };\r\n\r\n updateAll();\r\n\r\n $this.on(\"change\", updateAll);\r\n });\r\n };\r\n\r\n core.alternateTableRows = function ()\r\n {\r\n\r\n $(\"table[data-alternate-rows-table]\").each(function ()\r\n {\r\n\r\n var tbl = $(this);\r\n var target = tbl.data(\"alternate-rows-table\");\r\n var bodies = target === \"body\";\r\n var allowed = [\"\", \"body\", \"row\"];\r\n\r\n if (tbl.attr(\"data-alternate-rows-enabled\"))\r\n {\r\n return;\r\n }\r\n\r\n if (allowed.indexOf(target) === -1)\r\n {\r\n console.warn(\"core.alternateTableRows may have an invalid target of '\" + target + \"'. Should be one of [\" + allowed + \"]\");\r\n }\r\n\r\n tbl.attr(\"data-alternate-rows-enabled\", \"\");\r\n\r\n if (bodies)\r\n {\r\n tbl.find(\"tbody\").each(function ()\r\n {\r\n var r = $(this);\r\n\r\n if (r.index() % 2 == 1)\r\n {\r\n r.addClass(\"alt\");\r\n }\r\n\r\n });\r\n }\r\n else\r\n {\r\n tbl.find(\"tbody tr\").each(function ()\r\n {\r\n var r = $(this);\r\n\r\n if (r.index() % 2 == 1)\r\n {\r\n r.addClass(\"alt\");\r\n }\r\n\r\n });\r\n }\r\n\r\n });\r\n\r\n $(\"table.alternate-rows\").each(function ()\r\n {\r\n var tbl = $(this);\r\n\r\n if (tbl.attr(\"data-alternate-rows-enabled\"))\r\n {\r\n return;\r\n }\r\n\r\n tbl.attr(\"data-alternate-rows-enabled\", \"\");\r\n\r\n tbl.find(\"tbody tr\").each(function ()\r\n {\r\n var r = $(this);\r\n\r\n if (r.index() % 2 == 1)\r\n {\r\n r.addClass(\"alt\");\r\n }\r\n\r\n });\r\n\r\n });\r\n\r\n };\r\n\r\n core.jobDeliveryOptions = function ()\r\n {\r\n\r\n const select = $(\"select[data-delivery-method-options-select]\");\r\n const parent = select.closest(\"[data-collapse-section]\");\r\n\r\n select.on(\"customer-job-delivery-changed\", function () {\r\n let selector = \"[data-iinet-hide]\";\r\n let iiNet = select.val() === \"Iinet\";\r\n\r\n $(selector).hide();\r\n\r\n if(!iiNet)\r\n $(selector).show();\r\n\r\n $(\"div.field[data-method],div.field-checkbox[data-method]\").hide();\r\n $(\"div.field[data-method='\" + select.val() + \"'],div.field-checkbox[data-method='\" + select.val() + \"']\").show();\r\n });\r\n\r\n select.on(\"change\", function() {\r\n select.trigger(\"customer-job-delivery-changed\");\r\n });\r\n\r\n select.trigger(\"customer-job-delivery-changed\");\r\n\r\n parent.on(\"show-section\", function ()\r\n {\r\n select.trigger(\"customer-job-delivery-changed\");\r\n });\r\n };\r\n\r\n core.bulletinsEditor = function ()\r\n {\r\n\r\n $(\"select[data-bulletin-type]\").on(\"change\", function () {\r\n var select = $(this);\r\n\r\n $(\"div.field[data-show-bulletin-type],div.field-checkbox[data-show-bulletin-type]\")\r\n .hide()\r\n .find(\"select,input\").prop(\"disabled\", true);\r\n $(\"div.field[data-show-bulletin-type='\" + select.val() + \"'],div.field-checkbox[data-show-bulletin-type='\" + select.val() + \"']\")\r\n .show()\r\n .find(\"select,input\").prop(\"disabled\", false);\r\n\r\n }).trigger(\"change\");\r\n };\r\n\r\n core.productEditor = function () {\r\n var target = $(\"form[data-product-select]\");\r\n\r\n if (target.length !== 1) {\r\n return;\r\n }\r\n\r\n require([\"product-admin\"], function (admin)\r\n {\r\n admin.init(target);\r\n });\r\n\r\n };\r\n\r\n core.userAdmin = function()\r\n {\r\n var admin = $(\"[data-user-admin]\");\r\n\r\n if (admin.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"user-admin\"], function (admin)\r\n {\r\n admin.init();\r\n });\r\n };\r\n\r\n core.agentAdmin = function()\r\n {\r\n var editor = $(\"[data-agent-editor]\");\r\n\r\n if (editor.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"agent-editor\"], function (admin)\r\n {\r\n admin.init(editor);\r\n });\r\n };\r\n\r\n core.selectEnabler = function(selectSelector, fieldSelector, attrData, attrFallback)\r\n {\r\n var select = $(selectSelector);\r\n\r\n console.log(selectSelector);\r\n console.log(select);\r\n\r\n var handle = function(val)\r\n {\r\n var input = $(fieldSelector);\r\n var toEnable = [];\r\n\r\n input.each(function() {\r\n var that = $(this);\r\n\r\n\r\n var roles = that.data(attrData);\r\n\r\n if (typeof roles == \"undefined\" || roles == null) {\r\n return;\r\n }\r\n\r\n var values = roles.split(\",\");\r\n\r\n for (var v = 0; v < values.length; v++)\r\n {\r\n if (val === values[v])\r\n {\r\n toEnable.push( that);\r\n\r\n return;\r\n }\r\n }\r\n\r\n });\r\n\r\n $(fieldSelector).prop(\"disabled\", true);\r\n\r\n for (var i = 0; i<toEnable.length; i++){\r\n toEnable[i].prop(\"disabled\", false);\r\n }\r\n };\r\n\r\n if (select.length === 0)\r\n {\r\n // if no select, then try to find and use a fallback data attribute\r\n\r\n var fallBack = $(\"[\"+attrFallback+\"]\");\r\n\r\n if(fallBack.length !== 0)\r\n {\r\n var r = fallBack.attr(attrFallback);\r\n\r\n handle(r);\r\n }\r\n\r\n return;\r\n }\r\n\r\n select.on(\"change\", function ()\r\n {\r\n var val = select.val();\r\n\r\n handle(val);\r\n });\r\n\r\n select.trigger(\"change\");\r\n };\r\n\r\n core.fileFormatOptions = function ()\r\n {\r\n $(\"fieldset[data-extract-options]\").each(function (index)\r\n {\r\n var options = $(this);\r\n var parent = options.siblings(\"[data-extract-options-parent]\");\r\n\r\n if (index == 0)\r\n {\r\n parent.on(\"show-section\", function ()\r\n {\r\n parent.find(\"select[data-extract-options-select]\").trigger(\"change\");\r\n });\r\n\r\n parent.find(\"select[data-extract-options-select]\").on(\"change\", function ()\r\n {\r\n var select = $(this);\r\n\r\n $(\"fieldset[data-extract-options]\").hide();\r\n $(\"fieldset[data-extract-options='\" + select.val() + \"']\").show();\r\n\r\n });\r\n\r\n }\r\n\r\n parent.on(\"hide-section\", function ()\r\n {\r\n options.hide();\r\n });\r\n\r\n var leg = options.find(\"legend\");\r\n\r\n leg.hide();\r\n\r\n options.hide();\r\n\r\n });\r\n };\r\n\r\n core.collapsible = function ()\r\n {\r\n var sections = $(\"[data-collapsible]\");\r\n\r\n console.log(\"collapsible: \" + sections.length);\r\n\r\n if (sections.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"collapsible\"], function (collapsible)\r\n {\r\n collapsible.init();\r\n });\r\n };\r\n\r\n core.collapseFormSections = function ()\r\n {\r\n\r\n var forms = $(\"form[data-editor-form]\");\r\n\r\n if (forms.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"form-sections\"], function (sections)\r\n {\r\n sections.init();\r\n });\r\n\r\n //collapsible-form-sections\r\n\r\n };\r\n\r\n core.foldedLocationLookups = function (addition)\r\n {\r\n\r\n addition = addition || false;\r\n\r\n let forms = $(\"[data-folded-location-lookup]\");\r\n\r\n console.info([\"foldedLocationLookups\", forms])\r\n\r\n if (forms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n console.debug(addition);\r\n\r\n require([\"folded-location-lookups\"], function (sections)\r\n {\r\n sections.init(forms, addition);\r\n });\r\n\r\n };\r\n\r\n core.mergedLocationLookups = function () {\r\n\r\n var forms = $(\"[data-merged-location-lookup]\");\r\n\r\n if (forms.length === 0) {\r\n return;\r\n }\r\n\r\n require([\"merged-location-lookups\"], function (lookups) {\r\n lookups.init(forms);\r\n });\r\n\r\n };\r\n\r\n core.foldedItemLookups = function ()\r\n {\r\n core.foldedProductLookups();\r\n core.foldedCommodityLookups();\r\n core.foldedSphLookups();\r\n };\r\n\r\n core.foldedProductLookups = function () {\r\n\r\n var forms = $(\"[data-folded-product-lookup]\");\r\n\r\n if (forms.length === 0) {\r\n return;\r\n }\r\n\r\n require([\"folded-items-lookups\"], function (products) {\r\n products.init({\r\n forms: forms\r\n });\r\n });\r\n\r\n };\r\n\r\n core.foldedCommodityLookups = function () {\r\n\r\n var forms = $(\"[data-folded-commodity-lookup]\");\r\n\r\n if (forms.length === 0) {\r\n return;\r\n }\r\n\r\n require([\"folded-items-lookups\"], function (products) {\r\n products.init({\r\n forms: forms,\r\n label: false,\r\n className: \"\",\r\n itemName: \"commodity\",\r\n lookupDataName: \"folded-commodity-lookup\",\r\n attachedName: \"data-folded-commodity-lookup-attached\",\r\n titleName: \"LABEL_FIELD_COMMODITIES\",\r\n storeName: \"folded-commodity-lookup-data\",\r\n labelName: \"folded-commodity-labels\"\r\n });\r\n });\r\n\r\n require([\"folded-items-lookups\"], function (products) {\r\n products.init({\r\n forms: forms,\r\n label: false,\r\n className: \"\",\r\n itemName: \"commodityexclude\",\r\n lookupDataName: \"folded-commodityexclude-lookup\",\r\n attachedName: \"data-folded-commodityexclude-lookup-attached\",\r\n titleName: \"LABEL_FIELD_COMMODITIES\",\r\n storeName: \"folded-commodityexclude-lookup-data\",\r\n labelName: \"folded-commodityexclude-labels\"\r\n });\r\n });\r\n\r\n };\r\n\r\n core.foldedSphLookups = function () {\r\n\r\n var forms = $(\"[data-folded-sph-lookup]\");\r\n\r\n if (forms.length === 0) {\r\n return;\r\n }\r\n\r\n require([\"folded-items-lookups\"], function (products) {\r\n products.init({\r\n forms: forms,\r\n titleName: \"LABEL_FIELD_SPECIAL_HANDLING_CODES\",\r\n itemName: \"sph\",\r\n lookupDataName: \"folded-sph-lookup\",\r\n attachedName: \"data-folded-sph-lookup-attached\",\r\n storeName: \"folded-sph-lookup-data\",\r\n labelName: \"folded-sph-labels\"\r\n });\r\n products.init({\r\n forms: forms,\r\n titleName: \"LABEL_FIELD_EXCLUDE_SPECIAL_HANDLING_CODES\",\r\n itemName: \"esph\",\r\n lookupDataName: \"folded-sph-lookup\",\r\n attachedName: \"data-folded-esph-lookup-attached\",\r\n storeName: \"folded-esph-lookup-data\",\r\n labelName: \"folded-esph-labels\"\r\n });\r\n });\r\n\r\n };\r\n\r\n core.scheduledJobs = function() {\r\n var forms = $(\"[data-scheduled-job-form]\");\r\n\r\n if (forms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"scheduled-jobs\"], function (fn)\r\n {\r\n fn.init(forms);\r\n });\r\n }\r\n\r\n core.orderForm = function () {\r\n var forms = $(\"[data-order-form]\");\r\n\r\n if (forms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"order-form\"], function (fn)\r\n {\r\n fn.init(forms);\r\n });\r\n };\r\n\r\n core.distributionJobs = function() {\r\n\r\n var forms = $(\"[data-distribution-job]\");\r\n\r\n if (forms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"distribution-jobs\"], function (fn)\r\n {\r\n fn.init(forms);\r\n });\r\n }\r\n\r\n core.switchCarrier = function() {\r\n\r\n var forms = $(\"[data-switch-carrier]\");\r\n\r\n if (forms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n require([\"carrier-selection\"], function (fn)\r\n {\r\n fn.init(forms);\r\n });\r\n\r\n };\r\n\r\n core.customSettings = function ()\r\n {\r\n var forms = $(\"[data-custom-settings]\");\r\n\r\n if (forms.length === 0) {\r\n return;\r\n }\r\n\r\n require([\"custom-settings\"], function (fn) {\r\n fn.init(forms);\r\n });\r\n\r\n };\r\n\r\n core.uis = function() {\r\n\r\n var forms = $(\"[data-uis-form]\");\r\n\r\n if (forms.length === 0) {\r\n return;\r\n }\r\n\r\n require([\"uis\"], function (uis) {\r\n uis.init(forms);\r\n });\r\n }\r\n\r\n core.uisSubs = function () {\r\n\r\n var elem = $(\"[data-invite-uis-users]\");\r\n\r\n if (elem.length === 0) {\r\n return;\r\n }\r\n\r\n require([\"uis-subs\"], function (uis) {\r\n uis.init(elem);\r\n });\r\n }\r\n\r\n core.exchangeRates = function ()\r\n {\r\n\r\n var forms = $(\"form.forex-import\");\r\n\r\n if (forms.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n core.datePickerFields({\r\n selector: \"input.forex-date-picker\"\r\n });\r\n\r\n var eff = $(\"input[name='Model.EffectiveDate']\");\r\n var exp = $(\"input[name='Model.ExpiryDate']\");\r\n\r\n eff.on(\"date-change\",function() {\r\n var date = eff.datepicker(\"getDate\");\r\n var dat = new Date(date.valueOf());\r\n\r\n dat.setDate(dat.getDate() + 90);\r\n exp.datepicker(\"setDate\", dat);\r\n });\r\n\r\n }\r\n\r\n\r\n core.tabs = function()\r\n {\r\n var tablists = $(\"[role='tablist']\");\r\n\r\n if (tablists.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n console.log(\"tabs\");\r\n\r\n require([\"tabs\"], function(tabs)\r\n {\r\n tabs.init(tablists);\r\n });\r\n };\r\n\r\n core.hideStatusMessage = function ()\r\n {\r\n $(\"div[data-editor-status]\").delay(2500).fadeOut(400, function ()\r\n {\r\n $(this).remove();\r\n });\r\n };\r\n\r\n core.autoSubmitForms = function ()\r\n {\r\n var forms = $(\"form[data-auto-submit]\");\r\n\r\n forms.each(function (index)\r\n {\r\n $(this).find(\"button\").hide();\r\n });\r\n\r\n forms.on(\"click change keydown\", function (e)\r\n {\r\n var form = $(this);\r\n var field = $(e.target);\r\n var fieldType = e.target.nodeName.toLowerCase();\r\n var fieldSubType = e.target.type;\r\n var canSubmit = false;\r\n\r\n switch (fieldType)\r\n {\r\n case \"input\":\r\n switch (fieldSubType)\r\n {\r\n case \"radio\":\r\n case \"checkbox\":\r\n if (e.type === \"change\")\r\n {\r\n canSubmit = true;\r\n }\r\n break;\r\n }\r\n break;\r\n\r\n case \"select\":\r\n if (e.type === \"change\")\r\n {\r\n canSubmit = true;\r\n }\r\n break;\r\n }\r\n\r\n if (canSubmit)\r\n {\r\n form.submit();\r\n }\r\n });\r\n };\r\n\r\n core.setExternalLinks = function ()\r\n {\r\n $(\"a[data-external-link]\").attr(\"target\", \"_blank\").removeAttr(\"data-external-link\");\r\n };\r\n\r\n core.setFormReadOnly = function (form)\r\n {\r\n form.find(\":input\").attr(\"disabled\", \"disabled\");\r\n };\r\n\r\n core.errorToConsole = function (message)\r\n {\r\n if (typeof console != \"undefined\")\r\n {\r\n if (typeof console.error != \"undefined\")\r\n {\r\n console.error(message);\r\n }\r\n }\r\n };\r\n\r\n core.logToConsole = function (message, timestamp)\r\n {\r\n if (typeof console != \"undefined\")\r\n {\r\n if (typeof console.log != \"undefined\")\r\n {\r\n if (timestamp)\r\n {\r\n var d = new Date();\r\n console.log(message + \" (\" + (d) + \" / \" + d.getTime() + \")\");\r\n } else\r\n {\r\n console.log(message);\r\n }\r\n\r\n }\r\n }\r\n };\r\n\r\n core.getQuerystring = function (key)\r\n {\r\n return getNvcValue(window.location.href, key);\r\n };\r\n\r\n core.getNvcValue = function (url, key)\r\n {\r\n key = key.replace(/[\\[]/, \"\\\\\\[\").replace(/[\\]]/, \"\\\\\\]\");\r\n var regex = new RegExp(\"[\\\\?&]\" + key + \"=([^&#]*)\", \"i\");\r\n var qs = regex.exec(url);\r\n if (qs == null)\r\n {\r\n return null;\r\n } else\r\n {\r\n return qs[1];\r\n }\r\n };\r\n\r\n core.showPublishWarning = function ()\r\n {\r\n if (Cookies.get('PublisherWarning'))\r\n {\r\n\r\n\r\n require([\"toastr\"], function (toastr)\r\n {\r\n toastr.options = {\r\n \"closeButton\": true,\r\n \"debug\": false,\r\n \"newestOnTop\": false,\r\n \"progressBar\": false,\r\n \"positionClass\": \"toast-top-right\",\r\n \"preventDuplicates\": false,\r\n \"onclick\": null,\r\n \"showDuration\": \"300\",\r\n \"hideDuration\": \"1000\",\r\n \"timeOut\": \"5000\",\r\n \"extendedTimeOut\": \"1000\",\r\n \"showEasing\": \"swing\",\r\n \"hideEasing\": \"linear\",\r\n \"showMethod\": \"fadeIn\",\r\n \"hideMethod\": \"fadeOut\"\r\n }\r\n\r\n $('.filing-review-warning').each(function ()\r\n {\r\n toastr[\"warning\"]($(this).html());\r\n });\r\n });\r\n\r\n\r\n Cookies.remove('PublisherWarning');\r\n }\r\n };\r\n\r\n core.cargoIs = function ()\r\n {\r\n var root = $(\"[data-cargo-is]\");\r\n\r\n if (root.length !== 1)\r\n {\r\n return;\r\n }\r\n if (root.attrExists(\"data-cargo-is-form-attached\"))\r\n return;\r\n\r\n root.attr(\"data-cargo-is-form-attached\", \"true\");\r\n\r\n\r\n require([\"cargo-is\"], function (cargo) {\r\n cargo.init(root);\r\n });\r\n };\r\n\r\n core.cargoIsEditor = function () {\r\n var root = $(\"[data-cargo-is-editor]\");\r\n if (root.length !== 1) {\r\n return;\r\n }\r\n\r\n var heading = root.find(\"thead th:eq(0)\");\r\n var chk = $(\"<input type=checkbox value=1 name=check-all-favourites />\");\r\n var selector = \"table[data-cargo-is-editor] tbody input[type='checkbox']\";\r\n\r\n chk.checkboxController({\r\n childSelector: selector\r\n });\r\n\r\n if ($(selector).length > 0)\r\n {\r\n heading.append(chk);\r\n }\r\n };\r\n\r\n var verifyCallback = function (response)\r\n {\r\n var form = $(\"#recaptcha\").closest(\"form\");\r\n if (typeof response === \"string\")\r\n {\r\n var hid = form.find(\"[name$='RecaptchaResponse']\");\r\n\r\n hid.val(response);\r\n }\r\n };\r\n\r\n core.cargoIsAccept = function () {\r\n var form = $(\"[data-cargo-is-accept]\");\r\n if(form.length === 1)\r\n {\r\n var siteKey = form.attr(\"data-site-key\");\r\n if($(\"#recaptcha\").length !== 0) {\r\n grecaptcha.ready(function() {\r\n grecaptcha.render(\"recaptcha\", {\r\n \"sitekey\": siteKey,\r\n 'callback': verifyCallback\r\n });\r\n });\r\n }\r\n }\r\n };\r\n\r\n core.ratesAdmin = function ()\r\n {\r\n var root = $(\"[data-net-rates-filings]\");\r\n\r\n if (root.length !== 1)\r\n {\r\n return;\r\n }\r\n if (root.attrExists(\"data-net-rates-filings-attached\"))\r\n return;\r\n\r\n root.attr(\"data-net-rates-filings-attached\", \"true\");\r\n\r\n\r\n require([\"rates-admin\"], function (ratesAdmin) {\r\n ratesAdmin.init(root);\r\n });\r\n };\r\n\r\n core.directory = function ()\r\n {\r\n var root = $(\"[data-directory-root]\");\r\n\r\n if (root.length !== 1) {\r\n return;\r\n }\r\n\r\n require([\"directory\"], function (directory) {\r\n directory.init(root);\r\n });\r\n };\r\n\r\n core.copyToClipboard = function (value)\r\n {\r\n var $temp = $(\"<input>\");\r\n $(\"body\").append($temp);\r\n $temp.val(value).select();\r\n document.execCommand(\"copy\");\r\n $temp.remove();\r\n };\r\n\r\n core.forwarderAdmin = function ()\r\n {\r\n\r\n var elements = $(\"[data-forwarder-admin]\");\r\n\r\n if (elements.length === 0)\r\n return;\r\n\r\n require([\"forwarder-admin\"], function (forwarder) {\r\n forwarder.init(elements);\r\n });\r\n\r\n };\r\n\r\n core.awbEditor = function () {\r\n var form = $(\"[data-awb-form]\");\r\n\r\n\r\n if (form.length === 1) {\r\n require([\"awb-editor\"], function (awb) {\r\n awb.init(form);\r\n });\r\n }\r\n };\r\n\r\n core.deniedParties = function ()\r\n {\r\n var elements = $(\".denied-parties-search\");\r\n\r\n if (elements.length === 0)\r\n return;\r\n\r\n function ToggleAddressDetail(e) {\r\n e.preventDefault();\r\n var sanctionWrapper = $(e.currentTarget).closest('.sanction-wrapper');\r\n var $item = $(\"div.address-detail\", sanctionWrapper);\r\n var open = $item.hasClass('open');\r\n var $el = $(\"a.more-less\", sanctionWrapper);\r\n\r\n $item.removeClass('open');\r\n $item.removeClass('closed');\r\n if (open) {\r\n $item.addClass('closed');\r\n $el.find(\".more-less-text-more\").show();\r\n $el.find(\".more-less-text\").hide();\r\n\r\n $item.slideUp(250);\r\n } else {\r\n $item.addClass('open');\r\n $el.find(\".more-less-text-more\").hide();\r\n $el.find(\".more-less-text\").show();\r\n $item.slideDown(350);\r\n }\r\n }\r\n\r\n $(document).on('click', '.show-detail', ToggleAddressDetail);\r\n };\r\n\r\n core.init = function ()\r\n {\r\n\r\n };\r\n\r\n core.init();\r\n\r\n return core;\r\n});\r\n\r\nif (typeof Object.create !== 'function')\r\n{\r\n Object.create = function (o)\r\n {\r\n function f()\r\n {\r\n }\r\n f.prototype = o;\r\n return new f();\r\n };\r\n}\r\n\r\nif (typeof Array.prototype.binarySearch == 'undefined')\r\n{\r\n Array.prototype.binarySearch = function (find, comparator)\r\n {\r\n var low = 0, high = this.length - 1, i, comparison;\r\n\r\n while (low <= high)\r\n {\r\n i = Math.floor((low + high) / 2);\r\n comparison = comparator(this[i], find);\r\n if (comparison < 0)\r\n {\r\n low = i + 1;\r\n continue;\r\n }\r\n if (comparison > 0)\r\n {\r\n high = i - 1;\r\n continue;\r\n }\r\n return i;\r\n }\r\n return -1;\r\n };\r\n}\r\n\r\nif (typeof console == 'undefined')\r\n{\r\n console = {};\r\n console.history = [];\r\n console.log = function ()\r\n {\r\n console.history.push(arguments);\r\n };\r\n}","define(\"filter-tables\", [\"jquery\", \"core\"], function ($, core) {\r\n\r\n var LIVE_SEARCH = false;\r\n\r\n // To be Removed\r\n\r\n //var setupControl = function (tbl) {\r\n\r\n // if (tbl.attr(\"data-filter-table-enabled\")) {\r\n // return;\r\n // }\r\n\r\n // var ctrl = tbl.find(\"form[role='search']\");\r\n\r\n // if (ctrl.length == 0) {\r\n // return;\r\n // }\r\n\r\n // tbl.data(\"form\", ctrl);\r\n\r\n // tbl.on(core.LISTING_REFRESH_EVENT, function () {\r\n // filter.refresh(tbl);\r\n // });\r\n\r\n // var inp = ctrl.find(\"input[type='text']\");\r\n\r\n // if (inp.length == 0) {\r\n // inp = $(\"<input name=q value=\\\"\\\" />\");\r\n\r\n // ctrl.append(inp);\r\n // }\r\n\r\n // ctrl.on(\"submit\", function () {\r\n // executeFilter(tbl, ctrl);\r\n\r\n // return false;\r\n // });\r\n\r\n // inp.attr(\"autocomplete\", \"off\");\r\n // inp.on(\"keydown\", function (e) {\r\n // switch (e.which) {\r\n // case 9:\r\n // // tab\r\n // case 13:\r\n // // enter\r\n // return;\r\n // default:\r\n // if (!LIVE_SEARCH) {\r\n // return;\r\n // }\r\n\r\n // var timeout = tbl.data(\"wait-timeout\");\r\n\r\n // if (timeout != null) {\r\n // clearTimeout(timeout);\r\n // }\r\n\r\n // timeout = setTimeout(function () {\r\n // executeFilter(tbl, ctrl);\r\n // }, 500);\r\n\r\n // tbl.data(\"wait-timeout\", timeout);\r\n\r\n // break;\r\n // }\r\n // });\r\n\r\n //};\r\n\r\n var highlight = function (root, value, completeMatch)\r\n {\r\n\r\n root.highlightText({\r\n value: value,\r\n completeMatch: completeMatch\r\n });\r\n\r\n };\r\n\r\n var executeFilter = function (root, callback, options) {\r\n\r\n var settings = $.extend({\r\n url: null,\r\n data: null\r\n }, options);\r\n\r\n callback = callback || function () { };\r\n\r\n $.ajax({\r\n url: settings.url,\r\n headers: {\"X-Requested-With\": \"AjaxClient\"},\r\n data: settings.data,\r\n cache: false\r\n }).done(function(data, status, xhr) {\r\n\r\n var replace = $($.parseHTML(data));\r\n\r\n root.before(replace);\r\n root.remove();\r\n\r\n var high = replace.find(\"form[role='search']\").data(\"search-highlight\");\r\n\r\n if (high != null && high !== \"\")\r\n {\r\n highlight(replace.find(\".submenu_list\"), high, false);\r\n }\r\n\r\n callback(replace);\r\n\r\n });\r\n };\r\n\r\n var findMatchingUrl = function(root)\r\n {\r\n var active = root.find(\"a[aria-selected='true']\");\r\n\r\n if(active.length != 0) {\r\n return active.attr(\"href\");\r\n }\r\n\r\n return null;\r\n };\r\n\r\n var withoutQueryString = function(url)\r\n {\r\n \r\n if(url == null) {\r\n return null;\r\n }\r\n\r\n // if required, remove the querystring from the URL to allow the original to match\r\n // this is because the url can now contain ?status=Saved\r\n // '/Category/Edit/63?status=Saved' should match '/Category/Edit/63'\r\n if(url.indexOf(\"?\") != -1) {\r\n return url.substr(0, url.indexOf(\"?\"));\r\n }\r\n\r\n return null;\r\n\r\n };\r\n\r\n var filter = function () { };\r\n\r\n filter.destroy = function () {\r\n // TODO: Add destroy action\r\n };\r\n\r\n filter.paging = function(options)\r\n {\r\n\r\n var settings = $.extend({\r\n root: null,\r\n url: null,\r\n urlMatch: null,\r\n callback: function() { }\r\n }, options);\r\n\r\n var root = settings.root;\r\n var url = settings.url;\r\n var urlMatch = settings.urlMatch;\r\n var callback = settings.callback;\r\n \r\n var lst = root.find(\"section[data-index-listing]\");\r\n\r\n if (urlMatch == null) {\r\n urlMatch = findMatchingUrl(root);\r\n }\r\n\r\n urlMatch = withoutQueryString(urlMatch);\r\n\r\n executeFilter(lst, function () {\r\n callback();\r\n root.find(\"a[href='\" + urlMatch + \"']\")\r\n .attr(\"aria-selected\", \"true\");\r\n }, {\r\n url: url,\r\n data: null\r\n });\r\n\r\n };\r\n\r\n filter.execute = function(options)\r\n {\r\n\r\n var settings = $.extend({\r\n root: null,\r\n urlMatch: null,\r\n callback: function()\r\n {\r\n }\r\n }, options);\r\n\r\n var root = settings.root;\r\n var urlMatch = settings.urlMatch;\r\n var callback = settings.callback;\r\n\r\n var lst = root.find(\"section[data-index-listing]\");\r\n var frm = root.find(\"form[role='search']\");\r\n\r\n if(frm.length === 0) {\r\n console.warn(\"no form found in filter.execute. exiting!\")\r\n return;\r\n }\r\n\r\n if(urlMatch == null) {\r\n urlMatch = findMatchingUrl(root);\r\n }\r\n\r\n urlMatch = withoutQueryString(urlMatch);\r\n\r\n executeFilter(lst, function() {\r\n callback();\r\n root.find(\"a[href='\" + urlMatch + \"']\")\r\n .attr(\"aria-selected\", \"true\");\r\n }, {\r\n url: frm.attr(\"action\"),\r\n data: frm.serialize()\r\n });\r\n\r\n };\r\n\r\n return filter;\r\n\r\n});","define(\"form-editor-helper\", [\"jquery\"], function ($)\r\n{\r\n\r\n const helper = function () {\r\n // This is an empty function to hang methods off of.\r\n };\r\n\r\n helper.clearErrorsInForm = function (form)\r\n {\r\n form.find(\".validation-summary-valid\").remove();\r\n };\r\n\r\n helper.warningsFromResponse = function (submitResponse)\r\n {\r\n if (!submitResponse.warnings) {\r\n return [];\r\n }\r\n\r\n const unique = [];\r\n\r\n for (const element of submitResponse.warnings) {\r\n if (unique.indexOf(element) === -1) {\r\n unique[unique.length] = element;\r\n }\r\n }\r\n\r\n return unique;\r\n };\r\n\r\n helper.errorsFromResponse = function (submitResponse)\r\n {\r\n if (!submitResponse.errors) {\r\n return [];\r\n }\r\n\r\n const unique = [];\r\n\r\n for (const element of submitResponse.errors) {\r\n if (unique.indexOf(element) === -1) {\r\n unique[unique.length] = element;\r\n }\r\n }\r\n\r\n return unique;\r\n };\r\n\r\n helper.errorFieldsFromResponse = function (submitResponse)\r\n {\r\n if (!submitResponse.errors) {\r\n return [];\r\n }\r\n\r\n const unique = [];\r\n\r\n for (const element of submitResponse.fields) {\r\n if (unique.indexOf(element) === -1) {\r\n unique[unique.length] = element;\r\n }\r\n }\r\n\r\n return unique;\r\n };\r\n\r\n helper.showErrorMessagesInForm = function (formErrors, errors, fields, scroll, filtered) {\r\n\r\n let validation = formErrors.find(\".validation-summary-valid,.validation-summary-errors\");\r\n\r\n if (validation.length === 0)\r\n {\r\n formErrors.find(\".validation-summary-valid,.validation-summary-errors\").remove();\r\n validation = $(\"<div class=validation-summary-valid />\");\r\n formErrors.prepend(validation.hide());\r\n }\r\n\r\n const ul = $(\"<ul />\");\r\n\r\n validation.empty().append(ul).show().addClass(\"validation-summary-errors\");\r\n\r\n let i;\r\n let err_count = 0;\r\n\r\n for (i = 0; i < errors.length; i++)\r\n {\r\n let position = filtered.indexOf(fields[i]);\r\n\r\n if(filtered.length !== 0 && position === -1) {\r\n continue;\r\n }\r\n\r\n err_count++;\r\n ul.append($(\"<li/>\").html(errors[i]));\r\n }\r\n\r\n const a = $(\"<a href=javascript:void(0) />\")\r\n .on(\"click\", function () {\r\n $(this).closest(\".validation-summary-errors\").fadeOut(function () {\r\n $(this).remove();\r\n });\r\n }).append(\"<span class='ui-icon ui-icon-closethick' title='Close'></span>\");\r\n\r\n const close = $(\"<li class=close />\").prepend(a);\r\n\r\n ul.prepend(close);\r\n\r\n if (errors.length > 0 && err_count > 0)\r\n {\r\n\r\n const input = $(\"[name='\" + fields[0] + \"']\");\r\n const tablist = input.closest(\"form\").find(\"[role=tablist]\");\r\n const pnl = input.closest(\"[role=tabpanel]\");\r\n\r\n require([\"tabs\"], function(tabs)\r\n {\r\n tabs.select(tablist, pnl);\r\n });\r\n\r\n formErrors.trigger(\"validation-failed\", [errors, fields]);\r\n\r\n validation.hide();\r\n validation.delay(100).slideDown(\"fast\", function ()\r\n {\r\n $(this).show();\r\n });\r\n\r\n if(scroll === true)\r\n {\r\n formErrors.scrollToShow();\r\n }\r\n } else {\r\n validation.hide();\r\n }\r\n \r\n };\r\n\r\n helper.showErrorsInForm = function (formErrors, errors, fields, scroll, filtered)\r\n {\r\n\r\n errors = errors || [];\r\n fields = fields || [];\r\n scroll = scroll || true;\r\n filtered = filtered || [];\r\n\r\n console.log(errors);\r\n console.log(fields);\r\n console.log(filtered)\r\n\r\n if(errors.length === 0){\r\n return ;\r\n }\r\n\r\n // only reset when validating the entire form, or the form inputs get the wrong state when not actually validating them\r\n if (fields.length === 0)\r\n {\r\n formErrors.find(\"input[aria-invalid='true'],select[aria-invalid='true'],textarea[aria-invalid='true']\").attr(\"aria-invalid\", \"false\");\r\n }\r\n\r\n for (const element of fields) {\r\n formErrors.find(\"[name='\" + element + \"']\").attr(\"aria-invalid\", \"true\");\r\n formErrors.find(\"[data-validation-field-name='\" + element + \"']\").attr(\"aria-invalid\", \"true\"); // For autocomplete textboxes.\r\n }\r\n\r\n if (filtered.length !== 0) {\r\n for (const element of filtered) {\r\n let position = fields.indexOf(element);\r\n\r\n console.log(element);\r\n console.log(position);\r\n\r\n if (position === -1) {\r\n formErrors.find(\"[name='\" + element + \"']\").attr(\"aria-invalid\", \"false\");\r\n }\r\n }\r\n }\r\n\r\n this.showErrorMessagesInForm(formErrors, errors, fields, scroll, filtered);\r\n };\r\n\r\n helper.showWarningsInForm = function (formErrors, warnings)\r\n {\r\n\r\n warnings = warnings || [];\r\n\r\n if(warnings.length === 0) {\r\n return ;\r\n }\r\n\r\n let validation = formErrors.find(\".warning-summary-valid\");\r\n\r\n if (validation.length === 0)\r\n {\r\n formErrors.find(\".warning-summary-valid\").remove();\r\n validation = $(\"<div class=warning-summary-valid />\");\r\n formErrors.prepend(validation.hide());\r\n }\r\n\r\n const ul = $(\"<ul />\");\r\n const btn = $(\"<button style='margin: 0 50%;'>Understood</button>\");\r\n\r\n validation.empty().append(ul).show().addClass(\"validation-summary-warnings\");\r\n\r\n let i;\r\n\r\n for (i = 0; i < warnings.length; i++)\r\n {\r\n ul.append($(\"<li/>\").text(warnings[i]));\r\n }\r\n\r\n btn.on(\"click\", function ()\r\n {\r\n const find = formErrors.find(\"[data-warning-accepted]\");\r\n\r\n find.show().prop(\"checked\", true).hide();\r\n\r\n $(this).closest(\".validation-summary-warnings\").fadeOut(function ()\r\n {\r\n $(this).remove();\r\n });\r\n\r\n return false;\r\n });\r\n \r\n validation.append(btn);\r\n };\r\n\r\n return helper;\r\n\r\n});","define(\"form-editor\", [\"jquery\", \"jquery-form\", \"jquery-ui\", \"core\", \"messagebox\", \"string-table\", \"form-editor-helper\"], function ($, $forms, $ui, core, messagebox, stringTable, formHelper)\r\n{\r\n\r\n var AJAX_HEADER_VALUE = \"AjaxClient\";\r\n\r\n var disableButtons = null;\r\n\r\n var editor = function () { };\r\n\r\n var beforeSend = function (form)\r\n {\r\n formHelper.clearErrorsInForm(form);\r\n };\r\n\r\n var handleSuccess = function (submitResponse, status, xhr, form)\r\n {\r\n var settings = form.data(\"form-settings\");\r\n\r\n if (disableButtons !== null) {\r\n disableButtons.revert();\r\n } else {\r\n form.find(\".btngroup>button\").removeAttr(\"aria-disabled\");\r\n }\r\n\r\n if (typeof submitResponse.warnings !== \"undefined\") {\r\n var warnings = formHelper.warningsFromResponse(submitResponse);\r\n formHelper.showWarningsInForm(form, warnings);\r\n }\r\n\r\n if (typeof submitResponse.errors != \"undefined\")\r\n {\r\n var errors = formHelper.errorsFromResponse(submitResponse);\r\n var fields = formHelper.errorFieldsFromResponse(submitResponse);\r\n\r\n formHelper.showErrorsInForm(form, errors, fields);\r\n settings.callbackError();\r\n return;\r\n }\r\n if (submitResponse.status == \"exception\") {\r\n formHelper.showErrorsInForm(form, [submitResponse.message]);\r\n settings.callbackError();\r\n return;\r\n }\r\n if (submitResponse.status == \"redirect\") { // intercepted as a JSON request\r\n // reload the form to get the correct field values\r\n settings.callbackSave(submitResponse.url);\r\n return;\r\n }\r\n\r\n if (typeof submitResponse === \"object\")\r\n {\r\n settings.callbackJson(submitResponse);\r\n }\r\n\r\n };\r\n\r\n var onSubmitForm = function (evt)\r\n {\r\n\r\n var form = $(this);\r\n\r\n var buttons = form.find(\".btngroup>button\");\r\n\r\n if (buttons.attr(\"aria-disabled\") === \"true\")\r\n {\r\n return false;\r\n }\r\n\r\n form.trigger(\"form-pre-serialize\");\r\n\r\n var formData;\r\n var processData = true;\r\n var contentType = \"application/x-www-form-urlencoded; charset=UTF-8\";\r\n\r\n if (form.attr(\"enctype\") === \"multipart/form-data\") {\r\n formData = new FormData(form[0]);\r\n processData = false;\r\n contentType = false;\r\n } else {\r\n formData = form.serialize();\r\n }\r\n\r\n console.debug(formData);\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n processData: processData,\r\n contentType: contentType,\r\n headers: { \"X-Requested-With\": AJAX_HEADER_VALUE },\r\n url: form.attr(\"action\"),\r\n data: formData,\r\n beforeSend: function () {\r\n\r\n if (form.attr('data-disable-input-on-submit')) {\r\n if (disableButtons === null) {\r\n disableButtons = core.disableInputButtons({ buttonSelector: 'button', links: true, inputs: true });\r\n } else {\r\n disableButtons.start();\r\n }\r\n } else {\r\n form.find(\".btngroup>button\").attr(\"aria-disabled\", \"true\");\r\n }\r\n\r\n beforeSend(form);\r\n }\r\n }).done(function(data, status, xhr) {\r\n switch(status) {\r\n case \"success\":\r\n handleSuccess(data, status, xhr, form);\r\n break;\r\n default:\r\n alert(\"Unhandled status: \" + status);\r\n break;\r\n }\r\n });\r\n\r\n return false;\r\n\r\n };\r\n\r\n var deleteReport = function (form)\r\n {\r\n form.trigger(\"form-pre-serialize\");\r\n\r\n var report = form.data(\"delete-report-first\");\r\n var wait = core.waitNotice({ delay: 200, message: \"Please wait...\" });\r\n\r\n wait.start();\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n headers: { \"X-Requested-With\": AJAX_HEADER_VALUE },\r\n url: report,\r\n data: form.serialize(),\r\n beforeSend: function ()\r\n {\r\n beforeSend(form);\r\n }\r\n }).done(function (data, status, xhr)\r\n {\r\n\r\n wait.cancel();\r\n\r\n if (core.handleLogOut(data))\r\n {\r\n return;\r\n }\r\n\r\n require([\"popup\"], function (popup)\r\n {\r\n popup.element(\"Report\", data, {\r\n callback: function (container)\r\n {\r\n var confirm = container.find(\"button[data-confirm]\");\r\n\r\n confirm.on(\"click\", function ()\r\n {\r\n var chk = form.find(\"input[type='checkbox']\");\r\n\r\n form.show();\r\n chk.prop(\"checked\", true);\r\n form.hide();\r\n\r\n popup.close();\r\n form.submit();\r\n });\r\n\r\n }\r\n });\r\n });\r\n\r\n });\r\n\r\n };\r\n\r\n var onDeleteForm = function ()\r\n {\r\n\r\n var form = $(this);\r\n\r\n form.trigger(\"form-pre-serialize\");\r\n\r\n var wait = core.waitNotice({ delay: 200, message: \"Deleting...\" });\r\n\r\n wait.start();\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n headers: { \"X-Requested-With\": AJAX_HEADER_VALUE },\r\n url: form.attr(\"action\"),\r\n data: form.serialize(),\r\n beforeSend: function () {\r\n beforeSend(form);\r\n }\r\n }).done(function (data, status, xhr) {\r\n\r\n wait.cancel();\r\n\r\n switch (status) {\r\n case \"success\":\r\n var visibleForm = form.data(\"visible-form\");\r\n var settings = visibleForm.data(\"form-settings\");\r\n\r\n if (core.handleLogOut(data))\r\n {\r\n return;\r\n }\r\n\r\n if (typeof data.warnings !== \"undefined\") {\r\n var warnings = formHelper.warningsFromResponse(data);\r\n formHelper.showWarningsInForm(visibleForm, warnings);\r\n }\r\n\r\n if (typeof data.errors != \"undefined\") {\r\n var errors = formHelper.errorsFromResponse(data);\r\n formHelper.showErrorsInForm(visibleForm, errors);\r\n return;\r\n }\r\n if (data.status == \"exception\") {\r\n formHelper.showErrorsInForm(visibleForm, [data.message]);\r\n return;\r\n }\r\n if (data.status == \"redirect\") { // intercepted as a JSON request\r\n var redirect = form.attr(\"data-redirect-on-delete\");\r\n settings.callbackDelete(redirect, data.url);\r\n }\r\n\r\n break;\r\n default:\r\n alert(\"Unhandled status: \" + status);\r\n break;\r\n }\r\n });\r\n\r\n return false;\r\n\r\n };\r\n\r\n var validate = function(form, url, el)\r\n {\r\n\r\n var field = el;\r\n var val = field.val();\r\n // hack the correct field name to send to the server for when an autocomplete field is in use and the actual required field has been hidden\r\n var fieldName = field.data(\"validation-field-name\");\r\n var name = fieldName || field.attr(\"name\");\r\n var relatedField = field.attr(\"data-related-field-name\"); // When we need to validate two fields at the same time.\r\n\r\n // Multi-select autocompletes do not store their value on the original input, so set val based on what is selected.\r\n if (field.data('auto-complete-multiple')) {\r\n val = field.data('selected-values');\r\n }\r\n\r\n if (field.data(\"validated-value\") === val) { // don't revalidate the value as it's just been done\r\n return;\r\n }\r\n\r\n formHelper.clearErrorsInForm(form);\r\n\r\n form.trigger(\"form-pre-serialize\");\r\n\r\n var formData = form.serialize();\r\n\r\n field.data(\"validated-value\", val);\r\n\r\n var headers = {\r\n \"X-Requested-With\": AJAX_HEADER_VALUE,\r\n \"X-Validation-Field\": name\r\n };\r\n\r\n if (relatedField) {\r\n headers[\"X-Validation-Related-Field\"] = relatedField;\r\n }\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n headers: headers,\r\n url: url,\r\n data: formData\r\n }).done(function (data, status, xhr) {\r\n\r\n if (core.handleLogOut(data))\r\n {\r\n return;\r\n }\r\n\r\n if (data.status == \"valid\")\r\n {\r\n var pair = field.attr(\"data-pair-field-name\");\r\n\r\n var pairs = null;\r\n\r\n if (pair != null && pair != \"\")\r\n {\r\n pairs = $(\"[data-pair-field-name='\" + pair + \"']\");\r\n }\r\n\r\n field.attr(\"aria-invalid\", \"false\");\r\n\r\n if (pairs != null)\r\n {\r\n pairs.each(function ()\r\n {\r\n var p = $(this);\r\n\r\n p.attr(\"aria-invalid\", \"false\");\r\n\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n var err = formHelper.errorsFromResponse(data);\r\n var fld = formHelper.errorFieldsFromResponse(data);\r\n\r\n formHelper.showErrorsInForm(form, err, fld);\r\n\r\n field.attr(\"aria-invalid\", \"true\");\r\n });\r\n };\r\n\r\n var cancelButton = function(form) {\r\n var root = form.find(\"div.btngroup\");\r\n\r\n if (root.find('[data-cancel-override]').length > 0) {\r\n return;\r\n }\r\n\r\n var cancel = form.data(\"editor-form-cancel\");\r\n\r\n if (typeof cancel === \"undefined\" || root.length === 0) {\r\n return;\r\n }\r\n\r\n console.log(\"cancelButton: attr[editor-form-cancel]: \" + cancel);\r\n\r\n var cancelMessage = stringTable.get(\"LABEL_BUTTON_CANCEL\");\r\n\r\n var button = $(\"<button class=\\\"btn\\\" href=\\\"\" +\r\n cancel +\r\n \"\\\"><span class=\\\"ico-24-cross\\\"></span> \" +\r\n cancelMessage +\r\n \"</button>\");\r\n\r\n button.on(\"click\",\r\n function () {\r\n var rootOfForm = form.closest(\"div.l-colgroup,div.tabpanel,div#popup,div.page_main,div[data-ancillary-editor]\");\r\n var settings = form.data(\"form-settings\");\r\n\r\n if(settings.container.find(\"section[data-editor-root]\").length === 0) {\r\n // default to redirect.\r\n document.location.replace(cancel);\r\n return false;\r\n }\r\n\r\n editor.close({\r\n container: settings.container,\r\n message: \"Action Cancelled\",\r\n callback: function() {\r\n rootOfForm.find(\"a[data-entity-edit]\").removeAttr(\"aria-selected\");\r\n }\r\n });\r\n return false;\r\n });\r\n\r\n root.append(button);\r\n\r\n };\r\n\r\n var setupValidation = function (form)\r\n {\r\n\r\n if(form.length == 0) {\r\n return;\r\n }\r\n\r\n var url = form.data(\"editor-form-validation\");\r\n\r\n if (url == null || url == \"\") {\r\n return;\r\n }\r\n\r\n var fields = form.find(\"input[type='text']:not([data-bypass-validate],[data-auto-complete-multiple]),input[type='password']:not([data-bypass-validate]),textarea:not([data-bypass-validate])\");\r\n var selects = form.find(\"select:not([data-bypass-validate])\");\r\n var autocompleteCanSelectMultiple = form.find(\"input[data-auto-complete-multiple]\");\r\n\r\n // on load these values are validated as valid or invalid, so do nothing unless they change\r\n fields.each(function () {\r\n var f = $(this);\r\n f.data(\"validated-value\", f.val());\r\n });\r\n autocompleteCanSelectMultiple.each(function () {\r\n var f = $(this);\r\n f.data(\"validated-value\", f.data('selected-values'));\r\n });\r\n selects.each(function () {\r\n var f = $(this);\r\n f.data(\"validated-value\", f.val());\r\n });\r\n\r\n fields.off(\"blur\").off('date-change');\r\n selects.off(\"change\");\r\n autocompleteCanSelectMultiple.off(\"change\");\r\n\r\n var inlineValidate = function() {\r\n validate(form, url, $(this));\r\n };\r\n\r\n fields.on('blur', inlineValidate).on('date-change', inlineValidate);\r\n selects.on(\"change\", inlineValidate);\r\n autocompleteCanSelectMultiple.on('change', inlineValidate);\r\n };\r\n\r\n var createFormTarget = function (container, settings)\r\n {\r\n\r\n console.info(\"createFormTarget\");\r\n\r\n var success = container.find(\"div[data-editor-status]\");\r\n\r\n if (success.length === 1)\r\n {\r\n setTimeout(function ()\r\n {\r\n container.find(\"div[data-editor-status]\").fadeOut();\r\n }, 2500);\r\n }\r\n\r\n var forms = container.find(\"form[data-editor-form]\");\r\n\r\n console.log(\"EDITOR\");\r\n console.log(container);\r\n console.log(forms);\r\n\r\n core.datePickerFields({skipPreload:true});\r\n\r\n forms.each(function () {\r\n var form = $(this);\r\n var formDelete = form.siblings(\"form[data-delete-form],div[data-delete-form]\");\r\n\r\n var resetAutoComplete = form.attr(\"data-reset-autocomplete-flags\") === \"true\";\r\n\r\n if(resetAutoComplete) {\r\n require([\"autocomplete\"], function (autocomplete){\r\n autocomplete.destroy(form);\r\n });\r\n }\r\n\r\n setupValidation(form);\r\n\r\n form.on(\"rebind-validation\", function ()\r\n {\r\n setupValidation(form);\r\n });\r\n\r\n cancelButton(form);\r\n\r\n console.log(\"formDelete.length: \" + formDelete.length);\r\n\r\n if (formDelete.length === 0)\r\n console.warn(\"no delete form found to hook into\");\r\n\r\n if (formDelete.length === 1) {\r\n var del = formDelete;\r\n var chk = del.find(\"input[type='checkbox']\");\r\n var btnTgt = del.find(\"button\");\r\n var btn = $(\"<button type=button class=destructive />\");\r\n var tgt = form.find(\"div.btngroup\");\r\n var msg = del.data(\"delete-form\");\r\n var report = formDelete.data(\"delete-report-first\");\r\n\r\n if (typeof report === \"undefined\")\r\n {\r\n report = \"\";\r\n }\r\n\r\n if (report === \"\")\r\n {\r\n console.warn(\"no report URL provided\");\r\n }\r\n\r\n btn.append([btnTgt.find(\"span\"), btnTgt.text()]);\r\n\r\n tgt.prepend(btn);\r\n\r\n btn.on(\"click\", function ()\r\n {\r\n\r\n if (report !== \"\")\r\n {\r\n deleteReport(formDelete);\r\n }\r\n else\r\n {\r\n messagebox.confirm({\r\n message: msg,\r\n callbackTrue: function ()\r\n {\r\n del.show();\r\n chk.prop(\"checked\", true);\r\n del.hide();\r\n del.submit();\r\n }\r\n });\r\n }\r\n\r\n return false;\r\n\r\n });\r\n\r\n del.data(\"visible-form\", form);\r\n del.on(\"submit\", onDeleteForm);\r\n del.hide();\r\n\r\n }\r\n\r\n form.data(\"form-settings\", settings);\r\n\r\n // if (form.attr(\"enctype\") === \"multipart/form-data\") {\r\n // alert(\"multipart/form-data forms not supported.\");\r\n //\r\n // return;\r\n // }\r\n\r\n form.on(\"submit\", onSubmitForm);\r\n\r\n });\r\n\r\n core.autoComplete({\r\n bound: function()\r\n {\r\n console.log(\"bound\");\r\n core.userAdmin();\r\n }\r\n });\r\n\r\n // the autocomplete will not be bound when no fields present, Do this separately in that case, but\r\n // also keep existing functionality as bind needs to happen before core.accountTypeOptions\r\n if($(\"input[data-auto-complete]\").length === 0)\r\n core.userAdmin();\r\n\r\n core.autoGrowTextArea();\r\n core.fullTextEditor();\r\n core.checkboxListController();\r\n core.checkboxListWithDetailsController();\r\n core.formUtilities();\r\n core.checkboxToggle();\r\n core.checkboxDisplayToggle();\r\n core.collapseFormSections();\r\n core.setExternalLinks();\r\n core.jobDeliveryOptions();\r\n core.bulletinsEditor();\r\n core.fileFormatOptions();\r\n core.limitTextareaLength();\r\n core.foldedLocationLookups();\r\n core.foldedItemLookups();\r\n core.groupedSelects();\r\n core.datePickerFields();\r\n core.ratesAdmin();\r\n core.agentAdmin();\r\n core.forwarderAdmin();\r\n core.directory();\r\n };\r\n\r\n editor.close = function(options)\r\n {\r\n\r\n var settings = $.extend({\r\n container: null,\r\n message: null,\r\n callback: null\r\n }, options);\r\n\r\n var editorForm = settings.container.find(\"section[data-editor-root]\");\r\n\r\n var deleteCallback = function()\r\n {\r\n if (settings.message != null)\r\n {\r\n var status = $(\"<section data-editor-delete-message class=l-col-1-2 />\").append($(\"<div data-editor-status />\").append(settings.message));\r\n\r\n editorForm.before(status);\r\n editorForm.remove();\r\n\r\n setTimeout(function ()\r\n {\r\n $(\"section[data-editor-delete-message]\").fadeOut(\"fast\", function(a,b,c) {\r\n $(\"section[data-editor-delete-message]\").remove();\r\n });\r\n }, 2500);\r\n\r\n }\r\n\r\n if (settings.callback !== null) {\r\n settings.callback();\r\n }\r\n\r\n };\r\n\r\n editorForm.fadeOut(\"fast\", deleteCallback);\r\n\r\n };\r\n\r\n editor.setup = function(options) // create the editor from a 'standalone' inline form\r\n {\r\n\r\n console.log(\"editor.setup\");\r\n console.log(options);\r\n\r\n var settings = $.extend({\r\n standalone: options.container.data(\"editor-form\") === \"standalone\",\r\n container: null,\r\n callbackJson: function(json) {},\r\n callbackSave: function (saveUrl) { },\r\n callbackDelete: function () { },\r\n callbackError: function () { }\r\n }, options);\r\n\r\n createFormTarget(settings.container, settings);\r\n\r\n settings.container.find(\":input:visible:eq(0)\").focus();\r\n\r\n };\r\n\r\n editor.create = function(options) // create the editor form from a listing link click\r\n {\r\n\r\n console.log(\"editor.create\");\r\n console.log(options);\r\n\r\n var settings = $.extend({\r\n container: null,\r\n url: null,\r\n loading: null,\r\n errors: null,\r\n showLoading: false,\r\n callbackLoaded: function () { },\r\n callbackJson: function (json) { },\r\n callbackSave: function (saveUrl) { },\r\n callbackDelete: function () { },\r\n callbackError: function () { }\r\n }, options);\r\n\r\n var headers = { \"X-Requested-With\": AJAX_HEADER_VALUE };\r\n var url = settings.url;\r\n\r\n $.ajax({\r\n type: \"GET\",\r\n headers: headers,\r\n url: url,\r\n beforeSend: function(xhr)\r\n {\r\n\r\n if (settings.showLoading)\r\n {\r\n $(\"div[data-editor-loading-message]\").remove();\r\n\r\n settings.loading = $(\"<div data-editor-loading-message class=l-col-1-2 />\").append(stringTable.get(\"LABEL_SCRIPTS_MESSAGE_LOADING\"));\r\n\r\n settings.container.find(\"section.l-col-1-2\").not(\":eq(0)\").remove();\r\n\r\n var listing = settings.container.find(\"section.l-col-1-2:eq(0)\");\r\n\r\n listing.after(settings.loading);\r\n }\r\n }\r\n }).done(function(data, status, xhr) {\r\n switch (status)\r\n {\r\n case \"success\":\r\n var wrapper = $(\"<section data-editor-root class=l-col-1-2 />\");\r\n var container = settings.container;\r\n\r\n if (core.handleLogOut(data))\r\n {\r\n return;\r\n }\r\n\r\n var fadedOut = function() // wrap in inner function to ensure the loading message is gone before the scrollToShow function is called\r\n {\r\n if (settings.loading != null)\r\n {\r\n settings.loading.remove();\r\n settings.loading = null;\r\n }\r\n\r\n $(\"section[data-editor-root]\").remove();\r\n\r\n wrapper.html(data);\r\n\r\n container.append(wrapper);\r\n\r\n createFormTarget(container, settings);\r\n\r\n var optionsScroll = {\r\n callback: function()\r\n {\r\n wrapper.find(\":input:visible:eq(0)\").focus();\r\n }\r\n };\r\n\r\n wrapper.scrollToShow(optionsScroll);\r\n\r\n container.fadeIn(\"fast\");\r\n\r\n settings.callbackLoaded();\r\n };\r\n\r\n if (settings.loading == null)\r\n {\r\n fadedOut();\r\n\r\n return;\r\n }\r\n\r\n settings.loading.fadeOut(\"fast\", fadedOut);\r\n\r\n break;\r\n default:\r\n alert(\"Unhandled status: \" + status);\r\n break;\r\n }\r\n }).fail(function(xhr, textStatus, errorThrown) {\r\n\r\n $(\"div[data-editor-loading-message]\").fadeOut(\"fast\", function() {\r\n var message = $(\"<div data-editor-loading-message class=\\\"l-col-1-2 status-problem\\\" />\").append(stringTable.get(\"ERROR_GENERAL_FAILURE\")).hide();\r\n\r\n settings.container.find(\"section.l-col-1-2\").not(\":eq(0)\").remove();\r\n settings.container.find(\"section.l-col-1-2:eq(0)\").after(message);\r\n\r\n message.fadeIn(\"fast\").delay(5000).fadeOut(\"slow\", function ()\r\n {\r\n message.remove();\r\n });\r\n\r\n });\r\n\r\n });\r\n };\r\n\r\n return editor;\r\n\r\n});","define(\"image-dialog\", [\"jquery\"], function ($) {\r\n\r\n window.ImageDialog = function () {\r\n var pub = function () { };\r\n\r\n // * static - public * //\r\n\r\n pub.init = function () {\r\n var baseUrl = \"/\";\r\n\r\n $(\"body\").on(\"click\", \"button[data-upload-type], input[data-upload-type]\", function (e) {\r\n var me = $(this);\r\n\r\n _cleanInput();\r\n\r\n _currentInput = $(\"#\" + me.data(\"upload-input\"));\r\n _currentInput.addClass(\"tiny-file-upload-input\");\r\n\r\n var uploadType = me.data(\"upload-type\");\r\n\r\n _dialog = window.open(baseUrl + \"TinyFileManager/dialog.aspx?profile=\" + uploadType, \"FileManager\", \"toolbar=0,location=0,status=0,menubar=0,scrollbars=yes,resizable=1,width=900,height=600\");\r\n\r\n e.preventDefault();\r\n });\r\n };\r\n\r\n pub.afterSelection = function () {\r\n if (_dialog === null) {\r\n return;\r\n }\r\n\r\n _dialog.close();\r\n _dialog = null;\r\n\r\n var fileUrl = _currentInput.val();\r\n console.log(_currentInput);\r\n //_currentInput.val(fileUrl.substr(fileUrl.lastIndexOf(\"/\") + 1));\r\n _currentInput.val(fileUrl);\r\n\r\n /////////// PREVIEW /////////////////////\r\n var $image = $(_currentInput).next().next(\"img\");\r\n\r\n if ($image.length == 1) {\r\n var fullPath = _currentInput.val();\r\n var relativePath = fullPath.substr(fullPath.indexOf(virtualDirectory));\r\n\r\n // Replace original paths with thumb version\r\n relativePath = relativePath.replace(\"/PageContents/\", \"/PageContents-Thumbs/\")\r\n .replace(\"/PageBanners/\", \"/PageBanners-Thumbs/\");\r\n\r\n $image.attr(\"src\", relativePath);\r\n $image.show();\r\n }\r\n /////////// PREVIEW /////////////////////\r\n\r\n _currentInput.trigger(\"filemanagerupdated\");\r\n\r\n _cleanInput();\r\n };\r\n\r\n // * static - private * //\r\n\r\n var _currentInput = null;\r\n var _dialog = null;\r\n\r\n var _cleanInput = function () {\r\n if (_currentInput !== null) {\r\n _currentInput.removeClass(\"tiny-file-upload-input\");\r\n _currentInput = null;\r\n }\r\n };\r\n\r\n return pub;\r\n }();\r\n\r\n $(function () {\r\n window.ImageDialog.init();\r\n });\r\n\r\n return {};\r\n\r\n});","define(\"messagebox\", [\"jquery\", \"jquery-form\", \"core\"], function($, $forms, core) {\r\n\r\n var messagebox = function () { };\r\n\r\n messagebox.confirm = function(options)\r\n {\r\n\r\n var settings = $.extend({\r\n message: \"Please confirm\",\r\n callbackTrue: function () { },\r\n callbackFalse: function () { }\r\n }, options);\r\n\r\n if(confirm(settings.message)) {\r\n settings.callbackTrue();\r\n\r\n return;\r\n }\r\n\r\n settings.callbackFalse();\r\n\r\n };\r\n\r\n messagebox.alert = function (options)\r\n {\r\n var settings = $.extend({\r\n message: \"Alert\",\r\n callback: function () { }\r\n }, options);\r\n\r\n alert(settings.message);\r\n\r\n settings.callback();\r\n\r\n };\r\n\r\n return messagebox;\r\n\r\n});","define(\"popup\", [\"jquery\", \"jquery-ui\", \"core\", \"string-table\"], function ($, $ui, core, stringTable)\r\n{\r\n var _container = null;\r\n\r\n var _resize = function(container)\r\n {\r\n container = container || _container;\r\n\r\n if (container === null)\r\n {\r\n return;\r\n }\r\n\r\n container.dialog(\"option\", \"position\", \"center\");\r\n };\r\n\r\n var popup = function () { };\r\n\r\n popup.element = function (title, html, options)\r\n {\r\n options = $.extend({\r\n callback: function() {},\r\n close: function() {},\r\n draggable: false,\r\n maxHeight: 640,\r\n minWidth: 640,\r\n modal: true\r\n }, options);\r\n\r\n popup.close();\r\n\r\n _container = $(\"<div id=\\\"popup\\\" title=\\\"\" + title + \"\\\"/>\").appendTo(\"body\");\r\n _container.dialog(options);\r\n\r\n _container.html(html);\r\n\r\n options.callback(_container);\r\n\r\n _resize();\r\n\r\n }\r\n\r\n popup.confirm = function (title, html, options)\r\n {\r\n\r\n options = $.extend({\r\n callback: function () { },\r\n close: function () { },\r\n draggable: false,\r\n maxHeight: 640,\r\n minWidth: 640,\r\n modal: true\r\n }, options);\r\n\r\n popup.close();\r\n\r\n _container = $(\"<div id=\\\"popup\\\" title=\\\"\" + title + \"\\\"/>\").appendTo(\"body\");\r\n _container.dialog(options);\r\n\r\n _container.html(html);\r\n\r\n var btngroup = _container.find(\"div.btngroup\");\r\n var cancel = $(\"<button type=\\\"button\\\" />\").append(stringTable.get(\"LABEL_BUTTON_CANCEL\"));\r\n\r\n btngroup.prepend(cancel);\r\n\r\n cancel.on(\"click\", function ()\r\n {\r\n popup.close();\r\n\r\n return false;\r\n });\r\n\r\n options.callback(_container);\r\n\r\n _resize();\r\n\r\n };\r\n\r\n popup.create = function (title, url, options)\r\n {\r\n\r\n console.info(\"popup.create\");\r\n console.debug(options);\r\n\r\n options = $.extend({\r\n parser: function (data) { return data; },\r\n callback: function () { },\r\n error: function() { },\r\n close: function() { },\r\n draggable: false,\r\n maxHeight: 640,\r\n minWidth: 640,\r\n modal: true,\r\n data: null,\r\n usePost: false, // use HTTP POST instead of GET\r\n keepCentred: true\r\n }, options);\r\n\r\n popup.close();\r\n\r\n _container = $(\"<div id=\\\"popup\\\" title=\\\"\" + title + \"\\\"/>\").appendTo(\"body\");\r\n _container.dialog(options);\r\n\r\n console.log(url);\r\n console.log(options.data);\r\n\r\n if ((url !== undefined) && (url !== null)) {\r\n $.ajax({\r\n type: (options.usePost === true) ? \"POST\" : \"GET\",\r\n data: options.data,\r\n headers: {\"X-Requested-With\": core.AJAX_HEADER_VALUE},\r\n url: url\r\n }).error(function(xhr, status, error) {\r\n\r\n console.log(xhr);\r\n console.log(status);\r\n console.log(error);\r\n\r\n var data = \"The following error occured during your request:<br/><br/><strong>\" + error + \"</strong>\";\r\n\r\n _container.html(data);\r\n\r\n options.error();\r\n\r\n }).done(function(data, status, xhr) {\r\n\r\n if (core.handleLogOut(data)) {\r\n return;\r\n }\r\n\r\n var parsed = options.parser(data);\r\n\r\n _container.html(parsed);\r\n\r\n var btngroup = _container.find(\"div.btngroup\");\r\n var cancel = $(\"<button type=\\\"button\\\" />\").append(stringTable.get(\"LABEL_BUTTON_CANCEL\"));\r\n\r\n btngroup.prepend(cancel);\r\n\r\n cancel.on(\"click\", function() {\r\n popup.close();\r\n\r\n return false;\r\n });\r\n\r\n options.callback(_container, parsed, status, xhr);\r\n\r\n if (options.keepCentred) {\r\n _resize();\r\n }\r\n\r\n });\r\n }\r\n\r\n if (options.keepCentred)\r\n {\r\n $(window).on(\"resize.popup\", function () {\r\n _resize();\r\n });\r\n }\r\n\r\n // remove these classes to aline the styling with our buttons\r\n _container.closest(\".ui-dialog\").find(\".ui-dialog-buttonset button.ui-button\").removeClass(\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\").addClass(\"secondary\");\r\n\r\n return _container;\r\n };\r\n\r\n popup.standalone = function (title, url, options) {\r\n console.info(\"popup.standalone\");\r\n console.debug(options);\r\n\r\n options = $.extend({\r\n callback: function () { },\r\n close: function() { },\r\n draggable: false,\r\n maxHeight: 640,\r\n minWidth: 640,\r\n modal: true,\r\n data: null,\r\n usePost: false, // use HTTP POST instead of GET\r\n keepCentred: true\r\n }, options);\r\n\r\n var container = $(\"<div id=\\\"popup-so\\\" title=\\\"\" + title + \"\\\"/>\").appendTo(\"body\");\r\n\r\n container.dialog(options);\r\n\r\n console.log(url);\r\n console.log(options.data);\r\n\r\n if ((url !== undefined) && (url !== null)) {\r\n $.ajax({\r\n type: (options.usePost === true) ? \"POST\" : \"GET\",\r\n data: options.data,\r\n headers: {\"X-Requested-With\": core.AJAX_HEADER_VALUE},\r\n url: url\r\n }).error(function(xhr, status, error) {\r\n\r\n console.log(xhr);\r\n console.log(status);\r\n console.log(error);\r\n\r\n var data = \"The following error occured during your request:<br/><br/><strong>\" + error + \"</strong>\";\r\n\r\n container.html(data);\r\n\r\n }).done(function(data, status, xhr) {\r\n\r\n if (core.handleLogOut(data)) {\r\n return;\r\n }\r\n\r\n container.html(data);\r\n\r\n var btngroup = container.find(\"div.btngroup\");\r\n var cancel = $(\"<button type=\\\"button\\\" />\").append(stringTable.get(\"LABEL_BUTTON_CANCEL\"));\r\n\r\n btngroup.prepend(cancel);\r\n\r\n cancel.on(\"click\", function() {\r\n popup.close();\r\n\r\n return false;\r\n });\r\n\r\n options.callback(container, data, status, xhr);\r\n\r\n if (options.keepCentred) {\r\n _resize(container);\r\n }\r\n\r\n });\r\n }\r\n\r\n if (options.keepCentred) {\r\n $(window).on(\"resize.popup\", function () {\r\n _resize(container);\r\n });\r\n }\r\n\r\n // remove these classes to aline the styling with our buttons\r\n container.closest(\".ui-dialog\").find(\".ui-dialog-buttonset button.ui-button\").removeClass(\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\").addClass(\"secondary\");\r\n\r\n return container;\r\n };\r\n\r\n popup.close = function (container)\r\n {\r\n var glob = true;\r\n\r\n if (typeof container !== \"undefined\"){\r\n glob = false;\r\n }\r\n\r\n container = container || _container;\r\n\r\n if (container !== null) {\r\n container.dialog(\"close\");\r\n container.dialog(\"destroy\");\r\n container.remove();\r\n container = null;\r\n if(glob)\r\n _container = null;\r\n }\r\n\r\n $(window).off(\"resize.popup\");\r\n };\r\n\r\n return popup;\r\n});","define(\"string-table\", [\"jquery\"], function ($) {\r\n\r\n var MESSAGE_NO_STORE_LOADED = \"store not loaded yet\";\r\n var MESSAGE_NO_MATCHING_VALUE = \"no matching value\";\r\n\r\n var _store = null;\r\n\r\n var table = {};\r\n\r\n var loadedHandlers = [];\r\n\r\n var handleComplete = function()\r\n {\r\n if (_store == null)\r\n {\r\n return;\r\n }\r\n\r\n while (loadedHandlers.length > 0)\r\n {\r\n\r\n var a = loadedHandlers.pop();\r\n\r\n a.callback();\r\n\r\n }\r\n\r\n };\r\n\r\n table.loaded = function(options)\r\n {\r\n\r\n var settings = $.extend({\r\n callback: function() {}\r\n }, options);\r\n\r\n loadedHandlers.push(settings);\r\n\r\n handleComplete();\r\n };\r\n\r\n table.get = function (name)\r\n {\r\n\r\n if (_store == null)\r\n {\r\n return MESSAGE_NO_STORE_LOADED;\r\n }\r\n\r\n var val = _store[name];\r\n\r\n if (val == null)\r\n {\r\n return MESSAGE_NO_MATCHING_VALUE;\r\n }\r\n\r\n return val;\r\n\r\n };\r\n\r\n table.init = function ()\r\n {\r\n $.ajax({\r\n dataType: \"json\",\r\n async: false,\r\n url: \"/theme/string-table.js\"\r\n }).done(function (data)\r\n {\r\n _store = data;\r\n handleComplete();\r\n });\r\n\r\n };\r\n\r\n table.init();\r\n\r\n return table;\r\n\r\n})","/*! jQuery UI - v1.10.4 - 2019-07-15\r\n* http://jqueryui.com\r\n* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.resizable.js, jquery.ui.sortable.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.tooltip.js\r\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\r\n\r\n// HACK: Having to include directly because I could not get the import-loader to do this automatically for me. It just kept failing over and over.\r\nvar jQuery = require('jquery');\r\n\r\n(function( $, undefined ) {\r\n\r\nvar uuid = 0,\r\n\truniqueId = /^ui-id-\\d+$/;\r\n\r\n// $.ui might exist from components with no dependencies, e.g., $.ui.position\r\n$.ui = $.ui || {};\r\n\r\n$.extend( $.ui, {\r\n\tversion: \"1.10.4\",\r\n\r\n\tkeyCode: {\r\n\t\tBACKSPACE: 8,\r\n\t\tCOMMA: 188,\r\n\t\tDELETE: 46,\r\n\t\tDOWN: 40,\r\n\t\tEND: 35,\r\n\t\tENTER: 13,\r\n\t\tESCAPE: 27,\r\n\t\tHOME: 36,\r\n\t\tLEFT: 37,\r\n\t\tNUMPAD_ADD: 107,\r\n\t\tNUMPAD_DECIMAL: 110,\r\n\t\tNUMPAD_DIVIDE: 111,\r\n\t\tNUMPAD_ENTER: 108,\r\n\t\tNUMPAD_MULTIPLY: 106,\r\n\t\tNUMPAD_SUBTRACT: 109,\r\n\t\tPAGE_DOWN: 34,\r\n\t\tPAGE_UP: 33,\r\n\t\tPERIOD: 190,\r\n\t\tRIGHT: 39,\r\n\t\tSPACE: 32,\r\n\t\tTAB: 9,\r\n\t\tUP: 38\r\n\t}\r\n});\r\n\r\n// plugins\r\n$.fn.extend({\r\n\tfocus: (function( orig ) {\r\n\t\treturn function( delay, fn ) {\r\n\t\t\treturn typeof delay === \"number\" ?\r\n\t\t\t\tthis.each(function() {\r\n\t\t\t\t\tvar elem = this;\r\n\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t$( elem ).focus();\r\n\t\t\t\t\t\tif ( fn ) {\r\n\t\t\t\t\t\t\tfn.call( elem );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, delay );\r\n\t\t\t\t}) :\r\n\t\t\t\torig.apply( this, arguments );\r\n\t\t};\r\n\t})( $.fn.focus ),\r\n\r\n\tscrollParent: function() {\r\n\t\tvar scrollParent;\r\n\t\tif (($.ui.ie && (/(static|relative)/).test(this.css(\"position\"))) || (/absolute/).test(this.css(\"position\"))) {\r\n\t\t\tscrollParent = this.parents().filter(function() {\r\n\t\t\t\treturn (/(relative|absolute|fixed)/).test($.css(this,\"position\")) && (/(auto|scroll)/).test($.css(this,\"overflow\")+$.css(this,\"overflow-y\")+$.css(this,\"overflow-x\"));\r\n\t\t\t}).eq(0);\r\n\t\t} else {\r\n\t\t\tscrollParent = this.parents().filter(function() {\r\n\t\t\t\treturn (/(auto|scroll)/).test($.css(this,\"overflow\")+$.css(this,\"overflow-y\")+$.css(this,\"overflow-x\"));\r\n\t\t\t}).eq(0);\r\n\t\t}\r\n\r\n\t\treturn (/fixed/).test(this.css(\"position\")) || !scrollParent.length ? $(document) : scrollParent;\r\n\t},\r\n\r\n\tzIndex: function( zIndex ) {\r\n\t\tif ( zIndex !== undefined ) {\r\n\t\t\treturn this.css( \"zIndex\", zIndex );\r\n\t\t}\r\n\r\n\t\tif ( this.length ) {\r\n\t\t\tvar elem = $( this[ 0 ] ), position, value;\r\n\t\t\twhile ( elem.length && elem[ 0 ] !== document ) {\r\n\t\t\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\r\n\t\t\t\t// This makes behavior of this function consistent across browsers\r\n\t\t\t\t// WebKit always returns auto if the element is positioned\r\n\t\t\t\tposition = elem.css( \"position\" );\r\n\t\t\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\r\n\t\t\t\t\t// IE returns 0 when zIndex is not specified\r\n\t\t\t\t\t// other browsers return a string\r\n\t\t\t\t\t// we ignore the case of nested elements with an explicit value of 0\r\n\t\t\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\r\n\t\t\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\r\n\t\t\t\t\tif ( !isNaN( value ) && value !== 0 ) {\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telem = elem.parent();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t},\r\n\r\n\tuniqueId: function() {\r\n\t\treturn this.each(function() {\r\n\t\t\tif ( !this.id ) {\r\n\t\t\t\tthis.id = \"ui-id-\" + (++uuid);\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tremoveUniqueId: function() {\r\n\t\treturn this.each(function() {\r\n\t\t\tif ( runiqueId.test( this.id ) ) {\r\n\t\t\t\t$( this ).removeAttr( \"id\" );\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// selectors\r\nfunction focusable( element, isTabIndexNotNaN ) {\r\n\tvar map, mapName, img,\r\n\t\tnodeName = element.nodeName.toLowerCase();\r\n\tif ( \"area\" === nodeName ) {\r\n\t\tmap = element.parentNode;\r\n\t\tmapName = map.name;\r\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\timg = $( \"img[usemap=#\" + mapName + \"]\" )[0];\r\n\t\treturn !!img && visible( img );\r\n\t}\r\n\treturn ( /input|select|textarea|button|object/.test( nodeName ) ?\r\n\t\t!element.disabled :\r\n\t\t\"a\" === nodeName ?\r\n\t\t\telement.href || isTabIndexNotNaN :\r\n\t\t\tisTabIndexNotNaN) &&\r\n\t\t// the element and all of its ancestors must be visible\r\n\t\tvisible( element );\r\n}\r\n\r\nfunction visible( element ) {\r\n\treturn $.expr.filters.visible( element ) &&\r\n\t\t!$( element ).parents().addBack().filter(function() {\r\n\t\t\treturn $.css( this, \"visibility\" ) === \"hidden\";\r\n\t\t}).length;\r\n}\r\n\r\n$.extend( $.expr[ \":\" ], {\r\n\tdata: $.expr.createPseudo ?\r\n\t\t$.expr.createPseudo(function( dataName ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn !!$.data( elem, dataName );\r\n\t\t\t};\r\n\t\t}) :\r\n\t\t// support: jQuery <1.8\r\n\t\tfunction( elem, i, match ) {\r\n\t\t\treturn !!$.data( elem, match[ 3 ] );\r\n\t\t},\r\n\r\n\tfocusable: function( element ) {\r\n\t\treturn focusable( element, !isNaN( $.attr( element, \"tabindex\" ) ) );\r\n\t},\r\n\r\n\ttabbable: function( element ) {\r\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\r\n\t\t\tisTabIndexNaN = isNaN( tabIndex );\r\n\t\treturn ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );\r\n\t}\r\n});\r\n\r\n// support: jQuery <1.8\r\nif ( !$( \"<a>\" ).outerWidth( 1 ).jquery ) {\r\n\t$.each( [ \"Width\", \"Height\" ], function( i, name ) {\r\n\t\tvar side = name === \"Width\" ? [ \"Left\", \"Right\" ] : [ \"Top\", \"Bottom\" ],\r\n\t\t\ttype = name.toLowerCase(),\r\n\t\t\torig = {\r\n\t\t\t\tinnerWidth: $.fn.innerWidth,\r\n\t\t\t\tinnerHeight: $.fn.innerHeight,\r\n\t\t\t\touterWidth: $.fn.outerWidth,\r\n\t\t\t\touterHeight: $.fn.outerHeight\r\n\t\t\t};\r\n\r\n\t\tfunction reduce( elem, size, border, margin ) {\r\n\t\t\t$.each( side, function() {\r\n\t\t\t\tsize -= parseFloat( $.css( elem, \"padding\" + this ) ) || 0;\r\n\t\t\t\tif ( border ) {\r\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"border\" + this + \"Width\" ) ) || 0;\r\n\t\t\t\t}\r\n\t\t\t\tif ( margin ) {\r\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"margin\" + this ) ) || 0;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn size;\r\n\t\t}\r\n\r\n\t\t$.fn[ \"inner\" + name ] = function( size ) {\r\n\t\t\tif ( size === undefined ) {\r\n\t\t\t\treturn orig[ \"inner\" + name ].call( this );\r\n\t\t\t}\r\n\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\t$( this ).css( type, reduce( this, size ) + \"px\" );\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t$.fn[ \"outer\" + name] = function( size, margin ) {\r\n\t\t\tif ( typeof size !== \"number\" ) {\r\n\t\t\t\treturn orig[ \"outer\" + name ].call( this, size );\r\n\t\t\t}\r\n\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\t$( this).css( type, reduce( this, size, true, margin ) + \"px\" );\r\n\t\t\t});\r\n\t\t};\r\n\t});\r\n}\r\n\r\n// support: jQuery <1.8\r\nif ( !$.fn.addBack ) {\r\n\t$.fn.addBack = function( selector ) {\r\n\t\treturn this.add( selector == null ?\r\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\r\n\t\t);\r\n\t};\r\n}\r\n\r\n// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)\r\nif ( $( \"<a>\" ).data( \"a-b\", \"a\" ).removeData( \"a-b\" ).data( \"a-b\" ) ) {\r\n\t$.fn.removeData = (function( removeData ) {\r\n\t\treturn function( key ) {\r\n\t\t\tif ( arguments.length ) {\r\n\t\t\t\treturn removeData.call( this, $.camelCase( key ) );\r\n\t\t\t} else {\r\n\t\t\t\treturn removeData.call( this );\r\n\t\t\t}\r\n\t\t};\r\n\t})( $.fn.removeData );\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// deprecated\r\n$.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\r\n\r\n$.support.selectstart = \"onselectstart\" in document.createElement( \"div\" );\r\n$.fn.extend({\r\n\tdisableSelection: function() {\r\n\t\treturn this.bind( ( $.support.selectstart ? \"selectstart\" : \"mousedown\" ) +\r\n\t\t\t\".ui-disableSelection\", function( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t});\r\n\t},\r\n\r\n\tenableSelection: function() {\r\n\t\treturn this.unbind( \".ui-disableSelection\" );\r\n\t}\r\n});\r\n\r\n$.extend( $.ui, {\r\n\t// $.ui.plugin is deprecated. Use $.widget() extensions instead.\r\n\tplugin: {\r\n\t\tadd: function( module, option, set ) {\r\n\t\t\tvar i,\r\n\t\t\t\tproto = $.ui[ module ].prototype;\r\n\t\t\tfor ( i in set ) {\r\n\t\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\r\n\t\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\r\n\t\t\t}\r\n\t\t},\r\n\t\tcall: function( instance, name, args ) {\r\n\t\t\tvar i,\r\n\t\t\t\tset = instance.plugins[ name ];\r\n\t\t\tif ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tfor ( i = 0; i < set.length; i++ ) {\r\n\t\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\r\n\t\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// only used by resizable\r\n\thasScroll: function( el, a ) {\r\n\r\n\t\t//If overflow is hidden, the element might have extra content, but the user wants to hide it\r\n\t\tif ( $( el ).css( \"overflow\" ) === \"hidden\") {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar scroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\",\r\n\t\t\thas = false;\r\n\r\n\t\tif ( el[ scroll ] > 0 ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// TODO: determine which cases actually cause this to happen\r\n\t\t// if the element doesn't have the scroll set, see if it's possible to\r\n\t\t// set the scroll\r\n\t\tel[ scroll ] = 1;\r\n\t\thas = ( el[ scroll ] > 0 );\r\n\t\tel[ scroll ] = 0;\r\n\t\treturn has;\r\n\t}\r\n});\r\n\r\n})( jQuery );\r\n(function( $, undefined ) {\r\n\r\nvar uuid = 0,\r\n\tslice = Array.prototype.slice,\r\n\t_cleanData = $.cleanData;\r\n$.cleanData = function( elems ) {\r\n\tfor ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\r\n\t\ttry {\r\n\t\t\t$( elem ).triggerHandler( \"remove\" );\r\n\t\t// http://bugs.jquery.com/ticket/8235\r\n\t\t} catch( e ) {}\r\n\t}\r\n\t_cleanData( elems );\r\n};\r\n\r\n$.widget = function( name, base, prototype ) {\r\n\tvar fullName, existingConstructor, constructor, basePrototype,\r\n\t\t// proxiedPrototype allows the provided prototype to remain unmodified\r\n\t\t// so that it can be used as a mixin for multiple widgets (#8876)\r\n\t\tproxiedPrototype = {},\r\n\t\tnamespace = name.split( \".\" )[ 0 ];\r\n\r\n\tname = name.split( \".\" )[ 1 ];\r\n\tfullName = namespace + \"-\" + name;\r\n\r\n\tif ( !prototype ) {\r\n\t\tprototype = base;\r\n\t\tbase = $.Widget;\r\n\t}\r\n\r\n\t// create selector for plugin\r\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\r\n\t\treturn !!$.data( elem, fullName );\r\n\t};\r\n\r\n\t$[ namespace ] = $[ namespace ] || {};\r\n\texistingConstructor = $[ namespace ][ name ];\r\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\r\n\t\t// allow instantiation without \"new\" keyword\r\n\t\tif ( !this._createWidget ) {\r\n\t\t\treturn new constructor( options, element );\r\n\t\t}\r\n\r\n\t\t// allow instantiation without initializing for simple inheritance\r\n\t\t// must use \"new\" keyword (the code above always passes args)\r\n\t\tif ( arguments.length ) {\r\n\t\t\tthis._createWidget( options, element );\r\n\t\t}\r\n\t};\r\n\t// extend with the existing constructor to carry over any static properties\r\n\t$.extend( constructor, existingConstructor, {\r\n\t\tversion: prototype.version,\r\n\t\t// copy the object used to create the prototype in case we need to\r\n\t\t// redefine the widget later\r\n\t\t_proto: $.extend( {}, prototype ),\r\n\t\t// track widgets that inherit from this widget in case this widget is\r\n\t\t// redefined after a widget inherits from it\r\n\t\t_childConstructors: []\r\n\t});\r\n\r\n\tbasePrototype = new base();\r\n\t// we need to make the options hash a property directly on the new instance\r\n\t// otherwise we'll modify the options hash on the prototype that we're\r\n\t// inheriting from\r\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\r\n\t$.each( prototype, function( prop, value ) {\r\n\t\tif ( !$.isFunction( value ) ) {\r\n\t\t\tproxiedPrototype[ prop ] = value;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tproxiedPrototype[ prop ] = (function() {\r\n\t\t\tvar _super = function() {\r\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\r\n\t\t\t\t},\r\n\t\t\t\t_superApply = function( args ) {\r\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, args );\r\n\t\t\t\t};\r\n\t\t\treturn function() {\r\n\t\t\t\tvar __super = this._super,\r\n\t\t\t\t\t__superApply = this._superApply,\r\n\t\t\t\t\treturnValue;\r\n\r\n\t\t\t\tthis._super = _super;\r\n\t\t\t\tthis._superApply = _superApply;\r\n\r\n\t\t\t\treturnValue = value.apply( this, arguments );\r\n\r\n\t\t\t\tthis._super = __super;\r\n\t\t\t\tthis._superApply = __superApply;\r\n\r\n\t\t\t\treturn returnValue;\r\n\t\t\t};\r\n\t\t})();\r\n\t});\r\n\tconstructor.prototype = $.widget.extend( basePrototype, {\r\n\t\t// TODO: remove support for widgetEventPrefix\r\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\r\n\t\t// don't prefix for widgets that aren't DOM-based\r\n\t\twidgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name\r\n\t}, proxiedPrototype, {\r\n\t\tconstructor: constructor,\r\n\t\tnamespace: namespace,\r\n\t\twidgetName: name,\r\n\t\twidgetFullName: fullName\r\n\t});\r\n\r\n\t// If this widget is being redefined then we need to find all widgets that\r\n\t// are inheriting from it and redefine all of them so that they inherit from\r\n\t// the new version of this widget. We're essentially trying to replace one\r\n\t// level in the prototype chain.\r\n\tif ( existingConstructor ) {\r\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\r\n\t\t\tvar childPrototype = child.prototype;\r\n\r\n\t\t\t// redefine the child widget using the same prototype that was\r\n\t\t\t// originally used, but inherit from the new version of the base\r\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor, child._proto );\r\n\t\t});\r\n\t\t// remove the list of existing child constructors from the old constructor\r\n\t\t// so the old child constructors can be garbage collected\r\n\t\tdelete existingConstructor._childConstructors;\r\n\t} else {\r\n\t\tbase._childConstructors.push( constructor );\r\n\t}\r\n\r\n\t$.widget.bridge( name, constructor );\r\n};\r\n\r\n$.widget.extend = function( target ) {\r\n\tvar input = slice.call( arguments, 1 ),\r\n\t\tinputIndex = 0,\r\n\t\tinputLength = input.length,\r\n\t\tkey,\r\n\t\tvalue;\r\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\r\n\t\tfor ( key in input[ inputIndex ] ) {\r\n\t\t\tvalue = input[ inputIndex ][ key ];\r\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\r\n\t\t\t\t// Clone objects\r\n\t\t\t\tif ( $.isPlainObject( value ) ) {\r\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\r\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\r\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\r\n\t\t\t\t\t\t$.widget.extend( {}, value );\r\n\t\t\t\t// Copy everything else by reference\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttarget[ key ] = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn target;\r\n};\r\n\r\n$.widget.bridge = function( name, object ) {\r\n\tvar fullName = object.prototype.widgetFullName || name;\r\n\t$.fn[ name ] = function( options ) {\r\n\t\tvar isMethodCall = typeof options === \"string\",\r\n\t\t\targs = slice.call( arguments, 1 ),\r\n\t\t\treturnValue = this;\r\n\r\n\t\t// allow multiple hashes to be passed on init\r\n\t\toptions = !isMethodCall && args.length ?\r\n\t\t\t$.widget.extend.apply( null, [ options ].concat(args) ) :\r\n\t\t\toptions;\r\n\r\n\t\tif ( isMethodCall ) {\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tvar methodValue,\r\n\t\t\t\t\tinstance = $.data( this, fullName );\r\n\t\t\t\tif ( !instance ) {\r\n\t\t\t\t\treturn $.error( \"cannot call methods on \" + name + \" prior to initialization; \" +\r\n\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\r\n\t\t\t\t}\r\n\t\t\t\tif ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === \"_\" ) {\r\n\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name + \" widget instance\" );\r\n\t\t\t\t}\r\n\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\r\n\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\r\n\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\r\n\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\r\n\t\t\t\t\t\tmethodValue;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tvar instance = $.data( this, fullName );\r\n\t\t\t\tif ( instance ) {\r\n\t\t\t\t\tinstance.option( options || {} )._init();\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn returnValue;\r\n\t};\r\n};\r\n\r\n$.Widget = function( /* options, element */ ) {};\r\n$.Widget._childConstructors = [];\r\n\r\n$.Widget.prototype = {\r\n\twidgetName: \"widget\",\r\n\twidgetEventPrefix: \"\",\r\n\tdefaultElement: \"<div>\",\r\n\toptions: {\r\n\t\tdisabled: false,\r\n\r\n\t\t// callbacks\r\n\t\tcreate: null\r\n\t},\r\n\t_createWidget: function( options, element ) {\r\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\r\n\t\tthis.element = $( element );\r\n\t\tthis.uuid = uuid++;\r\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\r\n\t\tthis.options = $.widget.extend( {},\r\n\t\t\tthis.options,\r\n\t\t\tthis._getCreateOptions(),\r\n\t\t\toptions );\r\n\r\n\t\tthis.bindings = $();\r\n\t\tthis.hoverable = $();\r\n\t\tthis.focusable = $();\r\n\r\n\t\tif ( element !== this ) {\r\n\t\t\t$.data( element, this.widgetFullName, this );\r\n\t\t\tthis._on( true, this.element, {\r\n\t\t\t\tremove: function( event ) {\r\n\t\t\t\t\tif ( event.target === element ) {\r\n\t\t\t\t\t\tthis.destroy();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.document = $( element.style ?\r\n\t\t\t\t// element within the document\r\n\t\t\t\telement.ownerDocument :\r\n\t\t\t\t// element is window or document\r\n\t\t\t\telement.document || element );\r\n\t\t\tthis.window = $( this.document[0].defaultView || this.document[0].parentWindow );\r\n\t\t}\r\n\r\n\t\tthis._create();\r\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\r\n\t\tthis._init();\r\n\t},\r\n\t_getCreateOptions: $.noop,\r\n\t_getCreateEventData: $.noop,\r\n\t_create: $.noop,\r\n\t_init: $.noop,\r\n\r\n\tdestroy: function() {\r\n\t\tthis._destroy();\r\n\t\t// we can probably remove the unbind calls in 2.0\r\n\t\t// all event bindings should go through this._on()\r\n\t\tthis.element\r\n\t\t\t.unbind( this.eventNamespace )\r\n\t\t\t// 1.9 BC for #7810\r\n\t\t\t// TODO remove dual storage\r\n\t\t\t.removeData( this.widgetName )\r\n\t\t\t.removeData( this.widgetFullName )\r\n\t\t\t// support: jquery <1.6.3\r\n\t\t\t// http://bugs.jquery.com/ticket/9413\r\n\t\t\t.removeData( $.camelCase( this.widgetFullName ) );\r\n\t\tthis.widget()\r\n\t\t\t.unbind( this.eventNamespace )\r\n\t\t\t.removeAttr( \"aria-disabled\" )\r\n\t\t\t.removeClass(\r\n\t\t\t\tthis.widgetFullName + \"-disabled \" +\r\n\t\t\t\t\"ui-state-disabled\" );\r\n\r\n\t\t// clean up events and states\r\n\t\tthis.bindings.unbind( this.eventNamespace );\r\n\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\r\n\t\tthis.focusable.removeClass( \"ui-state-focus\" );\r\n\t},\r\n\t_destroy: $.noop,\r\n\r\n\twidget: function() {\r\n\t\treturn this.element;\r\n\t},\r\n\r\n\toption: function( key, value ) {\r\n\t\tvar options = key,\r\n\t\t\tparts,\r\n\t\t\tcurOption,\r\n\t\t\ti;\r\n\r\n\t\tif ( arguments.length === 0 ) {\r\n\t\t\t// don't return a reference to the internal hash\r\n\t\t\treturn $.widget.extend( {}, this.options );\r\n\t\t}\r\n\r\n\t\tif ( typeof key === \"string\" ) {\r\n\t\t\t// handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\r\n\t\t\toptions = {};\r\n\t\t\tparts = key.split( \".\" );\r\n\t\t\tkey = parts.shift();\r\n\t\t\tif ( parts.length ) {\r\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\r\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\r\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\r\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\r\n\t\t\t\t}\r\n\t\t\t\tkey = parts.pop();\r\n\t\t\t\tif ( arguments.length === 1 ) {\r\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\r\n\t\t\t\t}\r\n\t\t\t\tcurOption[ key ] = value;\r\n\t\t\t} else {\r\n\t\t\t\tif ( arguments.length === 1 ) {\r\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\r\n\t\t\t\t}\r\n\t\t\t\toptions[ key ] = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._setOptions( options );\r\n\r\n\t\treturn this;\r\n\t},\r\n\t_setOptions: function( options ) {\r\n\t\tvar key;\r\n\r\n\t\tfor ( key in options ) {\r\n\t\t\tthis._setOption( key, options[ key ] );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\t_setOption: function( key, value ) {\r\n\t\tthis.options[ key ] = value;\r\n\r\n\t\tif ( key === \"disabled\" ) {\r\n\t\t\tthis.widget()\r\n\t\t\t\t.toggleClass( this.widgetFullName + \"-disabled ui-state-disabled\", !!value )\r\n\t\t\t\t.attr( \"aria-disabled\", value );\r\n\t\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\r\n\t\t\tthis.focusable.removeClass( \"ui-state-focus\" );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function() {\r\n\t\treturn this._setOption( \"disabled\", false );\r\n\t},\r\n\tdisable: function() {\r\n\t\treturn this._setOption( \"disabled\", true );\r\n\t},\r\n\r\n\t_on: function( suppressDisabledCheck, element, handlers ) {\r\n\t\tvar delegateElement,\r\n\t\t\tinstance = this;\r\n\r\n\t\t// no suppressDisabledCheck flag, shuffle arguments\r\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\r\n\t\t\thandlers = element;\r\n\t\t\telement = suppressDisabledCheck;\r\n\t\t\tsuppressDisabledCheck = false;\r\n\t\t}\r\n\r\n\t\t// no element argument, shuffle and use this.element\r\n\t\tif ( !handlers ) {\r\n\t\t\thandlers = element;\r\n\t\t\telement = this.element;\r\n\t\t\tdelegateElement = this.widget();\r\n\t\t} else {\r\n\t\t\t// accept selectors, DOM elements\r\n\t\t\telement = delegateElement = $( element );\r\n\t\t\tthis.bindings = this.bindings.add( element );\r\n\t\t}\r\n\r\n\t\t$.each( handlers, function( event, handler ) {\r\n\t\t\tfunction handlerProxy() {\r\n\t\t\t\t// allow widgets to customize the disabled handling\r\n\t\t\t\t// - disabled as an array instead of boolean\r\n\t\t\t\t// - disabled class as method for disabling individual parts\r\n\t\t\t\tif ( !suppressDisabledCheck &&\r\n\t\t\t\t\t\t( instance.options.disabled === true ||\r\n\t\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\r\n\t\t\t\t\t.apply( instance, arguments );\r\n\t\t\t}\r\n\r\n\t\t\t// copy the guid so direct unbinding works\r\n\t\t\tif ( typeof handler !== \"string\" ) {\r\n\t\t\t\thandlerProxy.guid = handler.guid =\r\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\r\n\t\t\t}\r\n\r\n\t\t\tvar match = event.match( /^(\\w+)\\s*(.*)$/ ),\r\n\t\t\t\teventName = match[1] + instance.eventNamespace,\r\n\t\t\t\tselector = match[2];\r\n\t\t\tif ( selector ) {\r\n\t\t\t\tdelegateElement.delegate( selector, eventName, handlerProxy );\r\n\t\t\t} else {\r\n\t\t\t\telement.bind( eventName, handlerProxy );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_off: function( element, eventName ) {\r\n\t\teventName = (eventName || \"\").split( \" \" ).join( this.eventNamespace + \" \" ) + this.eventNamespace;\r\n\t\telement.unbind( eventName ).undelegate( eventName );\r\n\t},\r\n\r\n\t_delay: function( handler, delay ) {\r\n\t\tfunction handlerProxy() {\r\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\r\n\t\t\t\t.apply( instance, arguments );\r\n\t\t}\r\n\t\tvar instance = this;\r\n\t\treturn setTimeout( handlerProxy, delay || 0 );\r\n\t},\r\n\r\n\t_hoverable: function( element ) {\r\n\t\tthis.hoverable = this.hoverable.add( element );\r\n\t\tthis._on( element, {\r\n\t\t\tmouseenter: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-hover\" );\r\n\t\t\t},\r\n\t\t\tmouseleave: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-hover\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_focusable: function( element ) {\r\n\t\tthis.focusable = this.focusable.add( element );\r\n\t\tthis._on( element, {\r\n\t\t\tfocusin: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-focus\" );\r\n\t\t\t},\r\n\t\t\tfocusout: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-focus\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_trigger: function( type, event, data ) {\r\n\t\tvar prop, orig,\r\n\t\t\tcallback = this.options[ type ];\r\n\r\n\t\tdata = data || {};\r\n\t\tevent = $.Event( event );\r\n\t\tevent.type = ( type === this.widgetEventPrefix ?\r\n\t\t\ttype :\r\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\r\n\t\t// the original event may come from any element\r\n\t\t// so we need to reset the target on the new event\r\n\t\tevent.target = this.element[ 0 ];\r\n\r\n\t\t// copy original event properties over to the new event\r\n\t\torig = event.originalEvent;\r\n\t\tif ( orig ) {\r\n\t\t\tfor ( prop in orig ) {\r\n\t\t\t\tif ( !( prop in event ) ) {\r\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element.trigger( event, data );\r\n\t\treturn !( $.isFunction( callback ) &&\r\n\t\t\tcallback.apply( this.element[0], [ event ].concat( data ) ) === false ||\r\n\t\t\tevent.isDefaultPrevented() );\r\n\t}\r\n};\r\n\r\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\r\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\r\n\t\tif ( typeof options === \"string\" ) {\r\n\t\t\toptions = { effect: options };\r\n\t\t}\r\n\t\tvar hasOptions,\r\n\t\t\teffectName = !options ?\r\n\t\t\t\tmethod :\r\n\t\t\t\toptions === true || typeof options === \"number\" ?\r\n\t\t\t\t\tdefaultEffect :\r\n\t\t\t\t\toptions.effect || defaultEffect;\r\n\t\toptions = options || {};\r\n\t\tif ( typeof options === \"number\" ) {\r\n\t\t\toptions = { duration: options };\r\n\t\t}\r\n\t\thasOptions = !$.isEmptyObject( options );\r\n\t\toptions.complete = callback;\r\n\t\tif ( options.delay ) {\r\n\t\t\telement.delay( options.delay );\r\n\t\t}\r\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\r\n\t\t\telement[ method ]( options );\r\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\r\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\r\n\t\t} else {\r\n\t\t\telement.queue(function( next ) {\r\n\t\t\t\t$( this )[ method ]();\r\n\t\t\t\tif ( callback ) {\r\n\t\t\t\t\tcallback.call( element[ 0 ] );\r\n\t\t\t\t}\r\n\t\t\t\tnext();\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n});\r\n\r\n})( jQuery );\r\n(function( $, undefined ) {\r\n\r\nvar mouseHandled = false;\r\n$( document ).mouseup( function() {\r\n\tmouseHandled = false;\r\n});\r\n\r\n$.widget(\"ui.mouse\", {\r\n\tversion: \"1.10.4\",\r\n\toptions: {\r\n\t\tcancel: \"input,textarea,button,select,option\",\r\n\t\tdistance: 1,\r\n\t\tdelay: 0\r\n\t},\r\n\t_mouseInit: function() {\r\n\t\tvar that = this;\r\n\r\n\t\tthis.element\r\n\t\t\t.bind(\"mousedown.\"+this.widgetName, function(event) {\r\n\t\t\t\treturn that._mouseDown(event);\r\n\t\t\t})\r\n\t\t\t.bind(\"click.\"+this.widgetName, function(event) {\r\n\t\t\t\tif (true === $.data(event.target, that.widgetName + \".preventClickEvent\")) {\r\n\t\t\t\t\t$.removeData(event.target, that.widgetName + \".preventClickEvent\");\r\n\t\t\t\t\tevent.stopImmediatePropagation();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.started = false;\r\n\t},\r\n\r\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\r\n\t// other instances of mouse\r\n\t_mouseDestroy: function() {\r\n\t\tthis.element.unbind(\".\"+this.widgetName);\r\n\t\tif ( this._mouseMoveDelegate ) {\r\n\t\t\t$(document)\r\n\t\t\t\t.unbind(\"mousemove.\"+this.widgetName, this._mouseMoveDelegate)\r\n\t\t\t\t.unbind(\"mouseup.\"+this.widgetName, this._mouseUpDelegate);\r\n\t\t}\r\n\t},\r\n\r\n\t_mouseDown: function(event) {\r\n\t\t// don't let more than one widget handle mouseStart\r\n\t\tif( mouseHandled ) { return; }\r\n\r\n\t\t// we may have missed mouseup (out of window)\r\n\t\t(this._mouseStarted && this._mouseUp(event));\r\n\r\n\t\tthis._mouseDownEvent = event;\r\n\r\n\t\tvar that = this,\r\n\t\t\tbtnIsLeft = (event.which === 1),\r\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\r\n\t\t\t// disabled inputs (#7620)\r\n\t\t\telIsCancel = (typeof this.options.cancel === \"string\" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);\r\n\t\tif (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tthis.mouseDelayMet = !this.options.delay;\r\n\t\tif (!this.mouseDelayMet) {\r\n\t\t\tthis._mouseDelayTimer = setTimeout(function() {\r\n\t\t\t\tthat.mouseDelayMet = true;\r\n\t\t\t}, this.options.delay);\r\n\t\t}\r\n\r\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\r\n\t\t\tthis._mouseStarted = (this._mouseStart(event) !== false);\r\n\t\t\tif (!this._mouseStarted) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Click event may never have fired (Gecko & Opera)\r\n\t\tif (true === $.data(event.target, this.widgetName + \".preventClickEvent\")) {\r\n\t\t\t$.removeData(event.target, this.widgetName + \".preventClickEvent\");\r\n\t\t}\r\n\r\n\t\t// these delegates are required to keep context\r\n\t\tthis._mouseMoveDelegate = function(event) {\r\n\t\t\treturn that._mouseMove(event);\r\n\t\t};\r\n\t\tthis._mouseUpDelegate = function(event) {\r\n\t\t\treturn that._mouseUp(event);\r\n\t\t};\r\n\t\t$(document)\r\n\t\t\t.bind(\"mousemove.\"+this.widgetName, this._mouseMoveDelegate)\r\n\t\t\t.bind(\"mouseup.\"+this.widgetName, this._mouseUpDelegate);\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t\tmouseHandled = true;\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_mouseMove: function(event) {\r\n\t\t// IE mouseup check - mouseup happened when mouse was out of window\r\n\t\tif ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {\r\n\t\t\treturn this._mouseUp(event);\r\n\t\t}\r\n\r\n\t\tif (this._mouseStarted) {\r\n\t\t\tthis._mouseDrag(event);\r\n\t\t\treturn event.preventDefault();\r\n\t\t}\r\n\r\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\r\n\t\t\tthis._mouseStarted =\r\n\t\t\t\t(this._mouseStart(this._mouseDownEvent, event) !== false);\r\n\t\t\t(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));\r\n\t\t}\r\n\r\n\t\treturn !this._mouseStarted;\r\n\t},\r\n\r\n\t_mouseUp: function(event) {\r\n\t\t$(document)\r\n\t\t\t.unbind(\"mousemove.\"+this.widgetName, this._mouseMoveDelegate)\r\n\t\t\t.unbind(\"mouseup.\"+this.widgetName, this._mouseUpDelegate);\r\n\r\n\t\tif (this._mouseStarted) {\r\n\t\t\tthis._mouseStarted = false;\r\n\r\n\t\t\tif (event.target === this._mouseDownEvent.target) {\r\n\t\t\t\t$.data(event.target, this.widgetName + \".preventClickEvent\", true);\r\n\t\t\t}\r\n\r\n\t\t\tthis._mouseStop(event);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_mouseDistanceMet: function(event) {\r\n\t\treturn (Math.max(\r\n\t\t\t\tMath.abs(this._mouseDownEvent.pageX - event.pageX),\r\n\t\t\t\tMath.abs(this._mouseDownEvent.pageY - event.pageY)\r\n\t\t\t) >= this.options.distance\r\n\t\t);\r\n\t},\r\n\r\n\t_mouseDelayMet: function(/* event */) {\r\n\t\treturn this.mouseDelayMet;\r\n\t},\r\n\r\n\t// These are placeholder methods, to be overriden by extending plugin\r\n\t_mouseStart: function(/* event */) {},\r\n\t_mouseDrag: function(/* event */) {},\r\n\t_mouseStop: function(/* event */) {},\r\n\t_mouseCapture: function(/* event */) { return true; }\r\n});\r\n\r\n})(jQuery);\r\n(function( $, undefined ) {\r\n\r\n$.ui = $.ui || {};\r\n\r\nvar cachedScrollbarWidth,\r\n\tmax = Math.max,\r\n\tabs = Math.abs,\r\n\tround = Math.round,\r\n\trhorizontal = /left|center|right/,\r\n\trvertical = /top|center|bottom/,\r\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\r\n\trposition = /^\\w+/,\r\n\trpercent = /%$/,\r\n\t_position = $.fn.position;\r\n\r\nfunction getOffsets( offsets, width, height ) {\r\n\treturn [\r\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\r\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\r\n\t];\r\n}\r\n\r\nfunction parseCss( element, property ) {\r\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\r\n}\r\n\r\nfunction getDimensions( elem ) {\r\n\tvar raw = elem[0];\r\n\tif ( raw.nodeType === 9 ) {\r\n\t\treturn {\r\n\t\t\twidth: elem.width(),\r\n\t\t\theight: elem.height(),\r\n\t\t\toffset: { top: 0, left: 0 }\r\n\t\t};\r\n\t}\r\n\tif ( $.isWindow( raw ) ) {\r\n\t\treturn {\r\n\t\t\twidth: elem.width(),\r\n\t\t\theight: elem.height(),\r\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\r\n\t\t};\r\n\t}\r\n\tif ( raw.preventDefault ) {\r\n\t\treturn {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0,\r\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\r\n\t\t};\r\n\t}\r\n\treturn {\r\n\t\twidth: elem.outerWidth(),\r\n\t\theight: elem.outerHeight(),\r\n\t\toffset: elem.offset()\r\n\t};\r\n}\r\n\r\n$.position = {\r\n\tscrollbarWidth: function() {\r\n\t\tif ( cachedScrollbarWidth !== undefined ) {\r\n\t\t\treturn cachedScrollbarWidth;\r\n\t\t}\r\n\t\tvar w1, w2,\r\n\t\t\tdiv = $( \"<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>\" ),\r\n\t\t\tinnerDiv = div.children()[0];\r\n\r\n\t\t$( \"body\" ).append( div );\r\n\t\tw1 = innerDiv.offsetWidth;\r\n\t\tdiv.css( \"overflow\", \"scroll\" );\r\n\r\n\t\tw2 = innerDiv.offsetWidth;\r\n\r\n\t\tif ( w1 === w2 ) {\r\n\t\t\tw2 = div[0].clientWidth;\r\n\t\t}\r\n\r\n\t\tdiv.remove();\r\n\r\n\t\treturn (cachedScrollbarWidth = w1 - w2);\r\n\t},\r\n\tgetScrollInfo: function( within ) {\r\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\r\n\t\t\t\twithin.element.css( \"overflow-x\" ),\r\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\r\n\t\t\t\twithin.element.css( \"overflow-y\" ),\r\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\r\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[0].scrollWidth ),\r\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\r\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[0].scrollHeight );\r\n\t\treturn {\r\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\r\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\r\n\t\t};\r\n\t},\r\n\tgetWithinInfo: function( element ) {\r\n\t\tvar withinElement = $( element || window ),\r\n\t\t\tisWindow = $.isWindow( withinElement[0] ),\r\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;\r\n\t\treturn {\r\n\t\t\telement: withinElement,\r\n\t\t\tisWindow: isWindow,\r\n\t\t\tisDocument: isDocument,\r\n\t\t\toffset: withinElement.offset() || { left: 0, top: 0 },\r\n\t\t\tscrollLeft: withinElement.scrollLeft(),\r\n\t\t\tscrollTop: withinElement.scrollTop(),\r\n\t\t\twidth: isWindow ? withinElement.width() : withinElement.outerWidth(),\r\n\t\t\theight: isWindow ? withinElement.height() : withinElement.outerHeight()\r\n\t\t};\r\n\t}\r\n};\r\n\r\n$.fn.position = function( options ) {\r\n\tif ( !options || !options.of ) {\r\n\t\treturn _position.apply( this, arguments );\r\n\t}\r\n\r\n\t// make a copy, we don't want to modify arguments\r\n\toptions = $.extend( {}, options );\r\n\r\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\r\n\t\ttarget = $( options.of ),\r\n\t\twithin = $.position.getWithinInfo( options.within ),\r\n\t\tscrollInfo = $.position.getScrollInfo( within ),\r\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\r\n\t\toffsets = {};\r\n\r\n\tdimensions = getDimensions( target );\r\n\tif ( target[0].preventDefault ) {\r\n\t\t// force left top to allow flipping\r\n\t\toptions.at = \"left top\";\r\n\t}\r\n\ttargetWidth = dimensions.width;\r\n\ttargetHeight = dimensions.height;\r\n\ttargetOffset = dimensions.offset;\r\n\t// clone to reuse original targetOffset later\r\n\tbasePosition = $.extend( {}, targetOffset );\r\n\r\n\t// force my and at to have valid horizontal and vertical positions\r\n\t// if a value is missing or invalid, it will be converted to center\r\n\t$.each( [ \"my\", \"at\" ], function() {\r\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\r\n\t\t\thorizontalOffset,\r\n\t\t\tverticalOffset;\r\n\r\n\t\tif ( pos.length === 1) {\r\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\r\n\t\t\t\tpos.concat( [ \"center\" ] ) :\r\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\r\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\r\n\t\t\t\t\t[ \"center\", \"center\" ];\r\n\t\t}\r\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\r\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\r\n\r\n\t\t// calculate offsets\r\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\r\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\r\n\t\toffsets[ this ] = [\r\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\r\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\r\n\t\t];\r\n\r\n\t\t// reduce to just the positions without the offsets\r\n\t\toptions[ this ] = [\r\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\r\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\r\n\t\t];\r\n\t});\r\n\r\n\t// normalize collision option\r\n\tif ( collision.length === 1 ) {\r\n\t\tcollision[ 1 ] = collision[ 0 ];\r\n\t}\r\n\r\n\tif ( options.at[ 0 ] === \"right\" ) {\r\n\t\tbasePosition.left += targetWidth;\r\n\t} else if ( options.at[ 0 ] === \"center\" ) {\r\n\t\tbasePosition.left += targetWidth / 2;\r\n\t}\r\n\r\n\tif ( options.at[ 1 ] === \"bottom\" ) {\r\n\t\tbasePosition.top += targetHeight;\r\n\t} else if ( options.at[ 1 ] === \"center\" ) {\r\n\t\tbasePosition.top += targetHeight / 2;\r\n\t}\r\n\r\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\r\n\tbasePosition.left += atOffset[ 0 ];\r\n\tbasePosition.top += atOffset[ 1 ];\r\n\r\n\treturn this.each(function() {\r\n\t\tvar collisionPosition, using,\r\n\t\t\telem = $( this ),\r\n\t\t\telemWidth = elem.outerWidth(),\r\n\t\t\telemHeight = elem.outerHeight(),\r\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\r\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\r\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) + scrollInfo.width,\r\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) + scrollInfo.height,\r\n\t\t\tposition = $.extend( {}, basePosition ),\r\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\r\n\r\n\t\tif ( options.my[ 0 ] === \"right\" ) {\r\n\t\t\tposition.left -= elemWidth;\r\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\r\n\t\t\tposition.left -= elemWidth / 2;\r\n\t\t}\r\n\r\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\r\n\t\t\tposition.top -= elemHeight;\r\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\r\n\t\t\tposition.top -= elemHeight / 2;\r\n\t\t}\r\n\r\n\t\tposition.left += myOffset[ 0 ];\r\n\t\tposition.top += myOffset[ 1 ];\r\n\r\n\t\t// if the browser doesn't support fractions, then round for consistent results\r\n\t\tif ( !$.support.offsetFractions ) {\r\n\t\t\tposition.left = round( position.left );\r\n\t\t\tposition.top = round( position.top );\r\n\t\t}\r\n\r\n\t\tcollisionPosition = {\r\n\t\t\tmarginLeft: marginLeft,\r\n\t\t\tmarginTop: marginTop\r\n\t\t};\r\n\r\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\r\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\r\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\r\n\t\t\t\t\ttargetWidth: targetWidth,\r\n\t\t\t\t\ttargetHeight: targetHeight,\r\n\t\t\t\t\telemWidth: elemWidth,\r\n\t\t\t\t\telemHeight: elemHeight,\r\n\t\t\t\t\tcollisionPosition: collisionPosition,\r\n\t\t\t\t\tcollisionWidth: collisionWidth,\r\n\t\t\t\t\tcollisionHeight: collisionHeight,\r\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\r\n\t\t\t\t\tmy: options.my,\r\n\t\t\t\t\tat: options.at,\r\n\t\t\t\t\twithin: within,\r\n\t\t\t\t\telem : elem\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif ( options.using ) {\r\n\t\t\t// adds feedback as second argument to using callback, if present\r\n\t\t\tusing = function( props ) {\r\n\t\t\t\tvar left = targetOffset.left - position.left,\r\n\t\t\t\t\tright = left + targetWidth - elemWidth,\r\n\t\t\t\t\ttop = targetOffset.top - position.top,\r\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\r\n\t\t\t\t\tfeedback = {\r\n\t\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t\telement: target,\r\n\t\t\t\t\t\t\tleft: targetOffset.left,\r\n\t\t\t\t\t\t\ttop: targetOffset.top,\r\n\t\t\t\t\t\t\twidth: targetWidth,\r\n\t\t\t\t\t\t\theight: targetHeight\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\telement: {\r\n\t\t\t\t\t\t\telement: elem,\r\n\t\t\t\t\t\t\tleft: position.left,\r\n\t\t\t\t\t\t\ttop: position.top,\r\n\t\t\t\t\t\t\twidth: elemWidth,\r\n\t\t\t\t\t\t\theight: elemHeight\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\r\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\r\n\t\t\t\t\t};\r\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\r\n\t\t\t\t\tfeedback.horizontal = \"center\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\r\n\t\t\t\t\tfeedback.vertical = \"middle\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\r\n\t\t\t\t\tfeedback.important = \"horizontal\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfeedback.important = \"vertical\";\r\n\t\t\t\t}\r\n\t\t\t\toptions.using.call( this, props, feedback );\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\telem.offset( $.extend( position, { using: using } ) );\r\n\t});\r\n};\r\n\r\n$.ui.position = {\r\n\tfit: {\r\n\t\tleft: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\r\n\t\t\t\touterWidth = within.width,\r\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\r\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\r\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\r\n\t\t\t\tnewOverRight;\r\n\r\n\t\t\t// element is wider than within\r\n\t\t\tif ( data.collisionWidth > outerWidth ) {\r\n\t\t\t\t// element is initially over the left side of within\r\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\r\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;\r\n\t\t\t\t\tposition.left += overLeft - newOverRight;\r\n\t\t\t\t// element is initially over right side of within\r\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\r\n\t\t\t\t\tposition.left = withinOffset;\r\n\t\t\t\t// element is initially over both left and right sides of within\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( overLeft > overRight ) {\r\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tposition.left = withinOffset;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t// too far left -> align with left edge\r\n\t\t\t} else if ( overLeft > 0 ) {\r\n\t\t\t\tposition.left += overLeft;\r\n\t\t\t// too far right -> align with right edge\r\n\t\t\t} else if ( overRight > 0 ) {\r\n\t\t\t\tposition.left -= overRight;\r\n\t\t\t// adjust based on position and margin\r\n\t\t\t} else {\r\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\r\n\t\t\t}\r\n\t\t},\r\n\t\ttop: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\r\n\t\t\t\touterHeight = data.within.height,\r\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\r\n\t\t\t\toverTop = withinOffset - collisionPosTop,\r\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\r\n\t\t\t\tnewOverBottom;\r\n\r\n\t\t\t// element is taller than within\r\n\t\t\tif ( data.collisionHeight > outerHeight ) {\r\n\t\t\t\t// element is initially over the top of within\r\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\r\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;\r\n\t\t\t\t\tposition.top += overTop - newOverBottom;\r\n\t\t\t\t// element is initially over bottom of within\r\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\r\n\t\t\t\t\tposition.top = withinOffset;\r\n\t\t\t\t// element is initially over both top and bottom of within\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( overTop > overBottom ) {\r\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tposition.top = withinOffset;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t// too far up -> align with top\r\n\t\t\t} else if ( overTop > 0 ) {\r\n\t\t\t\tposition.top += overTop;\r\n\t\t\t// too far down -> align with bottom edge\r\n\t\t\t} else if ( overBottom > 0 ) {\r\n\t\t\t\tposition.top -= overBottom;\r\n\t\t\t// adjust based on position and margin\r\n\t\t\t} else {\r\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tflip: {\r\n\t\tleft: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\r\n\t\t\t\touterWidth = within.width,\r\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\r\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\r\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\r\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\r\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\r\n\t\t\t\t\t-data.elemWidth :\r\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\r\n\t\t\t\t\t\tdata.elemWidth :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\r\n\t\t\t\t\tdata.targetWidth :\r\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\r\n\t\t\t\t\t\t-data.targetWidth :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\toffset = -2 * data.offset[ 0 ],\r\n\t\t\t\tnewOverRight,\r\n\t\t\t\tnewOverLeft;\r\n\r\n\t\t\tif ( overLeft < 0 ) {\r\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;\r\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\r\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if ( overRight > 0 ) {\r\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;\r\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\r\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\ttop: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\r\n\t\t\t\touterHeight = within.height,\r\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\r\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\r\n\t\t\t\toverTop = collisionPosTop - offsetTop,\r\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\r\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\r\n\t\t\t\tmyOffset = top ?\r\n\t\t\t\t\t-data.elemHeight :\r\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\r\n\t\t\t\t\t\tdata.elemHeight :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\r\n\t\t\t\t\tdata.targetHeight :\r\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\r\n\t\t\t\t\t\t-data.targetHeight :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\toffset = -2 * data.offset[ 1 ],\r\n\t\t\t\tnewOverTop,\r\n\t\t\t\tnewOverBottom;\r\n\t\t\tif ( overTop < 0 ) {\r\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;\r\n\t\t\t\tif ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {\r\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if ( overBottom > 0 ) {\r\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;\r\n\t\t\t\tif ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {\r\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tflipfit: {\r\n\t\tleft: function() {\r\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\r\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\r\n\t\t},\r\n\t\ttop: function() {\r\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\r\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// fraction support test\r\n(function () {\r\n\tvar testElement, testElementParent, testElementStyle, offsetLeft, i,\r\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ],\r\n\t\tdiv = document.createElement( \"div\" );\r\n\r\n\t//Create a \"fake body\" for testing based on method used in jQuery.support\r\n\ttestElement = document.createElement( body ? \"div\" : \"body\" );\r\n\ttestElementStyle = {\r\n\t\tvisibility: \"hidden\",\r\n\t\twidth: 0,\r\n\t\theight: 0,\r\n\t\tborder: 0,\r\n\t\tmargin: 0,\r\n\t\tbackground: \"none\"\r\n\t};\r\n\tif ( body ) {\r\n\t\t$.extend( testElementStyle, {\r\n\t\t\tposition: \"absolute\",\r\n\t\t\tleft: \"-1000px\",\r\n\t\t\ttop: \"-1000px\"\r\n\t\t});\r\n\t}\r\n\tfor ( i in testElementStyle ) {\r\n\t\ttestElement.style[ i ] = testElementStyle[ i ];\r\n\t}\r\n\ttestElement.appendChild( div );\r\n\ttestElementParent = body || document.documentElement;\r\n\ttestElementParent.insertBefore( testElement, testElementParent.firstChild );\r\n\r\n\tdiv.style.cssText = \"position: absolute; left: 10.7432222px;\";\r\n\r\n\toffsetLeft = $( div ).offset().left;\r\n\t$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;\r\n\r\n\ttestElement.innerHTML = \"\";\r\n\ttestElementParent.removeChild( testElement );\r\n})();\r\n\r\n}( jQuery ) );\r\n(function( $, undefined ) {\r\n\r\n$.widget(\"ui.draggable\", $.ui.mouse, {\r\n\tversion: \"1.10.4\",\r\n\twidgetEventPrefix: \"drag\",\r\n\toptions: {\r\n\t\taddClasses: true,\r\n\t\tappendTo: \"parent\",\r\n\t\taxis: false,\r\n\t\tconnectToSortable: false,\r\n\t\tcontainment: false,\r\n\t\tcursor: \"auto\",\r\n\t\tcursorAt: false,\r\n\t\tgrid: false,\r\n\t\thandle: false,\r\n\t\thelper: \"original\",\r\n\t\tiframeFix: false,\r\n\t\topacity: false,\r\n\t\trefreshPositions: false,\r\n\t\trevert: false,\r\n\t\trevertDuration: 500,\r\n\t\tscope: \"default\",\r\n\t\tscroll: true,\r\n\t\tscrollSensitivity: 20,\r\n\t\tscrollSpeed: 20,\r\n\t\tsnap: false,\r\n\t\tsnapMode: \"both\",\r\n\t\tsnapTolerance: 20,\r\n\t\tstack: false,\r\n\t\tzIndex: false,\r\n\r\n\t\t// callbacks\r\n\t\tdrag: null,\r\n\t\tstart: null,\r\n\t\tstop: null\r\n\t},\r\n\t_create: function() {\r\n\r\n\t\tif (this.options.helper === \"original\" && !(/^(?:r|a|f)/).test(this.element.css(\"position\"))) {\r\n\t\t\tthis.element[0].style.position = \"relative\";\r\n\t\t}\r\n\t\tif (this.options.addClasses){\r\n\t\t\tthis.element.addClass(\"ui-draggable\");\r\n\t\t}\r\n\t\tif (this.options.disabled){\r\n\t\t\tthis.element.addClass(\"ui-draggable-disabled\");\r\n\t\t}\r\n\r\n\t\tthis._mouseInit();\r\n\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tthis.element.removeClass( \"ui-draggable ui-draggable-dragging ui-draggable-disabled\" );\r\n\t\tthis._mouseDestroy();\r\n\t},\r\n\r\n\t_mouseCapture: function(event) {\r\n\r\n\t\tvar o = this.options;\r\n\r\n\t\t// among others, prevent a drag on a resizable-handle\r\n\t\tif (this.helper || o.disabled || $(event.target).closest(\".ui-resizable-handle\").length > 0) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t//Quit if we're not on a valid handle\r\n\t\tthis.handle = this._getHandle(event);\r\n\t\tif (!this.handle) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t$(o.iframeFix === true ? \"iframe\" : o.iframeFix).each(function() {\r\n\t\t\t$(\"<div class='ui-draggable-iframeFix' style='background: #fff;'></div>\")\r\n\t\t\t.css({\r\n\t\t\t\twidth: this.offsetWidth+\"px\", height: this.offsetHeight+\"px\",\r\n\t\t\t\tposition: \"absolute\", opacity: \"0.001\", zIndex: 1000\r\n\t\t\t})\r\n\t\t\t.css($(this).offset())\r\n\t\t\t.appendTo(\"body\");\r\n\t\t});\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\t_mouseStart: function(event) {\r\n\r\n\t\tvar o = this.options;\r\n\r\n\t\t//Create and append the visible helper\r\n\t\tthis.helper = this._createHelper(event);\r\n\r\n\t\tthis.helper.addClass(\"ui-draggable-dragging\");\r\n\r\n\t\t//Cache the helper size\r\n\t\tthis._cacheHelperProportions();\r\n\r\n\t\t//If ddmanager is used for droppables, set the global draggable\r\n\t\tif($.ui.ddmanager) {\r\n\t\t\t$.ui.ddmanager.current = this;\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t * - Position generation -\r\n\t\t * This block generates everything position related - it's the core of draggables.\r\n\t\t */\r\n\r\n\t\t//Cache the margins of the original element\r\n\t\tthis._cacheMargins();\r\n\r\n\t\t//Store the helper's css position\r\n\t\tthis.cssPosition = this.helper.css( \"position\" );\r\n\t\tthis.scrollParent = this.helper.scrollParent();\r\n\t\tthis.offsetParent = this.helper.offsetParent();\r\n\t\tthis.offsetParentCssPosition = this.offsetParent.css( \"position\" );\r\n\r\n\t\t//The element's absolute position on the page minus margins\r\n\t\tthis.offset = this.positionAbs = this.element.offset();\r\n\t\tthis.offset = {\r\n\t\t\ttop: this.offset.top - this.margins.top,\r\n\t\t\tleft: this.offset.left - this.margins.left\r\n\t\t};\r\n\r\n\t\t//Reset scroll cache\r\n\t\tthis.offset.scroll = false;\r\n\r\n\t\t$.extend(this.offset, {\r\n\t\t\tclick: { //Where the click happened, relative to the element\r\n\t\t\t\tleft: event.pageX - this.offset.left,\r\n\t\t\t\ttop: event.pageY - this.offset.top\r\n\t\t\t},\r\n\t\t\tparent: this._getParentOffset(),\r\n\t\t\trelative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper\r\n\t\t});\r\n\r\n\t\t//Generate the original position\r\n\t\tthis.originalPosition = this.position = this._generatePosition(event);\r\n\t\tthis.originalPageX = event.pageX;\r\n\t\tthis.originalPageY = event.pageY;\r\n\r\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\r\n\t\t(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));\r\n\r\n\t\t//Set a containment if given in the options\r\n\t\tthis._setContainment();\r\n\r\n\t\t//Trigger event + callbacks\r\n\t\tif(this._trigger(\"start\", event) === false) {\r\n\t\t\tthis._clear();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t//Recache the helper size\r\n\t\tthis._cacheHelperProportions();\r\n\r\n\t\t//Prepare the droppable offsets\r\n\t\tif ($.ui.ddmanager && !o.dropBehaviour) {\r\n\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\r\n\t\t}\r\n\r\n\r\n\t\tthis._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position\r\n\r\n\t\t//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)\r\n\t\tif ( $.ui.ddmanager ) {\r\n\t\t\t$.ui.ddmanager.dragStart(this, event);\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_mouseDrag: function(event, noPropagation) {\r\n\t\t// reset any necessary cached properties (see #5009)\r\n\t\tif ( this.offsetParentCssPosition === \"fixed\" ) {\r\n\t\t\tthis.offset.parent = this._getParentOffset();\r\n\t\t}\r\n\r\n\t\t//Compute the helpers position\r\n\t\tthis.position = this._generatePosition(event);\r\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\r\n\r\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\r\n\t\tif (!noPropagation) {\r\n\t\t\tvar ui = this._uiHash();\r\n\t\t\tif(this._trigger(\"drag\", event, ui) === false) {\r\n\t\t\t\tthis._mouseUp({});\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tthis.position = ui.position;\r\n\t\t}\r\n\r\n\t\tif(!this.options.axis || this.options.axis !== \"y\") {\r\n\t\t\tthis.helper[0].style.left = this.position.left+\"px\";\r\n\t\t}\r\n\t\tif(!this.options.axis || this.options.axis !== \"x\") {\r\n\t\t\tthis.helper[0].style.top = this.position.top+\"px\";\r\n\t\t}\r\n\t\tif($.ui.ddmanager) {\r\n\t\t\t$.ui.ddmanager.drag(this, event);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_mouseStop: function(event) {\r\n\r\n\t\t//If we are using droppables, inform the manager about the drop\r\n\t\tvar that = this,\r\n\t\t\tdropped = false;\r\n\t\tif ($.ui.ddmanager && !this.options.dropBehaviour) {\r\n\t\t\tdropped = $.ui.ddmanager.drop(this, event);\r\n\t\t}\r\n\r\n\t\t//if a drop comes from outside (a sortable)\r\n\t\tif(this.dropped) {\r\n\t\t\tdropped = this.dropped;\r\n\t\t\tthis.dropped = false;\r\n\t\t}\r\n\r\n\t\t//if the original element is no longer in the DOM don't bother to continue (see #8269)\r\n\t\tif ( this.options.helper === \"original\" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif((this.options.revert === \"invalid\" && !dropped) || (this.options.revert === \"valid\" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {\r\n\t\t\t$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {\r\n\t\t\t\tif(that._trigger(\"stop\", event) !== false) {\r\n\t\t\t\t\tthat._clear();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tif(this._trigger(\"stop\", event) !== false) {\r\n\t\t\t\tthis._clear();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_mouseUp: function(event) {\r\n\t\t//Remove frame helpers\r\n\t\t$(\"div.ui-draggable-iframeFix\").each(function() {\r\n\t\t\tthis.parentNode.removeChild(this);\r\n\t\t});\r\n\r\n\t\t//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)\r\n\t\tif( $.ui.ddmanager ) {\r\n\t\t\t$.ui.ddmanager.dragStop(this, event);\r\n\t\t}\r\n\r\n\t\treturn $.ui.mouse.prototype._mouseUp.call(this, event);\r\n\t},\r\n\r\n\tcancel: function() {\r\n\r\n\t\tif(this.helper.is(\".ui-draggable-dragging\")) {\r\n\t\t\tthis._mouseUp({});\r\n\t\t} else {\r\n\t\t\tthis._clear();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t_getHandle: function(event) {\r\n\t\treturn this.options.handle ?\r\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\r\n\t\t\ttrue;\r\n\t},\r\n\r\n\t_createHelper: function(event) {\r\n\r\n\t\tvar o = this.options,\r\n\t\t\thelper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === \"clone\" ? this.element.clone().removeAttr(\"id\") : this.element);\r\n\r\n\t\tif(!helper.parents(\"body\").length) {\r\n\t\t\thelper.appendTo((o.appendTo === \"parent\" ? this.element[0].parentNode : o.appendTo));\r\n\t\t}\r\n\r\n\t\tif(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css(\"position\"))) {\r\n\t\t\thelper.css(\"position\", \"absolute\");\r\n\t\t}\r\n\r\n\t\treturn helper;\r\n\r\n\t},\r\n\r\n\t_adjustOffsetFromHelper: function(obj) {\r\n\t\tif (typeof obj === \"string\") {\r\n\t\t\tobj = obj.split(\" \");\r\n\t\t}\r\n\t\tif ($.isArray(obj)) {\r\n\t\t\tobj = {left: +obj[0], top: +obj[1] || 0};\r\n\t\t}\r\n\t\tif (\"left\" in obj) {\r\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\r\n\t\t}\r\n\t\tif (\"right\" in obj) {\r\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\r\n\t\t}\r\n\t\tif (\"top\" in obj) {\r\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\r\n\t\t}\r\n\t\tif (\"bottom\" in obj) {\r\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\r\n\t\t}\r\n\t},\r\n\r\n\t_getParentOffset: function() {\r\n\r\n\t\t//Get the offsetParent and cache its position\r\n\t\tvar po = this.offsetParent.offset();\r\n\r\n\t\t// This is a special case where we need to modify a offset calculated on start, since the following happened:\r\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent\r\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that\r\n\t\t// the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag\r\n\t\tif(this.cssPosition === \"absolute\" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {\r\n\t\t\tpo.left += this.scrollParent.scrollLeft();\r\n\t\t\tpo.top += this.scrollParent.scrollTop();\r\n\t\t}\r\n\r\n\t\t//This needs to be actually done for all browsers, since pageX/pageY includes this information\r\n\t\t//Ugly IE fix\r\n\t\tif((this.offsetParent[0] === document.body) ||\r\n\t\t\t(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === \"html\" && $.ui.ie)) {\r\n\t\t\tpo = { top: 0, left: 0 };\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop: po.top + (parseInt(this.offsetParent.css(\"borderTopWidth\"),10) || 0),\r\n\t\t\tleft: po.left + (parseInt(this.offsetParent.css(\"borderLeftWidth\"),10) || 0)\r\n\t\t};\r\n\r\n\t},\r\n\r\n\t_getRelativeOffset: function() {\r\n\r\n\t\tif(this.cssPosition === \"relative\") {\r\n\t\t\tvar p = this.element.position();\r\n\t\t\treturn {\r\n\t\t\t\ttop: p.top - (parseInt(this.helper.css(\"top\"),10) || 0) + this.scrollParent.scrollTop(),\r\n\t\t\t\tleft: p.left - (parseInt(this.helper.css(\"left\"),10) || 0) + this.scrollParent.scrollLeft()\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\treturn { top: 0, left: 0 };\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_cacheMargins: function() {\r\n\t\tthis.margins = {\r\n\t\t\tleft: (parseInt(this.element.css(\"marginLeft\"),10) || 0),\r\n\t\t\ttop: (parseInt(this.element.css(\"marginTop\"),10) || 0),\r\n\t\t\tright: (parseInt(this.element.css(\"marginRight\"),10) || 0),\r\n\t\t\tbottom: (parseInt(this.element.css(\"marginBottom\"),10) || 0)\r\n\t\t};\r\n\t},\r\n\r\n\t_cacheHelperProportions: function() {\r\n\t\tthis.helperProportions = {\r\n\t\t\twidth: this.helper.outerWidth(),\r\n\t\t\theight: this.helper.outerHeight()\r\n\t\t};\r\n\t},\r\n\r\n\t_setContainment: function() {\r\n\r\n\t\tvar over, c, ce,\r\n\t\t\to = this.options;\r\n\r\n\t\tif ( !o.containment ) {\r\n\t\t\tthis.containment = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( o.containment === \"window\" ) {\r\n\t\t\tthis.containment = [\r\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\r\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\r\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,\r\n\t\t\t\t$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top\r\n\t\t\t];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( o.containment === \"document\") {\r\n\t\t\tthis.containment = [\r\n\t\t\t\t0,\r\n\t\t\t\t0,\r\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\r\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top\r\n\t\t\t];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( o.containment.constructor === Array ) {\r\n\t\t\tthis.containment = o.containment;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( o.containment === \"parent\" ) {\r\n\t\t\to.containment = this.helper[ 0 ].parentNode;\r\n\t\t}\r\n\r\n\t\tc = $( o.containment );\r\n\t\tce = c[ 0 ];\r\n\r\n\t\tif( !ce ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tover = c.css( \"overflow\" ) !== \"hidden\";\r\n\r\n\t\tthis.containment = [\r\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) + ( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\r\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) + ( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ) ,\r\n\t\t\t( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) - ( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,\r\n\t\t\t( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) - ( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top - this.margins.bottom\r\n\t\t];\r\n\t\tthis.relative_container = c;\r\n\t},\r\n\r\n\t_convertPositionTo: function(d, pos) {\r\n\r\n\t\tif(!pos) {\r\n\t\t\tpos = this.position;\r\n\t\t}\r\n\r\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\r\n\t\t\tscroll = this.cssPosition === \"absolute\" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;\r\n\r\n\t\t//Cache the scroll\r\n\t\tif (!this.offset.scroll) {\r\n\t\t\tthis.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop: (\r\n\t\t\t\tpos.top\t+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\r\n\t\t\t\tthis.offset.relative.top * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\r\n\t\t\t\tthis.offset.parent.top * mod -\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\r\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )\r\n\t\t\t),\r\n\t\t\tleft: (\r\n\t\t\t\tpos.left +\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\r\n\t\t\t\tthis.offset.relative.left * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\r\n\t\t\t\tthis.offset.parent.left * mod\t-\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\r\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )\r\n\t\t\t)\r\n\t\t};\r\n\r\n\t},\r\n\r\n\t_generatePosition: function(event) {\r\n\r\n\t\tvar containment, co, top, left,\r\n\t\t\to = this.options,\r\n\t\t\tscroll = this.cssPosition === \"absolute\" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,\r\n\t\t\tpageX = event.pageX,\r\n\t\t\tpageY = event.pageY;\r\n\r\n\t\t//Cache the scroll\r\n\t\tif (!this.offset.scroll) {\r\n\t\t\tthis.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t * - Position constraining -\r\n\t\t * Constrain the position to a mix of grid, containment.\r\n\t\t */\r\n\r\n\t\t// If we are not dragging yet, we won't check for options\r\n\t\tif ( this.originalPosition ) {\r\n\t\t\tif ( this.containment ) {\r\n\t\t\t\tif ( this.relative_container ){\r\n\t\t\t\t\tco = this.relative_container.offset();\r\n\t\t\t\t\tcontainment = [\r\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\r\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\r\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\r\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\r\n\t\t\t\t\t];\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tcontainment = this.containment;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(event.pageX - this.offset.click.left < containment[0]) {\r\n\t\t\t\t\tpageX = containment[0] + this.offset.click.left;\r\n\t\t\t\t}\r\n\t\t\t\tif(event.pageY - this.offset.click.top < containment[1]) {\r\n\t\t\t\t\tpageY = containment[1] + this.offset.click.top;\r\n\t\t\t\t}\r\n\t\t\t\tif(event.pageX - this.offset.click.left > containment[2]) {\r\n\t\t\t\t\tpageX = containment[2] + this.offset.click.left;\r\n\t\t\t\t}\r\n\t\t\t\tif(event.pageY - this.offset.click.top > containment[3]) {\r\n\t\t\t\t\tpageY = containment[3] + this.offset.click.top;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(o.grid) {\r\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)\r\n\t\t\t\ttop = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;\r\n\t\t\t\tpageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;\r\n\r\n\t\t\t\tleft = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;\r\n\t\t\t\tpageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop: (\r\n\t\t\t\tpageY -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\r\n\t\t\t\tthis.offset.click.top\t-\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\r\n\t\t\t\tthis.offset.relative.top -\t\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\r\n\t\t\t\tthis.offset.parent.top +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\r\n\t\t\t\t( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )\r\n\t\t\t),\r\n\t\t\tleft: (\r\n\t\t\t\tpageX -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\r\n\t\t\t\tthis.offset.click.left -\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\r\n\t\t\t\tthis.offset.relative.left -\t\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\r\n\t\t\t\tthis.offset.parent.left +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\r\n\t\t\t\t( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )\r\n\t\t\t)\r\n\t\t};\r\n\r\n\t},\r\n\r\n\t_clear: function() {\r\n\t\tthis.helper.removeClass(\"ui-draggable-dragging\");\r\n\t\tif(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {\r\n\t\t\tthis.helper.remove();\r\n\t\t}\r\n\t\tthis.helper = null;\r\n\t\tthis.cancelHelperRemoval = false;\r\n\t},\r\n\r\n\t// From now on bulk stuff - mainly helpers\r\n\r\n\t_trigger: function(type, event, ui) {\r\n\t\tui = ui || this._uiHash();\r\n\t\t$.ui.plugin.call(this, type, [event, ui]);\r\n\t\t//The absolute position has to be recalculated after plugins\r\n\t\tif(type === \"drag\") {\r\n\t\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\r\n\t\t}\r\n\t\treturn $.Widget.prototype._trigger.call(this, type, event, ui);\r\n\t},\r\n\r\n\tplugins: {},\r\n\r\n\t_uiHash: function() {\r\n\t\treturn {\r\n\t\t\thelper: this.helper,\r\n\t\t\tposition: this.position,\r\n\t\t\toriginalPosition: this.originalPosition,\r\n\t\t\toffset: this.positionAbs\r\n\t\t};\r\n\t}\r\n\r\n});\r\n\r\n$.ui.plugin.add(\"draggable\", \"connectToSortable\", {\r\n\tstart: function(event, ui) {\r\n\r\n\t\tvar inst = $(this).data(\"ui-draggable\"), o = inst.options,\r\n\t\t\tuiSortable = $.extend({}, ui, { item: inst.element });\r\n\t\tinst.sortables = [];\r\n\t\t$(o.connectToSortable).each(function() {\r\n\t\t\tvar sortable = $.data(this, \"ui-sortable\");\r\n\t\t\tif (sortable && !sortable.options.disabled) {\r\n\t\t\t\tinst.sortables.push({\r\n\t\t\t\t\tinstance: sortable,\r\n\t\t\t\t\tshouldRevert: sortable.options.revert\r\n\t\t\t\t});\r\n\t\t\t\tsortable.refreshPositions();\t// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).\r\n\t\t\t\tsortable._trigger(\"activate\", event, uiSortable);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t},\r\n\tstop: function(event, ui) {\r\n\r\n\t\t//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper\r\n\t\tvar inst = $(this).data(\"ui-draggable\"),\r\n\t\t\tuiSortable = $.extend({}, ui, { item: inst.element });\r\n\r\n\t\t$.each(inst.sortables, function() {\r\n\t\t\tif(this.instance.isOver) {\r\n\r\n\t\t\t\tthis.instance.isOver = 0;\r\n\r\n\t\t\t\tinst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance\r\n\t\t\t\tthis.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)\r\n\r\n\t\t\t\t//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: \"valid/invalid\"\r\n\t\t\t\tif(this.shouldRevert) {\r\n\t\t\t\t\tthis.instance.options.revert = this.shouldRevert;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Trigger the stop of the sortable\r\n\t\t\t\tthis.instance._mouseStop(event);\r\n\r\n\t\t\t\tthis.instance.options.helper = this.instance.options._helper;\r\n\r\n\t\t\t\t//If the helper has been the original item, restore properties in the sortable\r\n\t\t\t\tif(inst.options.helper === \"original\") {\r\n\t\t\t\t\tthis.instance.currentItem.css({ top: \"auto\", left: \"auto\" });\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance\r\n\t\t\t\tthis.instance._trigger(\"deactivate\", event, uiSortable);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t},\r\n\tdrag: function(event, ui) {\r\n\r\n\t\tvar inst = $(this).data(\"ui-draggable\"), that = this;\r\n\r\n\t\t$.each(inst.sortables, function() {\r\n\r\n\t\t\tvar innermostIntersecting = false,\r\n\t\t\t\tthisSortable = this;\r\n\r\n\t\t\t//Copy over some variables to allow calling the sortable's native _intersectsWith\r\n\t\t\tthis.instance.positionAbs = inst.positionAbs;\r\n\t\t\tthis.instance.helperProportions = inst.helperProportions;\r\n\t\t\tthis.instance.offset.click = inst.offset.click;\r\n\r\n\t\t\tif(this.instance._intersectsWith(this.instance.containerCache)) {\r\n\t\t\t\tinnermostIntersecting = true;\r\n\t\t\t\t$.each(inst.sortables, function () {\r\n\t\t\t\t\tthis.instance.positionAbs = inst.positionAbs;\r\n\t\t\t\t\tthis.instance.helperProportions = inst.helperProportions;\r\n\t\t\t\t\tthis.instance.offset.click = inst.offset.click;\r\n\t\t\t\t\tif (this !== thisSortable &&\r\n\t\t\t\t\t\tthis.instance._intersectsWith(this.instance.containerCache) &&\r\n\t\t\t\t\t\t$.contains(thisSortable.instance.element[0], this.instance.element[0])\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tinnermostIntersecting = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn innermostIntersecting;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(innermostIntersecting) {\r\n\t\t\t\t//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once\r\n\t\t\t\tif(!this.instance.isOver) {\r\n\r\n\t\t\t\t\tthis.instance.isOver = 1;\r\n\t\t\t\t\t//Now we fake the start of dragging for the sortable instance,\r\n\t\t\t\t\t//by cloning the list group item, appending it to the sortable and using it as inst.currentItem\r\n\t\t\t\t\t//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)\r\n\t\t\t\t\tthis.instance.currentItem = $(that).clone().removeAttr(\"id\").appendTo(this.instance.element).data(\"ui-sortable-item\", true);\r\n\t\t\t\t\tthis.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it\r\n\t\t\t\t\tthis.instance.options.helper = function() { return ui.helper[0]; };\r\n\r\n\t\t\t\t\tevent.target = this.instance.currentItem[0];\r\n\t\t\t\t\tthis.instance._mouseCapture(event, true);\r\n\t\t\t\t\tthis.instance._mouseStart(event, true, true);\r\n\r\n\t\t\t\t\t//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes\r\n\t\t\t\t\tthis.instance.offset.click.top = inst.offset.click.top;\r\n\t\t\t\t\tthis.instance.offset.click.left = inst.offset.click.left;\r\n\t\t\t\t\tthis.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;\r\n\t\t\t\t\tthis.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;\r\n\r\n\t\t\t\t\tinst._trigger(\"toSortable\", event);\r\n\t\t\t\t\tinst.dropped = this.instance.element; //draggable revert needs that\r\n\t\t\t\t\t//hack so receive/update callbacks work (mostly)\r\n\t\t\t\t\tinst.currentItem = inst.element;\r\n\t\t\t\t\tthis.instance.fromOutside = inst;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable\r\n\t\t\t\tif(this.instance.currentItem) {\r\n\t\t\t\t\tthis.instance._mouseDrag(event);\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t//If it doesn't intersect with the sortable, and it intersected before,\r\n\t\t\t\t//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval\r\n\t\t\t\tif(this.instance.isOver) {\r\n\r\n\t\t\t\t\tthis.instance.isOver = 0;\r\n\t\t\t\t\tthis.instance.cancelHelperRemoval = true;\r\n\r\n\t\t\t\t\t//Prevent reverting on this forced stop\r\n\t\t\t\t\tthis.instance.options.revert = false;\r\n\r\n\t\t\t\t\t// The out event needs to be triggered independently\r\n\t\t\t\t\tthis.instance._trigger(\"out\", event, this.instance._uiHash(this.instance));\r\n\r\n\t\t\t\t\tthis.instance._mouseStop(event, true);\r\n\t\t\t\t\tthis.instance.options.helper = this.instance.options._helper;\r\n\r\n\t\t\t\t\t//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size\r\n\t\t\t\t\tthis.instance.currentItem.remove();\r\n\t\t\t\t\tif(this.instance.placeholder) {\r\n\t\t\t\t\t\tthis.instance.placeholder.remove();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tinst._trigger(\"fromSortable\", event);\r\n\t\t\t\t\tinst.dropped = false; //draggable revert needs that\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t}\r\n});\r\n\r\n$.ui.plugin.add(\"draggable\", \"cursor\", {\r\n\tstart: function() {\r\n\t\tvar t = $(\"body\"), o = $(this).data(\"ui-draggable\").options;\r\n\t\tif (t.css(\"cursor\")) {\r\n\t\t\to._cursor = t.css(\"cursor\");\r\n\t\t}\r\n\t\tt.css(\"cursor\", o.cursor);\r\n\t},\r\n\tstop: function() {\r\n\t\tvar o = $(this).data(\"ui-draggable\").options;\r\n\t\tif (o._cursor) {\r\n\t\t\t$(\"body\").css(\"cursor\", o._cursor);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n$.ui.plugin.add(\"draggable\", \"opacity\", {\r\n\tstart: function(event, ui) {\r\n\t\tvar t = $(ui.helper), o = $(this).data(\"ui-draggable\").options;\r\n\t\tif(t.css(\"opacity\")) {\r\n\t\t\to._opacity = t.css(\"opacity\");\r\n\t\t}\r\n\t\tt.css(\"opacity\", o.opacity);\r\n\t},\r\n\tstop: function(event, ui) {\r\n\t\tvar o = $(this).data(\"ui-draggable\").options;\r\n\t\tif(o._opacity) {\r\n\t\t\t$(ui.helper).css(\"opacity\", o._opacity);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n$.ui.plugin.add(\"draggable\", \"scroll\", {\r\n\tstart: function() {\r\n\t\tvar i = $(this).data(\"ui-draggable\");\r\n\t\tif(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== \"HTML\") {\r\n\t\t\ti.overflowOffset = i.scrollParent.offset();\r\n\t\t}\r\n\t},\r\n\tdrag: function( event ) {\r\n\r\n\t\tvar i = $(this).data(\"ui-draggable\"), o = i.options, scrolled = false;\r\n\r\n\t\tif(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== \"HTML\") {\r\n\r\n\t\t\tif(!o.axis || o.axis !== \"x\") {\r\n\t\t\t\tif((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {\r\n\t\t\t\t\ti.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;\r\n\t\t\t\t} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {\r\n\t\t\t\t\ti.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!o.axis || o.axis !== \"y\") {\r\n\t\t\t\tif((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {\r\n\t\t\t\t\ti.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;\r\n\t\t\t\t} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {\r\n\t\t\t\t\ti.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tif(!o.axis || o.axis !== \"x\") {\r\n\t\t\t\tif(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {\r\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);\r\n\t\t\t\t} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {\r\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!o.axis || o.axis !== \"y\") {\r\n\t\t\t\tif(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {\r\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);\r\n\t\t\t\t} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {\r\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {\r\n\t\t\t$.ui.ddmanager.prepareOffsets(i, event);\r\n\t\t}\r\n\r\n\t}\r\n});\r\n\r\n$.ui.plugin.add(\"draggable\", \"snap\", {\r\n\tstart: function() {\r\n\r\n\t\tvar i = $(this).data(\"ui-draggable\"),\r\n\t\t\to = i.options;\r\n\r\n\t\ti.snapElements = [];\r\n\r\n\t\t$(o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap).each(function() {\r\n\t\t\tvar $t = $(this),\r\n\t\t\t\t$o = $t.offset();\r\n\t\t\tif(this !== i.element[0]) {\r\n\t\t\t\ti.snapElements.push({\r\n\t\t\t\t\titem: this,\r\n\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\r\n\t\t\t\t\ttop: $o.top, left: $o.left\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t},\r\n\tdrag: function(event, ui) {\r\n\r\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\r\n\t\t\tinst = $(this).data(\"ui-draggable\"),\r\n\t\t\to = inst.options,\r\n\t\t\td = o.snapTolerance,\r\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\r\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\r\n\r\n\t\tfor (i = inst.snapElements.length - 1; i >= 0; i--){\r\n\r\n\t\t\tl = inst.snapElements[i].left;\r\n\t\t\tr = l + inst.snapElements[i].width;\r\n\t\t\tt = inst.snapElements[i].top;\r\n\t\t\tb = t + inst.snapElements[i].height;\r\n\r\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {\r\n\t\t\t\tif(inst.snapElements[i].snapping) {\r\n\t\t\t\t\t(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));\r\n\t\t\t\t}\r\n\t\t\t\tinst.snapElements[i].snapping = false;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(o.snapMode !== \"inner\") {\r\n\t\t\t\tts = Math.abs(t - y2) <= d;\r\n\t\t\t\tbs = Math.abs(b - y1) <= d;\r\n\t\t\t\tls = Math.abs(l - x2) <= d;\r\n\t\t\t\trs = Math.abs(r - x1) <= d;\r\n\t\t\t\tif(ts) {\r\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;\r\n\t\t\t\t}\r\n\t\t\t\tif(bs) {\r\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: b, left: 0 }).top - inst.margins.top;\r\n\t\t\t\t}\r\n\t\t\t\tif(ls) {\r\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;\r\n\t\t\t\t}\r\n\t\t\t\tif(rs) {\r\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: r }).left - inst.margins.left;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfirst = (ts || bs || ls || rs);\r\n\r\n\t\t\tif(o.snapMode !== \"outer\") {\r\n\t\t\t\tts = Math.abs(t - y1) <= d;\r\n\t\t\t\tbs = Math.abs(b - y2) <= d;\r\n\t\t\t\tls = Math.abs(l - x1) <= d;\r\n\t\t\t\trs = Math.abs(r - x2) <= d;\r\n\t\t\t\tif(ts) {\r\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: t, left: 0 }).top - inst.margins.top;\r\n\t\t\t\t}\r\n\t\t\t\tif(bs) {\r\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;\r\n\t\t\t\t}\r\n\t\t\t\tif(ls) {\r\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: l }).left - inst.margins.left;\r\n\t\t\t\t}\r\n\t\t\t\tif(rs) {\r\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {\r\n\t\t\t\t(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));\r\n\t\t\t}\r\n\t\t\tinst.snapElements[i].snapping = (ts || bs || ls || rs || first);\r\n\r\n\t\t}\r\n\r\n\t}\r\n});\r\n\r\n$.ui.plugin.add(\"draggable\", \"stack\", {\r\n\tstart: function() {\r\n\t\tvar min,\r\n\t\t\to = this.data(\"ui-draggable\").options,\r\n\t\t\tgroup = $.makeArray($(o.stack)).sort(function(a,b) {\r\n\t\t\t\treturn (parseInt($(a).css(\"zIndex\"),10) || 0) - (parseInt($(b).css(\"zIndex\"),10) || 0);\r\n\t\t\t});\r\n\r\n\t\tif (!group.length) { return; }\r\n\r\n\t\tmin = parseInt($(group[0]).css(\"zIndex\"), 10) || 0;\r\n\t\t$(group).each(function(i) {\r\n\t\t\t$(this).css(\"zIndex\", min + i);\r\n\t\t});\r\n\t\tthis.css(\"zIndex\", (min + group.length));\r\n\t}\r\n});\r\n\r\n$.ui.plugin.add(\"draggable\", \"zIndex\", {\r\n\tstart: function(event, ui) {\r\n\t\tvar t = $(ui.helper), o = $(this).data(\"ui-draggable\").options;\r\n\t\tif(t.css(\"zIndex\")) {\r\n\t\t\to._zIndex = t.css(\"zIndex\");\r\n\t\t}\r\n\t\tt.css(\"zIndex\", o.zIndex);\r\n\t},\r\n\tstop: function(event, ui) {\r\n\t\tvar o = $(this).data(\"ui-draggable\").options;\r\n\t\tif(o._zIndex) {\r\n\t\t\t$(ui.helper).css(\"zIndex\", o._zIndex);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n})(jQuery);\r\n(function( $, undefined ) {\r\n\r\nfunction num(v) {\r\n\treturn parseInt(v, 10) || 0;\r\n}\r\n\r\nfunction isNumber(value) {\r\n\treturn !isNaN(parseInt(value, 10));\r\n}\r\n\r\n$.widget(\"ui.resizable\", $.ui.mouse, {\r\n\tversion: \"1.10.4\",\r\n\twidgetEventPrefix: \"resize\",\r\n\toptions: {\r\n\t\talsoResize: false,\r\n\t\tanimate: false,\r\n\t\tanimateDuration: \"slow\",\r\n\t\tanimateEasing: \"swing\",\r\n\t\taspectRatio: false,\r\n\t\tautoHide: false,\r\n\t\tcontainment: false,\r\n\t\tghost: false,\r\n\t\tgrid: false,\r\n\t\thandles: \"e,s,se\",\r\n\t\thelper: false,\r\n\t\tmaxHeight: null,\r\n\t\tmaxWidth: null,\r\n\t\tminHeight: 10,\r\n\t\tminWidth: 10,\r\n\t\t// See #7960\r\n\t\tzIndex: 90,\r\n\r\n\t\t// callbacks\r\n\t\tresize: null,\r\n\t\tstart: null,\r\n\t\tstop: null\r\n\t},\r\n\t_create: function() {\r\n\r\n\t\tvar n, i, handle, axis, hname,\r\n\t\t\tthat = this,\r\n\t\t\to = this.options;\r\n\t\tthis.element.addClass(\"ui-resizable\");\r\n\r\n\t\t$.extend(this, {\r\n\t\t\t_aspectRatio: !!(o.aspectRatio),\r\n\t\t\taspectRatio: o.aspectRatio,\r\n\t\t\toriginalElement: this.element,\r\n\t\t\t_proportionallyResizeElements: [],\r\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || \"ui-resizable-helper\" : null\r\n\t\t});\r\n\r\n\t\t//Wrap the element if it cannot hold child nodes\r\n\t\tif(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {\r\n\r\n\t\t\t//Create a wrapper element and set the wrapper to the new current internal element\r\n\t\t\tthis.element.wrap(\r\n\t\t\t\t$(\"<div class='ui-wrapper' style='overflow: hidden;'></div>\").css({\r\n\t\t\t\t\tposition: this.element.css(\"position\"),\r\n\t\t\t\t\twidth: this.element.outerWidth(),\r\n\t\t\t\t\theight: this.element.outerHeight(),\r\n\t\t\t\t\ttop: this.element.css(\"top\"),\r\n\t\t\t\t\tleft: this.element.css(\"left\")\r\n\t\t\t\t})\r\n\t\t\t);\r\n\r\n\t\t\t//Overwrite the original this.element\r\n\t\t\tthis.element = this.element.parent().data(\r\n\t\t\t\t\"ui-resizable\", this.element.data(\"ui-resizable\")\r\n\t\t\t);\r\n\r\n\t\t\tthis.elementIsWrapper = true;\r\n\r\n\t\t\t//Move margins to the wrapper\r\n\t\t\tthis.element.css({ marginLeft: this.originalElement.css(\"marginLeft\"), marginTop: this.originalElement.css(\"marginTop\"), marginRight: this.originalElement.css(\"marginRight\"), marginBottom: this.originalElement.css(\"marginBottom\") });\r\n\t\t\tthis.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});\r\n\r\n\t\t\t//Prevent Safari textarea resize\r\n\t\t\tthis.originalResizeStyle = this.originalElement.css(\"resize\");\r\n\t\t\tthis.originalElement.css(\"resize\", \"none\");\r\n\r\n\t\t\t//Push the actual element to our proportionallyResize internal array\r\n\t\t\tthis._proportionallyResizeElements.push(this.originalElement.css({ position: \"static\", zoom: 1, display: \"block\" }));\r\n\r\n\t\t\t// avoid IE jump (hard set the margin)\r\n\t\t\tthis.originalElement.css({ margin: this.originalElement.css(\"margin\") });\r\n\r\n\t\t\t// fix handlers offset\r\n\t\t\tthis._proportionallyResize();\r\n\r\n\t\t}\r\n\r\n\t\tthis.handles = o.handles || (!$(\".ui-resizable-handle\", this.element).length ? \"e,s,se\" : { n: \".ui-resizable-n\", e: \".ui-resizable-e\", s: \".ui-resizable-s\", w: \".ui-resizable-w\", se: \".ui-resizable-se\", sw: \".ui-resizable-sw\", ne: \".ui-resizable-ne\", nw: \".ui-resizable-nw\" });\r\n\t\tif(this.handles.constructor === String) {\r\n\r\n\t\t\tif ( this.handles === \"all\") {\r\n\t\t\t\tthis.handles = \"n,e,s,w,se,sw,ne,nw\";\r\n\t\t\t}\r\n\r\n\t\t\tn = this.handles.split(\",\");\r\n\t\t\tthis.handles = {};\r\n\r\n\t\t\tfor(i = 0; i < n.length; i++) {\r\n\r\n\t\t\t\thandle = $.trim(n[i]);\r\n\t\t\t\thname = \"ui-resizable-\"+handle;\r\n\t\t\t\taxis = $(\"<div class='ui-resizable-handle \" + hname + \"'></div>\");\r\n\r\n\t\t\t\t// Apply zIndex to all handles - see #7960\r\n\t\t\t\taxis.css({ zIndex: o.zIndex });\r\n\r\n\t\t\t\t//TODO : What's going on here?\r\n\t\t\t\tif (\"se\" === handle) {\r\n\t\t\t\t\taxis.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Insert into internal handles object and append to element\r\n\t\t\t\tthis.handles[handle] = \".ui-resizable-\"+handle;\r\n\t\t\t\tthis.element.append(axis);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis._renderAxis = function(target) {\r\n\r\n\t\t\tvar i, axis, padPos, padWrapper;\r\n\r\n\t\t\ttarget = target || this.element;\r\n\r\n\t\t\tfor(i in this.handles) {\r\n\r\n\t\t\t\tif(this.handles[i].constructor === String) {\r\n\t\t\t\t\tthis.handles[i] = $(this.handles[i], this.element).show();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)\r\n\t\t\t\tif (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {\r\n\r\n\t\t\t\t\taxis = $(this.handles[i], this.element);\r\n\r\n\t\t\t\t\t//Checking the correct pad and border\r\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();\r\n\r\n\t\t\t\t\t//The padding type i have to apply...\r\n\t\t\t\t\tpadPos = [ \"padding\",\r\n\t\t\t\t\t\t/ne|nw|n/.test(i) ? \"Top\" :\r\n\t\t\t\t\t\t/se|sw|s/.test(i) ? \"Bottom\" :\r\n\t\t\t\t\t\t/^e$/.test(i) ? \"Right\" : \"Left\" ].join(\"\");\r\n\r\n\t\t\t\t\ttarget.css(padPos, padWrapper);\r\n\r\n\t\t\t\t\tthis._proportionallyResize();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//TODO: What's that good for? There's not anything to be executed left\r\n\t\t\t\tif(!$(this.handles[i]).length) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t//TODO: make renderAxis a prototype function\r\n\t\tthis._renderAxis(this.element);\r\n\r\n\t\tthis._handles = $(\".ui-resizable-handle\", this.element)\r\n\t\t\t.disableSelection();\r\n\r\n\t\t//Matching axis name\r\n\t\tthis._handles.mouseover(function() {\r\n\t\t\tif (!that.resizing) {\r\n\t\t\t\tif (this.className) {\r\n\t\t\t\t\taxis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);\r\n\t\t\t\t}\r\n\t\t\t\t//Axis, default = se\r\n\t\t\t\tthat.axis = axis && axis[1] ? axis[1] : \"se\";\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//If we want to auto hide the elements\r\n\t\tif (o.autoHide) {\r\n\t\t\tthis._handles.hide();\r\n\t\t\t$(this.element)\r\n\t\t\t\t.addClass(\"ui-resizable-autohide\")\r\n\t\t\t\t.mouseenter(function() {\r\n\t\t\t\t\tif (o.disabled) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$(this).removeClass(\"ui-resizable-autohide\");\r\n\t\t\t\t\tthat._handles.show();\r\n\t\t\t\t})\r\n\t\t\t\t.mouseleave(function(){\r\n\t\t\t\t\tif (o.disabled) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!that.resizing) {\r\n\t\t\t\t\t\t$(this).addClass(\"ui-resizable-autohide\");\r\n\t\t\t\t\t\tthat._handles.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\t//Initialize the mouse interaction\r\n\t\tthis._mouseInit();\r\n\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\r\n\t\tthis._mouseDestroy();\r\n\r\n\t\tvar wrapper,\r\n\t\t\t_destroy = function(exp) {\r\n\t\t\t\t$(exp).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\")\r\n\t\t\t\t\t.removeData(\"resizable\").removeData(\"ui-resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove();\r\n\t\t\t};\r\n\r\n\t\t//TODO: Unwrap at same DOM position\r\n\t\tif (this.elementIsWrapper) {\r\n\t\t\t_destroy(this.element);\r\n\t\t\twrapper = this.element;\r\n\t\t\tthis.originalElement.css({\r\n\t\t\t\tposition: wrapper.css(\"position\"),\r\n\t\t\t\twidth: wrapper.outerWidth(),\r\n\t\t\t\theight: wrapper.outerHeight(),\r\n\t\t\t\ttop: wrapper.css(\"top\"),\r\n\t\t\t\tleft: wrapper.css(\"left\")\r\n\t\t\t}).insertAfter( wrapper );\r\n\t\t\twrapper.remove();\r\n\t\t}\r\n\r\n\t\tthis.originalElement.css(\"resize\", this.originalResizeStyle);\r\n\t\t_destroy(this.originalElement);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_mouseCapture: function(event) {\r\n\t\tvar i, handle,\r\n\t\t\tcapture = false;\r\n\r\n\t\tfor (i in this.handles) {\r\n\t\t\thandle = $(this.handles[i])[0];\r\n\t\t\tif (handle === event.target || $.contains(handle, event.target)) {\r\n\t\t\t\tcapture = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn !this.options.disabled && capture;\r\n\t},\r\n\r\n\t_mouseStart: function(event) {\r\n\r\n\t\tvar curleft, curtop, cursor,\r\n\t\t\to = this.options,\r\n\t\t\tiniPos = this.element.position(),\r\n\t\t\tel = this.element;\r\n\r\n\t\tthis.resizing = true;\r\n\r\n\t\t// bugfix for http://dev.jquery.com/ticket/1749\r\n\t\tif ( (/absolute/).test( el.css(\"position\") ) ) {\r\n\t\t\tel.css({ position: \"absolute\", top: el.css(\"top\"), left: el.css(\"left\") });\r\n\t\t} else if (el.is(\".ui-draggable\")) {\r\n\t\t\tel.css({ position: \"absolute\", top: iniPos.top, left: iniPos.left });\r\n\t\t}\r\n\r\n\t\tthis._renderProxy();\r\n\r\n\t\tcurleft = num(this.helper.css(\"left\"));\r\n\t\tcurtop = num(this.helper.css(\"top\"));\r\n\r\n\t\tif (o.containment) {\r\n\t\t\tcurleft += $(o.containment).scrollLeft() || 0;\r\n\t\t\tcurtop += $(o.containment).scrollTop() || 0;\r\n\t\t}\r\n\r\n\t\t//Store needed variables\r\n\t\tthis.offset = this.helper.offset();\r\n\t\tthis.position = { left: curleft, top: curtop };\r\n\t\tthis.size = this._helper ? { width: this.helper.width(), height: this.helper.height() } : { width: el.width(), height: el.height() };\r\n\t\tthis.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };\r\n\t\tthis.originalPosition = { left: curleft, top: curtop };\r\n\t\tthis.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };\r\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\r\n\r\n\t\t//Aspect Ratio\r\n\t\tthis.aspectRatio = (typeof o.aspectRatio === \"number\") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);\r\n\r\n\t\tcursor = $(\".ui-resizable-\" + this.axis).css(\"cursor\");\r\n\t\t$(\"body\").css(\"cursor\", cursor === \"auto\" ? this.axis + \"-resize\" : cursor);\r\n\r\n\t\tel.addClass(\"ui-resizable-resizing\");\r\n\t\tthis._propagate(\"start\", event);\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_mouseDrag: function(event) {\r\n\r\n\t\t//Increase performance, avoid regex\r\n\t\tvar data,\r\n\t\t\tel = this.helper, props = {},\r\n\t\t\tsmp = this.originalMousePosition,\r\n\t\t\ta = this.axis,\r\n\t\t\tprevTop = this.position.top,\r\n\t\t\tprevLeft = this.position.left,\r\n\t\t\tprevWidth = this.size.width,\r\n\t\t\tprevHeight = this.size.height,\r\n\t\t\tdx = (event.pageX-smp.left)||0,\r\n\t\t\tdy = (event.pageY-smp.top)||0,\r\n\t\t\ttrigger = this._change[a];\r\n\r\n\t\tif (!trigger) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Calculate the attrs that will be change\r\n\t\tdata = trigger.apply(this, [event, dx, dy]);\r\n\r\n\t\t// Put this in the mouseDrag handler since the user can start pressing shift while resizing\r\n\t\tthis._updateVirtualBoundaries(event.shiftKey);\r\n\t\tif (this._aspectRatio || event.shiftKey) {\r\n\t\t\tdata = this._updateRatio(data, event);\r\n\t\t}\r\n\r\n\t\tdata = this._respectSize(data, event);\r\n\r\n\t\tthis._updateCache(data);\r\n\r\n\t\t// plugins callbacks need to be called first\r\n\t\tthis._propagate(\"resize\", event);\r\n\r\n\t\tif (this.position.top !== prevTop) {\r\n\t\t\tprops.top = this.position.top + \"px\";\r\n\t\t}\r\n\t\tif (this.position.left !== prevLeft) {\r\n\t\t\tprops.left = this.position.left + \"px\";\r\n\t\t}\r\n\t\tif (this.size.width !== prevWidth) {\r\n\t\t\tprops.width = this.size.width + \"px\";\r\n\t\t}\r\n\t\tif (this.size.height !== prevHeight) {\r\n\t\t\tprops.height = this.size.height + \"px\";\r\n\t\t}\r\n\t\tel.css(props);\r\n\r\n\t\tif (!this._helper && this._proportionallyResizeElements.length) {\r\n\t\t\tthis._proportionallyResize();\r\n\t\t}\r\n\r\n\t\t// Call the user callback if the element was resized\r\n\t\tif ( ! $.isEmptyObject(props) ) {\r\n\t\t\tthis._trigger(\"resize\", event, this.ui());\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_mouseStop: function(event) {\r\n\r\n\t\tthis.resizing = false;\r\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\r\n\t\t\to = this.options, that = this;\r\n\r\n\t\tif(this._helper) {\r\n\r\n\t\t\tpr = this._proportionallyResizeElements;\r\n\t\t\tista = pr.length && (/textarea/i).test(pr[0].nodeName);\r\n\t\t\tsoffseth = ista && $.ui.hasScroll(pr[0], \"left\") /* TODO - jump height */ ? 0 : that.sizeDiff.height;\r\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\r\n\r\n\t\t\ts = { width: (that.helper.width() - soffsetw), height: (that.helper.height() - soffseth) };\r\n\t\t\tleft = (parseInt(that.element.css(\"left\"), 10) + (that.position.left - that.originalPosition.left)) || null;\r\n\t\t\ttop = (parseInt(that.element.css(\"top\"), 10) + (that.position.top - that.originalPosition.top)) || null;\r\n\r\n\t\t\tif (!o.animate) {\r\n\t\t\t\tthis.element.css($.extend(s, { top: top, left: left }));\r\n\t\t\t}\r\n\r\n\t\t\tthat.helper.height(that.size.height);\r\n\t\t\tthat.helper.width(that.size.width);\r\n\r\n\t\t\tif (this._helper && !o.animate) {\r\n\t\t\t\tthis._proportionallyResize();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$(\"body\").css(\"cursor\", \"auto\");\r\n\r\n\t\tthis.element.removeClass(\"ui-resizable-resizing\");\r\n\r\n\t\tthis._propagate(\"stop\", event);\r\n\r\n\t\tif (this._helper) {\r\n\t\t\tthis.helper.remove();\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\t_updateVirtualBoundaries: function(forceAspectRatio) {\r\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\r\n\t\t\to = this.options;\r\n\r\n\t\tb = {\r\n\t\t\tminWidth: isNumber(o.minWidth) ? o.minWidth : 0,\r\n\t\t\tmaxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,\r\n\t\t\tminHeight: isNumber(o.minHeight) ? o.minHeight : 0,\r\n\t\t\tmaxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity\r\n\t\t};\r\n\r\n\t\tif(this._aspectRatio || forceAspectRatio) {\r\n\t\t\t// We want to create an enclosing box whose aspect ration is the requested one\r\n\t\t\t// First, compute the \"projected\" size for each dimension based on the aspect ratio and other dimension\r\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\r\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\r\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\r\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\r\n\r\n\t\t\tif(pMinWidth > b.minWidth) {\r\n\t\t\t\tb.minWidth = pMinWidth;\r\n\t\t\t}\r\n\t\t\tif(pMinHeight > b.minHeight) {\r\n\t\t\t\tb.minHeight = pMinHeight;\r\n\t\t\t}\r\n\t\t\tif(pMaxWidth < b.maxWidth) {\r\n\t\t\t\tb.maxWidth = pMaxWidth;\r\n\t\t\t}\r\n\t\t\tif(pMaxHeight < b.maxHeight) {\r\n\t\t\t\tb.maxHeight = pMaxHeight;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._vBoundaries = b;\r\n\t},\r\n\r\n\t_updateCache: function(data) {\r\n\t\tthis.offset = this.helper.offset();\r\n\t\tif (isNumber(data.left)) {\r\n\t\t\tthis.position.left = data.left;\r\n\t\t}\r\n\t\tif (isNumber(data.top)) {\r\n\t\t\tthis.position.top = data.top;\r\n\t\t}\r\n\t\tif (isNumber(data.height)) {\r\n\t\t\tthis.size.height = data.height;\r\n\t\t}\r\n\t\tif (isNumber(data.width)) {\r\n\t\t\tthis.size.width = data.width;\r\n\t\t}\r\n\t},\r\n\r\n\t_updateRatio: function( data ) {\r\n\r\n\t\tvar cpos = this.position,\r\n\t\t\tcsize = this.size,\r\n\t\t\ta = this.axis;\r\n\r\n\t\tif (isNumber(data.height)) {\r\n\t\t\tdata.width = (data.height * this.aspectRatio);\r\n\t\t} else if (isNumber(data.width)) {\r\n\t\t\tdata.height = (data.width / this.aspectRatio);\r\n\t\t}\r\n\r\n\t\tif (a === \"sw\") {\r\n\t\t\tdata.left = cpos.left + (csize.width - data.width);\r\n\t\t\tdata.top = null;\r\n\t\t}\r\n\t\tif (a === \"nw\") {\r\n\t\t\tdata.top = cpos.top + (csize.height - data.height);\r\n\t\t\tdata.left = cpos.left + (csize.width - data.width);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t},\r\n\r\n\t_respectSize: function( data ) {\r\n\r\n\t\tvar o = this._vBoundaries,\r\n\t\t\ta = this.axis,\r\n\t\t\tismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),\r\n\t\t\tisminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),\r\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\r\n\t\t\tdh = this.position.top + this.size.height,\r\n\t\t\tcw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);\r\n\t\tif (isminw) {\r\n\t\t\tdata.width = o.minWidth;\r\n\t\t}\r\n\t\tif (isminh) {\r\n\t\t\tdata.height = o.minHeight;\r\n\t\t}\r\n\t\tif (ismaxw) {\r\n\t\t\tdata.width = o.maxWidth;\r\n\t\t}\r\n\t\tif (ismaxh) {\r\n\t\t\tdata.height = o.maxHeight;\r\n\t\t}\r\n\r\n\t\tif (isminw && cw) {\r\n\t\t\tdata.left = dw - o.minWidth;\r\n\t\t}\r\n\t\tif (ismaxw && cw) {\r\n\t\t\tdata.left = dw - o.maxWidth;\r\n\t\t}\r\n\t\tif (isminh && ch) {\r\n\t\t\tdata.top = dh - o.minHeight;\r\n\t\t}\r\n\t\tif (ismaxh && ch) {\r\n\t\t\tdata.top = dh - o.maxHeight;\r\n\t\t}\r\n\r\n\t\t// fixing jump error on top/left - bug #2330\r\n\t\tif (!data.width && !data.height && !data.left && data.top) {\r\n\t\t\tdata.top = null;\r\n\t\t} else if (!data.width && !data.height && !data.top && data.left) {\r\n\t\t\tdata.left = null;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t},\r\n\r\n\t_proportionallyResize: function() {\r\n\r\n\t\tif (!this._proportionallyResizeElements.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar i, j, borders, paddings, prel,\r\n\t\t\telement = this.helper || this.element;\r\n\r\n\t\tfor ( i=0; i < this._proportionallyResizeElements.length; i++) {\r\n\r\n\t\t\tprel = this._proportionallyResizeElements[i];\r\n\r\n\t\t\tif (!this.borderDif) {\r\n\t\t\t\tthis.borderDif = [];\r\n\t\t\t\tborders = [prel.css(\"borderTopWidth\"), prel.css(\"borderRightWidth\"), prel.css(\"borderBottomWidth\"), prel.css(\"borderLeftWidth\")];\r\n\t\t\t\tpaddings = [prel.css(\"paddingTop\"), prel.css(\"paddingRight\"), prel.css(\"paddingBottom\"), prel.css(\"paddingLeft\")];\r\n\r\n\t\t\t\tfor ( j = 0; j < borders.length; j++ ) {\r\n\t\t\t\t\tthis.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tprel.css({\r\n\t\t\t\theight: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,\r\n\t\t\t\twidth: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0\r\n\t\t\t});\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_renderProxy: function() {\r\n\r\n\t\tvar el = this.element, o = this.options;\r\n\t\tthis.elementOffset = el.offset();\r\n\r\n\t\tif(this._helper) {\r\n\r\n\t\t\tthis.helper = this.helper || $(\"<div style='overflow:hidden;'></div>\");\r\n\r\n\t\t\tthis.helper.addClass(this._helper).css({\r\n\t\t\t\twidth: this.element.outerWidth() - 1,\r\n\t\t\t\theight: this.element.outerHeight() - 1,\r\n\t\t\t\tposition: \"absolute\",\r\n\t\t\t\tleft: this.elementOffset.left +\"px\",\r\n\t\t\t\ttop: this.elementOffset.top +\"px\",\r\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\r\n\t\t\t});\r\n\r\n\t\t\tthis.helper\r\n\t\t\t\t.appendTo(\"body\")\r\n\t\t\t\t.disableSelection();\r\n\r\n\t\t} else {\r\n\t\t\tthis.helper = this.element;\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_change: {\r\n\t\te: function(event, dx) {\r\n\t\t\treturn { width: this.originalSize.width + dx };\r\n\t\t},\r\n\t\tw: function(event, dx) {\r\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\r\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\r\n\t\t},\r\n\t\tn: function(event, dx, dy) {\r\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\r\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\r\n\t\t},\r\n\t\ts: function(event, dx, dy) {\r\n\t\t\treturn { height: this.originalSize.height + dy };\r\n\t\t},\r\n\t\tse: function(event, dx, dy) {\r\n\t\t\treturn $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));\r\n\t\t},\r\n\t\tsw: function(event, dx, dy) {\r\n\t\t\treturn $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));\r\n\t\t},\r\n\t\tne: function(event, dx, dy) {\r\n\t\t\treturn $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));\r\n\t\t},\r\n\t\tnw: function(event, dx, dy) {\r\n\t\t\treturn $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));\r\n\t\t}\r\n\t},\r\n\r\n\t_propagate: function(n, event) {\r\n\t\t$.ui.plugin.call(this, n, [event, this.ui()]);\r\n\t\t(n !== \"resize\" && this._trigger(n, event, this.ui()));\r\n\t},\r\n\r\n\tplugins: {},\r\n\r\n\tui: function() {\r\n\t\treturn {\r\n\t\t\toriginalElement: this.originalElement,\r\n\t\t\telement: this.element,\r\n\t\t\thelper: this.helper,\r\n\t\t\tposition: this.position,\r\n\t\t\tsize: this.size,\r\n\t\t\toriginalSize: this.originalSize,\r\n\t\t\toriginalPosition: this.originalPosition\r\n\t\t};\r\n\t}\r\n\r\n});\r\n\r\n/*\r\n * Resizable Extensions\r\n */\r\n\r\n$.ui.plugin.add(\"resizable\", \"animate\", {\r\n\r\n\tstop: function( event ) {\r\n\t\tvar that = $(this).data(\"ui-resizable\"),\r\n\t\t\to = that.options,\r\n\t\t\tpr = that._proportionallyResizeElements,\r\n\t\t\tista = pr.length && (/textarea/i).test(pr[0].nodeName),\r\n\t\t\tsoffseth = ista && $.ui.hasScroll(pr[0], \"left\") /* TODO - jump height */ ? 0 : that.sizeDiff.height,\r\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\r\n\t\t\tstyle = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },\r\n\t\t\tleft = (parseInt(that.element.css(\"left\"), 10) + (that.position.left - that.originalPosition.left)) || null,\r\n\t\t\ttop = (parseInt(that.element.css(\"top\"), 10) + (that.position.top - that.originalPosition.top)) || null;\r\n\r\n\t\tthat.element.animate(\r\n\t\t\t$.extend(style, top && left ? { top: top, left: left } : {}), {\r\n\t\t\t\tduration: o.animateDuration,\r\n\t\t\t\teasing: o.animateEasing,\r\n\t\t\t\tstep: function() {\r\n\r\n\t\t\t\t\tvar data = {\r\n\t\t\t\t\t\twidth: parseInt(that.element.css(\"width\"), 10),\r\n\t\t\t\t\t\theight: parseInt(that.element.css(\"height\"), 10),\r\n\t\t\t\t\t\ttop: parseInt(that.element.css(\"top\"), 10),\r\n\t\t\t\t\t\tleft: parseInt(that.element.css(\"left\"), 10)\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (pr && pr.length) {\r\n\t\t\t\t\t\t$(pr[0]).css({ width: data.width, height: data.height });\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// propagating resize, and updating values for each animation step\r\n\t\t\t\t\tthat._updateCache(data);\r\n\t\t\t\t\tthat._propagate(\"resize\", event);\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n});\r\n\r\n$.ui.plugin.add(\"resizable\", \"containment\", {\r\n\r\n\tstart: function() {\r\n\t\tvar element, p, co, ch, cw, width, height,\r\n\t\t\tthat = $(this).data(\"ui-resizable\"),\r\n\t\t\to = that.options,\r\n\t\t\tel = that.element,\r\n\t\t\toc = o.containment,\r\n\t\t\tce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;\r\n\r\n\t\tif (!ce) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthat.containerElement = $(ce);\r\n\r\n\t\tif (/document/.test(oc) || oc === document) {\r\n\t\t\tthat.containerOffset = { left: 0, top: 0 };\r\n\t\t\tthat.containerPosition = { left: 0, top: 0 };\r\n\r\n\t\t\tthat.parentData = {\r\n\t\t\t\telement: $(document), left: 0, top: 0,\r\n\t\t\t\twidth: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// i'm a node, so compute top, left, right, bottom\r\n\t\telse {\r\n\t\t\telement = $(ce);\r\n\t\t\tp = [];\r\n\t\t\t$([ \"Top\", \"Right\", \"Left\", \"Bottom\" ]).each(function(i, name) { p[i] = num(element.css(\"padding\" + name)); });\r\n\r\n\t\t\tthat.containerOffset = element.offset();\r\n\t\t\tthat.containerPosition = element.position();\r\n\t\t\tthat.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };\r\n\r\n\t\t\tco = that.containerOffset;\r\n\t\t\tch = that.containerSize.height;\r\n\t\t\tcw = that.containerSize.width;\r\n\t\t\twidth = ($.ui.hasScroll(ce, \"left\") ? ce.scrollWidth : cw );\r\n\t\t\theight = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);\r\n\r\n\t\t\tthat.parentData = {\r\n\t\t\t\telement: ce, left: co.left, top: co.top, width: width, height: height\r\n\t\t\t};\r\n\t\t}\r\n\t},\r\n\r\n\tresize: function( event ) {\r\n\t\tvar woset, hoset, isParent, isOffsetRelative,\r\n\t\t\tthat = $(this).data(\"ui-resizable\"),\r\n\t\t\to = that.options,\r\n\t\t\tco = that.containerOffset, cp = that.position,\r\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\r\n\t\t\tcop = { top:0, left:0 }, ce = that.containerElement;\r\n\r\n\t\tif (ce[0] !== document && (/static/).test(ce.css(\"position\"))) {\r\n\t\t\tcop = co;\r\n\t\t}\r\n\r\n\t\tif (cp.left < (that._helper ? co.left : 0)) {\r\n\t\t\tthat.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));\r\n\t\t\tif (pRatio) {\r\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\r\n\t\t\t}\r\n\t\t\tthat.position.left = o.helper ? co.left : 0;\r\n\t\t}\r\n\r\n\t\tif (cp.top < (that._helper ? co.top : 0)) {\r\n\t\t\tthat.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);\r\n\t\t\tif (pRatio) {\r\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\r\n\t\t\t}\r\n\t\t\tthat.position.top = that._helper ? co.top : 0;\r\n\t\t}\r\n\r\n\t\tthat.offset.left = that.parentData.left+that.position.left;\r\n\t\tthat.offset.top = that.parentData.top+that.position.top;\r\n\r\n\t\twoset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );\r\n\t\thoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );\r\n\r\n\t\tisParent = that.containerElement.get(0) === that.element.parent().get(0);\r\n\t\tisOffsetRelative = /relative|absolute/.test(that.containerElement.css(\"position\"));\r\n\r\n\t\tif ( isParent && isOffsetRelative ) {\r\n\t\t\twoset -= Math.abs( that.parentData.left );\r\n\t\t}\r\n\r\n\t\tif (woset + that.size.width >= that.parentData.width) {\r\n\t\t\tthat.size.width = that.parentData.width - woset;\r\n\t\t\tif (pRatio) {\r\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (hoset + that.size.height >= that.parentData.height) {\r\n\t\t\tthat.size.height = that.parentData.height - hoset;\r\n\t\t\tif (pRatio) {\r\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tstop: function(){\r\n\t\tvar that = $(this).data(\"ui-resizable\"),\r\n\t\t\to = that.options,\r\n\t\t\tco = that.containerOffset,\r\n\t\t\tcop = that.containerPosition,\r\n\t\t\tce = that.containerElement,\r\n\t\t\thelper = $(that.helper),\r\n\t\t\tho = helper.offset(),\r\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\r\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\r\n\r\n\t\tif (that._helper && !o.animate && (/relative/).test(ce.css(\"position\"))) {\r\n\t\t\t$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });\r\n\t\t}\r\n\r\n\t\tif (that._helper && !o.animate && (/static/).test(ce.css(\"position\"))) {\r\n\t\t\t$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });\r\n\t\t}\r\n\r\n\t}\r\n});\r\n\r\n$.ui.plugin.add(\"resizable\", \"alsoResize\", {\r\n\r\n\tstart: function () {\r\n\t\tvar that = $(this).data(\"ui-resizable\"),\r\n\t\t\to = that.options,\r\n\t\t\t_store = function (exp) {\r\n\t\t\t\t$(exp).each(function() {\r\n\t\t\t\t\tvar el = $(this);\r\n\t\t\t\t\tel.data(\"ui-resizable-alsoresize\", {\r\n\t\t\t\t\t\twidth: parseInt(el.width(), 10), height: parseInt(el.height(), 10),\r\n\t\t\t\t\t\tleft: parseInt(el.css(\"left\"), 10), top: parseInt(el.css(\"top\"), 10)\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\tif (typeof(o.alsoResize) === \"object\" && !o.alsoResize.parentNode) {\r\n\t\t\tif (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }\r\n\t\t\telse { $.each(o.alsoResize, function (exp) { _store(exp); }); }\r\n\t\t}else{\r\n\t\t\t_store(o.alsoResize);\r\n\t\t}\r\n\t},\r\n\r\n\tresize: function (event, ui) {\r\n\t\tvar that = $(this).data(\"ui-resizable\"),\r\n\t\t\to = that.options,\r\n\t\t\tos = that.originalSize,\r\n\t\t\top = that.originalPosition,\r\n\t\t\tdelta = {\r\n\t\t\t\theight: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,\r\n\t\t\t\ttop: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0\r\n\t\t\t},\r\n\r\n\t\t\t_alsoResize = function (exp, c) {\r\n\t\t\t\t$(exp).each(function() {\r\n\t\t\t\t\tvar el = $(this), start = $(this).data(\"ui-resizable-alsoresize\"), style = {},\r\n\t\t\t\t\t\tcss = c && c.length ? c : el.parents(ui.originalElement[0]).length ? [\"width\", \"height\"] : [\"width\", \"height\", \"top\", \"left\"];\r\n\r\n\t\t\t\t\t$.each(css, function (i, prop) {\r\n\t\t\t\t\t\tvar sum = (start[prop]||0) + (delta[prop]||0);\r\n\t\t\t\t\t\tif (sum && sum >= 0) {\r\n\t\t\t\t\t\t\tstyle[prop] = sum || null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tel.css(style);\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\tif (typeof(o.alsoResize) === \"object\" && !o.alsoResize.nodeType) {\r\n\t\t\t$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });\r\n\t\t}else{\r\n\t\t\t_alsoResize(o.alsoResize);\r\n\t\t}\r\n\t},\r\n\r\n\tstop: function () {\r\n\t\t$(this).removeData(\"resizable-alsoresize\");\r\n\t}\r\n});\r\n\r\n$.ui.plugin.add(\"resizable\", \"ghost\", {\r\n\r\n\tstart: function() {\r\n\r\n\t\tvar that = $(this).data(\"ui-resizable\"), o = that.options, cs = that.size;\r\n\r\n\t\tthat.ghost = that.originalElement.clone();\r\n\t\tthat.ghost\r\n\t\t\t.css({ opacity: 0.25, display: \"block\", position: \"relative\", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })\r\n\t\t\t.addClass(\"ui-resizable-ghost\")\r\n\t\t\t.addClass(typeof o.ghost === \"string\" ? o.ghost : \"\");\r\n\r\n\t\tthat.ghost.appendTo(that.helper);\r\n\r\n\t},\r\n\r\n\tresize: function(){\r\n\t\tvar that = $(this).data(\"ui-resizable\");\r\n\t\tif (that.ghost) {\r\n\t\t\tthat.ghost.css({ position: \"relative\", height: that.size.height, width: that.size.width });\r\n\t\t}\r\n\t},\r\n\r\n\tstop: function() {\r\n\t\tvar that = $(this).data(\"ui-resizable\");\r\n\t\tif (that.ghost && that.helper) {\r\n\t\t\tthat.helper.get(0).removeChild(that.ghost.get(0));\r\n\t\t}\r\n\t}\r\n\r\n});\r\n\r\n$.ui.plugin.add(\"resizable\", \"grid\", {\r\n\r\n\tresize: function() {\r\n\t\tvar that = $(this).data(\"ui-resizable\"),\r\n\t\t\to = that.options,\r\n\t\t\tcs = that.size,\r\n\t\t\tos = that.originalSize,\r\n\t\t\top = that.originalPosition,\r\n\t\t\ta = that.axis,\r\n\t\t\tgrid = typeof o.grid === \"number\" ? [o.grid, o.grid] : o.grid,\r\n\t\t\tgridX = (grid[0]||1),\r\n\t\t\tgridY = (grid[1]||1),\r\n\t\t\tox = Math.round((cs.width - os.width) / gridX) * gridX,\r\n\t\t\toy = Math.round((cs.height - os.height) / gridY) * gridY,\r\n\t\t\tnewWidth = os.width + ox,\r\n\t\t\tnewHeight = os.height + oy,\r\n\t\t\tisMaxWidth = o.maxWidth && (o.maxWidth < newWidth),\r\n\t\t\tisMaxHeight = o.maxHeight && (o.maxHeight < newHeight),\r\n\t\t\tisMinWidth = o.minWidth && (o.minWidth > newWidth),\r\n\t\t\tisMinHeight = o.minHeight && (o.minHeight > newHeight);\r\n\r\n\t\to.grid = grid;\r\n\r\n\t\tif (isMinWidth) {\r\n\t\t\tnewWidth = newWidth + gridX;\r\n\t\t}\r\n\t\tif (isMinHeight) {\r\n\t\t\tnewHeight = newHeight + gridY;\r\n\t\t}\r\n\t\tif (isMaxWidth) {\r\n\t\t\tnewWidth = newWidth - gridX;\r\n\t\t}\r\n\t\tif (isMaxHeight) {\r\n\t\t\tnewHeight = newHeight - gridY;\r\n\t\t}\r\n\r\n\t\tif (/^(se|s|e)$/.test(a)) {\r\n\t\t\tthat.size.width = newWidth;\r\n\t\t\tthat.size.height = newHeight;\r\n\t\t} else if (/^(ne)$/.test(a)) {\r\n\t\t\tthat.size.width = newWidth;\r\n\t\t\tthat.size.height = newHeight;\r\n\t\t\tthat.position.top = op.top - oy;\r\n\t\t} else if (/^(sw)$/.test(a)) {\r\n\t\t\tthat.size.width = newWidth;\r\n\t\t\tthat.size.height = newHeight;\r\n\t\t\tthat.position.left = op.left - ox;\r\n\t\t} else {\r\n\t\t\tif ( newHeight - gridY > 0 ) {\r\n\t\t\t\tthat.size.height = newHeight;\r\n\t\t\t\tthat.position.top = op.top - oy;\r\n\t\t\t} else {\r\n\t\t\t\tthat.size.height = gridY;\r\n\t\t\t\tthat.position.top = op.top + os.height - gridY;\r\n\t\t\t}\r\n\t\t\tif ( newWidth - gridX > 0 ) {\r\n\t\t\t\tthat.size.width = newWidth;\r\n\t\t\t\tthat.position.left = op.left - ox;\r\n\t\t\t} else {\r\n\t\t\t\tthat.size.width = gridX;\r\n\t\t\t\tthat.position.left = op.left + os.width - gridX;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n});\r\n\r\n})(jQuery);\r\n(function( $, undefined ) {\r\n\r\nfunction isOverAxis( x, reference, size ) {\r\n\treturn ( x > reference ) && ( x < ( reference + size ) );\r\n}\r\n\r\nfunction isFloating(item) {\r\n\treturn (/left|right/).test(item.css(\"float\")) || (/inline|table-cell/).test(item.css(\"display\"));\r\n}\r\n\r\n$.widget(\"ui.sortable\", $.ui.mouse, {\r\n\tversion: \"1.10.4\",\r\n\twidgetEventPrefix: \"sort\",\r\n\tready: false,\r\n\toptions: {\r\n\t\tappendTo: \"parent\",\r\n\t\taxis: false,\r\n\t\tconnectWith: false,\r\n\t\tcontainment: false,\r\n\t\tcursor: \"auto\",\r\n\t\tcursorAt: false,\r\n\t\tdropOnEmpty: true,\r\n\t\tforcePlaceholderSize: false,\r\n\t\tforceHelperSize: false,\r\n\t\tgrid: false,\r\n\t\thandle: false,\r\n\t\thelper: \"original\",\r\n\t\titems: \"> *\",\r\n\t\topacity: false,\r\n\t\tplaceholder: false,\r\n\t\trevert: false,\r\n\t\tscroll: true,\r\n\t\tscrollSensitivity: 20,\r\n\t\tscrollSpeed: 20,\r\n\t\tscope: \"default\",\r\n\t\ttolerance: \"intersect\",\r\n\t\tzIndex: 1000,\r\n\r\n\t\t// callbacks\r\n\t\tactivate: null,\r\n\t\tbeforeStop: null,\r\n\t\tchange: null,\r\n\t\tdeactivate: null,\r\n\t\tout: null,\r\n\t\tover: null,\r\n\t\treceive: null,\r\n\t\tremove: null,\r\n\t\tsort: null,\r\n\t\tstart: null,\r\n\t\tstop: null,\r\n\t\tupdate: null\r\n\t},\r\n\t_create: function() {\r\n\r\n\t\tvar o = this.options;\r\n\t\tthis.containerCache = {};\r\n\t\tthis.element.addClass(\"ui-sortable\");\r\n\r\n\t\t//Get the items\r\n\t\tthis.refresh();\r\n\r\n\t\t//Let's determine if the items are being displayed horizontally\r\n\t\tthis.floating = this.items.length ? o.axis === \"x\" || isFloating(this.items[0].item) : false;\r\n\r\n\t\t//Let's determine the parent's offset\r\n\t\tthis.offset = this.element.offset();\r\n\r\n\t\t//Initialize mouse events for interaction\r\n\t\tthis._mouseInit();\r\n\r\n\t\t//We're ready to go\r\n\t\tthis.ready = true;\r\n\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tthis.element\r\n\t\t\t.removeClass(\"ui-sortable ui-sortable-disabled\");\r\n\t\tthis._mouseDestroy();\r\n\r\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\r\n\t\t\tthis.items[i].item.removeData(this.widgetName + \"-item\");\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_setOption: function(key, value){\r\n\t\tif ( key === \"disabled\" ) {\r\n\t\t\tthis.options[ key ] = value;\r\n\r\n\t\t\tthis.widget().toggleClass( \"ui-sortable-disabled\", !!value );\r\n\t\t} else {\r\n\t\t\t// Don't call widget base _setOption for disable as it adds ui-state-disabled class\r\n\t\t\t$.Widget.prototype._setOption.apply(this, arguments);\r\n\t\t}\r\n\t},\r\n\r\n\t_mouseCapture: function(event, overrideHandle) {\r\n\t\tvar currentItem = null,\r\n\t\t\tvalidHandle = false,\r\n\t\t\tthat = this;\r\n\r\n\t\tif (this.reverting) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif(this.options.disabled || this.options.type === \"static\") {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t//We have to refresh the items data once first\r\n\t\tthis._refreshItems(event);\r\n\r\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\r\n\t\t$(event.target).parents().each(function() {\r\n\t\t\tif($.data(this, that.widgetName + \"-item\") === that) {\r\n\t\t\t\tcurrentItem = $(this);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif($.data(event.target, that.widgetName + \"-item\") === that) {\r\n\t\t\tcurrentItem = $(event.target);\r\n\t\t}\r\n\r\n\t\tif(!currentItem) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif(this.options.handle && !overrideHandle) {\r\n\t\t\t$(this.options.handle, currentItem).find(\"*\").addBack().each(function() {\r\n\t\t\t\tif(this === event.target) {\r\n\t\t\t\t\tvalidHandle = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif(!validHandle) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.currentItem = currentItem;\r\n\t\tthis._removeCurrentsFromItems();\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\t_mouseStart: function(event, overrideHandle, noActivation) {\r\n\r\n\t\tvar i, body,\r\n\t\t\to = this.options;\r\n\r\n\t\tthis.currentContainer = this;\r\n\r\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture\r\n\t\tthis.refreshPositions();\r\n\r\n\t\t//Create and append the visible helper\r\n\t\tthis.helper = this._createHelper(event);\r\n\r\n\t\t//Cache the helper size\r\n\t\tthis._cacheHelperProportions();\r\n\r\n\t\t/*\r\n\t\t * - Position generation -\r\n\t\t * This block generates everything position related - it's the core of draggables.\r\n\t\t */\r\n\r\n\t\t//Cache the margins of the original element\r\n\t\tthis._cacheMargins();\r\n\r\n\t\t//Get the next scrolling parent\r\n\t\tthis.scrollParent = this.helper.scrollParent();\r\n\r\n\t\t//The element's absolute position on the page minus margins\r\n\t\tthis.offset = this.currentItem.offset();\r\n\t\tthis.offset = {\r\n\t\t\ttop: this.offset.top - this.margins.top,\r\n\t\t\tleft: this.offset.left - this.margins.left\r\n\t\t};\r\n\r\n\t\t$.extend(this.offset, {\r\n\t\t\tclick: { //Where the click happened, relative to the element\r\n\t\t\t\tleft: event.pageX - this.offset.left,\r\n\t\t\t\ttop: event.pageY - this.offset.top\r\n\t\t\t},\r\n\t\t\tparent: this._getParentOffset(),\r\n\t\t\trelative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper\r\n\t\t});\r\n\r\n\t\t// Only after we got the offset, we can change the helper's position to absolute\r\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\r\n\t\tthis.helper.css(\"position\", \"absolute\");\r\n\t\tthis.cssPosition = this.helper.css(\"position\");\r\n\r\n\t\t//Generate the original position\r\n\t\tthis.originalPosition = this._generatePosition(event);\r\n\t\tthis.originalPageX = event.pageX;\r\n\t\tthis.originalPageY = event.pageY;\r\n\r\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\r\n\t\t(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));\r\n\r\n\t\t//Cache the former DOM position\r\n\t\tthis.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };\r\n\r\n\t\t//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way\r\n\t\tif(this.helper[0] !== this.currentItem[0]) {\r\n\t\t\tthis.currentItem.hide();\r\n\t\t}\r\n\r\n\t\t//Create the placeholder\r\n\t\tthis._createPlaceholder();\r\n\r\n\t\t//Set a containment if given in the options\r\n\t\tif(o.containment) {\r\n\t\t\tthis._setContainment();\r\n\t\t}\r\n\r\n\t\tif( o.cursor && o.cursor !== \"auto\" ) { // cursor option\r\n\t\t\tbody = this.document.find( \"body\" );\r\n\r\n\t\t\t// support: IE\r\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\r\n\t\t\tbody.css( \"cursor\", o.cursor );\r\n\r\n\t\t\tthis.storedStylesheet = $( \"<style>*{ cursor: \"+o.cursor+\" !important; }</style>\" ).appendTo( body );\r\n\t\t}\r\n\r\n\t\tif(o.opacity) { // opacity option\r\n\t\t\tif (this.helper.css(\"opacity\")) {\r\n\t\t\t\tthis._storedOpacity = this.helper.css(\"opacity\");\r\n\t\t\t}\r\n\t\t\tthis.helper.css(\"opacity\", o.opacity);\r\n\t\t}\r\n\r\n\t\tif(o.zIndex) { // zIndex option\r\n\t\t\tif (this.helper.css(\"zIndex\")) {\r\n\t\t\t\tthis._storedZIndex = this.helper.css(\"zIndex\");\r\n\t\t\t}\r\n\t\t\tthis.helper.css(\"zIndex\", o.zIndex);\r\n\t\t}\r\n\r\n\t\t//Prepare scrolling\r\n\t\tif(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== \"HTML\") {\r\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\r\n\t\t}\r\n\r\n\t\t//Call callbacks\r\n\t\tthis._trigger(\"start\", event, this._uiHash());\r\n\r\n\t\t//Recache the helper size\r\n\t\tif(!this._preserveHelperProportions) {\r\n\t\t\tthis._cacheHelperProportions();\r\n\t\t}\r\n\r\n\r\n\t\t//Post \"activate\" events to possible containers\r\n\t\tif( !noActivation ) {\r\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\r\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//Prepare possible droppables\r\n\t\tif($.ui.ddmanager) {\r\n\t\t\t$.ui.ddmanager.current = this;\r\n\t\t}\r\n\r\n\t\tif ($.ui.ddmanager && !o.dropBehaviour) {\r\n\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\r\n\t\t}\r\n\r\n\t\tthis.dragging = true;\r\n\r\n\t\tthis.helper.addClass(\"ui-sortable-helper\");\r\n\t\tthis._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\t_mouseDrag: function(event) {\r\n\t\tvar i, item, itemElement, intersection,\r\n\t\t\to = this.options,\r\n\t\t\tscrolled = false;\r\n\r\n\t\t//Compute the helpers position\r\n\t\tthis.position = this._generatePosition(event);\r\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\r\n\r\n\t\tif (!this.lastPositionAbs) {\r\n\t\t\tthis.lastPositionAbs = this.positionAbs;\r\n\t\t}\r\n\r\n\t\t//Do scrolling\r\n\t\tif(this.options.scroll) {\r\n\t\t\tif(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== \"HTML\") {\r\n\r\n\t\t\t\tif((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {\r\n\t\t\t\t\tthis.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;\r\n\t\t\t\t} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {\r\n\t\t\t\t\tthis.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {\r\n\t\t\t\t\tthis.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;\r\n\t\t\t\t} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {\r\n\t\t\t\t\tthis.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {\r\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);\r\n\t\t\t\t} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {\r\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {\r\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);\r\n\t\t\t\t} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {\r\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {\r\n\t\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//Regenerate the absolute position used for position checks\r\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\r\n\r\n\t\t//Set the helper position\r\n\t\tif(!this.options.axis || this.options.axis !== \"y\") {\r\n\t\t\tthis.helper[0].style.left = this.position.left+\"px\";\r\n\t\t}\r\n\t\tif(!this.options.axis || this.options.axis !== \"x\") {\r\n\t\t\tthis.helper[0].style.top = this.position.top+\"px\";\r\n\t\t}\r\n\r\n\t\t//Rearrange\r\n\t\tfor (i = this.items.length - 1; i >= 0; i--) {\r\n\r\n\t\t\t//Cache variables and intersection, continue if no intersection\r\n\t\t\titem = this.items[i];\r\n\t\t\titemElement = item.item[0];\r\n\t\t\tintersection = this._intersectsWithPointer(item);\r\n\t\t\tif (!intersection) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t// Only put the placeholder inside the current Container, skip all\r\n\t\t\t// items from other containers. This works because when moving\r\n\t\t\t// an item from one container to another the\r\n\t\t\t// currentContainer is switched before the placeholder is moved.\r\n\t\t\t//\r\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\r\n\t\t\t// the placeholder to jitter beetween the outer and inner container.\r\n\t\t\tif (item.instance !== this.currentContainer) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t// cannot intersect with itself\r\n\t\t\t// no useless actions that have been done before\r\n\t\t\t// no action if the item moved is the parent of the item checked\r\n\t\t\tif (itemElement !== this.currentItem[0] &&\r\n\t\t\t\tthis.placeholder[intersection === 1 ? \"next\" : \"prev\"]()[0] !== itemElement &&\r\n\t\t\t\t!$.contains(this.placeholder[0], itemElement) &&\r\n\t\t\t\t(this.options.type === \"semi-dynamic\" ? !$.contains(this.element[0], itemElement) : true)\r\n\t\t\t) {\r\n\r\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\r\n\r\n\t\t\t\tif (this.options.tolerance === \"pointer\" || this._intersectsWithSides(item)) {\r\n\t\t\t\t\tthis._rearrange(event, item);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._trigger(\"change\", event, this._uiHash());\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//Post events to containers\r\n\t\tthis._contactContainers(event);\r\n\r\n\t\t//Interconnect with droppables\r\n\t\tif($.ui.ddmanager) {\r\n\t\t\t$.ui.ddmanager.drag(this, event);\r\n\t\t}\r\n\r\n\t\t//Call callbacks\r\n\t\tthis._trigger(\"sort\", event, this._uiHash());\r\n\r\n\t\tthis.lastPositionAbs = this.positionAbs;\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\t_mouseStop: function(event, noPropagation) {\r\n\r\n\t\tif(!event) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//If we are using droppables, inform the manager about the drop\r\n\t\tif ($.ui.ddmanager && !this.options.dropBehaviour) {\r\n\t\t\t$.ui.ddmanager.drop(this, event);\r\n\t\t}\r\n\r\n\t\tif(this.options.revert) {\r\n\t\t\tvar that = this,\r\n\t\t\t\tcur = this.placeholder.offset(),\r\n\t\t\t\taxis = this.options.axis,\r\n\t\t\t\tanimation = {};\r\n\r\n\t\t\tif ( !axis || axis === \"x\" ) {\r\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);\r\n\t\t\t}\r\n\t\t\tif ( !axis || axis === \"y\" ) {\r\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);\r\n\t\t\t}\r\n\t\t\tthis.reverting = true;\r\n\t\t\t$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {\r\n\t\t\t\tthat._clear(event);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis._clear(event, noPropagation);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\tcancel: function() {\r\n\r\n\t\tif(this.dragging) {\r\n\r\n\t\t\tthis._mouseUp({ target: null });\r\n\r\n\t\t\tif(this.options.helper === \"original\") {\r\n\t\t\t\tthis.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\");\r\n\t\t\t} else {\r\n\t\t\t\tthis.currentItem.show();\r\n\t\t\t}\r\n\r\n\t\t\t//Post deactivating events to containers\r\n\t\t\tfor (var i = this.containers.length - 1; i >= 0; i--){\r\n\t\t\t\tthis.containers[i]._trigger(\"deactivate\", null, this._uiHash(this));\r\n\t\t\t\tif(this.containers[i].containerCache.over) {\r\n\t\t\t\t\tthis.containers[i]._trigger(\"out\", null, this._uiHash(this));\r\n\t\t\t\t\tthis.containers[i].containerCache.over = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif (this.placeholder) {\r\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!\r\n\t\t\tif(this.placeholder[0].parentNode) {\r\n\t\t\t\tthis.placeholder[0].parentNode.removeChild(this.placeholder[0]);\r\n\t\t\t}\r\n\t\t\tif(this.options.helper !== \"original\" && this.helper && this.helper[0].parentNode) {\r\n\t\t\t\tthis.helper.remove();\r\n\t\t\t}\r\n\r\n\t\t\t$.extend(this, {\r\n\t\t\t\thelper: null,\r\n\t\t\t\tdragging: false,\r\n\t\t\t\treverting: false,\r\n\t\t\t\t_noFinalSort: null\r\n\t\t\t});\r\n\r\n\t\t\tif(this.domPosition.prev) {\r\n\t\t\t\t$(this.domPosition.prev).after(this.currentItem);\r\n\t\t\t} else {\r\n\t\t\t\t$(this.domPosition.parent).prepend(this.currentItem);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tserialize: function(o) {\r\n\r\n\t\tvar items = this._getItemsAsjQuery(o && o.connected),\r\n\t\t\tstr = [];\r\n\t\to = o || {};\r\n\r\n\t\t$(items).each(function() {\r\n\t\t\tvar res = ($(o.item || this).attr(o.attribute || \"id\") || \"\").match(o.expression || (/(.+)[\\-=_](.+)/));\r\n\t\t\tif (res) {\r\n\t\t\t\tstr.push((o.key || res[1]+\"[]\")+\"=\"+(o.key && o.expression ? res[1] : res[2]));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(!str.length && o.key) {\r\n\t\t\tstr.push(o.key + \"=\");\r\n\t\t}\r\n\r\n\t\treturn str.join(\"&\");\r\n\r\n\t},\r\n\r\n\ttoArray: function(o) {\r\n\r\n\t\tvar items = this._getItemsAsjQuery(o && o.connected),\r\n\t\t\tret = [];\r\n\r\n\t\to = o || {};\r\n\r\n\t\titems.each(function() { ret.push($(o.item || this).attr(o.attribute || \"id\") || \"\"); });\r\n\t\treturn ret;\r\n\r\n\t},\r\n\r\n\t/* Be careful with the following core functions */\r\n\t_intersectsWith: function(item) {\r\n\r\n\t\tvar x1 = this.positionAbs.left,\r\n\t\t\tx2 = x1 + this.helperProportions.width,\r\n\t\t\ty1 = this.positionAbs.top,\r\n\t\t\ty2 = y1 + this.helperProportions.height,\r\n\t\t\tl = item.left,\r\n\t\t\tr = l + item.width,\r\n\t\t\tt = item.top,\r\n\t\t\tb = t + item.height,\r\n\t\t\tdyClick = this.offset.click.top,\r\n\t\t\tdxClick = this.offset.click.left,\r\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),\r\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),\r\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\r\n\r\n\t\tif ( this.options.tolerance === \"pointer\" ||\r\n\t\t\tthis.options.forcePointerForContainers ||\r\n\t\t\t(this.options.tolerance !== \"pointer\" && this.helperProportions[this.floating ? \"width\" : \"height\"] > item[this.floating ? \"width\" : \"height\"])\r\n\t\t) {\r\n\t\t\treturn isOverElement;\r\n\t\t} else {\r\n\r\n\t\t\treturn (l < x1 + (this.helperProportions.width / 2) && // Right Half\r\n\t\t\t\tx2 - (this.helperProportions.width / 2) < r && // Left Half\r\n\t\t\t\tt < y1 + (this.helperProportions.height / 2) && // Bottom Half\r\n\t\t\t\ty2 - (this.helperProportions.height / 2) < b ); // Top Half\r\n\r\n\t\t}\r\n\t},\r\n\r\n\t_intersectsWithPointer: function(item) {\r\n\r\n\t\tvar isOverElementHeight = (this.options.axis === \"x\") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),\r\n\t\t\tisOverElementWidth = (this.options.axis === \"y\") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),\r\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth,\r\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\r\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\r\n\r\n\t\tif (!isOverElement) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn this.floating ?\r\n\t\t\t( ((horizontalDirection && horizontalDirection === \"right\") || verticalDirection === \"down\") ? 2 : 1 )\r\n\t\t\t: ( verticalDirection && (verticalDirection === \"down\" ? 2 : 1) );\r\n\r\n\t},\r\n\r\n\t_intersectsWithSides: function(item) {\r\n\r\n\t\tvar isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),\r\n\t\t\tisOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),\r\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\r\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\r\n\r\n\t\tif (this.floating && horizontalDirection) {\r\n\t\t\treturn ((horizontalDirection === \"right\" && isOverRightHalf) || (horizontalDirection === \"left\" && !isOverRightHalf));\r\n\t\t} else {\r\n\t\t\treturn verticalDirection && ((verticalDirection === \"down\" && isOverBottomHalf) || (verticalDirection === \"up\" && !isOverBottomHalf));\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_getDragVerticalDirection: function() {\r\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\r\n\t\treturn delta !== 0 && (delta > 0 ? \"down\" : \"up\");\r\n\t},\r\n\r\n\t_getDragHorizontalDirection: function() {\r\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\r\n\t\treturn delta !== 0 && (delta > 0 ? \"right\" : \"left\");\r\n\t},\r\n\r\n\trefresh: function(event) {\r\n\t\tthis._refreshItems(event);\r\n\t\tthis.refreshPositions();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_connectWith: function() {\r\n\t\tvar options = this.options;\r\n\t\treturn options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;\r\n\t},\r\n\r\n\t_getItemsAsjQuery: function(connected) {\r\n\r\n\t\tvar i, j, cur, inst,\r\n\t\t\titems = [],\r\n\t\t\tqueries = [],\r\n\t\t\tconnectWith = this._connectWith();\r\n\r\n\t\tif(connectWith && connected) {\r\n\t\t\tfor (i = connectWith.length - 1; i >= 0; i--){\r\n\t\t\t\tcur = $(connectWith[i]);\r\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j--){\r\n\t\t\t\t\tinst = $.data(cur[j], this.widgetFullName);\r\n\t\t\t\t\tif(inst && inst !== this && !inst.options.disabled) {\r\n\t\t\t\t\t\tqueries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"), inst]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tqueries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"), this]);\r\n\r\n\t\tfunction addItems() {\r\n\t\t\titems.push( this );\r\n\t\t}\r\n\t\tfor (i = queries.length - 1; i >= 0; i--){\r\n\t\t\tqueries[i][0].each( addItems );\r\n\t\t}\r\n\r\n\t\treturn $(items);\r\n\r\n\t},\r\n\r\n\t_removeCurrentsFromItems: function() {\r\n\r\n\t\tvar list = this.currentItem.find(\":data(\" + this.widgetName + \"-item)\");\r\n\r\n\t\tthis.items = $.grep(this.items, function (item) {\r\n\t\t\tfor (var j=0; j < list.length; j++) {\r\n\t\t\t\tif(list[j] === item.item[0]) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t},\r\n\r\n\t_refreshItems: function(event) {\r\n\r\n\t\tthis.items = [];\r\n\t\tthis.containers = [this];\r\n\r\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\r\n\t\t\titems = this.items,\r\n\t\t\tqueries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],\r\n\t\t\tconnectWith = this._connectWith();\r\n\r\n\t\tif(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down\r\n\t\t\tfor (i = connectWith.length - 1; i >= 0; i--){\r\n\t\t\t\tcur = $(connectWith[i]);\r\n\t\t\t\tfor (j = cur.length - 1; j >= 0; j--){\r\n\t\t\t\t\tinst = $.data(cur[j], this.widgetFullName);\r\n\t\t\t\t\tif(inst && inst !== this && !inst.options.disabled) {\r\n\t\t\t\t\t\tqueries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);\r\n\t\t\t\t\t\tthis.containers.push(inst);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (i = queries.length - 1; i >= 0; i--) {\r\n\t\t\ttargetData = queries[i][1];\r\n\t\t\t_queries = queries[i][0];\r\n\r\n\t\t\tfor (j=0, queriesLength = _queries.length; j < queriesLength; j++) {\r\n\t\t\t\titem = $(_queries[j]);\r\n\r\n\t\t\t\titem.data(this.widgetName + \"-item\", targetData); // Data for target checking (mouse manager)\r\n\r\n\t\t\t\titems.push({\r\n\t\t\t\t\titem: item,\r\n\t\t\t\t\tinstance: targetData,\r\n\t\t\t\t\twidth: 0, height: 0,\r\n\t\t\t\t\tleft: 0, top: 0\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t},\r\n\r\n\trefreshPositions: function(fast) {\r\n\r\n\t\t//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change\r\n\t\tif(this.offsetParent && this.helper) {\r\n\t\t\tthis.offset.parent = this._getParentOffset();\r\n\t\t}\r\n\r\n\t\tvar i, item, t, p;\r\n\r\n\t\tfor (i = this.items.length - 1; i >= 0; i--){\r\n\t\t\titem = this.items[i];\r\n\r\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\r\n\t\t\tif(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;\r\n\r\n\t\t\tif (!fast) {\r\n\t\t\t\titem.width = t.outerWidth();\r\n\t\t\t\titem.height = t.outerHeight();\r\n\t\t\t}\r\n\r\n\t\t\tp = t.offset();\r\n\t\t\titem.left = p.left;\r\n\t\t\titem.top = p.top;\r\n\t\t}\r\n\r\n\t\tif(this.options.custom && this.options.custom.refreshContainers) {\r\n\t\t\tthis.options.custom.refreshContainers.call(this);\r\n\t\t} else {\r\n\t\t\tfor (i = this.containers.length - 1; i >= 0; i--){\r\n\t\t\t\tp = this.containers[i].element.offset();\r\n\t\t\t\tthis.containers[i].containerCache.left = p.left;\r\n\t\t\t\tthis.containers[i].containerCache.top = p.top;\r\n\t\t\t\tthis.containers[i].containerCache.width\t= this.containers[i].element.outerWidth();\r\n\t\t\t\tthis.containers[i].containerCache.height = this.containers[i].element.outerHeight();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_createPlaceholder: function(that) {\r\n\t\tthat = that || this;\r\n\t\tvar className,\r\n\t\t\to = that.options;\r\n\r\n\t\tif(!o.placeholder || o.placeholder.constructor === String) {\r\n\t\t\tclassName = o.placeholder;\r\n\t\t\to.placeholder = {\r\n\t\t\t\telement: function() {\r\n\r\n\t\t\t\t\tvar nodeName = that.currentItem[0].nodeName.toLowerCase(),\r\n\t\t\t\t\t\telement = $( \"<\" + nodeName + \">\", that.document[0] )\r\n\t\t\t\t\t\t\t.addClass(className || that.currentItem[0].className+\" ui-sortable-placeholder\")\r\n\t\t\t\t\t\t\t.removeClass(\"ui-sortable-helper\");\r\n\r\n\t\t\t\t\tif ( nodeName === \"tr\" ) {\r\n\t\t\t\t\t\tthat.currentItem.children().each(function() {\r\n\t\t\t\t\t\t\t$( \"<td> </td>\", that.document[0] )\r\n\t\t\t\t\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\r\n\t\t\t\t\t\t\t\t.appendTo( element );\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\r\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( !className ) {\r\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn element;\r\n\t\t\t\t},\r\n\t\t\t\tupdate: function(container, p) {\r\n\r\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that\r\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified\r\n\t\t\t\t\tif(className && !o.forcePlaceholderSize) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item\r\n\t\t\t\t\tif(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css(\"paddingTop\")||0, 10) - parseInt(that.currentItem.css(\"paddingBottom\")||0, 10)); }\r\n\t\t\t\t\tif(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css(\"paddingLeft\")||0, 10) - parseInt(that.currentItem.css(\"paddingRight\")||0, 10)); }\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t//Create the placeholder\r\n\t\tthat.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));\r\n\r\n\t\t//Append it after the actual current item\r\n\t\tthat.currentItem.after(that.placeholder);\r\n\r\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\r\n\t\to.placeholder.update(that, that.placeholder);\r\n\r\n\t},\r\n\r\n\t_contactContainers: function(event) {\r\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,\r\n\t\t\tinnermostContainer = null,\r\n\t\t\tinnermostIndex = null;\r\n\r\n\t\t// get innermost container that intersects with item\r\n\t\tfor (i = this.containers.length - 1; i >= 0; i--) {\r\n\r\n\t\t\t// never consider a container that's located within the item itself\r\n\t\t\tif($.contains(this.currentItem[0], this.containers[i].element[0])) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(this._intersectsWith(this.containers[i].containerCache)) {\r\n\r\n\t\t\t\t// if we've already found a container and it's more \"inner\" than this, then continue\r\n\t\t\t\tif(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinnermostContainer = this.containers[i];\r\n\t\t\t\tinnermostIndex = i;\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\r\n\t\t\t\tif(this.containers[i].containerCache.over) {\r\n\t\t\t\t\tthis.containers[i]._trigger(\"out\", event, this._uiHash(this));\r\n\t\t\t\t\tthis.containers[i].containerCache.over = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// if no intersecting containers found, return\r\n\t\tif(!innermostContainer) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// move the item into the container if it's not there already\r\n\t\tif(this.containers.length === 1) {\r\n\t\t\tif (!this.containers[innermostIndex].containerCache.over) {\r\n\t\t\t\tthis.containers[innermostIndex]._trigger(\"over\", event, this._uiHash(this));\r\n\t\t\t\tthis.containers[innermostIndex].containerCache.over = 1;\r\n\t\t\t}\r\n\t\t} else {\r\n\r\n\t\t\t//When entering a new container, we will find the item with the least distance and append our item near it\r\n\t\t\tdist = 10000;\r\n\t\t\titemWithLeastDistance = null;\r\n\t\t\tfloating = innermostContainer.floating || isFloating(this.currentItem);\r\n\t\t\tposProperty = floating ? \"left\" : \"top\";\r\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\r\n\t\t\tbase = this.positionAbs[posProperty] + this.offset.click[posProperty];\r\n\t\t\tfor (j = this.items.length - 1; j >= 0; j--) {\r\n\t\t\t\tif(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif(this.items[j].item[0] === this.currentItem[0]) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tcur = this.items[j].item.offset()[posProperty];\r\n\t\t\t\tnearBottom = false;\r\n\t\t\t\tif(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){\r\n\t\t\t\t\tnearBottom = true;\r\n\t\t\t\t\tcur += this.items[j][sizeProperty];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(Math.abs(cur - base) < dist) {\r\n\t\t\t\t\tdist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];\r\n\t\t\t\t\tthis.direction = nearBottom ? \"up\": \"down\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//Check if dropOnEmpty is enabled\r\n\t\t\tif(!itemWithLeastDistance && !this.options.dropOnEmpty) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.currentContainer === this.containers[innermostIndex]) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\titemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);\r\n\t\t\tthis._trigger(\"change\", event, this._uiHash());\r\n\t\t\tthis.containers[innermostIndex]._trigger(\"change\", event, this._uiHash(this));\r\n\t\t\tthis.currentContainer = this.containers[innermostIndex];\r\n\r\n\t\t\t//Update the placeholder\r\n\t\t\tthis.options.placeholder.update(this.currentContainer, this.placeholder);\r\n\r\n\t\t\tthis.containers[innermostIndex]._trigger(\"over\", event, this._uiHash(this));\r\n\t\t\tthis.containers[innermostIndex].containerCache.over = 1;\r\n\t\t}\r\n\r\n\r\n\t},\r\n\r\n\t_createHelper: function(event) {\r\n\r\n\t\tvar o = this.options,\r\n\t\t\thelper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem);\r\n\r\n\t\t//Add the helper to the DOM if that didn't happen already\r\n\t\tif(!helper.parents(\"body\").length) {\r\n\t\t\t$(o.appendTo !== \"parent\" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);\r\n\t\t}\r\n\r\n\t\tif(helper[0] === this.currentItem[0]) {\r\n\t\t\tthis._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css(\"position\"), top: this.currentItem.css(\"top\"), left: this.currentItem.css(\"left\") };\r\n\t\t}\r\n\r\n\t\tif(!helper[0].style.width || o.forceHelperSize) {\r\n\t\t\thelper.width(this.currentItem.width());\r\n\t\t}\r\n\t\tif(!helper[0].style.height || o.forceHelperSize) {\r\n\t\t\thelper.height(this.currentItem.height());\r\n\t\t}\r\n\r\n\t\treturn helper;\r\n\r\n\t},\r\n\r\n\t_adjustOffsetFromHelper: function(obj) {\r\n\t\tif (typeof obj === \"string\") {\r\n\t\t\tobj = obj.split(\" \");\r\n\t\t}\r\n\t\tif ($.isArray(obj)) {\r\n\t\t\tobj = {left: +obj[0], top: +obj[1] || 0};\r\n\t\t}\r\n\t\tif (\"left\" in obj) {\r\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\r\n\t\t}\r\n\t\tif (\"right\" in obj) {\r\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\r\n\t\t}\r\n\t\tif (\"top\" in obj) {\r\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\r\n\t\t}\r\n\t\tif (\"bottom\" in obj) {\r\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\r\n\t\t}\r\n\t},\r\n\r\n\t_getParentOffset: function() {\r\n\r\n\r\n\t\t//Get the offsetParent and cache its position\r\n\t\tthis.offsetParent = this.helper.offsetParent();\r\n\t\tvar po = this.offsetParent.offset();\r\n\r\n\t\t// This is a special case where we need to modify a offset calculated on start, since the following happened:\r\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent\r\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that\r\n\t\t// the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag\r\n\t\tif(this.cssPosition === \"absolute\" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {\r\n\t\t\tpo.left += this.scrollParent.scrollLeft();\r\n\t\t\tpo.top += this.scrollParent.scrollTop();\r\n\t\t}\r\n\r\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this information\r\n\t\t// with an ugly IE fix\r\n\t\tif( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === \"html\" && $.ui.ie)) {\r\n\t\t\tpo = { top: 0, left: 0 };\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop: po.top + (parseInt(this.offsetParent.css(\"borderTopWidth\"),10) || 0),\r\n\t\t\tleft: po.left + (parseInt(this.offsetParent.css(\"borderLeftWidth\"),10) || 0)\r\n\t\t};\r\n\r\n\t},\r\n\r\n\t_getRelativeOffset: function() {\r\n\r\n\t\tif(this.cssPosition === \"relative\") {\r\n\t\t\tvar p = this.currentItem.position();\r\n\t\t\treturn {\r\n\t\t\t\ttop: p.top - (parseInt(this.helper.css(\"top\"),10) || 0) + this.scrollParent.scrollTop(),\r\n\t\t\t\tleft: p.left - (parseInt(this.helper.css(\"left\"),10) || 0) + this.scrollParent.scrollLeft()\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\treturn { top: 0, left: 0 };\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_cacheMargins: function() {\r\n\t\tthis.margins = {\r\n\t\t\tleft: (parseInt(this.currentItem.css(\"marginLeft\"),10) || 0),\r\n\t\t\ttop: (parseInt(this.currentItem.css(\"marginTop\"),10) || 0)\r\n\t\t};\r\n\t},\r\n\r\n\t_cacheHelperProportions: function() {\r\n\t\tthis.helperProportions = {\r\n\t\t\twidth: this.helper.outerWidth(),\r\n\t\t\theight: this.helper.outerHeight()\r\n\t\t};\r\n\t},\r\n\r\n\t_setContainment: function() {\r\n\r\n\t\tvar ce, co, over,\r\n\t\t\to = this.options;\r\n\t\tif(o.containment === \"parent\") {\r\n\t\t\to.containment = this.helper[0].parentNode;\r\n\t\t}\r\n\t\tif(o.containment === \"document\" || o.containment === \"window\") {\r\n\t\t\tthis.containment = [\r\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\r\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\r\n\t\t\t\t$(o.containment === \"document\" ? document : window).width() - this.helperProportions.width - this.margins.left,\r\n\t\t\t\t($(o.containment === \"document\" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\tif(!(/^(document|window|parent)$/).test(o.containment)) {\r\n\t\t\tce = $(o.containment)[0];\r\n\t\t\tco = $(o.containment).offset();\r\n\t\t\tover = ($(ce).css(\"overflow\") !== \"hidden\");\r\n\r\n\t\t\tthis.containment = [\r\n\t\t\t\tco.left + (parseInt($(ce).css(\"borderLeftWidth\"),10) || 0) + (parseInt($(ce).css(\"paddingLeft\"),10) || 0) - this.margins.left,\r\n\t\t\t\tco.top + (parseInt($(ce).css(\"borderTopWidth\"),10) || 0) + (parseInt($(ce).css(\"paddingTop\"),10) || 0) - this.margins.top,\r\n\t\t\t\tco.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css(\"borderLeftWidth\"),10) || 0) - (parseInt($(ce).css(\"paddingRight\"),10) || 0) - this.helperProportions.width - this.margins.left,\r\n\t\t\t\tco.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css(\"borderTopWidth\"),10) || 0) - (parseInt($(ce).css(\"paddingBottom\"),10) || 0) - this.helperProportions.height - this.margins.top\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_convertPositionTo: function(d, pos) {\r\n\r\n\t\tif(!pos) {\r\n\t\t\tpos = this.position;\r\n\t\t}\r\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\r\n\t\t\tscroll = this.cssPosition === \"absolute\" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,\r\n\t\t\tscrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);\r\n\r\n\t\treturn {\r\n\t\t\ttop: (\r\n\t\t\t\tpos.top\t+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\r\n\t\t\t\tthis.offset.relative.top * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\r\n\t\t\t\tthis.offset.parent.top * mod -\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\r\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)\r\n\t\t\t),\r\n\t\t\tleft: (\r\n\t\t\t\tpos.left +\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\r\n\t\t\t\tthis.offset.relative.left * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\r\n\t\t\t\tthis.offset.parent.left * mod\t-\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\r\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)\r\n\t\t\t)\r\n\t\t};\r\n\r\n\t},\r\n\r\n\t_generatePosition: function(event) {\r\n\r\n\t\tvar top, left,\r\n\t\t\to = this.options,\r\n\t\t\tpageX = event.pageX,\r\n\t\t\tpageY = event.pageY,\r\n\t\t\tscroll = this.cssPosition === \"absolute\" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);\r\n\r\n\t\t// This is another very weird special case that only happens for relative elements:\r\n\t\t// 1. If the css position is relative\r\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\r\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\r\n\t\tif(this.cssPosition === \"relative\" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {\r\n\t\t\tthis.offset.relative = this._getRelativeOffset();\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t * - Position constraining -\r\n\t\t * Constrain the position to a mix of grid, containment.\r\n\t\t */\r\n\r\n\t\tif(this.originalPosition) { //If we are not dragging yet, we won't check for options\r\n\r\n\t\t\tif(this.containment) {\r\n\t\t\t\tif(event.pageX - this.offset.click.left < this.containment[0]) {\r\n\t\t\t\t\tpageX = this.containment[0] + this.offset.click.left;\r\n\t\t\t\t}\r\n\t\t\t\tif(event.pageY - this.offset.click.top < this.containment[1]) {\r\n\t\t\t\t\tpageY = this.containment[1] + this.offset.click.top;\r\n\t\t\t\t}\r\n\t\t\t\tif(event.pageX - this.offset.click.left > this.containment[2]) {\r\n\t\t\t\t\tpageX = this.containment[2] + this.offset.click.left;\r\n\t\t\t\t}\r\n\t\t\t\tif(event.pageY - this.offset.click.top > this.containment[3]) {\r\n\t\t\t\t\tpageY = this.containment[3] + this.offset.click.top;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(o.grid) {\r\n\t\t\t\ttop = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];\r\n\t\t\t\tpageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;\r\n\r\n\t\t\t\tleft = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];\r\n\t\t\t\tpageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop: (\r\n\t\t\t\tpageY -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\r\n\t\t\t\tthis.offset.click.top -\t\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\r\n\t\t\t\tthis.offset.relative.top\t-\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\r\n\t\t\t\tthis.offset.parent.top +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\r\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))\r\n\t\t\t),\r\n\t\t\tleft: (\r\n\t\t\t\tpageX -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\r\n\t\t\t\tthis.offset.click.left -\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\r\n\t\t\t\tthis.offset.relative.left\t-\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\r\n\t\t\t\tthis.offset.parent.left +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\r\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))\r\n\t\t\t)\r\n\t\t};\r\n\r\n\t},\r\n\r\n\t_rearrange: function(event, i, a, hardRefresh) {\r\n\r\n\t\ta ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === \"down\" ? i.item[0] : i.item[0].nextSibling));\r\n\r\n\t\t//Various things done here to improve the performance:\r\n\t\t// 1. we create a setTimeout, that calls refreshPositions\r\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\r\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same\r\n\t\t// 4. this lets only the last addition to the timeout stack through\r\n\t\tthis.counter = this.counter ? ++this.counter : 1;\r\n\t\tvar counter = this.counter;\r\n\r\n\t\tthis._delay(function() {\r\n\t\t\tif(counter === this.counter) {\r\n\t\t\t\tthis.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t},\r\n\r\n\t_clear: function(event, noPropagation) {\r\n\r\n\t\tthis.reverting = false;\r\n\t\t// We delay all events that have to be triggered to after the point where the placeholder has been removed and\r\n\t\t// everything else normalized again\r\n\t\tvar i,\r\n\t\t\tdelayedTriggers = [];\r\n\r\n\t\t// We first have to update the dom position of the actual currentItem\r\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)\r\n\t\tif(!this._noFinalSort && this.currentItem.parent().length) {\r\n\t\t\tthis.placeholder.before(this.currentItem);\r\n\t\t}\r\n\t\tthis._noFinalSort = null;\r\n\r\n\t\tif(this.helper[0] === this.currentItem[0]) {\r\n\t\t\tfor(i in this._storedCSS) {\r\n\t\t\t\tif(this._storedCSS[i] === \"auto\" || this._storedCSS[i] === \"static\") {\r\n\t\t\t\t\tthis._storedCSS[i] = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\");\r\n\t\t} else {\r\n\t\t\tthis.currentItem.show();\r\n\t\t}\r\n\r\n\t\tif(this.fromOutside && !noPropagation) {\r\n\t\t\tdelayedTriggers.push(function(event) { this._trigger(\"receive\", event, this._uiHash(this.fromOutside)); });\r\n\t\t}\r\n\t\tif((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(\".ui-sortable-helper\")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {\r\n\t\t\tdelayedTriggers.push(function(event) { this._trigger(\"update\", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed\r\n\t\t}\r\n\r\n\t\t// Check if the items Container has Changed and trigger appropriate\r\n\t\t// events.\r\n\t\tif (this !== this.currentContainer) {\r\n\t\t\tif(!noPropagation) {\r\n\t\t\t\tdelayedTriggers.push(function(event) { this._trigger(\"remove\", event, this._uiHash()); });\r\n\t\t\t\tdelayedTriggers.push((function(c) { return function(event) { c._trigger(\"receive\", event, this._uiHash(this)); }; }).call(this, this.currentContainer));\r\n\t\t\t\tdelayedTriggers.push((function(c) { return function(event) { c._trigger(\"update\", event, this._uiHash(this)); }; }).call(this, this.currentContainer));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t//Post events to containers\r\n\t\tfunction delayEvent( type, instance, container ) {\r\n\t\t\treturn function( event ) {\r\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\r\n\t\t\t};\r\n\t\t}\r\n\t\tfor (i = this.containers.length - 1; i >= 0; i--){\r\n\t\t\tif (!noPropagation) {\r\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\r\n\t\t\t}\r\n\t\t\tif(this.containers[i].containerCache.over) {\r\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\r\n\t\t\t\tthis.containers[i].containerCache.over = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//Do what was originally in plugins\r\n\t\tif ( this.storedCursor ) {\r\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\r\n\t\t\tthis.storedStylesheet.remove();\r\n\t\t}\r\n\t\tif(this._storedOpacity) {\r\n\t\t\tthis.helper.css(\"opacity\", this._storedOpacity);\r\n\t\t}\r\n\t\tif(this._storedZIndex) {\r\n\t\t\tthis.helper.css(\"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex);\r\n\t\t}\r\n\r\n\t\tthis.dragging = false;\r\n\t\tif(this.cancelHelperRemoval) {\r\n\t\t\tif(!noPropagation) {\r\n\t\t\t\tthis._trigger(\"beforeStop\", event, this._uiHash());\r\n\t\t\t\tfor (i=0; i < delayedTriggers.length; i++) {\r\n\t\t\t\t\tdelayedTriggers[i].call(this, event);\r\n\t\t\t\t} //Trigger all delayed events\r\n\t\t\t\tthis._trigger(\"stop\", event, this._uiHash());\r\n\t\t\t}\r\n\r\n\t\t\tthis.fromOutside = false;\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif(!noPropagation) {\r\n\t\t\tthis._trigger(\"beforeStop\", event, this._uiHash());\r\n\t\t}\r\n\r\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!\r\n\t\tthis.placeholder[0].parentNode.removeChild(this.placeholder[0]);\r\n\r\n\t\tif(this.helper[0] !== this.currentItem[0]) {\r\n\t\t\tthis.helper.remove();\r\n\t\t}\r\n\t\tthis.helper = null;\r\n\r\n\t\tif(!noPropagation) {\r\n\t\t\tfor (i=0; i < delayedTriggers.length; i++) {\r\n\t\t\t\tdelayedTriggers[i].call(this, event);\r\n\t\t\t} //Trigger all delayed events\r\n\t\t\tthis._trigger(\"stop\", event, this._uiHash());\r\n\t\t}\r\n\r\n\t\tthis.fromOutside = false;\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\t_trigger: function() {\r\n\t\tif ($.Widget.prototype._trigger.apply(this, arguments) === false) {\r\n\t\t\tthis.cancel();\r\n\t\t}\r\n\t},\r\n\r\n\t_uiHash: function(_inst) {\r\n\t\tvar inst = _inst || this;\r\n\t\treturn {\r\n\t\t\thelper: inst.helper,\r\n\t\t\tplaceholder: inst.placeholder || $([]),\r\n\t\t\tposition: inst.position,\r\n\t\t\toriginalPosition: inst.originalPosition,\r\n\t\t\toffset: inst.positionAbs,\r\n\t\t\titem: inst.currentItem,\r\n\t\t\tsender: _inst ? _inst.element : null\r\n\t\t};\r\n\t}\r\n\r\n});\r\n\r\n})(jQuery);\r\n(function( $, undefined ) {\r\n\r\n$.widget( \"ui.autocomplete\", {\r\n\tversion: \"1.10.4\",\r\n\tdefaultElement: \"<input>\",\r\n\toptions: {\r\n\t\tappendTo: null,\r\n\t\tautoFocus: false,\r\n\t\tdelay: 300,\r\n\t\tminLength: 1,\r\n\t\tposition: {\r\n\t\t\tmy: \"left top\",\r\n\t\t\tat: \"left bottom\",\r\n\t\t\tcollision: \"none\"\r\n\t\t},\r\n\t\tsource: null,\r\n\r\n\t\t// callbacks\r\n\t\tchange: null,\r\n\t\tclose: null,\r\n\t\tfocus: null,\r\n\t\topen: null,\r\n\t\tresponse: null,\r\n\t\tsearch: null,\r\n\t\tselect: null\r\n\t},\r\n\r\n\trequestIndex: 0,\r\n\tpending: 0,\r\n\r\n\t_create: function() {\r\n\t\t// Some browsers only repeat keydown events, not keypress events,\r\n\t\t// so we use the suppressKeyPress flag to determine if we've already\r\n\t\t// handled the keydown event. #7269\r\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\r\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\r\n\t\t// events when we know the keydown event was used to modify the\r\n\t\t// search term. #7799\r\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\r\n\t\t\tnodeName = this.element[0].nodeName.toLowerCase(),\r\n\t\t\tisTextarea = nodeName === \"textarea\",\r\n\t\t\tisInput = nodeName === \"input\";\r\n\r\n\t\tthis.isMultiLine =\r\n\t\t\t// Textareas are always multi-line\r\n\t\t\tisTextarea ? true :\r\n\t\t\t// Inputs are always single-line, even if inside a contentEditable element\r\n\t\t\t// IE also treats inputs as contentEditable\r\n\t\t\tisInput ? false :\r\n\t\t\t// All other element types are determined by whether or not they're contentEditable\r\n\t\t\tthis.element.prop( \"isContentEditable\" );\r\n\r\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\r\n\t\tthis.isNewMenu = true;\r\n\r\n\t\tthis.element\r\n\t\t\t.addClass( \"ui-autocomplete-input\" )\r\n\t\t\t.attr( \"autocomplete\", \"off\" );\r\n\r\n\t\tthis._on( this.element, {\r\n\t\t\tkeydown: function( event ) {\r\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tsuppressInput = true;\r\n\t\t\t\t\tsuppressKeyPressRepeat = true;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsuppressKeyPress = false;\r\n\t\t\t\tsuppressInput = false;\r\n\t\t\t\tsuppressKeyPressRepeat = false;\r\n\t\t\t\tvar keyCode = $.ui.keyCode;\r\n\t\t\t\tswitch( event.keyCode ) {\r\n\t\t\t\tcase keyCode.PAGE_UP:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._move( \"previousPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.PAGE_DOWN:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._move( \"nextPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.UP:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.DOWN:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._keyEvent( \"next\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.ENTER:\r\n\t\t\t\tcase keyCode.NUMPAD_ENTER:\r\n\t\t\t\t\t// when menu is open and has focus\r\n\t\t\t\t\tif ( this.menu.active ) {\r\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\r\n\t\t\t\t\t\t// which causes forms to submit\r\n\t\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tthis.menu.select( event );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.TAB:\r\n\t\t\t\t\tif ( this.menu.active ) {\r\n\t\t\t\t\t\tthis.menu.select( event );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.ESCAPE:\r\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\r\n\t\t\t\t\t\tthis._value( this.term );\r\n\t\t\t\t\t\tthis.close( event );\r\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\r\n\t\t\t\t\t\t// Single press can mean undo or clear\r\n\t\t\t\t\t\t// Double press in IE means clear the whole form\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tsuppressKeyPressRepeat = true;\r\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\r\n\t\t\t\t\tthis._searchTimeout( event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tkeypress: function( event ) {\r\n\t\t\t\tif ( suppressKeyPress ) {\r\n\t\t\t\t\tsuppressKeyPress = false;\r\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif ( suppressKeyPressRepeat ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// replicate some key handlers to allow them to repeat in Firefox and Opera\r\n\t\t\t\tvar keyCode = $.ui.keyCode;\r\n\t\t\t\tswitch( event.keyCode ) {\r\n\t\t\t\tcase keyCode.PAGE_UP:\r\n\t\t\t\t\tthis._move( \"previousPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.PAGE_DOWN:\r\n\t\t\t\t\tthis._move( \"nextPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.UP:\r\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.DOWN:\r\n\t\t\t\t\tthis._keyEvent( \"next\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tinput: function( event ) {\r\n\t\t\t\tif ( suppressInput ) {\r\n\t\t\t\t\tsuppressInput = false;\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis._searchTimeout( event );\r\n\t\t\t},\r\n\t\t\tfocus: function() {\r\n\t\t\t\tthis.selectedItem = null;\r\n\t\t\t\tthis.previous = this._value();\r\n\t\t\t},\r\n\t\t\tblur: function( event ) {\r\n\t\t\t\tif ( this.cancelBlur ) {\r\n\t\t\t\t\tdelete this.cancelBlur;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclearTimeout( this.searching );\r\n\t\t\t\tthis.close( event );\r\n\t\t\t\tthis._change( event );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._initSource();\r\n\t\tthis.menu = $( \"<ul>\" )\r\n\t\t\t.addClass( \"ui-autocomplete ui-front\" )\r\n\t\t\t.appendTo( this._appendTo() )\r\n\t\t\t.menu({\r\n\t\t\t\t// disable ARIA support, the live region takes care of that\r\n\t\t\t\trole: null\r\n\t\t\t})\r\n\t\t\t.hide()\r\n\t\t\t.data( \"ui-menu\" );\r\n\r\n\t\tthis._on( this.menu.element, {\r\n\t\t\tmousedown: function( event ) {\r\n\t\t\t\t// prevent moving focus out of the text field\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\r\n\t\t\t\t// so we set a flag to know when we should ignore the blur event\r\n\t\t\t\tthis.cancelBlur = true;\r\n\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\tdelete this.cancelBlur;\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// clicking on the scrollbar causes focus to shift to the body\r\n\t\t\t\t// but we can't detect a mouseup or a click immediately afterward\r\n\t\t\t\t// so we have to track the next mousedown and close the menu if\r\n\t\t\t\t// the user clicks somewhere outside of the autocomplete\r\n\t\t\t\tvar menuElement = this.menu.element[ 0 ];\r\n\t\t\t\tif ( !$( event.target ).closest( \".ui-menu-item\" ).length ) {\r\n\t\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\t\tvar that = this;\r\n\t\t\t\t\t\tthis.document.one( \"mousedown\", function( event ) {\r\n\t\t\t\t\t\t\tif ( event.target !== that.element[ 0 ] &&\r\n\t\t\t\t\t\t\t\t\tevent.target !== menuElement &&\r\n\t\t\t\t\t\t\t\t\t!$.contains( menuElement, event.target ) ) {\r\n\t\t\t\t\t\t\t\tthat.close();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tmenufocus: function( event, ui ) {\r\n\t\t\t\t// support: Firefox\r\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\r\n\t\t\t\tif ( this.isNewMenu ) {\r\n\t\t\t\t\tthis.isNewMenu = false;\r\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\r\n\t\t\t\t\t\tthis.menu.blur();\r\n\r\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\r\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" );\r\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\r\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\r\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\r\n\t\t\t\t\t\tthis._value( item.value );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Normally the input is populated with the item's value as the\r\n\t\t\t\t\t// menu is navigated, causing screen readers to notice a change and\r\n\t\t\t\t\t// announce the item. Since the focus event was canceled, this doesn't\r\n\t\t\t\t\t// happen, so we update the live region so that screen readers can\r\n\t\t\t\t\t// still notice the change and announce it.\r\n\t\t\t\t\tthis.liveRegion.text( item.value );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tmenuselect: function( event, ui ) {\r\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\r\n\t\t\t\t\tprevious = this.previous;\r\n\r\n\t\t\t\t// only trigger when focus was lost (click on menu)\r\n\t\t\t\tif ( this.element[0] !== this.document[0].activeElement ) {\r\n\t\t\t\t\tthis.element.focus();\r\n\t\t\t\t\tthis.previous = previous;\r\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\r\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\r\n\t\t\t\t\t// term synchronously and asynchronously :-(\r\n\t\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\t\tthis.previous = previous;\r\n\t\t\t\t\t\tthis.selectedItem = item;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\r\n\t\t\t\t\tthis._value( item.value );\r\n\t\t\t\t}\r\n\t\t\t\t// reset the term after the select event\r\n\t\t\t\t// this allows custom select handling to work properly\r\n\t\t\t\tthis.term = this._value();\r\n\r\n\t\t\t\tthis.close( event );\r\n\t\t\t\tthis.selectedItem = item;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.liveRegion = $( \"<span>\", {\r\n\t\t\t\trole: \"status\",\r\n\t\t\t\t\"aria-live\": \"polite\"\r\n\t\t\t})\r\n\t\t\t.addClass( \"ui-helper-hidden-accessible\" )\r\n\t\t\t.insertBefore( this.element );\r\n\r\n\t\t// turning off autocomplete prevents the browser from remembering the\r\n\t\t// value when navigating through history, so we re-enable autocomplete\r\n\t\t// if the page is unloaded before the widget is destroyed. #7790\r\n\t\tthis._on( this.window, {\r\n\t\t\tbeforeunload: function() {\r\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tclearTimeout( this.searching );\r\n\t\tthis.element\r\n\t\t\t.removeClass( \"ui-autocomplete-input\" )\r\n\t\t\t.removeAttr( \"autocomplete\" );\r\n\t\tthis.menu.element.remove();\r\n\t\tthis.liveRegion.remove();\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tthis._super( key, value );\r\n\t\tif ( key === \"source\" ) {\r\n\t\t\tthis._initSource();\r\n\t\t}\r\n\t\tif ( key === \"appendTo\" ) {\r\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\r\n\t\t}\r\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\r\n\t\t\tthis.xhr.abort();\r\n\t\t}\r\n\t},\r\n\r\n\t_appendTo: function() {\r\n\t\tvar element = this.options.appendTo;\r\n\r\n\t\tif ( element ) {\r\n\t\t\telement = element.jquery || element.nodeType ?\r\n\t\t\t\t$( element ) :\r\n\t\t\t\tthis.document.find( element ).eq( 0 );\r\n\t\t}\r\n\r\n\t\tif ( !element ) {\r\n\t\t\telement = this.element.closest( \".ui-front\" );\r\n\t\t}\r\n\r\n\t\tif ( !element.length ) {\r\n\t\t\telement = this.document[0].body;\r\n\t\t}\r\n\r\n\t\treturn element;\r\n\t},\r\n\r\n\t_initSource: function() {\r\n\t\tvar array, url,\r\n\t\t\tthat = this;\r\n\t\tif ( $.isArray(this.options.source) ) {\r\n\t\t\tarray = this.options.source;\r\n\t\t\tthis.source = function( request, response ) {\r\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\r\n\t\t\t};\r\n\t\t} else if ( typeof this.options.source === \"string\" ) {\r\n\t\t\turl = this.options.source;\r\n\t\t\tthis.source = function( request, response ) {\r\n\t\t\t\tif ( that.xhr ) {\r\n\t\t\t\t\tthat.xhr.abort();\r\n\t\t\t\t}\r\n\t\t\t\tthat.xhr = $.ajax({\r\n\t\t\t\t\turl: url,\r\n\t\t\t\t\tdata: request,\r\n\t\t\t\t\tdataType: \"json\",\r\n\t\t\t\t\tsuccess: function( data ) {\r\n\t\t\t\t\t\tresponse( data );\r\n\t\t\t\t\t},\r\n\t\t\t\t\terror: function() {\r\n\t\t\t\t\t\tresponse( [] );\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tthis.source = this.options.source;\r\n\t\t}\r\n\t},\r\n\r\n\t_searchTimeout: function( event ) {\r\n\t\tclearTimeout( this.searching );\r\n\t\tthis.searching = this._delay(function() {\r\n\t\t\t// only search if the value has changed\r\n\t\t\tif ( this.term !== this._value() ) {\r\n\t\t\t\tthis.selectedItem = null;\r\n\t\t\t\tthis.search( null, event );\r\n\t\t\t}\r\n\t\t}, this.options.delay );\r\n\t},\r\n\r\n\tsearch: function( value, event ) {\r\n\t\tvalue = value != null ? value : this._value();\r\n\r\n\t\t// always save the actual value, not the one passed as an argument\r\n\t\tthis.term = this._value();\r\n\r\n\t\tif ( value.length < this.options.minLength ) {\r\n\t\t\treturn this.close( event );\r\n\t\t}\r\n\r\n\t\tif ( this._trigger( \"search\", event ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn this._search( value );\r\n\t},\r\n\r\n\t_search: function( value ) {\r\n\t\tthis.pending++;\r\n\t\tthis.element.addClass( \"ui-autocomplete-loading\" );\r\n\t\tthis.cancelSearch = false;\r\n\r\n\t\tthis.source( { term: value }, this._response() );\r\n\t},\r\n\r\n\t_response: function() {\r\n\t\tvar index = ++this.requestIndex;\r\n\r\n\t\treturn $.proxy(function( content ) {\r\n\t\t\tif ( index === this.requestIndex ) {\r\n\t\t\t\tthis.__response( content );\r\n\t\t\t}\r\n\r\n\t\t\tthis.pending--;\r\n\t\t\tif ( !this.pending ) {\r\n\t\t\t\tthis.element.removeClass( \"ui-autocomplete-loading\" );\r\n\t\t\t}\r\n\t\t}, this );\r\n\t},\r\n\r\n\t__response: function( content ) {\r\n\t\tif ( content ) {\r\n\t\t\tcontent = this._normalize( content );\r\n\t\t}\r\n\t\tthis._trigger( \"response\", null, { content: content } );\r\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\r\n\t\t\tthis._suggest( content );\r\n\t\t\tthis._trigger( \"open\" );\r\n\t\t} else {\r\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\r\n\t\t\tthis._close();\r\n\t\t}\r\n\t},\r\n\r\n\tclose: function( event ) {\r\n\t\tthis.cancelSearch = true;\r\n\t\tthis._close( event );\r\n\t},\r\n\r\n\t_close: function( event ) {\r\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\r\n\t\t\tthis.menu.element.hide();\r\n\t\t\tthis.menu.blur();\r\n\t\t\tthis.isNewMenu = true;\r\n\t\t\tthis._trigger( \"close\", event );\r\n\t\t}\r\n\t},\r\n\r\n\t_change: function( event ) {\r\n\t\tif ( this.previous !== this._value() ) {\r\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\r\n\t\t}\r\n\t},\r\n\r\n\t_normalize: function( items ) {\r\n\t\t// assume all items have the right format when the first item is complete\r\n\t\tif ( items.length && items[0].label && items[0].value ) {\r\n\t\t\treturn items;\r\n\t\t}\r\n\t\treturn $.map( items, function( item ) {\r\n\t\t\tif ( typeof item === \"string\" ) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tlabel: item,\r\n\t\t\t\t\tvalue: item\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\treturn $.extend({\r\n\t\t\t\tlabel: item.label || item.value,\r\n\t\t\t\tvalue: item.value || item.label\r\n\t\t\t}, item );\r\n\t\t});\r\n\t},\r\n\r\n\t_suggest: function( items ) {\r\n\t\tvar ul = this.menu.element.empty();\r\n\t\tthis._renderMenu( ul, items );\r\n\t\tthis.isNewMenu = true;\r\n\t\tthis.menu.refresh();\r\n\r\n\t\t// size and position menu\r\n\t\tul.show();\r\n\t\tthis._resizeMenu();\r\n\t\tul.position( $.extend({\r\n\t\t\tof: this.element\r\n\t\t}, this.options.position ));\r\n\r\n\t\tif ( this.options.autoFocus ) {\r\n\t\t\tthis.menu.next();\r\n\t\t}\r\n\t},\r\n\r\n\t_resizeMenu: function() {\r\n\t\tvar ul = this.menu.element;\r\n\t\tul.outerWidth( Math.max(\r\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\r\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\r\n\t\t\tul.width( \"\" ).outerWidth() + 1,\r\n\t\t\tthis.element.outerWidth()\r\n\t\t) );\r\n\t},\r\n\r\n\t_renderMenu: function( ul, items ) {\r\n\t\tvar that = this;\r\n\t\t$.each( items, function( index, item ) {\r\n\t\t\tthat._renderItemData( ul, item );\r\n\t\t});\r\n\t},\r\n\r\n\t_renderItemData: function( ul, item ) {\r\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\r\n\t},\r\n\r\n\t_renderItem: function( ul, item ) {\r\n\t\treturn $( \"<li>\" )\r\n\t\t\t.append( $( \"<a>\" ).text( item.label ) )\r\n\t\t\t.appendTo( ul );\r\n\t},\r\n\r\n\t_move: function( direction, event ) {\r\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\r\n\t\t\tthis.search( null, event );\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\r\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\r\n\t\t\tthis._value( this.term );\r\n\t\t\tthis.menu.blur();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.menu[ direction ]( event );\r\n\t},\r\n\r\n\twidget: function() {\r\n\t\treturn this.menu.element;\r\n\t},\r\n\r\n\t_value: function() {\r\n\t\treturn this.valueMethod.apply( this.element, arguments );\r\n\t},\r\n\r\n\t_keyEvent: function( keyEvent, event ) {\r\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\r\n\t\t\tthis._move( keyEvent, event );\r\n\r\n\t\t\t// prevents moving cursor to beginning/end of the text field in some browsers\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t}\r\n});\r\n\r\n$.extend( $.ui.autocomplete, {\r\n\tescapeRegex: function( value ) {\r\n\t\treturn value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\r\n\t},\r\n\tfilter: function(array, term) {\r\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), \"i\" );\r\n\t\treturn $.grep( array, function(value) {\r\n\t\t\treturn matcher.test( value.label || value.value || value );\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\n// live region extension, adding a `messages` option\r\n// NOTE: This is an experimental API. We are still investigating\r\n// a full solution for string manipulation and internationalization.\r\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\r\n\toptions: {\r\n\t\tmessages: {\r\n\t\t\tnoResults: \"No search results.\",\r\n\t\t\tresults: function( amount ) {\r\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\r\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t__response: function( content ) {\r\n\t\tvar message;\r\n\t\tthis._superApply( arguments );\r\n\t\tif ( this.options.disabled || this.cancelSearch ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( content && content.length ) {\r\n\t\t\tmessage = this.options.messages.results( content.length );\r\n\t\t} else {\r\n\t\t\tmessage = this.options.messages.noResults;\r\n\t\t}\r\n\t\tthis.liveRegion.text( message );\r\n\t}\r\n});\r\n\r\n}( jQuery ));\r\n(function( $, undefined ) {\r\n\r\nvar lastActive,\r\n\tbaseClasses = \"ui-button ui-widget ui-state-default ui-corner-all\",\r\n\ttypeClasses = \"ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only\",\r\n\tformResetHandler = function() {\r\n\t\tvar form = $( this );\r\n\t\tsetTimeout(function() {\r\n\t\t\tform.find( \":ui-button\" ).button( \"refresh\" );\r\n\t\t}, 1 );\r\n\t},\r\n\tradioGroup = function( radio ) {\r\n\t\tvar name = radio.name,\r\n\t\t\tform = radio.form,\r\n\t\t\tradios = $( [] );\r\n\t\tif ( name ) {\r\n\t\t\tname = name.replace( /'/g, \"\\\\'\" );\r\n\t\t\tif ( form ) {\r\n\t\t\t\tradios = $( form ).find( \"[name='\" + name + \"']\" );\r\n\t\t\t} else {\r\n\t\t\t\tradios = $( \"[name='\" + name + \"']\", radio.ownerDocument )\r\n\t\t\t\t\t.filter(function() {\r\n\t\t\t\t\t\treturn !this.form;\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn radios;\r\n\t};\r\n\r\n$.widget( \"ui.button\", {\r\n\tversion: \"1.10.4\",\r\n\tdefaultElement: \"<button>\",\r\n\toptions: {\r\n\t\tdisabled: null,\r\n\t\ttext: true,\r\n\t\tlabel: null,\r\n\t\ticons: {\r\n\t\t\tprimary: null,\r\n\t\t\tsecondary: null\r\n\t\t}\r\n\t},\r\n\t_create: function() {\r\n\t\tthis.element.closest( \"form\" )\r\n\t\t\t.unbind( \"reset\" + this.eventNamespace )\r\n\t\t\t.bind( \"reset\" + this.eventNamespace, formResetHandler );\r\n\r\n\t\tif ( typeof this.options.disabled !== \"boolean\" ) {\r\n\t\t\tthis.options.disabled = !!this.element.prop( \"disabled\" );\r\n\t\t} else {\r\n\t\t\tthis.element.prop( \"disabled\", this.options.disabled );\r\n\t\t}\r\n\r\n\t\tthis._determineButtonType();\r\n\t\tthis.hasTitle = !!this.buttonElement.attr( \"title\" );\r\n\r\n\t\tvar that = this,\r\n\t\t\toptions = this.options,\r\n\t\t\ttoggleButton = this.type === \"checkbox\" || this.type === \"radio\",\r\n\t\t\tactiveClass = !toggleButton ? \"ui-state-active\" : \"\";\r\n\r\n\t\tif ( options.label === null ) {\r\n\t\t\toptions.label = (this.type === \"input\" ? this.buttonElement.val() : this.buttonElement.html());\r\n\t\t}\r\n\r\n\t\tthis._hoverable( this.buttonElement );\r\n\r\n\t\tthis.buttonElement\r\n\t\t\t.addClass( baseClasses )\r\n\t\t\t.attr( \"role\", \"button\" )\r\n\t\t\t.bind( \"mouseenter\" + this.eventNamespace, function() {\r\n\t\t\t\tif ( options.disabled ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif ( this === lastActive ) {\r\n\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.bind( \"mouseleave\" + this.eventNamespace, function() {\r\n\t\t\t\tif ( options.disabled ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t$( this ).removeClass( activeClass );\r\n\t\t\t})\r\n\t\t\t.bind( \"click\" + this.eventNamespace, function( event ) {\r\n\t\t\t\tif ( options.disabled ) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tevent.stopImmediatePropagation();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t// Can't use _focusable() because the element that receives focus\r\n\t\t// and the element that gets the ui-state-focus class are different\r\n\t\tthis._on({\r\n\t\t\tfocus: function() {\r\n\t\t\t\tthis.buttonElement.addClass( \"ui-state-focus\" );\r\n\t\t\t},\r\n\t\t\tblur: function() {\r\n\t\t\t\tthis.buttonElement.removeClass( \"ui-state-focus\" );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif ( toggleButton ) {\r\n\t\t\tthis.element.bind( \"change\" + this.eventNamespace, function() {\r\n\t\t\t\tthat.refresh();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ( this.type === \"checkbox\" ) {\r\n\t\t\tthis.buttonElement.bind( \"click\" + this.eventNamespace, function() {\r\n\t\t\t\tif ( options.disabled ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else if ( this.type === \"radio\" ) {\r\n\t\t\tthis.buttonElement.bind( \"click\" + this.eventNamespace, function() {\r\n\t\t\t\tif ( options.disabled ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\t$( this ).addClass( \"ui-state-active\" );\r\n\t\t\t\tthat.buttonElement.attr( \"aria-pressed\", \"true\" );\r\n\r\n\t\t\t\tvar radio = that.element[ 0 ];\r\n\t\t\t\tradioGroup( radio )\r\n\t\t\t\t\t.not( radio )\r\n\t\t\t\t\t.map(function() {\r\n\t\t\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.removeClass( \"ui-state-active\" )\r\n\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.buttonElement\r\n\t\t\t\t.bind( \"mousedown\" + this.eventNamespace, function() {\r\n\t\t\t\t\tif ( options.disabled ) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\r\n\t\t\t\t\tlastActive = this;\r\n\t\t\t\t\tthat.document.one( \"mouseup\", function() {\r\n\t\t\t\t\t\tlastActive = null;\r\n\t\t\t\t\t});\r\n\t\t\t\t})\r\n\t\t\t\t.bind( \"mouseup\" + this.eventNamespace, function() {\r\n\t\t\t\t\tif ( options.disabled ) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$( this ).removeClass( \"ui-state-active\" );\r\n\t\t\t\t})\r\n\t\t\t\t.bind( \"keydown\" + this.eventNamespace, function(event) {\r\n\t\t\t\t\tif ( options.disabled ) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {\r\n\t\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t// see #8559, we bind to blur here in case the button element loses\r\n\t\t\t\t// focus between keydown and keyup, it would be left in an \"active\" state\r\n\t\t\t\t.bind( \"keyup\" + this.eventNamespace + \" blur\" + this.eventNamespace, function() {\r\n\t\t\t\t\t$( this ).removeClass( \"ui-state-active\" );\r\n\t\t\t\t});\r\n\r\n\t\t\tif ( this.buttonElement.is(\"a\") ) {\r\n\t\t\t\tthis.buttonElement.keyup(function(event) {\r\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\r\n\t\t\t\t\t\t// TODO pass through original event correctly (just as 2nd argument doesn't work)\r\n\t\t\t\t\t\t$( this ).click();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// TODO: pull out $.Widget's handling for the disabled option into\r\n\t\t// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can\r\n\t\t// be overridden by individual plugins\r\n\t\tthis._setOption( \"disabled\", options.disabled );\r\n\t\tthis._resetButton();\r\n\t},\r\n\r\n\t_determineButtonType: function() {\r\n\t\tvar ancestor, labelSelector, checked;\r\n\r\n\t\tif ( this.element.is(\"[type=checkbox]\") ) {\r\n\t\t\tthis.type = \"checkbox\";\r\n\t\t} else if ( this.element.is(\"[type=radio]\") ) {\r\n\t\t\tthis.type = \"radio\";\r\n\t\t} else if ( this.element.is(\"input\") ) {\r\n\t\t\tthis.type = \"input\";\r\n\t\t} else {\r\n\t\t\tthis.type = \"button\";\r\n\t\t}\r\n\r\n\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\r\n\t\t\t// we don't search against the document in case the element\r\n\t\t\t// is disconnected from the DOM\r\n\t\t\tancestor = this.element.parents().last();\r\n\t\t\tlabelSelector = \"label[for='\" + this.element.attr(\"id\") + \"']\";\r\n\t\t\tthis.buttonElement = ancestor.find( labelSelector );\r\n\t\t\tif ( !this.buttonElement.length ) {\r\n\t\t\t\tancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();\r\n\t\t\t\tthis.buttonElement = ancestor.filter( labelSelector );\r\n\t\t\t\tif ( !this.buttonElement.length ) {\r\n\t\t\t\t\tthis.buttonElement = ancestor.find( labelSelector );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.element.addClass( \"ui-helper-hidden-accessible\" );\r\n\r\n\t\t\tchecked = this.element.is( \":checked\" );\r\n\t\t\tif ( checked ) {\r\n\t\t\t\tthis.buttonElement.addClass( \"ui-state-active\" );\r\n\t\t\t}\r\n\t\t\tthis.buttonElement.prop( \"aria-pressed\", checked );\r\n\t\t} else {\r\n\t\t\tthis.buttonElement = this.element;\r\n\t\t}\r\n\t},\r\n\r\n\twidget: function() {\r\n\t\treturn this.buttonElement;\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tthis.element\r\n\t\t\t.removeClass( \"ui-helper-hidden-accessible\" );\r\n\t\tthis.buttonElement\r\n\t\t\t.removeClass( baseClasses + \" ui-state-active \" + typeClasses )\r\n\t\t\t.removeAttr( \"role\" )\r\n\t\t\t.removeAttr( \"aria-pressed\" )\r\n\t\t\t.html( this.buttonElement.find(\".ui-button-text\").html() );\r\n\r\n\t\tif ( !this.hasTitle ) {\r\n\t\t\tthis.buttonElement.removeAttr( \"title\" );\r\n\t\t}\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tthis._super( key, value );\r\n\t\tif ( key === \"disabled\" ) {\r\n\t\t\tthis.element.prop( \"disabled\", !!value );\r\n\t\t\tif ( value ) {\r\n\t\t\t\tthis.buttonElement.removeClass( \"ui-state-focus\" );\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._resetButton();\r\n\t},\r\n\r\n\trefresh: function() {\r\n\t\t//See #8237 & #8828\r\n\t\tvar isDisabled = this.element.is( \"input, button\" ) ? this.element.is( \":disabled\" ) : this.element.hasClass( \"ui-button-disabled\" );\r\n\r\n\t\tif ( isDisabled !== this.options.disabled ) {\r\n\t\t\tthis._setOption( \"disabled\", isDisabled );\r\n\t\t}\r\n\t\tif ( this.type === \"radio\" ) {\r\n\t\t\tradioGroup( this.element[0] ).each(function() {\r\n\t\t\t\tif ( $( this ).is( \":checked\" ) ) {\r\n\t\t\t\t\t$( this ).button( \"widget\" )\r\n\t\t\t\t\t\t.addClass( \"ui-state-active\" )\r\n\t\t\t\t\t\t.attr( \"aria-pressed\", \"true\" );\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$( this ).button( \"widget\" )\r\n\t\t\t\t\t\t.removeClass( \"ui-state-active\" )\r\n\t\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else if ( this.type === \"checkbox\" ) {\r\n\t\t\tif ( this.element.is( \":checked\" ) ) {\r\n\t\t\t\tthis.buttonElement\r\n\t\t\t\t\t.addClass( \"ui-state-active\" )\r\n\t\t\t\t\t.attr( \"aria-pressed\", \"true\" );\r\n\t\t\t} else {\r\n\t\t\t\tthis.buttonElement\r\n\t\t\t\t\t.removeClass( \"ui-state-active\" )\r\n\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_resetButton: function() {\r\n\t\tif ( this.type === \"input\" ) {\r\n\t\t\tif ( this.options.label ) {\r\n\t\t\t\tthis.element.val( this.options.label );\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar buttonElement = this.buttonElement.removeClass( typeClasses ),\r\n\t\t\tbuttonText = $( \"<span></span>\", this.document[0] )\r\n\t\t\t\t.addClass( \"ui-button-text\" )\r\n\t\t\t\t.html( this.options.label )\r\n\t\t\t\t.appendTo( buttonElement.empty() )\r\n\t\t\t\t.text(),\r\n\t\t\ticons = this.options.icons,\r\n\t\t\tmultipleIcons = icons.primary && icons.secondary,\r\n\t\t\tbuttonClasses = [];\r\n\r\n\t\tif ( icons.primary || icons.secondary ) {\r\n\t\t\tif ( this.options.text ) {\r\n\t\t\t\tbuttonClasses.push( \"ui-button-text-icon\" + ( multipleIcons ? \"s\" : ( icons.primary ? \"-primary\" : \"-secondary\" ) ) );\r\n\t\t\t}\r\n\r\n\t\t\tif ( icons.primary ) {\r\n\t\t\t\tbuttonElement.prepend( \"<span class='ui-button-icon-primary ui-icon \" + icons.primary + \"'></span>\" );\r\n\t\t\t}\r\n\r\n\t\t\tif ( icons.secondary ) {\r\n\t\t\t\tbuttonElement.append( \"<span class='ui-button-icon-secondary ui-icon \" + icons.secondary + \"'></span>\" );\r\n\t\t\t}\r\n\r\n\t\t\tif ( !this.options.text ) {\r\n\t\t\t\tbuttonClasses.push( multipleIcons ? \"ui-button-icons-only\" : \"ui-button-icon-only\" );\r\n\r\n\t\t\t\tif ( !this.hasTitle ) {\r\n\t\t\t\t\tbuttonElement.attr( \"title\", $.trim( buttonText ) );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tbuttonClasses.push( \"ui-button-text-only\" );\r\n\t\t}\r\n\t\tbuttonElement.addClass( buttonClasses.join( \" \" ) );\r\n\t}\r\n});\r\n\r\n$.widget( \"ui.buttonset\", {\r\n\tversion: \"1.10.4\",\r\n\toptions: {\r\n\t\titems: \"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)\"\r\n\t},\r\n\r\n\t_create: function() {\r\n\t\tthis.element.addClass( \"ui-buttonset\" );\r\n\t},\r\n\r\n\t_init: function() {\r\n\t\tthis.refresh();\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tif ( key === \"disabled\" ) {\r\n\t\t\tthis.buttons.button( \"option\", key, value );\r\n\t\t}\r\n\r\n\t\tthis._super( key, value );\r\n\t},\r\n\r\n\trefresh: function() {\r\n\t\tvar rtl = this.element.css( \"direction\" ) === \"rtl\";\r\n\r\n\t\tthis.buttons = this.element.find( this.options.items )\r\n\t\t\t.filter( \":ui-button\" )\r\n\t\t\t\t.button( \"refresh\" )\r\n\t\t\t.end()\r\n\t\t\t.not( \":ui-button\" )\r\n\t\t\t\t.button()\r\n\t\t\t.end()\r\n\t\t\t.map(function() {\r\n\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\r\n\t\t\t})\r\n\t\t\t\t.removeClass( \"ui-corner-all ui-corner-left ui-corner-right\" )\r\n\t\t\t\t.filter( \":first\" )\r\n\t\t\t\t\t.addClass( rtl ? \"ui-corner-right\" : \"ui-corner-left\" )\r\n\t\t\t\t.end()\r\n\t\t\t\t.filter( \":last\" )\r\n\t\t\t\t\t.addClass( rtl ? \"ui-corner-left\" : \"ui-corner-right\" )\r\n\t\t\t\t.end()\r\n\t\t\t.end();\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tthis.element.removeClass( \"ui-buttonset\" );\r\n\t\tthis.buttons\r\n\t\t\t.map(function() {\r\n\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\r\n\t\t\t})\r\n\t\t\t\t.removeClass( \"ui-corner-left ui-corner-right\" )\r\n\t\t\t.end()\r\n\t\t\t.button( \"destroy\" );\r\n\t}\r\n});\r\n\r\n}( jQuery ) );\r\n(function( $, undefined ) {\r\n\r\n$.extend($.ui, { datepicker: { version: \"1.10.4\" } });\r\n\r\nvar PROP_NAME = \"datepicker\",\r\n\tinstActive;\r\n\r\n/* Date picker manager.\r\n Use the singleton instance of this class, $.datepicker, to interact with the date picker.\r\n Settings for (groups of) date pickers are maintained in an instance object,\r\n allowing multiple different settings on the same page. */\r\n\r\nfunction Datepicker() {\r\n\tthis._curInst = null; // The current instance in use\r\n\tthis._keyEvent = false; // If the last event was a key event\r\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\r\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\r\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\r\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\r\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\r\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\r\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\r\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\r\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\r\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\r\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\r\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\r\n\tthis.regional = []; // Available regional settings, indexed by language code\r\n\tthis.regional[\"\"] = { // Default regional settings\r\n\t\tcloseText: \"Done\", // Display text for close link\r\n\t\tprevText: \"Prev\", // Display text for previous month link\r\n\t\tnextText: \"Next\", // Display text for next month link\r\n\t\tcurrentText: \"Today\", // Display text for current month link\r\n\t\tmonthNames: [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\r\n\t\t\t\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"], // Names of months for drop-down and formatting\r\n\t\tmonthNamesShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], // For formatting\r\n\t\tdayNames: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], // For formatting\r\n\t\tdayNamesShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], // For formatting\r\n\t\tdayNamesMin: [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"], // Column headings for days starting at Sunday\r\n\t\tweekHeader: \"Wk\", // Column header for week of the year\r\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\r\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\r\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\r\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\r\n\t\tyearSuffix: \"\" // Additional text to append to the year in the month headers\r\n\t};\r\n\tthis._defaults = { // Global defaults for all the date picker instances\r\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\r\n\t\t\t// \"button\" for trigger button, or \"both\" for either\r\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\r\n\t\tshowOptions: {}, // Options for enhanced animations\r\n\t\tdefaultDate: null, // Used when field is blank: actual date,\r\n\t\t\t// +/-number for offset from today, null for today\r\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\r\n\t\tbuttonText: \"...\", // Text for trigger button\r\n\t\tbuttonImage: \"\", // URL for trigger button image\r\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\r\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\r\n\t\t\t// if not applicable, false to just disable them\r\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\r\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\r\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\r\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\r\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\r\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\r\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\r\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\r\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\r\n\t\tshowWeek: false, // True to show week of the year, false to not show it\r\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\r\n\t\t\t// takes a Date and returns the number of the week for it\r\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\r\n\t\t\t// > this are in the previous century,\r\n\t\t\t// string value starting with \"+\" for current year + value\r\n\t\tminDate: null, // The earliest selectable date, or null for no limit\r\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\r\n\t\tduration: \"fast\", // Duration of display/closure\r\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\r\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\r\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\r\n\t\tbeforeShow: null, // Function that takes an input field and\r\n\t\t\t// returns a set of custom settings for the date picker\r\n\t\tonSelect: null, // Define a callback function when a date is selected\r\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\r\n\t\tonClose: null, // Define a callback function when the datepicker is closed\r\n\t\tnumberOfMonths: 1, // Number of months to show at a time\r\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\r\n\t\tstepMonths: 1, // Number of months to step back/forward\r\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\r\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\r\n\t\taltFormat: \"\", // The date format to use for the alternate field\r\n\t\tconstrainInput: true, // The input is constrained by the current date format\r\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\r\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\r\n\t\tdisabled: false // The initial disabled state\r\n\t};\r\n\t$.extend(this._defaults, this.regional[\"\"]);\r\n\tthis.dpDiv = bindHover($(\"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\"));\r\n}\r\n\r\n$.extend(Datepicker.prototype, {\r\n\t/* Class name added to elements to indicate already configured with a date picker. */\r\n\tmarkerClassName: \"hasDatepicker\",\r\n\r\n\t//Keep track of the maximum number of rows displayed (see #7043)\r\n\tmaxRows: 4,\r\n\r\n\t// TODO rename to \"widget\" when switching to widget factory\r\n\t_widgetDatepicker: function() {\r\n\t\treturn this.dpDiv;\r\n\t},\r\n\r\n\t/* Override the default settings for all instances of the date picker.\r\n\t * @param settings object - the new settings to use as defaults (anonymous object)\r\n\t * @return the manager object\r\n\t */\r\n\tsetDefaults: function(settings) {\r\n\t\textendRemove(this._defaults, settings || {});\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Attach the date picker to a jQuery selection.\r\n\t * @param target\telement - the target input field or division or span\r\n\t * @param settings object - the new settings to use for this date picker instance (anonymous)\r\n\t */\r\n\t_attachDatepicker: function(target, settings) {\r\n\t\tvar nodeName, inline, inst;\r\n\t\tnodeName = target.nodeName.toLowerCase();\r\n\t\tinline = (nodeName === \"div\" || nodeName === \"span\");\r\n\t\tif (!target.id) {\r\n\t\t\tthis.uuid += 1;\r\n\t\t\ttarget.id = \"dp\" + this.uuid;\r\n\t\t}\r\n\t\tinst = this._newInst($(target), inline);\r\n\t\tinst.settings = $.extend({}, settings || {});\r\n\t\tif (nodeName === \"input\") {\r\n\t\t\tthis._connectDatepicker(target, inst);\r\n\t\t} else if (inline) {\r\n\t\t\tthis._inlineDatepicker(target, inst);\r\n\t\t}\r\n\t},\r\n\r\n\t/* Create a new instance object. */\r\n\t_newInst: function(target, inline) {\r\n\t\tvar id = target[0].id.replace(/([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\"); // escape jQuery meta chars\r\n\t\treturn {id: id, input: target, // associated target\r\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\r\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\r\n\t\t\tinline: inline, // is datepicker inline or not\r\n\t\t\tdpDiv: (!inline ? this.dpDiv : // presentation div\r\n\t\t\tbindHover($(\"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\")))};\r\n\t},\r\n\r\n\t/* Attach the date picker to an input field. */\r\n\t_connectDatepicker: function(target, inst) {\r\n\t\tvar input = $(target);\r\n\t\tinst.append = $([]);\r\n\t\tinst.trigger = $([]);\r\n\t\tif (input.hasClass(this.markerClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._attachments(input, inst);\r\n\t\tinput.addClass(this.markerClassName).keydown(this._doKeyDown).\r\n\t\t\tkeypress(this._doKeyPress).keyup(this._doKeyUp);\r\n\t\tthis._autoSize(inst);\r\n\t\t$.data(target, PROP_NAME, inst);\r\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\r\n\t\tif( inst.settings.disabled ) {\r\n\t\t\tthis._disableDatepicker( target );\r\n\t\t}\r\n\t},\r\n\r\n\t/* Make attachments based on settings. */\r\n\t_attachments: function(input, inst) {\r\n\t\tvar showOn, buttonText, buttonImage,\r\n\t\t\tappendText = this._get(inst, \"appendText\"),\r\n\t\t\tisRTL = this._get(inst, \"isRTL\");\r\n\r\n\t\tif (inst.append) {\r\n\t\t\tinst.append.remove();\r\n\t\t}\r\n\t\tif (appendText) {\r\n\t\t\tinst.append = $(\"<span class='\" + this._appendClass + \"'>\" + appendText + \"</span>\");\r\n\t\t\tinput[isRTL ? \"before\" : \"after\"](inst.append);\r\n\t\t}\r\n\r\n\t\tinput.unbind(\"focus\", this._showDatepicker);\r\n\r\n\t\tif (inst.trigger) {\r\n\t\t\tinst.trigger.remove();\r\n\t\t}\r\n\r\n\t\tshowOn = this._get(inst, \"showOn\");\r\n\t\tif (showOn === \"focus\" || showOn === \"both\") { // pop-up date picker when in the marked field\r\n\t\t\tinput.focus(this._showDatepicker);\r\n\t\t}\r\n\t\tif (showOn === \"button\" || showOn === \"both\") { // pop-up date picker when button clicked\r\n\t\t\tbuttonText = this._get(inst, \"buttonText\");\r\n\t\t\tbuttonImage = this._get(inst, \"buttonImage\");\r\n\t\t\tinst.trigger = $(this._get(inst, \"buttonImageOnly\") ?\r\n\t\t\t\t$(\"<img/>\").addClass(this._triggerClass).\r\n\t\t\t\t\tattr({ src: buttonImage, alt: buttonText, title: buttonText }) :\r\n\t\t\t\t$(\"<button type='button'></button>\").addClass(this._triggerClass).\r\n\t\t\t\t\thtml(!buttonImage ? buttonText : $(\"<img/>\").attr(\r\n\t\t\t\t\t{ src:buttonImage, alt:buttonText, title:buttonText })));\r\n\t\t\tinput[isRTL ? \"before\" : \"after\"](inst.trigger);\r\n\t\t\tinst.trigger.click(function() {\r\n\t\t\t\tif ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {\r\n\t\t\t\t\t$.datepicker._hideDatepicker();\r\n\t\t\t\t} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {\r\n\t\t\t\t\t$.datepicker._hideDatepicker();\r\n\t\t\t\t\t$.datepicker._showDatepicker(input[0]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$.datepicker._showDatepicker(input[0]);\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\t/* Apply the maximum length for the date format. */\r\n\t_autoSize: function(inst) {\r\n\t\tif (this._get(inst, \"autoSize\") && !inst.inline) {\r\n\t\t\tvar findMax, max, maxI, i,\r\n\t\t\t\tdate = new Date(2009, 12 - 1, 20), // Ensure double digits\r\n\t\t\t\tdateFormat = this._get(inst, \"dateFormat\");\r\n\r\n\t\t\tif (dateFormat.match(/[DM]/)) {\r\n\t\t\t\tfindMax = function(names) {\r\n\t\t\t\t\tmax = 0;\r\n\t\t\t\t\tmaxI = 0;\r\n\t\t\t\t\tfor (i = 0; i < names.length; i++) {\r\n\t\t\t\t\t\tif (names[i].length > max) {\r\n\t\t\t\t\t\t\tmax = names[i].length;\r\n\t\t\t\t\t\t\tmaxI = i;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn maxI;\r\n\t\t\t\t};\r\n\t\t\t\tdate.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?\r\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\"))));\r\n\t\t\t\tdate.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?\r\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\"))) + 20 - date.getDay());\r\n\t\t\t}\r\n\t\t\tinst.input.attr(\"size\", this._formatDate(inst, date).length);\r\n\t\t}\r\n\t},\r\n\r\n\t/* Attach an inline date picker to a div. */\r\n\t_inlineDatepicker: function(target, inst) {\r\n\t\tvar divSpan = $(target);\r\n\t\tif (divSpan.hasClass(this.markerClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tdivSpan.addClass(this.markerClassName).append(inst.dpDiv);\r\n\t\t$.data(target, PROP_NAME, inst);\r\n\t\tthis._setDate(inst, this._getDefaultDate(inst), true);\r\n\t\tthis._updateDatepicker(inst);\r\n\t\tthis._updateAlternate(inst);\r\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\r\n\t\tif( inst.settings.disabled ) {\r\n\t\t\tthis._disableDatepicker( target );\r\n\t\t}\r\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\r\n\t\t// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\r\n\t\tinst.dpDiv.css( \"display\", \"block\" );\r\n\t},\r\n\r\n\t/* Pop-up the date picker in a \"dialog\" box.\r\n\t * @param input element - ignored\r\n\t * @param date\tstring or Date - the initial date to display\r\n\t * @param onSelect function - the function to call when a date is selected\r\n\t * @param settings object - update the dialog date picker instance's settings (anonymous object)\r\n\t * @param pos int[2] - coordinates for the dialog's position within the screen or\r\n\t *\t\t\t\t\tevent - with x/y coordinates or\r\n\t *\t\t\t\t\tleave empty for default (screen centre)\r\n\t * @return the manager object\r\n\t */\r\n\t_dialogDatepicker: function(input, date, onSelect, settings, pos) {\r\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\r\n\t\t\tinst = this._dialogInst; // internal instance\r\n\r\n\t\tif (!inst) {\r\n\t\t\tthis.uuid += 1;\r\n\t\t\tid = \"dp\" + this.uuid;\r\n\t\t\tthis._dialogInput = $(\"<input type='text' id='\" + id +\r\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\");\r\n\t\t\tthis._dialogInput.keydown(this._doKeyDown);\r\n\t\t\t$(\"body\").append(this._dialogInput);\r\n\t\t\tinst = this._dialogInst = this._newInst(this._dialogInput, false);\r\n\t\t\tinst.settings = {};\r\n\t\t\t$.data(this._dialogInput[0], PROP_NAME, inst);\r\n\t\t}\r\n\t\textendRemove(inst.settings, settings || {});\r\n\t\tdate = (date && date.constructor === Date ? this._formatDate(inst, date) : date);\r\n\t\tthis._dialogInput.val(date);\r\n\r\n\t\tthis._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);\r\n\t\tif (!this._pos) {\r\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\r\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\r\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\r\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\r\n\t\t\tthis._pos = // should use actual width/height below\r\n\t\t\t\t[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];\r\n\t\t}\r\n\r\n\t\t// move input on screen for focus, but hidden behind dialog\r\n\t\tthis._dialogInput.css(\"left\", (this._pos[0] + 20) + \"px\").css(\"top\", this._pos[1] + \"px\");\r\n\t\tinst.settings.onSelect = onSelect;\r\n\t\tthis._inDialog = true;\r\n\t\tthis.dpDiv.addClass(this._dialogClass);\r\n\t\tthis._showDatepicker(this._dialogInput[0]);\r\n\t\tif ($.blockUI) {\r\n\t\t\t$.blockUI(this.dpDiv);\r\n\t\t}\r\n\t\t$.data(this._dialogInput[0], PROP_NAME, inst);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Detach a datepicker from its control.\r\n\t * @param target\telement - the target input field or division or span\r\n\t */\r\n\t_destroyDatepicker: function(target) {\r\n\t\tvar nodeName,\r\n\t\t\t$target = $(target),\r\n\t\t\tinst = $.data(target, PROP_NAME);\r\n\r\n\t\tif (!$target.hasClass(this.markerClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnodeName = target.nodeName.toLowerCase();\r\n\t\t$.removeData(target, PROP_NAME);\r\n\t\tif (nodeName === \"input\") {\r\n\t\t\tinst.append.remove();\r\n\t\t\tinst.trigger.remove();\r\n\t\t\t$target.removeClass(this.markerClassName).\r\n\t\t\t\tunbind(\"focus\", this._showDatepicker).\r\n\t\t\t\tunbind(\"keydown\", this._doKeyDown).\r\n\t\t\t\tunbind(\"keypress\", this._doKeyPress).\r\n\t\t\t\tunbind(\"keyup\", this._doKeyUp);\r\n\t\t} else if (nodeName === \"div\" || nodeName === \"span\") {\r\n\t\t\t$target.removeClass(this.markerClassName).empty();\r\n\t\t}\r\n\t},\r\n\r\n\t/* Enable the date picker to a jQuery selection.\r\n\t * @param target\telement - the target input field or division or span\r\n\t */\r\n\t_enableDatepicker: function(target) {\r\n\t\tvar nodeName, inline,\r\n\t\t\t$target = $(target),\r\n\t\t\tinst = $.data(target, PROP_NAME);\r\n\r\n\t\tif (!$target.hasClass(this.markerClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnodeName = target.nodeName.toLowerCase();\r\n\t\tif (nodeName === \"input\") {\r\n\t\t\ttarget.disabled = false;\r\n\t\t\tinst.trigger.filter(\"button\").\r\n\t\t\t\teach(function() { this.disabled = false; }).end().\r\n\t\t\t\tfilter(\"img\").css({opacity: \"1.0\", cursor: \"\"});\r\n\t\t} else if (nodeName === \"div\" || nodeName === \"span\") {\r\n\t\t\tinline = $target.children(\".\" + this._inlineClass);\r\n\t\t\tinline.children().removeClass(\"ui-state-disabled\");\r\n\t\t\tinline.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").\r\n\t\t\t\tprop(\"disabled\", false);\r\n\t\t}\r\n\t\tthis._disabledInputs = $.map(this._disabledInputs,\r\n\t\t\tfunction(value) { return (value === target ? null : value); }); // delete entry\r\n\t},\r\n\r\n\t/* Disable the date picker to a jQuery selection.\r\n\t * @param target\telement - the target input field or division or span\r\n\t */\r\n\t_disableDatepicker: function(target) {\r\n\t\tvar nodeName, inline,\r\n\t\t\t$target = $(target),\r\n\t\t\tinst = $.data(target, PROP_NAME);\r\n\r\n\t\tif (!$target.hasClass(this.markerClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnodeName = target.nodeName.toLowerCase();\r\n\t\tif (nodeName === \"input\") {\r\n\t\t\ttarget.disabled = true;\r\n\t\t\tinst.trigger.filter(\"button\").\r\n\t\t\t\teach(function() { this.disabled = true; }).end().\r\n\t\t\t\tfilter(\"img\").css({opacity: \"0.5\", cursor: \"default\"});\r\n\t\t} else if (nodeName === \"div\" || nodeName === \"span\") {\r\n\t\t\tinline = $target.children(\".\" + this._inlineClass);\r\n\t\t\tinline.children().addClass(\"ui-state-disabled\");\r\n\t\t\tinline.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").\r\n\t\t\t\tprop(\"disabled\", true);\r\n\t\t}\r\n\t\tthis._disabledInputs = $.map(this._disabledInputs,\r\n\t\t\tfunction(value) { return (value === target ? null : value); }); // delete entry\r\n\t\tthis._disabledInputs[this._disabledInputs.length] = target;\r\n\t},\r\n\r\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\r\n\t * @param target\telement - the target input field or division or span\r\n\t * @return boolean - true if disabled, false if enabled\r\n\t */\r\n\t_isDisabledDatepicker: function(target) {\r\n\t\tif (!target) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor (var i = 0; i < this._disabledInputs.length; i++) {\r\n\t\t\tif (this._disabledInputs[i] === target) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/* Retrieve the instance data for the target control.\r\n\t * @param target element - the target input field or division or span\r\n\t * @return object - the associated instance data\r\n\t * @throws error if a jQuery problem getting data\r\n\t */\r\n\t_getInst: function(target) {\r\n\t\ttry {\r\n\t\t\treturn $.data(target, PROP_NAME);\r\n\t\t}\r\n\t\tcatch (err) {\r\n\t\t\tthrow \"Missing instance data for this datepicker\";\r\n\t\t}\r\n\t},\r\n\r\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\r\n\t * @param target element - the target input field or division or span\r\n\t * @param name\tobject - the new settings to update or\r\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\r\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\r\n\t *\t\t\t\t\"defaults\" for all global defaults\r\n\t * @param value any - the new value for the setting\r\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\r\n\t */\r\n\t_optionDatepicker: function(target, name, value) {\r\n\t\tvar settings, date, minDate, maxDate,\r\n\t\t\tinst = this._getInst(target);\r\n\r\n\t\tif (arguments.length === 2 && typeof name === \"string\") {\r\n\t\t\treturn (name === \"defaults\" ? $.extend({}, $.datepicker._defaults) :\r\n\t\t\t\t(inst ? (name === \"all\" ? $.extend({}, inst.settings) :\r\n\t\t\t\tthis._get(inst, name)) : null));\r\n\t\t}\r\n\r\n\t\tsettings = name || {};\r\n\t\tif (typeof name === \"string\") {\r\n\t\t\tsettings = {};\r\n\t\t\tsettings[name] = value;\r\n\t\t}\r\n\r\n\t\tif (inst) {\r\n\t\t\tif (this._curInst === inst) {\r\n\t\t\t\tthis._hideDatepicker();\r\n\t\t\t}\r\n\r\n\t\t\tdate = this._getDateDatepicker(target, true);\r\n\t\t\tminDate = this._getMinMaxDate(inst, \"min\");\r\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\");\r\n\t\t\textendRemove(inst.settings, settings);\r\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\r\n\t\t\tif (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {\r\n\t\t\t\tinst.settings.minDate = this._formatDate(inst, minDate);\r\n\t\t\t}\r\n\t\t\tif (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {\r\n\t\t\t\tinst.settings.maxDate = this._formatDate(inst, maxDate);\r\n\t\t\t}\r\n\t\t\tif ( \"disabled\" in settings ) {\r\n\t\t\t\tif ( settings.disabled ) {\r\n\t\t\t\t\tthis._disableDatepicker(target);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._enableDatepicker(target);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis._attachments($(target), inst);\r\n\t\t\tthis._autoSize(inst);\r\n\t\t\tthis._setDate(inst, date);\r\n\t\t\tthis._updateAlternate(inst);\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t}\r\n\t},\r\n\r\n\t// change method deprecated\r\n\t_changeDatepicker: function(target, name, value) {\r\n\t\tthis._optionDatepicker(target, name, value);\r\n\t},\r\n\r\n\t/* Redraw the date picker attached to an input field or division.\r\n\t * @param target element - the target input field or division or span\r\n\t */\r\n\t_refreshDatepicker: function(target) {\r\n\t\tvar inst = this._getInst(target);\r\n\t\tif (inst) {\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t}\r\n\t},\r\n\r\n\t/* Set the dates for a jQuery selection.\r\n\t * @param target element - the target input field or division or span\r\n\t * @param date\tDate - the new date\r\n\t */\r\n\t_setDateDatepicker: function(target, date) {\r\n\t\tvar inst = this._getInst(target);\r\n\t\tif (inst) {\r\n\t\t\tthis._setDate(inst, date);\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t\tthis._updateAlternate(inst);\r\n\t\t}\r\n\t},\r\n\r\n\t/* Get the date(s) for the first entry in a jQuery selection.\r\n\t * @param target element - the target input field or division or span\r\n\t * @param noDefault boolean - true if no default date is to be used\r\n\t * @return Date - the current date\r\n\t */\r\n\t_getDateDatepicker: function(target, noDefault) {\r\n\t\tvar inst = this._getInst(target);\r\n\t\tif (inst && !inst.inline) {\r\n\t\t\tthis._setDateFromField(inst, noDefault);\r\n\t\t}\r\n\t\treturn (inst ? this._getDate(inst) : null);\r\n\t},\r\n\r\n\t/* Handle keystrokes. */\r\n\t_doKeyDown: function(event) {\r\n\t\tvar onSelect, dateStr, sel,\r\n\t\t\tinst = $.datepicker._getInst(event.target),\r\n\t\t\thandled = true,\r\n\t\t\tisRTL = inst.dpDiv.is(\".ui-datepicker-rtl\");\r\n\r\n\t\tinst._keyEvent = true;\r\n\t\tif ($.datepicker._datepickerShowing) {\r\n\t\t\tswitch (event.keyCode) {\r\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\r\n\t\t\t\t\t\thandled = false;\r\n\t\t\t\t\t\tbreak; // hide on tab out\r\n\t\t\t\tcase 13: sel = $(\"td.\" + $.datepicker._dayOverClass + \":not(.\" +\r\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv);\r\n\t\t\t\t\t\tif (sel[0]) {\r\n\t\t\t\t\t\t\t$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tonSelect = $.datepicker._get(inst, \"onSelect\");\r\n\t\t\t\t\t\tif (onSelect) {\r\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate(inst);\r\n\r\n\t\t\t\t\t\t\t// trigger custom callback\r\n\t\t\t\t\t\t\tonSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn false; // don't submit the form\r\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\r\n\t\t\t\t\t\tbreak; // hide on escape\r\n\t\t\t\tcase 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?\r\n\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepBigMonths\") :\r\n\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepMonths\")), \"M\");\r\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\r\n\t\t\t\tcase 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?\r\n\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepBigMonths\") :\r\n\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepMonths\")), \"M\");\r\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\r\n\t\t\t\tcase 35: if (event.ctrlKey || event.metaKey) {\r\n\t\t\t\t\t\t\t$.datepicker._clearDate(event.target);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\r\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\r\n\t\t\t\tcase 36: if (event.ctrlKey || event.metaKey) {\r\n\t\t\t\t\t\t\t$.datepicker._gotoToday(event.target);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\r\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\r\n\t\t\t\tcase 37: if (event.ctrlKey || event.metaKey) {\r\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), \"D\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\r\n\t\t\t\t\t\t// -1 day on ctrl or command +left\r\n\t\t\t\t\t\tif (event.originalEvent.altKey) {\r\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (event.ctrlKey ?\r\n\t\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepBigMonths\") :\r\n\t\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepMonths\")), \"M\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// next month/year on alt +left on Mac\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\tcase 38: if (event.ctrlKey || event.metaKey) {\r\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, -7, \"D\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\r\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\r\n\t\t\t\tcase 39: if (event.ctrlKey || event.metaKey) {\r\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), \"D\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\r\n\t\t\t\t\t\t// +1 day on ctrl or command +right\r\n\t\t\t\t\t\tif (event.originalEvent.altKey) {\r\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (event.ctrlKey ?\r\n\t\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepBigMonths\") :\r\n\t\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepMonths\")), \"M\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// next month/year on alt +right\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\tcase 40: if (event.ctrlKey || event.metaKey) {\r\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, +7, \"D\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\r\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\r\n\t\t\t\tdefault: handled = false;\r\n\t\t\t}\r\n\t\t} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home\r\n\t\t\t$.datepicker._showDatepicker(this);\r\n\t\t} else {\r\n\t\t\thandled = false;\r\n\t\t}\r\n\r\n\t\tif (handled) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t}\r\n\t},\r\n\r\n\t/* Filter entered characters - based on date format. */\r\n\t_doKeyPress: function(event) {\r\n\t\tvar chars, chr,\r\n\t\t\tinst = $.datepicker._getInst(event.target);\r\n\r\n\t\tif ($.datepicker._get(inst, \"constrainInput\")) {\r\n\t\t\tchars = $.datepicker._possibleChars($.datepicker._get(inst, \"dateFormat\"));\r\n\t\t\tchr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);\r\n\t\t\treturn event.ctrlKey || event.metaKey || (chr < \" \" || !chars || chars.indexOf(chr) > -1);\r\n\t\t}\r\n\t},\r\n\r\n\t/* Synchronise manual entry and field/alternate field. */\r\n\t_doKeyUp: function(event) {\r\n\t\tvar date,\r\n\t\t\tinst = $.datepicker._getInst(event.target);\r\n\r\n\t\tif (inst.input.val() !== inst.lastVal) {\r\n\t\t\ttry {\r\n\t\t\t\tdate = $.datepicker.parseDate($.datepicker._get(inst, \"dateFormat\"),\r\n\t\t\t\t\t(inst.input ? inst.input.val() : null),\r\n\t\t\t\t\t$.datepicker._getFormatConfig(inst));\r\n\r\n\t\t\t\tif (date) { // only if valid\r\n\t\t\t\t\t$.datepicker._setDateFromField(inst);\r\n\t\t\t\t\t$.datepicker._updateAlternate(inst);\r\n\t\t\t\t\t$.datepicker._updateDatepicker(inst);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (err) {\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/* Pop-up the date picker for a given input field.\r\n\t * If false returned from beforeShow event handler do not show.\r\n\t * @param input element - the input field attached to the date picker or\r\n\t *\t\t\t\t\tevent - if triggered by focus\r\n\t */\r\n\t_showDatepicker: function(input) {\r\n\t\tinput = input.target || input;\r\n\t\tif (input.nodeName.toLowerCase() !== \"input\") { // find from button/image trigger\r\n\t\t\tinput = $(\"input\", input.parentNode)[0];\r\n\t\t}\r\n\r\n\t\tif ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\r\n\t\t\toffset, showAnim, duration;\r\n\r\n\t\tinst = $.datepicker._getInst(input);\r\n\t\tif ($.datepicker._curInst && $.datepicker._curInst !== inst) {\r\n\t\t\t$.datepicker._curInst.dpDiv.stop(true, true);\r\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\r\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbeforeShow = $.datepicker._get(inst, \"beforeShow\");\r\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};\r\n\t\tif(beforeShowSettings === false){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\textendRemove(inst.settings, beforeShowSettings);\r\n\r\n\t\tinst.lastVal = null;\r\n\t\t$.datepicker._lastInput = input;\r\n\t\t$.datepicker._setDateFromField(inst);\r\n\r\n\t\tif ($.datepicker._inDialog) { // hide cursor\r\n\t\t\tinput.value = \"\";\r\n\t\t}\r\n\t\tif (!$.datepicker._pos) { // position below input\r\n\t\t\t$.datepicker._pos = $.datepicker._findPos(input);\r\n\t\t\t$.datepicker._pos[1] += input.offsetHeight; // add the height\r\n\t\t}\r\n\r\n\t\tisFixed = false;\r\n\t\t$(input).parents().each(function() {\r\n\t\t\tisFixed |= $(this).css(\"position\") === \"fixed\";\r\n\t\t\treturn !isFixed;\r\n\t\t});\r\n\r\n\t\toffset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};\r\n\t\t$.datepicker._pos = null;\r\n\t\t//to avoid flashes on Firefox\r\n\t\tinst.dpDiv.empty();\r\n\t\t// determine sizing offscreen\r\n\t\tinst.dpDiv.css({position: \"absolute\", display: \"block\", top: \"-1000px\"});\r\n\t\t$.datepicker._updateDatepicker(inst);\r\n\t\t// fix width for dynamic number of date pickers\r\n\t\t// and adjust position before showing\r\n\t\toffset = $.datepicker._checkOffset(inst, offset, isFixed);\r\n\t\tinst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?\r\n\t\t\t\"static\" : (isFixed ? \"fixed\" : \"absolute\")), display: \"none\",\r\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\"});\r\n\r\n\t\tif (!inst.inline) {\r\n\t\t\tshowAnim = $.datepicker._get(inst, \"showAnim\");\r\n\t\t\tduration = $.datepicker._get(inst, \"duration\");\r\n\t\t\tinst.dpDiv.zIndex($(input).zIndex()+1);\r\n\t\t\t$.datepicker._datepickerShowing = true;\r\n\r\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\r\n\t\t\t\tinst.dpDiv.show(showAnim, $.datepicker._get(inst, \"showOptions\"), duration);\r\n\t\t\t} else {\r\n\t\t\t\tinst.dpDiv[showAnim || \"show\"](showAnim ? duration : null);\r\n\t\t\t}\r\n\r\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\r\n\t\t\t\tinst.input.focus();\r\n\t\t\t}\r\n\r\n\t\t\t$.datepicker._curInst = inst;\r\n\t\t}\r\n\t},\r\n\r\n\t/* Generate the date picker content. */\r\n\t_updateDatepicker: function(inst) {\r\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\r\n\t\tinstActive = inst; // for delegate hover events\r\n\t\tinst.dpDiv.empty().append(this._generateHTML(inst));\r\n\t\tthis._attachHandlers(inst);\r\n\t\tinst.dpDiv.find(\".\" + this._dayOverClass + \" a\").mouseover();\r\n\r\n\t\tvar origyearshtml,\r\n\t\t\tnumMonths = this._getNumberOfMonths(inst),\r\n\t\t\tcols = numMonths[1],\r\n\t\t\twidth = 17;\r\n\r\n\t\tinst.dpDiv.removeClass(\"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\").width(\"\");\r\n\t\tif (cols > 1) {\r\n\t\t\tinst.dpDiv.addClass(\"ui-datepicker-multi-\" + cols).css(\"width\", (width * cols) + \"em\");\r\n\t\t}\r\n\t\tinst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? \"add\" : \"remove\") +\r\n\t\t\t\"Class\"](\"ui-datepicker-multi\");\r\n\t\tinst.dpDiv[(this._get(inst, \"isRTL\") ? \"add\" : \"remove\") +\r\n\t\t\t\"Class\"](\"ui-datepicker-rtl\");\r\n\r\n\t\tif (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\r\n\t\t\tinst.input.focus();\r\n\t\t}\r\n\r\n\t\t// deffered render of the years select (to avoid flashes on Firefox)\r\n\t\tif( inst.yearshtml ){\r\n\t\t\torigyearshtml = inst.yearshtml;\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\t//assure that inst.yearshtml didn't change.\r\n\t\t\t\tif( origyearshtml === inst.yearshtml && inst.yearshtml ){\r\n\t\t\t\t\tinst.dpDiv.find(\"select.ui-datepicker-year:first\").replaceWith(inst.yearshtml);\r\n\t\t\t\t}\r\n\t\t\t\torigyearshtml = inst.yearshtml = null;\r\n\t\t\t}, 0);\r\n\t\t}\r\n\t},\r\n\r\n\t// #6694 - don't focus the input if it's already focused\r\n\t// this breaks the change event in IE\r\n\t// Support: IE and jQuery <1.9\r\n\t_shouldFocusInput: function( inst ) {\r\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" ) && !inst.input.is( \":focus\" );\r\n\t},\r\n\r\n\t/* Check positioning to remain on screen. */\r\n\t_checkOffset: function(inst, offset, isFixed) {\r\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\r\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\r\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\r\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\r\n\t\t\tviewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),\r\n\t\t\tviewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());\r\n\r\n\t\toffset.left -= (this._get(inst, \"isRTL\") ? (dpWidth - inputWidth) : 0);\r\n\t\toffset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;\r\n\t\toffset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;\r\n\r\n\t\t// now check if datepicker is showing outside window viewport - move to a better place if so.\r\n\t\toffset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?\r\n\t\t\tMath.abs(offset.left + dpWidth - viewWidth) : 0);\r\n\t\toffset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?\r\n\t\t\tMath.abs(dpHeight + inputHeight) : 0);\r\n\r\n\t\treturn offset;\r\n\t},\r\n\r\n\t/* Find an object's position on the screen. */\r\n\t_findPos: function(obj) {\r\n\t\tvar position,\r\n\t\t\tinst = this._getInst(obj),\r\n\t\t\tisRTL = this._get(inst, \"isRTL\");\r\n\r\n\t\twhile (obj && (obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {\r\n\t\t\tobj = obj[isRTL ? \"previousSibling\" : \"nextSibling\"];\r\n\t\t}\r\n\r\n\t\tposition = $(obj).offset();\r\n\t\treturn [position.left, position.top];\r\n\t},\r\n\r\n\t/* Hide the date picker from view.\r\n\t * @param input element - the input field attached to the date picker\r\n\t */\r\n\t_hideDatepicker: function(input) {\r\n\t\tvar showAnim, duration, postProcess, onClose,\r\n\t\t\tinst = this._curInst;\r\n\r\n\t\tif (!inst || (input && inst !== $.data(input, PROP_NAME))) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this._datepickerShowing) {\r\n\t\t\tshowAnim = this._get(inst, \"showAnim\");\r\n\t\t\tduration = this._get(inst, \"duration\");\r\n\t\t\tpostProcess = function() {\r\n\t\t\t\t$.datepicker._tidyDialog(inst);\r\n\t\t\t};\r\n\r\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\r\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\r\n\t\t\t\tinst.dpDiv.hide(showAnim, $.datepicker._get(inst, \"showOptions\"), duration, postProcess);\r\n\t\t\t} else {\r\n\t\t\t\tinst.dpDiv[(showAnim === \"slideDown\" ? \"slideUp\" :\r\n\t\t\t\t\t(showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\"))]((showAnim ? duration : null), postProcess);\r\n\t\t\t}\r\n\r\n\t\t\tif (!showAnim) {\r\n\t\t\t\tpostProcess();\r\n\t\t\t}\r\n\t\t\tthis._datepickerShowing = false;\r\n\r\n\t\t\tonClose = this._get(inst, \"onClose\");\r\n\t\t\tif (onClose) {\r\n\t\t\t\tonClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : \"\"), inst]);\r\n\t\t\t}\r\n\r\n\t\t\tthis._lastInput = null;\r\n\t\t\tif (this._inDialog) {\r\n\t\t\t\tthis._dialogInput.css({ position: \"absolute\", left: \"0\", top: \"-100px\" });\r\n\t\t\t\tif ($.blockUI) {\r\n\t\t\t\t\t$.unblockUI();\r\n\t\t\t\t\t$(\"body\").append(this.dpDiv);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis._inDialog = false;\r\n\t\t}\r\n\t},\r\n\r\n\t/* Tidy up after a dialog display. */\r\n\t_tidyDialog: function(inst) {\r\n\t\tinst.dpDiv.removeClass(this._dialogClass).unbind(\".ui-datepicker-calendar\");\r\n\t},\r\n\r\n\t/* Close date picker if clicked elsewhere. */\r\n\t_checkExternalClick: function(event) {\r\n\t\tif (!$.datepicker._curInst) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar $target = $(event.target),\r\n\t\t\tinst = $.datepicker._getInst($target[0]);\r\n\r\n\t\tif ( ( ( $target[0].id !== $.datepicker._mainDivId &&\r\n\t\t\t\t$target.parents(\"#\" + $.datepicker._mainDivId).length === 0 &&\r\n\t\t\t\t!$target.hasClass($.datepicker.markerClassName) &&\r\n\t\t\t\t!$target.closest(\".\" + $.datepicker._triggerClass).length &&\r\n\t\t\t\t$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||\r\n\t\t\t( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {\r\n\t\t\t\t$.datepicker._hideDatepicker();\r\n\t\t}\r\n\t},\r\n\r\n\t/* Adjust one of the date sub-fields. */\r\n\t_adjustDate: function(id, offset, period) {\r\n\t\tvar target = $(id),\r\n\t\t\tinst = this._getInst(target[0]);\r\n\r\n\t\tif (this._isDisabledDatepicker(target[0])) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._adjustInstDate(inst, offset +\r\n\t\t\t(period === \"M\" ? this._get(inst, \"showCurrentAtPos\") : 0), // undo positioning\r\n\t\t\tperiod);\r\n\t\tthis._updateDatepicker(inst);\r\n\t},\r\n\r\n\t/* Action for current link. */\r\n\t_gotoToday: function(id) {\r\n\t\tvar date,\r\n\t\t\ttarget = $(id),\r\n\t\t\tinst = this._getInst(target[0]);\r\n\r\n\t\tif (this._get(inst, \"gotoCurrent\") && inst.currentDay) {\r\n\t\t\tinst.selectedDay = inst.currentDay;\r\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\r\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\r\n\t\t} else {\r\n\t\t\tdate = new Date();\r\n\t\t\tinst.selectedDay = date.getDate();\r\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\r\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\r\n\t\t}\r\n\t\tthis._notifyChange(inst);\r\n\t\tthis._adjustDate(target);\r\n\t},\r\n\r\n\t/* Action for selecting a new month/year. */\r\n\t_selectMonthYear: function(id, select, period) {\r\n\t\tvar target = $(id),\r\n\t\t\tinst = this._getInst(target[0]);\r\n\r\n\t\tinst[\"selected\" + (period === \"M\" ? \"Month\" : \"Year\")] =\r\n\t\tinst[\"draw\" + (period === \"M\" ? \"Month\" : \"Year\")] =\r\n\t\t\tparseInt(select.options[select.selectedIndex].value,10);\r\n\r\n\t\tthis._notifyChange(inst);\r\n\t\tthis._adjustDate(target);\r\n\t},\r\n\r\n\t/* Action for selecting a day. */\r\n\t_selectDay: function(id, month, year, td) {\r\n\t\tvar inst,\r\n\t\t\ttarget = $(id);\r\n\r\n\t\tif ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tinst = this._getInst(target[0]);\r\n\t\tinst.selectedDay = inst.currentDay = $(\"a\", td).html();\r\n\t\tinst.selectedMonth = inst.currentMonth = month;\r\n\t\tinst.selectedYear = inst.currentYear = year;\r\n\t\tthis._selectDate(id, this._formatDate(inst,\r\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear));\r\n\t},\r\n\r\n\t/* Erase the input field and hide the date picker. */\r\n\t_clearDate: function(id) {\r\n\t\tvar target = $(id);\r\n\t\tthis._selectDate(target, \"\");\r\n\t},\r\n\r\n\t/* Update the input field with the selected date. */\r\n\t_selectDate: function(id, dateStr) {\r\n\t\tvar onSelect,\r\n\t\t\ttarget = $(id),\r\n\t\t\tinst = this._getInst(target[0]);\r\n\r\n\t\tdateStr = (dateStr != null ? dateStr : this._formatDate(inst));\r\n\t\tif (inst.input) {\r\n\t\t\tinst.input.val(dateStr);\r\n\t\t}\r\n\t\tthis._updateAlternate(inst);\r\n\r\n\t\tonSelect = this._get(inst, \"onSelect\");\r\n\t\tif (onSelect) {\r\n\t\t\tonSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback\r\n\t\t} else if (inst.input) {\r\n\t\t\tinst.input.trigger(\"change\"); // fire the change event\r\n\t\t}\r\n\r\n\t\tif (inst.inline){\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t} else {\r\n\t\t\tthis._hideDatepicker();\r\n\t\t\tthis._lastInput = inst.input[0];\r\n\t\t\tif (typeof(inst.input[0]) !== \"object\") {\r\n\t\t\t\tinst.input.focus(); // restore focus\r\n\t\t\t}\r\n\t\t\tthis._lastInput = null;\r\n\t\t}\r\n\t},\r\n\r\n\t/* Update any alternate field to synchronise with the main field. */\r\n\t_updateAlternate: function(inst) {\r\n\t\tvar altFormat, date, dateStr,\r\n\t\t\taltField = this._get(inst, \"altField\");\r\n\r\n\t\tif (altField) { // update alternate field too\r\n\t\t\taltFormat = this._get(inst, \"altFormat\") || this._get(inst, \"dateFormat\");\r\n\t\t\tdate = this._getDate(inst);\r\n\t\t\tdateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));\r\n\t\t\t$(altField).each(function() { $(this).val(dateStr); });\r\n\t\t}\r\n\t},\r\n\r\n\t/* Set as beforeShowDay function to prevent selection of weekends.\r\n\t * @param date Date - the date to customise\r\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\r\n\t */\r\n\tnoWeekends: function(date) {\r\n\t\tvar day = date.getDay();\r\n\t\treturn [(day > 0 && day < 6), \"\"];\r\n\t},\r\n\r\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\r\n\t * @param date Date - the date to get the week for\r\n\t * @return number - the number of the week within the year that contains this date\r\n\t */\r\n\tiso8601Week: function(date) {\r\n\t\tvar time,\r\n\t\t\tcheckDate = new Date(date.getTime());\r\n\r\n\t\t// Find Thursday of this week starting on Monday\r\n\t\tcheckDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));\r\n\r\n\t\ttime = checkDate.getTime();\r\n\t\tcheckDate.setMonth(0); // Compare with Jan 1\r\n\t\tcheckDate.setDate(1);\r\n\t\treturn Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\r\n\t},\r\n\r\n\t/* Parse a string value into a date object.\r\n\t * See formatDate below for the possible formats.\r\n\t *\r\n\t * @param format string - the expected format of the date\r\n\t * @param value string - the date in the above format\r\n\t * @param settings Object - attributes include:\r\n\t *\t\t\t\t\tshortYearCutoff number - the cutoff year for determining the century (optional)\r\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\r\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\r\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\r\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\r\n\t * @return Date - the extracted date value or null if value is blank\r\n\t */\r\n\tparseDate: function (format, value, settings) {\r\n\t\tif (format == null || value == null) {\r\n\t\t\tthrow \"Invalid arguments\";\r\n\t\t}\r\n\r\n\t\tvalue = (typeof value === \"object\" ? value.toString() : value + \"\");\r\n\t\tif (value === \"\") {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar iFormat, dim, extra,\r\n\t\t\tiValue = 0,\r\n\t\t\tshortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,\r\n\t\t\tshortYearCutoff = (typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\r\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),\r\n\t\t\tdayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,\r\n\t\t\tdayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,\r\n\t\t\tmonthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,\r\n\t\t\tmonthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,\r\n\t\t\tyear = -1,\r\n\t\t\tmonth = -1,\r\n\t\t\tday = -1,\r\n\t\t\tdoy = -1,\r\n\t\t\tliteral = false,\r\n\t\t\tdate,\r\n\t\t\t// Check whether a format character is doubled\r\n\t\t\tlookAhead = function(match) {\r\n\t\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\r\n\t\t\t\tif (matches) {\r\n\t\t\t\t\tiFormat++;\r\n\t\t\t\t}\r\n\t\t\t\treturn matches;\r\n\t\t\t},\r\n\t\t\t// Extract a number from the string value\r\n\t\t\tgetNumber = function(match) {\r\n\t\t\t\tvar isDoubled = lookAhead(match),\r\n\t\t\t\t\tsize = (match === \"@\" ? 14 : (match === \"!\" ? 20 :\r\n\t\t\t\t\t(match === \"y\" && isDoubled ? 4 : (match === \"o\" ? 3 : 2)))),\r\n\t\t\t\t\tdigits = new RegExp(\"^\\\\d{1,\" + size + \"}\"),\r\n\t\t\t\t\tnum = value.substring(iValue).match(digits);\r\n\t\t\t\tif (!num) {\r\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\r\n\t\t\t\t}\r\n\t\t\t\tiValue += num[0].length;\r\n\t\t\t\treturn parseInt(num[0], 10);\r\n\t\t\t},\r\n\t\t\t// Extract a name from the string value and convert to an index\r\n\t\t\tgetName = function(match, shortNames, longNames) {\r\n\t\t\t\tvar index = -1,\r\n\t\t\t\t\tnames = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {\r\n\t\t\t\t\t\treturn [ [k, v] ];\r\n\t\t\t\t\t}).sort(function (a, b) {\r\n\t\t\t\t\t\treturn -(a[1].length - b[1].length);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t$.each(names, function (i, pair) {\r\n\t\t\t\t\tvar name = pair[1];\r\n\t\t\t\t\tif (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {\r\n\t\t\t\t\t\tindex = pair[0];\r\n\t\t\t\t\t\tiValue += name.length;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tif (index !== -1) {\r\n\t\t\t\t\treturn index + 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t// Confirm that a literal character matches the string value\r\n\t\t\tcheckLiteral = function() {\r\n\t\t\t\tif (value.charAt(iValue) !== format.charAt(iFormat)) {\r\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\r\n\t\t\t\t}\r\n\t\t\t\tiValue++;\r\n\t\t\t};\r\n\r\n\t\tfor (iFormat = 0; iFormat < format.length; iFormat++) {\r\n\t\t\tif (literal) {\r\n\t\t\t\tif (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\r\n\t\t\t\t\tliteral = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcheckLiteral();\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tswitch (format.charAt(iFormat)) {\r\n\t\t\t\t\tcase \"d\":\r\n\t\t\t\t\t\tday = getNumber(\"d\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"D\":\r\n\t\t\t\t\t\tgetName(\"D\", dayNamesShort, dayNames);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"o\":\r\n\t\t\t\t\t\tdoy = getNumber(\"o\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"m\":\r\n\t\t\t\t\t\tmonth = getNumber(\"m\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"M\":\r\n\t\t\t\t\t\tmonth = getName(\"M\", monthNamesShort, monthNames);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"y\":\r\n\t\t\t\t\t\tyear = getNumber(\"y\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"@\":\r\n\t\t\t\t\t\tdate = new Date(getNumber(\"@\"));\r\n\t\t\t\t\t\tyear = date.getFullYear();\r\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\r\n\t\t\t\t\t\tday = date.getDate();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"!\":\r\n\t\t\t\t\t\tdate = new Date((getNumber(\"!\") - this._ticksTo1970) / 10000);\r\n\t\t\t\t\t\tyear = date.getFullYear();\r\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\r\n\t\t\t\t\t\tday = date.getDate();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"'\":\r\n\t\t\t\t\t\tif (lookAhead(\"'\")){\r\n\t\t\t\t\t\t\tcheckLiteral();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tliteral = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tcheckLiteral();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (iValue < value.length){\r\n\t\t\textra = value.substr(iValue);\r\n\t\t\tif (!/^\\s+/.test(extra)) {\r\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (year === -1) {\r\n\t\t\tyear = new Date().getFullYear();\r\n\t\t} else if (year < 100) {\r\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\r\n\t\t\t\t(year <= shortYearCutoff ? 0 : -100);\r\n\t\t}\r\n\r\n\t\tif (doy > -1) {\r\n\t\t\tmonth = 1;\r\n\t\t\tday = doy;\r\n\t\t\tdo {\r\n\t\t\t\tdim = this._getDaysInMonth(year, month - 1);\r\n\t\t\t\tif (day <= dim) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tmonth++;\r\n\t\t\t\tday -= dim;\r\n\t\t\t} while (true);\r\n\t\t}\r\n\r\n\t\tdate = this._daylightSavingAdjust(new Date(year, month - 1, day));\r\n\t\tif (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\r\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\r\n\t\t}\r\n\t\treturn date;\r\n\t},\r\n\r\n\t/* Standard date formats. */\r\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\r\n\tCOOKIE: \"D, dd M yy\",\r\n\tISO_8601: \"yy-mm-dd\",\r\n\tRFC_822: \"D, d M y\",\r\n\tRFC_850: \"DD, dd-M-y\",\r\n\tRFC_1036: \"D, d M y\",\r\n\tRFC_1123: \"D, d M yy\",\r\n\tRFC_2822: \"D, d M yy\",\r\n\tRSS: \"D, d M y\", // RFC 822\r\n\tTICKS: \"!\",\r\n\tTIMESTAMP: \"@\",\r\n\tW3C: \"yy-mm-dd\", // ISO 8601\r\n\r\n\t_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +\r\n\t\tMath.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),\r\n\r\n\t/* Format a date object into a string value.\r\n\t * The format can be combinations of the following:\r\n\t * d - day of month (no leading zero)\r\n\t * dd - day of month (two digit)\r\n\t * o - day of year (no leading zeros)\r\n\t * oo - day of year (three digit)\r\n\t * D - day name short\r\n\t * DD - day name long\r\n\t * m - month of year (no leading zero)\r\n\t * mm - month of year (two digit)\r\n\t * M - month name short\r\n\t * MM - month name long\r\n\t * y - year (two digit)\r\n\t * yy - year (four digit)\r\n\t * @ - Unix timestamp (ms since 01/01/1970)\r\n\t * ! - Windows ticks (100ns since 01/01/0001)\r\n\t * \"...\" - literal text\r\n\t * '' - single quote\r\n\t *\r\n\t * @param format string - the desired format of the date\r\n\t * @param date Date - the date value to format\r\n\t * @param settings Object - attributes include:\r\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\r\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\r\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\r\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\r\n\t * @return string - the date in the above format\r\n\t */\r\n\tformatDate: function (format, date, settings) {\r\n\t\tif (!date) {\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\r\n\t\tvar iFormat,\r\n\t\t\tdayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,\r\n\t\t\tdayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,\r\n\t\t\tmonthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,\r\n\t\t\tmonthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,\r\n\t\t\t// Check whether a format character is doubled\r\n\t\t\tlookAhead = function(match) {\r\n\t\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\r\n\t\t\t\tif (matches) {\r\n\t\t\t\t\tiFormat++;\r\n\t\t\t\t}\r\n\t\t\t\treturn matches;\r\n\t\t\t},\r\n\t\t\t// Format a number, with leading zero if necessary\r\n\t\t\tformatNumber = function(match, value, len) {\r\n\t\t\t\tvar num = \"\" + value;\r\n\t\t\t\tif (lookAhead(match)) {\r\n\t\t\t\t\twhile (num.length < len) {\r\n\t\t\t\t\t\tnum = \"0\" + num;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn num;\r\n\t\t\t},\r\n\t\t\t// Format a name, short or long as requested\r\n\t\t\tformatName = function(match, value, shortNames, longNames) {\r\n\t\t\t\treturn (lookAhead(match) ? longNames[value] : shortNames[value]);\r\n\t\t\t},\r\n\t\t\toutput = \"\",\r\n\t\t\tliteral = false;\r\n\r\n\t\tif (date) {\r\n\t\t\tfor (iFormat = 0; iFormat < format.length; iFormat++) {\r\n\t\t\t\tif (literal) {\r\n\t\t\t\t\tif (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\r\n\t\t\t\t\t\tliteral = false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\toutput += format.charAt(iFormat);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tswitch (format.charAt(iFormat)) {\r\n\t\t\t\t\t\tcase \"d\":\r\n\t\t\t\t\t\t\toutput += formatNumber(\"d\", date.getDate(), 2);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"D\":\r\n\t\t\t\t\t\t\toutput += formatName(\"D\", date.getDay(), dayNamesShort, dayNames);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"o\":\r\n\t\t\t\t\t\t\toutput += formatNumber(\"o\",\r\n\t\t\t\t\t\t\t\tMath.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"m\":\r\n\t\t\t\t\t\t\toutput += formatNumber(\"m\", date.getMonth() + 1, 2);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"M\":\r\n\t\t\t\t\t\t\toutput += formatName(\"M\", date.getMonth(), monthNamesShort, monthNames);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"y\":\r\n\t\t\t\t\t\t\toutput += (lookAhead(\"y\") ? date.getFullYear() :\r\n\t\t\t\t\t\t\t\t(date.getYear() % 100 < 10 ? \"0\" : \"\") + date.getYear() % 100);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"@\":\r\n\t\t\t\t\t\t\toutput += date.getTime();\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"!\":\r\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"'\":\r\n\t\t\t\t\t\t\tif (lookAhead(\"'\")) {\r\n\t\t\t\t\t\t\t\toutput += \"'\";\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tliteral = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\toutput += format.charAt(iFormat);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn output;\r\n\t},\r\n\r\n\t/* Extract all possible characters from the date format. */\r\n\t_possibleChars: function (format) {\r\n\t\tvar iFormat,\r\n\t\t\tchars = \"\",\r\n\t\t\tliteral = false,\r\n\t\t\t// Check whether a format character is doubled\r\n\t\t\tlookAhead = function(match) {\r\n\t\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\r\n\t\t\t\tif (matches) {\r\n\t\t\t\t\tiFormat++;\r\n\t\t\t\t}\r\n\t\t\t\treturn matches;\r\n\t\t\t};\r\n\r\n\t\tfor (iFormat = 0; iFormat < format.length; iFormat++) {\r\n\t\t\tif (literal) {\r\n\t\t\t\tif (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\r\n\t\t\t\t\tliteral = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tchars += format.charAt(iFormat);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tswitch (format.charAt(iFormat)) {\r\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\r\n\t\t\t\t\t\tchars += \"0123456789\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"D\": case \"M\":\r\n\t\t\t\t\t\treturn null; // Accept anything\r\n\t\t\t\t\tcase \"'\":\r\n\t\t\t\t\t\tif (lookAhead(\"'\")) {\r\n\t\t\t\t\t\t\tchars += \"'\";\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tliteral = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tchars += format.charAt(iFormat);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn chars;\r\n\t},\r\n\r\n\t/* Get a setting value, defaulting if necessary. */\r\n\t_get: function(inst, name) {\r\n\t\treturn inst.settings[name] !== undefined ?\r\n\t\t\tinst.settings[name] : this._defaults[name];\r\n\t},\r\n\r\n\t/* Parse existing date and initialise date picker. */\r\n\t_setDateFromField: function(inst, noDefault) {\r\n\t\tif (inst.input.val() === inst.lastVal) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar dateFormat = this._get(inst, \"dateFormat\"),\r\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\r\n\t\t\tdefaultDate = this._getDefaultDate(inst),\r\n\t\t\tdate = defaultDate,\r\n\t\t\tsettings = this._getFormatConfig(inst);\r\n\r\n\t\ttry {\r\n\t\t\tdate = this.parseDate(dateFormat, dates, settings) || defaultDate;\r\n\t\t} catch (event) {\r\n\t\t\tdates = (noDefault ? \"\" : dates);\r\n\t\t}\r\n\t\tinst.selectedDay = date.getDate();\r\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\r\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\r\n\t\tinst.currentDay = (dates ? date.getDate() : 0);\r\n\t\tinst.currentMonth = (dates ? date.getMonth() : 0);\r\n\t\tinst.currentYear = (dates ? date.getFullYear() : 0);\r\n\t\tthis._adjustInstDate(inst);\r\n\t},\r\n\r\n\t/* Retrieve the default date shown on opening. */\r\n\t_getDefaultDate: function(inst) {\r\n\t\treturn this._restrictMinMax(inst,\r\n\t\t\tthis._determineDate(inst, this._get(inst, \"defaultDate\"), new Date()));\r\n\t},\r\n\r\n\t/* A date may be specified as an exact value or a relative one. */\r\n\t_determineDate: function(inst, date, defaultDate) {\r\n\t\tvar offsetNumeric = function(offset) {\r\n\t\t\t\tvar date = new Date();\r\n\t\t\t\tdate.setDate(date.getDate() + offset);\r\n\t\t\t\treturn date;\r\n\t\t\t},\r\n\t\t\toffsetString = function(offset) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\treturn $.datepicker.parseDate($.datepicker._get(inst, \"dateFormat\"),\r\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig(inst));\r\n\t\t\t\t}\r\n\t\t\t\tcatch (e) {\r\n\t\t\t\t\t// Ignore\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar date = (offset.toLowerCase().match(/^c/) ?\r\n\t\t\t\t\t$.datepicker._getDate(inst) : null) || new Date(),\r\n\t\t\t\t\tyear = date.getFullYear(),\r\n\t\t\t\t\tmonth = date.getMonth(),\r\n\t\t\t\t\tday = date.getDate(),\r\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\r\n\t\t\t\t\tmatches = pattern.exec(offset);\r\n\r\n\t\t\t\twhile (matches) {\r\n\t\t\t\t\tswitch (matches[2] || \"d\") {\r\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\r\n\t\t\t\t\t\t\tday += parseInt(matches[1],10); break;\r\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\r\n\t\t\t\t\t\t\tday += parseInt(matches[1],10) * 7; break;\r\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\r\n\t\t\t\t\t\t\tmonth += parseInt(matches[1],10);\r\n\t\t\t\t\t\t\tday = Math.min(day, $.datepicker._getDaysInMonth(year, month));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\r\n\t\t\t\t\t\t\tyear += parseInt(matches[1],10);\r\n\t\t\t\t\t\t\tday = Math.min(day, $.datepicker._getDaysInMonth(year, month));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmatches = pattern.exec(offset);\r\n\t\t\t\t}\r\n\t\t\t\treturn new Date(year, month, day);\r\n\t\t\t},\r\n\t\t\tnewDate = (date == null || date === \"\" ? defaultDate : (typeof date === \"string\" ? offsetString(date) :\r\n\t\t\t\t(typeof date === \"number\" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));\r\n\r\n\t\tnewDate = (newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate);\r\n\t\tif (newDate) {\r\n\t\t\tnewDate.setHours(0);\r\n\t\t\tnewDate.setMinutes(0);\r\n\t\t\tnewDate.setSeconds(0);\r\n\t\t\tnewDate.setMilliseconds(0);\r\n\t\t}\r\n\t\treturn this._daylightSavingAdjust(newDate);\r\n\t},\r\n\r\n\t/* Handle switch to/from daylight saving.\r\n\t * Hours may be non-zero on daylight saving cut-over:\r\n\t * > 12 when midnight changeover, but then cannot generate\r\n\t * midnight datetime, so jump to 1AM, otherwise reset.\r\n\t * @param date (Date) the date to check\r\n\t * @return (Date) the corrected date\r\n\t */\r\n\t_daylightSavingAdjust: function(date) {\r\n\t\tif (!date) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tdate.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\r\n\t\treturn date;\r\n\t},\r\n\r\n\t/* Set the date(s) directly. */\r\n\t_setDate: function(inst, date, noChange) {\r\n\t\tvar clear = !date,\r\n\t\t\torigMonth = inst.selectedMonth,\r\n\t\t\torigYear = inst.selectedYear,\r\n\t\t\tnewDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));\r\n\r\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\r\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\r\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\r\n\t\tif ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {\r\n\t\t\tthis._notifyChange(inst);\r\n\t\t}\r\n\t\tthis._adjustInstDate(inst);\r\n\t\tif (inst.input) {\r\n\t\t\tinst.input.val(clear ? \"\" : this._formatDate(inst));\r\n\t\t}\r\n\t},\r\n\r\n\t/* Retrieve the date(s) directly. */\r\n\t_getDate: function(inst) {\r\n\t\tvar startDate = (!inst.currentYear || (inst.input && inst.input.val() === \"\") ? null :\r\n\t\t\tthis._daylightSavingAdjust(new Date(\r\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay)));\r\n\t\t\treturn startDate;\r\n\t},\r\n\r\n\t/* Attach the onxxx handlers. These are declared statically so\r\n\t * they work with static code transformers like Caja.\r\n\t */\r\n\t_attachHandlers: function(inst) {\r\n\t\tvar stepMonths = this._get(inst, \"stepMonths\"),\r\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\r\n\t\tinst.dpDiv.find(\"[data-handler]\").map(function () {\r\n\t\t\tvar handler = {\r\n\t\t\t\tprev: function () {\r\n\t\t\t\t\t$.datepicker._adjustDate(id, -stepMonths, \"M\");\r\n\t\t\t\t},\r\n\t\t\t\tnext: function () {\r\n\t\t\t\t\t$.datepicker._adjustDate(id, +stepMonths, \"M\");\r\n\t\t\t\t},\r\n\t\t\t\thide: function () {\r\n\t\t\t\t\t$.datepicker._hideDatepicker();\r\n\t\t\t\t},\r\n\t\t\t\ttoday: function () {\r\n\t\t\t\t\t$.datepicker._gotoToday(id);\r\n\t\t\t\t},\r\n\t\t\t\tselectDay: function () {\r\n\t\t\t\t\t$.datepicker._selectDay(id, +this.getAttribute(\"data-month\"), +this.getAttribute(\"data-year\"), this);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t},\r\n\t\t\t\tselectMonth: function () {\r\n\t\t\t\t\t$.datepicker._selectMonthYear(id, this, \"M\");\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t},\r\n\t\t\t\tselectYear: function () {\r\n\t\t\t\t\t$.datepicker._selectMonthYear(id, this, \"Y\");\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t$(this).bind(this.getAttribute(\"data-event\"), handler[this.getAttribute(\"data-handler\")]);\r\n\t\t});\r\n\t},\r\n\r\n\t/* Generate the HTML for the current state of the date picker. */\r\n\t_generateHTML: function(inst) {\r\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\r\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\r\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\r\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\r\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\r\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\r\n\t\t\ttempDate = new Date(),\r\n\t\t\ttoday = this._daylightSavingAdjust(\r\n\t\t\t\tnew Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time\r\n\t\t\tisRTL = this._get(inst, \"isRTL\"),\r\n\t\t\tshowButtonPanel = this._get(inst, \"showButtonPanel\"),\r\n\t\t\thideIfNoPrevNext = this._get(inst, \"hideIfNoPrevNext\"),\r\n\t\t\tnavigationAsDateFormat = this._get(inst, \"navigationAsDateFormat\"),\r\n\t\t\tnumMonths = this._getNumberOfMonths(inst),\r\n\t\t\tshowCurrentAtPos = this._get(inst, \"showCurrentAtPos\"),\r\n\t\t\tstepMonths = this._get(inst, \"stepMonths\"),\r\n\t\t\tisMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),\r\n\t\t\tcurrentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :\r\n\t\t\t\tnew Date(inst.currentYear, inst.currentMonth, inst.currentDay))),\r\n\t\t\tminDate = this._getMinMaxDate(inst, \"min\"),\r\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\"),\r\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\r\n\t\t\tdrawYear = inst.drawYear;\r\n\r\n\t\tif (drawMonth < 0) {\r\n\t\t\tdrawMonth += 12;\r\n\t\t\tdrawYear--;\r\n\t\t}\r\n\t\tif (maxDate) {\r\n\t\t\tmaxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),\r\n\t\t\t\tmaxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));\r\n\t\t\tmaxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);\r\n\t\t\twhile (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {\r\n\t\t\t\tdrawMonth--;\r\n\t\t\t\tif (drawMonth < 0) {\r\n\t\t\t\t\tdrawMonth = 11;\r\n\t\t\t\t\tdrawYear--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tinst.drawMonth = drawMonth;\r\n\t\tinst.drawYear = drawYear;\r\n\r\n\t\tprevText = this._get(inst, \"prevText\");\r\n\t\tprevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,\r\n\t\t\tthis._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),\r\n\t\t\tthis._getFormatConfig(inst)));\r\n\r\n\t\tprev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?\r\n\t\t\t\"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'\" +\r\n\t\t\t\" title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\") + \"'>\" + prevText + \"</span></a>\" :\r\n\t\t\t(hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='\"+ prevText +\"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\") + \"'>\" + prevText + \"</span></a>\"));\r\n\r\n\t\tnextText = this._get(inst, \"nextText\");\r\n\t\tnextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,\r\n\t\t\tthis._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),\r\n\t\t\tthis._getFormatConfig(inst)));\r\n\r\n\t\tnext = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?\r\n\t\t\t\"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'\" +\r\n\t\t\t\" title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\") + \"'>\" + nextText + \"</span></a>\" :\r\n\t\t\t(hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='\"+ nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\") + \"'>\" + nextText + \"</span></a>\"));\r\n\r\n\t\tcurrentText = this._get(inst, \"currentText\");\r\n\t\tgotoDate = (this._get(inst, \"gotoCurrent\") && inst.currentDay ? currentDate : today);\r\n\t\tcurrentText = (!navigationAsDateFormat ? currentText :\r\n\t\t\tthis.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));\r\n\r\n\t\tcontrols = (!inst.inline ? \"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>\" +\r\n\t\t\tthis._get(inst, \"closeText\") + \"</button>\" : \"\");\r\n\r\n\t\tbuttonPanel = (showButtonPanel) ? \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" + (isRTL ? controls : \"\") +\r\n\t\t\t(this._isInRange(inst, gotoDate) ? \"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'\" +\r\n\t\t\t\">\" + currentText + \"</button>\" : \"\") + (isRTL ? \"\" : controls) + \"</div>\" : \"\";\r\n\r\n\t\tfirstDay = parseInt(this._get(inst, \"firstDay\"),10);\r\n\t\tfirstDay = (isNaN(firstDay) ? 0 : firstDay);\r\n\r\n\t\tshowWeek = this._get(inst, \"showWeek\");\r\n\t\tdayNames = this._get(inst, \"dayNames\");\r\n\t\tdayNamesMin = this._get(inst, \"dayNamesMin\");\r\n\t\tmonthNames = this._get(inst, \"monthNames\");\r\n\t\tmonthNamesShort = this._get(inst, \"monthNamesShort\");\r\n\t\tbeforeShowDay = this._get(inst, \"beforeShowDay\");\r\n\t\tshowOtherMonths = this._get(inst, \"showOtherMonths\");\r\n\t\tselectOtherMonths = this._get(inst, \"selectOtherMonths\");\r\n\t\tdefaultDate = this._getDefaultDate(inst);\r\n\t\thtml = \"\";\r\n\t\tdow;\r\n\t\tfor (row = 0; row < numMonths[0]; row++) {\r\n\t\t\tgroup = \"\";\r\n\t\t\tthis.maxRows = 4;\r\n\t\t\tfor (col = 0; col < numMonths[1]; col++) {\r\n\t\t\t\tselectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));\r\n\t\t\t\tcornerClass = \" ui-corner-all\";\r\n\t\t\t\tcalender = \"\";\r\n\t\t\t\tif (isMultiMonth) {\r\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\r\n\t\t\t\t\tif (numMonths[1] > 1) {\r\n\t\t\t\t\t\tswitch (col) {\r\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\r\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + (isRTL ? \"right\" : \"left\"); break;\r\n\t\t\t\t\t\t\tcase numMonths[1]-1: calender += \" ui-datepicker-group-last\";\r\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + (isRTL ? \"left\" : \"right\"); break;\r\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcalender += \"'>\";\r\n\t\t\t\t}\r\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\r\n\t\t\t\t\t(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : \"\") +\r\n\t\t\t\t\t(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : \"\") +\r\n\t\t\t\t\tthis._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,\r\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers\r\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\r\n\t\t\t\t\t\"<tr>\";\r\n\t\t\t\tthead = (showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get(inst, \"weekHeader\") + \"</th>\" : \"\");\r\n\t\t\t\tfor (dow = 0; dow < 7; dow++) { // days of the week\r\n\t\t\t\t\tday = (dow + firstDay) % 7;\r\n\t\t\t\t\tthead += \"<th\" + ((dow + firstDay + 6) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\") + \">\" +\r\n\t\t\t\t\t\t\"<span title='\" + dayNames[day] + \"'>\" + dayNamesMin[day] + \"</span></th>\";\r\n\t\t\t\t}\r\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\r\n\t\t\t\tdaysInMonth = this._getDaysInMonth(drawYear, drawMonth);\r\n\t\t\t\tif (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {\r\n\t\t\t\t\tinst.selectedDay = Math.min(inst.selectedDay, daysInMonth);\r\n\t\t\t\t}\r\n\t\t\t\tleadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;\r\n\t\t\t\tcurRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate\r\n\t\t\t\tnumRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)\r\n\t\t\t\tthis.maxRows = numRows;\r\n\t\t\t\tprintDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));\r\n\t\t\t\tfor (dRow = 0; dRow < numRows; dRow++) { // create date picker rows\r\n\t\t\t\t\tcalender += \"<tr>\";\r\n\t\t\t\t\ttbody = (!showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\r\n\t\t\t\t\t\tthis._get(inst, \"calculateWeek\")(printDate) + \"</td>\");\r\n\t\t\t\t\tfor (dow = 0; dow < 7; dow++) { // create date picker days\r\n\t\t\t\t\t\tdaySettings = (beforeShowDay ?\r\n\t\t\t\t\t\t\tbeforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, \"\"]);\r\n\t\t\t\t\t\totherMonth = (printDate.getMonth() !== drawMonth);\r\n\t\t\t\t\t\tunselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||\r\n\t\t\t\t\t\t\t(minDate && printDate < minDate) || (maxDate && printDate > maxDate);\r\n\t\t\t\t\t\ttbody += \"<td class='\" +\r\n\t\t\t\t\t\t\t((dow + firstDay + 6) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\") + // highlight weekends\r\n\t\t\t\t\t\t\t(otherMonth ? \" ui-datepicker-other-month\" : \"\") + // highlight days from other months\r\n\t\t\t\t\t\t\t((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key\r\n\t\t\t\t\t\t\t(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?\r\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\r\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\") + // highlight selected day\r\n\t\t\t\t\t\t\t(unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\": \"\") + // highlight unselectable days\r\n\t\t\t\t\t\t\t(otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[1] + // highlight custom dates\r\n\t\t\t\t\t\t\t(printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\") + // highlight selected day\r\n\t\t\t\t\t\t\t(printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\")) + \"'\" + // highlight today (if different)\r\n\t\t\t\t\t\t\t((!otherMonth || showOtherMonths) && daySettings[2] ? \" title='\" + daySettings[2].replace(/'/g, \"'\") + \"'\" : \"\") + // cell title\r\n\t\t\t\t\t\t\t(unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\") + \">\" + // actions\r\n\t\t\t\t\t\t\t(otherMonth && !showOtherMonths ? \" \" : // display for other months\r\n\t\t\t\t\t\t\t(unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\r\n\t\t\t\t\t\t\t(printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\") +\r\n\t\t\t\t\t\t\t(printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\") + // highlight selected day\r\n\t\t\t\t\t\t\t(otherMonth ? \" ui-priority-secondary\" : \"\") + // distinguish dates from other months\r\n\t\t\t\t\t\t\t\"' href='#'>\" + printDate.getDate() + \"</a>\")) + \"</td>\"; // display selectable date\r\n\t\t\t\t\t\tprintDate.setDate(printDate.getDate() + 1);\r\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust(printDate);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcalender += tbody + \"</tr>\";\r\n\t\t\t\t}\r\n\t\t\t\tdrawMonth++;\r\n\t\t\t\tif (drawMonth > 11) {\r\n\t\t\t\t\tdrawMonth = 0;\r\n\t\t\t\t\tdrawYear++;\r\n\t\t\t\t}\r\n\t\t\t\tcalender += \"</tbody></table>\" + (isMultiMonth ? \"</div>\" +\r\n\t\t\t\t\t\t\t((numMonths[0] > 0 && col === numMonths[1]-1) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\") : \"\");\r\n\t\t\t\tgroup += calender;\r\n\t\t\t}\r\n\t\t\thtml += group;\r\n\t\t}\r\n\t\thtml += buttonPanel;\r\n\t\tinst._keyEvent = false;\r\n\t\treturn html;\r\n\t},\r\n\r\n\t/* Generate the month and year header. */\r\n\t_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,\r\n\t\t\tsecondary, monthNames, monthNamesShort) {\r\n\r\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\r\n\t\t\tchangeMonth = this._get(inst, \"changeMonth\"),\r\n\t\t\tchangeYear = this._get(inst, \"changeYear\"),\r\n\t\t\tshowMonthAfterYear = this._get(inst, \"showMonthAfterYear\"),\r\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\r\n\t\t\tmonthHtml = \"\";\r\n\r\n\t\t// month selection\r\n\t\tif (secondary || !changeMonth) {\r\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[drawMonth] + \"</span>\";\r\n\t\t} else {\r\n\t\t\tinMinYear = (minDate && minDate.getFullYear() === drawYear);\r\n\t\t\tinMaxYear = (maxDate && maxDate.getFullYear() === drawYear);\r\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>\";\r\n\t\t\tfor ( month = 0; month < 12; month++) {\r\n\t\t\t\tif ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {\r\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\r\n\t\t\t\t\t\t(month === drawMonth ? \" selected='selected'\" : \"\") +\r\n\t\t\t\t\t\t\">\" + monthNamesShort[month] + \"</option>\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tmonthHtml += \"</select>\";\r\n\t\t}\r\n\r\n\t\tif (!showMonthAfterYear) {\r\n\t\t\thtml += monthHtml + (secondary || !(changeMonth && changeYear) ? \" \" : \"\");\r\n\t\t}\r\n\r\n\t\t// year selection\r\n\t\tif ( !inst.yearshtml ) {\r\n\t\t\tinst.yearshtml = \"\";\r\n\t\t\tif (secondary || !changeYear) {\r\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\r\n\t\t\t} else {\r\n\t\t\t\t// determine range of years to display\r\n\t\t\t\tyears = this._get(inst, \"yearRange\").split(\":\");\r\n\t\t\t\tthisYear = new Date().getFullYear();\r\n\t\t\t\tdetermineYear = function(value) {\r\n\t\t\t\t\tvar year = (value.match(/c[+\\-].*/) ? drawYear + parseInt(value.substring(1), 10) :\r\n\t\t\t\t\t\t(value.match(/[+\\-].*/) ? thisYear + parseInt(value, 10) :\r\n\t\t\t\t\t\tparseInt(value, 10)));\r\n\t\t\t\t\treturn (isNaN(year) ? thisYear : year);\r\n\t\t\t\t};\r\n\t\t\t\tyear = determineYear(years[0]);\r\n\t\t\t\tendYear = Math.max(year, determineYear(years[1] || \"\"));\r\n\t\t\t\tyear = (minDate ? Math.max(year, minDate.getFullYear()) : year);\r\n\t\t\t\tendYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);\r\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>\";\r\n\t\t\t\tfor (; year <= endYear; year++) {\r\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\r\n\t\t\t\t\t\t(year === drawYear ? \" selected='selected'\" : \"\") +\r\n\t\t\t\t\t\t\">\" + year + \"</option>\";\r\n\t\t\t\t}\r\n\t\t\t\tinst.yearshtml += \"</select>\";\r\n\r\n\t\t\t\thtml += inst.yearshtml;\r\n\t\t\t\tinst.yearshtml = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thtml += this._get(inst, \"yearSuffix\");\r\n\t\tif (showMonthAfterYear) {\r\n\t\t\thtml += (secondary || !(changeMonth && changeYear) ? \" \" : \"\") + monthHtml;\r\n\t\t}\r\n\t\thtml += \"</div>\"; // Close datepicker_header\r\n\t\treturn html;\r\n\t},\r\n\r\n\t/* Adjust one of the date sub-fields. */\r\n\t_adjustInstDate: function(inst, offset, period) {\r\n\t\tvar year = inst.drawYear + (period === \"Y\" ? offset : 0),\r\n\t\t\tmonth = inst.drawMonth + (period === \"M\" ? offset : 0),\r\n\t\t\tday = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === \"D\" ? offset : 0),\r\n\t\t\tdate = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));\r\n\r\n\t\tinst.selectedDay = date.getDate();\r\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\r\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\r\n\t\tif (period === \"M\" || period === \"Y\") {\r\n\t\t\tthis._notifyChange(inst);\r\n\t\t}\r\n\t},\r\n\r\n\t/* Ensure a date is within any min/max bounds. */\r\n\t_restrictMinMax: function(inst, date) {\r\n\t\tvar minDate = this._getMinMaxDate(inst, \"min\"),\r\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\"),\r\n\t\t\tnewDate = (minDate && date < minDate ? minDate : date);\r\n\t\treturn (maxDate && newDate > maxDate ? maxDate : newDate);\r\n\t},\r\n\r\n\t/* Notify change of month/year. */\r\n\t_notifyChange: function(inst) {\r\n\t\tvar onChange = this._get(inst, \"onChangeMonthYear\");\r\n\t\tif (onChange) {\r\n\t\t\tonChange.apply((inst.input ? inst.input[0] : null),\r\n\t\t\t\t[inst.selectedYear, inst.selectedMonth + 1, inst]);\r\n\t\t}\r\n\t},\r\n\r\n\t/* Determine the number of months to show. */\r\n\t_getNumberOfMonths: function(inst) {\r\n\t\tvar numMonths = this._get(inst, \"numberOfMonths\");\r\n\t\treturn (numMonths == null ? [1, 1] : (typeof numMonths === \"number\" ? [1, numMonths] : numMonths));\r\n\t},\r\n\r\n\t/* Determine the current maximum date - ensure no time components are set. */\r\n\t_getMinMaxDate: function(inst, minMax) {\r\n\t\treturn this._determineDate(inst, this._get(inst, minMax + \"Date\"), null);\r\n\t},\r\n\r\n\t/* Find the number of days in a given month. */\r\n\t_getDaysInMonth: function(year, month) {\r\n\t\treturn 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();\r\n\t},\r\n\r\n\t/* Find the day of the week of the first of a month. */\r\n\t_getFirstDayOfMonth: function(year, month) {\r\n\t\treturn new Date(year, month, 1).getDay();\r\n\t},\r\n\r\n\t/* Determines if we should allow a \"next/prev\" month display change. */\r\n\t_canAdjustMonth: function(inst, offset, curYear, curMonth) {\r\n\t\tvar numMonths = this._getNumberOfMonths(inst),\r\n\t\t\tdate = this._daylightSavingAdjust(new Date(curYear,\r\n\t\t\tcurMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));\r\n\r\n\t\tif (offset < 0) {\r\n\t\t\tdate.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));\r\n\t\t}\r\n\t\treturn this._isInRange(inst, date);\r\n\t},\r\n\r\n\t/* Is the given date in the accepted range? */\r\n\t_isInRange: function(inst, date) {\r\n\t\tvar yearSplit, currentYear,\r\n\t\t\tminDate = this._getMinMaxDate(inst, \"min\"),\r\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\"),\r\n\t\t\tminYear = null,\r\n\t\t\tmaxYear = null,\r\n\t\t\tyears = this._get(inst, \"yearRange\");\r\n\t\t\tif (years){\r\n\t\t\t\tyearSplit = years.split(\":\");\r\n\t\t\t\tcurrentYear = new Date().getFullYear();\r\n\t\t\t\tminYear = parseInt(yearSplit[0], 10);\r\n\t\t\t\tmaxYear = parseInt(yearSplit[1], 10);\r\n\t\t\t\tif ( yearSplit[0].match(/[+\\-].*/) ) {\r\n\t\t\t\t\tminYear += currentYear;\r\n\t\t\t\t}\r\n\t\t\t\tif ( yearSplit[1].match(/[+\\-].*/) ) {\r\n\t\t\t\t\tmaxYear += currentYear;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\treturn ((!minDate || date.getTime() >= minDate.getTime()) &&\r\n\t\t\t(!maxDate || date.getTime() <= maxDate.getTime()) &&\r\n\t\t\t(!minYear || date.getFullYear() >= minYear) &&\r\n\t\t\t(!maxYear || date.getFullYear() <= maxYear));\r\n\t},\r\n\r\n\t/* Provide the configuration settings for formatting/parsing. */\r\n\t_getFormatConfig: function(inst) {\r\n\t\tvar shortYearCutoff = this._get(inst, \"shortYearCutoff\");\r\n\t\tshortYearCutoff = (typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\r\n\t\t\tnew Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));\r\n\t\treturn {shortYearCutoff: shortYearCutoff,\r\n\t\t\tdayNamesShort: this._get(inst, \"dayNamesShort\"), dayNames: this._get(inst, \"dayNames\"),\r\n\t\t\tmonthNamesShort: this._get(inst, \"monthNamesShort\"), monthNames: this._get(inst, \"monthNames\")};\r\n\t},\r\n\r\n\t/* Format the given date for display. */\r\n\t_formatDate: function(inst, day, month, year) {\r\n\t\tif (!day) {\r\n\t\t\tinst.currentDay = inst.selectedDay;\r\n\t\t\tinst.currentMonth = inst.selectedMonth;\r\n\t\t\tinst.currentYear = inst.selectedYear;\r\n\t\t}\r\n\t\tvar date = (day ? (typeof day === \"object\" ? day :\r\n\t\t\tthis._daylightSavingAdjust(new Date(year, month, day))) :\r\n\t\t\tthis._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));\r\n\t\treturn this.formatDate(this._get(inst, \"dateFormat\"), date, this._getFormatConfig(inst));\r\n\t}\r\n});\r\n\r\n/*\r\n * Bind hover events for datepicker elements.\r\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\r\n * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\r\n */\r\nfunction bindHover(dpDiv) {\r\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\r\n\treturn dpDiv.delegate(selector, \"mouseout\", function() {\r\n\t\t\t$(this).removeClass(\"ui-state-hover\");\r\n\t\t\tif (this.className.indexOf(\"ui-datepicker-prev\") !== -1) {\r\n\t\t\t\t$(this).removeClass(\"ui-datepicker-prev-hover\");\r\n\t\t\t}\r\n\t\t\tif (this.className.indexOf(\"ui-datepicker-next\") !== -1) {\r\n\t\t\t\t$(this).removeClass(\"ui-datepicker-next-hover\");\r\n\t\t\t}\r\n\t\t})\r\n\t\t.delegate(selector, \"mouseover\", function(){\r\n\t\t\tif (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {\r\n\t\t\t\t$(this).parents(\".ui-datepicker-calendar\").find(\"a\").removeClass(\"ui-state-hover\");\r\n\t\t\t\t$(this).addClass(\"ui-state-hover\");\r\n\t\t\t\tif (this.className.indexOf(\"ui-datepicker-prev\") !== -1) {\r\n\t\t\t\t\t$(this).addClass(\"ui-datepicker-prev-hover\");\r\n\t\t\t\t}\r\n\t\t\t\tif (this.className.indexOf(\"ui-datepicker-next\") !== -1) {\r\n\t\t\t\t\t$(this).addClass(\"ui-datepicker-next-hover\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n}\r\n\r\n/* jQuery extend now ignores nulls! */\r\nfunction extendRemove(target, props) {\r\n\t$.extend(target, props);\r\n\tfor (var name in props) {\r\n\t\tif (props[name] == null) {\r\n\t\t\ttarget[name] = props[name];\r\n\t\t}\r\n\t}\r\n\treturn target;\r\n}\r\n\r\n/* Invoke the datepicker functionality.\r\n @param options string - a command, optionally followed by additional parameters or\r\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\r\n @return jQuery object */\r\n$.fn.datepicker = function(options){\r\n\r\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\r\n\tif ( !this.length ) {\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/* Initialise the date picker. */\r\n\tif (!$.datepicker.initialized) {\r\n\t\t$(document).mousedown($.datepicker._checkExternalClick);\r\n\t\t$.datepicker.initialized = true;\r\n\t}\r\n\r\n\t/* Append datepicker main container to body if not exist. */\r\n\tif ($(\"#\"+$.datepicker._mainDivId).length === 0) {\r\n\t\t$(\"body\").append($.datepicker.dpDiv);\r\n\t}\r\n\r\n\tvar otherArgs = Array.prototype.slice.call(arguments, 1);\r\n\tif (typeof options === \"string\" && (options === \"isDisabled\" || options === \"getDate\" || options === \"widget\")) {\r\n\t\treturn $.datepicker[\"_\" + options + \"Datepicker\"].\r\n\t\t\tapply($.datepicker, [this[0]].concat(otherArgs));\r\n\t}\r\n\tif (options === \"option\" && arguments.length === 2 && typeof arguments[1] === \"string\") {\r\n\t\treturn $.datepicker[\"_\" + options + \"Datepicker\"].\r\n\t\t\tapply($.datepicker, [this[0]].concat(otherArgs));\r\n\t}\r\n\treturn this.each(function() {\r\n\t\ttypeof options === \"string\" ?\r\n\t\t\t$.datepicker[\"_\" + options + \"Datepicker\"].\r\n\t\t\t\tapply($.datepicker, [this].concat(otherArgs)) :\r\n\t\t\t$.datepicker._attachDatepicker(this, options);\r\n\t});\r\n};\r\n\r\n$.datepicker = new Datepicker(); // singleton instance\r\n$.datepicker.initialized = false;\r\n$.datepicker.uuid = new Date().getTime();\r\n$.datepicker.version = \"1.10.4\";\r\n\r\n})(jQuery);\r\n(function( $, undefined ) {\r\n\r\nvar sizeRelatedOptions = {\r\n\t\tbuttons: true,\r\n\t\theight: true,\r\n\t\tmaxHeight: true,\r\n\t\tmaxWidth: true,\r\n\t\tminHeight: true,\r\n\t\tminWidth: true,\r\n\t\twidth: true\r\n\t},\r\n\tresizableRelatedOptions = {\r\n\t\tmaxHeight: true,\r\n\t\tmaxWidth: true,\r\n\t\tminHeight: true,\r\n\t\tminWidth: true\r\n\t};\r\n\r\n$.widget( \"ui.dialog\", {\r\n\tversion: \"1.10.4\",\r\n\toptions: {\r\n\t\tappendTo: \"body\",\r\n\t\tautoOpen: true,\r\n\t\tbuttons: [],\r\n\t\tcloseOnEscape: true,\r\n\t\tcloseText: \"close\",\r\n\t\tdialogClass: \"\",\r\n\t\tdraggable: true,\r\n\t\thide: null,\r\n\t\theight: \"auto\",\r\n\t\tmaxHeight: null,\r\n\t\tmaxWidth: null,\r\n\t\tminHeight: 150,\r\n\t\tminWidth: 150,\r\n\t\tmodal: false,\r\n\t\tposition: {\r\n\t\t\tmy: \"center\",\r\n\t\t\tat: \"center\",\r\n\t\t\tof: window,\r\n\t\t\tcollision: \"fit\",\r\n\t\t\t// Ensure the titlebar is always visible\r\n\t\t\tusing: function( pos ) {\r\n\t\t\t\tvar topOffset = $( this ).css( pos ).offset().top;\r\n\t\t\t\tif ( topOffset < 0 ) {\r\n\t\t\t\t\t$( this ).css( \"top\", pos.top - topOffset );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tresizable: true,\r\n\t\tshow: null,\r\n\t\ttitle: null,\r\n\t\twidth: 300,\r\n\r\n\t\t// callbacks\r\n\t\tbeforeClose: null,\r\n\t\tclose: null,\r\n\t\tdrag: null,\r\n\t\tdragStart: null,\r\n\t\tdragStop: null,\r\n\t\tfocus: null,\r\n\t\topen: null,\r\n\t\tresize: null,\r\n\t\tresizeStart: null,\r\n\t\tresizeStop: null\r\n\t},\r\n\r\n\t_create: function() {\r\n\t\tthis.originalCss = {\r\n\t\t\tdisplay: this.element[0].style.display,\r\n\t\t\twidth: this.element[0].style.width,\r\n\t\t\tminHeight: this.element[0].style.minHeight,\r\n\t\t\tmaxHeight: this.element[0].style.maxHeight,\r\n\t\t\theight: this.element[0].style.height\r\n\t\t};\r\n\t\tthis.originalPosition = {\r\n\t\t\tparent: this.element.parent(),\r\n\t\t\tindex: this.element.parent().children().index( this.element )\r\n\t\t};\r\n\t\tthis.originalTitle = this.element.attr(\"title\");\r\n\t\tthis.options.title = this.options.title || this.originalTitle;\r\n\r\n\t\tthis._createWrapper();\r\n\r\n\t\tthis.element\r\n\t\t\t.show()\r\n\t\t\t.removeAttr(\"title\")\r\n\t\t\t.addClass(\"ui-dialog-content ui-widget-content\")\r\n\t\t\t.appendTo( this.uiDialog );\r\n\r\n\t\tthis._createTitlebar();\r\n\t\tthis._createButtonPane();\r\n\r\n\t\tif ( this.options.draggable && $.fn.draggable ) {\r\n\t\t\tthis._makeDraggable();\r\n\t\t}\r\n\t\tif ( this.options.resizable && $.fn.resizable ) {\r\n\t\t\tthis._makeResizable();\r\n\t\t}\r\n\r\n\t\tthis._isOpen = false;\r\n\t},\r\n\r\n\t_init: function() {\r\n\t\tif ( this.options.autoOpen ) {\r\n\t\t\tthis.open();\r\n\t\t}\r\n\t},\r\n\r\n\t_appendTo: function() {\r\n\t\tvar element = this.options.appendTo;\r\n\t\tif ( element && (element.jquery || element.nodeType) ) {\r\n\t\t\treturn $( element );\r\n\t\t}\r\n\t\treturn this.document.find( element || \"body\" ).eq( 0 );\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tvar next,\r\n\t\t\toriginalPosition = this.originalPosition;\r\n\r\n\t\tthis._destroyOverlay();\r\n\r\n\t\tthis.element\r\n\t\t\t.removeUniqueId()\r\n\t\t\t.removeClass(\"ui-dialog-content ui-widget-content\")\r\n\t\t\t.css( this.originalCss )\r\n\t\t\t// Without detaching first, the following becomes really slow\r\n\t\t\t.detach();\r\n\r\n\t\tthis.uiDialog.stop( true, true ).remove();\r\n\r\n\t\tif ( this.originalTitle ) {\r\n\t\t\tthis.element.attr( \"title\", this.originalTitle );\r\n\t\t}\r\n\r\n\t\tnext = originalPosition.parent.children().eq( originalPosition.index );\r\n\t\t// Don't try to place the dialog next to itself (#8613)\r\n\t\tif ( next.length && next[0] !== this.element[0] ) {\r\n\t\t\tnext.before( this.element );\r\n\t\t} else {\r\n\t\t\toriginalPosition.parent.append( this.element );\r\n\t\t}\r\n\t},\r\n\r\n\twidget: function() {\r\n\t\treturn this.uiDialog;\r\n\t},\r\n\r\n\tdisable: $.noop,\r\n\tenable: $.noop,\r\n\r\n\tclose: function( event ) {\r\n\t\tvar activeElement,\r\n\t\t\tthat = this;\r\n\r\n\t\tif ( !this._isOpen || this._trigger( \"beforeClose\", event ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._isOpen = false;\r\n\t\tthis._destroyOverlay();\r\n\r\n\t\tif ( !this.opener.filter(\":focusable\").focus().length ) {\r\n\r\n\t\t\t// support: IE9\r\n\t\t\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\r\n\t\t\ttry {\r\n\t\t\t\tactiveElement = this.document[ 0 ].activeElement;\r\n\r\n\t\t\t\t// Support: IE9, IE10\r\n\t\t\t\t// If the <body> is blurred, IE will switch windows, see #4520\r\n\t\t\t\tif ( activeElement && activeElement.nodeName.toLowerCase() !== \"body\" ) {\r\n\r\n\t\t\t\t\t// Hiding a focused element doesn't trigger blur in WebKit\r\n\t\t\t\t\t// so in case we have nothing to focus on, explicitly blur the active element\r\n\t\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=47182\r\n\t\t\t\t\t$( activeElement ).blur();\r\n\t\t\t\t}\r\n\t\t\t} catch ( error ) {}\r\n\t\t}\r\n\r\n\t\tthis._hide( this.uiDialog, this.options.hide, function() {\r\n\t\t\tthat._trigger( \"close\", event );\r\n\t\t});\r\n\t},\r\n\r\n\tisOpen: function() {\r\n\t\treturn this._isOpen;\r\n\t},\r\n\r\n\tmoveToTop: function() {\r\n\t\tthis._moveToTop();\r\n\t},\r\n\r\n\t_moveToTop: function( event, silent ) {\r\n\t\tvar moved = !!this.uiDialog.nextAll(\":visible\").insertBefore( this.uiDialog ).length;\r\n\t\tif ( moved && !silent ) {\r\n\t\t\tthis._trigger( \"focus\", event );\r\n\t\t}\r\n\t\treturn moved;\r\n\t},\r\n\r\n\topen: function() {\r\n\t\tvar that = this;\r\n\t\tif ( this._isOpen ) {\r\n\t\t\tif ( this._moveToTop() ) {\r\n\t\t\t\tthis._focusTabbable();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._isOpen = true;\r\n\t\tthis.opener = $( this.document[0].activeElement );\r\n\r\n\t\tthis._size();\r\n\t\tthis._position();\r\n\t\tthis._createOverlay();\r\n\t\tthis._moveToTop( null, true );\r\n\t\tthis._show( this.uiDialog, this.options.show, function() {\r\n\t\t\tthat._focusTabbable();\r\n\t\t\tthat._trigger(\"focus\");\r\n\t\t});\r\n\r\n\t\tthis._trigger(\"open\");\r\n\t},\r\n\r\n\t_focusTabbable: function() {\r\n\t\t// Set focus to the first match:\r\n\t\t// 1. First element inside the dialog matching [autofocus]\r\n\t\t// 2. Tabbable element inside the content element\r\n\t\t// 3. Tabbable element inside the buttonpane\r\n\t\t// 4. The close button\r\n\t\t// 5. The dialog itself\r\n\t\tvar hasFocus = this.element.find(\"[autofocus]\");\r\n\t\tif ( !hasFocus.length ) {\r\n\t\t\thasFocus = this.element.find(\":tabbable\");\r\n\t\t}\r\n\t\tif ( !hasFocus.length ) {\r\n\t\t\thasFocus = this.uiDialogButtonPane.find(\":tabbable\");\r\n\t\t}\r\n\t\tif ( !hasFocus.length ) {\r\n\t\t\thasFocus = this.uiDialogTitlebarClose.filter(\":tabbable\");\r\n\t\t}\r\n\t\tif ( !hasFocus.length ) {\r\n\t\t\thasFocus = this.uiDialog;\r\n\t\t}\r\n\t\thasFocus.eq( 0 ).focus();\r\n\t},\r\n\r\n\t_keepFocus: function( event ) {\r\n\t\tfunction checkFocus() {\r\n\t\t\tvar activeElement = this.document[0].activeElement,\r\n\t\t\t\tisActive = this.uiDialog[0] === activeElement ||\r\n\t\t\t\t\t$.contains( this.uiDialog[0], activeElement );\r\n\t\t\tif ( !isActive ) {\r\n\t\t\t\tthis._focusTabbable();\r\n\t\t\t}\r\n\t\t}\r\n\t\tevent.preventDefault();\r\n\t\tcheckFocus.call( this );\r\n\t\t// support: IE\r\n\t\t// IE <= 8 doesn't prevent moving focus even with event.preventDefault()\r\n\t\t// so we check again later\r\n\t\tthis._delay( checkFocus );\r\n\t},\r\n\r\n\t_createWrapper: function() {\r\n\t\tthis.uiDialog = $(\"<div>\")\r\n\t\t\t.addClass( \"ui-dialog ui-widget ui-widget-content ui-corner-all ui-front \" +\r\n\t\t\t\tthis.options.dialogClass )\r\n\t\t\t.hide()\r\n\t\t\t.attr({\r\n\t\t\t\t// Setting tabIndex makes the div focusable\r\n\t\t\t\ttabIndex: -1,\r\n\t\t\t\trole: \"dialog\"\r\n\t\t\t})\r\n\t\t\t.appendTo( this._appendTo() );\r\n\r\n\t\tthis._on( this.uiDialog, {\r\n\t\t\tkeydown: function( event ) {\r\n\t\t\t\tif ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\r\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE ) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tthis.close( event );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// prevent tabbing out of dialogs\r\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tvar tabbables = this.uiDialog.find(\":tabbable\"),\r\n\t\t\t\t\tfirst = tabbables.filter(\":first\"),\r\n\t\t\t\t\tlast = tabbables.filter(\":last\");\r\n\r\n\t\t\t\tif ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {\r\n\t\t\t\t\tfirst.focus( 1 );\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {\r\n\t\t\t\t\tlast.focus( 1 );\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tmousedown: function( event ) {\r\n\t\t\t\tif ( this._moveToTop( event ) ) {\r\n\t\t\t\t\tthis._focusTabbable();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// We assume that any existing aria-describedby attribute means\r\n\t\t// that the dialog content is marked up properly\r\n\t\t// otherwise we brute force the content as the description\r\n\t\tif ( !this.element.find(\"[aria-describedby]\").length ) {\r\n\t\t\tthis.uiDialog.attr({\r\n\t\t\t\t\"aria-describedby\": this.element.uniqueId().attr(\"id\")\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\t_createTitlebar: function() {\r\n\t\tvar uiDialogTitle;\r\n\r\n\t\tthis.uiDialogTitlebar = $(\"<div>\")\r\n\t\t\t.addClass(\"ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix\")\r\n\t\t\t.prependTo( this.uiDialog );\r\n\t\tthis._on( this.uiDialogTitlebar, {\r\n\t\t\tmousedown: function( event ) {\r\n\t\t\t\t// Don't prevent click on close button (#8838)\r\n\t\t\t\t// Focusing a dialog that is partially scrolled out of view\r\n\t\t\t\t// causes the browser to scroll it into view, preventing the click event\r\n\t\t\t\tif ( !$( event.target ).closest(\".ui-dialog-titlebar-close\") ) {\r\n\t\t\t\t\t// Dialog isn't getting focus when dragging (#8063)\r\n\t\t\t\t\tthis.uiDialog.focus();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// support: IE\r\n\t\t// Use type=\"button\" to prevent enter keypresses in textboxes from closing the\r\n\t\t// dialog in IE (#9312)\r\n\t\tthis.uiDialogTitlebarClose = $( \"<button type='button'></button>\" )\r\n\t\t\t.button({\r\n\t\t\t\tlabel: this.options.closeText,\r\n\t\t\t\ticons: {\r\n\t\t\t\t\tprimary: \"ui-icon-closethick\"\r\n\t\t\t\t},\r\n\t\t\t\ttext: false\r\n\t\t\t})\r\n\t\t\t.addClass(\"ui-dialog-titlebar-close\")\r\n\t\t\t.appendTo( this.uiDialogTitlebar );\r\n\t\tthis._on( this.uiDialogTitlebarClose, {\r\n\t\t\tclick: function( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tthis.close( event );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tuiDialogTitle = $(\"<span>\")\r\n\t\t\t.uniqueId()\r\n\t\t\t.addClass(\"ui-dialog-title\")\r\n\t\t\t.prependTo( this.uiDialogTitlebar );\r\n\t\tthis._title( uiDialogTitle );\r\n\r\n\t\tthis.uiDialog.attr({\r\n\t\t\t\"aria-labelledby\": uiDialogTitle.attr(\"id\")\r\n\t\t});\r\n\t},\r\n\r\n\t_title: function( title ) {\r\n\t\tif ( !this.options.title ) {\r\n\t\t\ttitle.html(\" \");\r\n\t\t}\r\n\t\ttitle.text( this.options.title );\r\n\t},\r\n\r\n\t_createButtonPane: function() {\r\n\t\tthis.uiDialogButtonPane = $(\"<div>\")\r\n\t\t\t.addClass(\"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\");\r\n\r\n\t\tthis.uiButtonSet = $(\"<div>\")\r\n\t\t\t.addClass(\"ui-dialog-buttonset\")\r\n\t\t\t.appendTo( this.uiDialogButtonPane );\r\n\r\n\t\tthis._createButtons();\r\n\t},\r\n\r\n\t_createButtons: function() {\r\n\t\tvar that = this,\r\n\t\t\tbuttons = this.options.buttons;\r\n\r\n\t\t// if we already have a button pane, remove it\r\n\t\tthis.uiDialogButtonPane.remove();\r\n\t\tthis.uiButtonSet.empty();\r\n\r\n\t\tif ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {\r\n\t\t\tthis.uiDialog.removeClass(\"ui-dialog-buttons\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t$.each( buttons, function( name, props ) {\r\n\t\t\tvar click, buttonOptions;\r\n\t\t\tprops = $.isFunction( props ) ?\r\n\t\t\t\t{ click: props, text: name } :\r\n\t\t\t\tprops;\r\n\t\t\t// Default to a non-submitting button\r\n\t\t\tprops = $.extend( { type: \"button\" }, props );\r\n\t\t\t// Change the context for the click callback to be the main element\r\n\t\t\tclick = props.click;\r\n\t\t\tprops.click = function() {\r\n\t\t\t\tclick.apply( that.element[0], arguments );\r\n\t\t\t};\r\n\t\t\tbuttonOptions = {\r\n\t\t\t\ticons: props.icons,\r\n\t\t\t\ttext: props.showText\r\n\t\t\t};\r\n\t\t\tdelete props.icons;\r\n\t\t\tdelete props.showText;\r\n\t\t\t$( \"<button></button>\", props )\r\n\t\t\t\t.button( buttonOptions )\r\n\t\t\t\t.appendTo( that.uiButtonSet );\r\n\t\t});\r\n\t\tthis.uiDialog.addClass(\"ui-dialog-buttons\");\r\n\t\tthis.uiDialogButtonPane.appendTo( this.uiDialog );\r\n\t},\r\n\r\n\t_makeDraggable: function() {\r\n\t\tvar that = this,\r\n\t\t\toptions = this.options;\r\n\r\n\t\tfunction filteredUi( ui ) {\r\n\t\t\treturn {\r\n\t\t\t\tposition: ui.position,\r\n\t\t\t\toffset: ui.offset\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tthis.uiDialog.draggable({\r\n\t\t\tcancel: \".ui-dialog-content, .ui-dialog-titlebar-close\",\r\n\t\t\thandle: \".ui-dialog-titlebar\",\r\n\t\t\tcontainment: \"document\",\r\n\t\t\tstart: function( event, ui ) {\r\n\t\t\t\t$( this ).addClass(\"ui-dialog-dragging\");\r\n\t\t\t\tthat._blockFrames();\r\n\t\t\t\tthat._trigger( \"dragStart\", event, filteredUi( ui ) );\r\n\t\t\t},\r\n\t\t\tdrag: function( event, ui ) {\r\n\t\t\t\tthat._trigger( \"drag\", event, filteredUi( ui ) );\r\n\t\t\t},\r\n\t\t\tstop: function( event, ui ) {\r\n\t\t\t\toptions.position = [\r\n\t\t\t\t\tui.position.left - that.document.scrollLeft(),\r\n\t\t\t\t\tui.position.top - that.document.scrollTop()\r\n\t\t\t\t];\r\n\t\t\t\t$( this ).removeClass(\"ui-dialog-dragging\");\r\n\t\t\t\tthat._unblockFrames();\r\n\t\t\t\tthat._trigger( \"dragStop\", event, filteredUi( ui ) );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_makeResizable: function() {\r\n\t\tvar that = this,\r\n\t\t\toptions = this.options,\r\n\t\t\thandles = options.resizable,\r\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\r\n\t\t\t// but dialogs have to use absolute or fixed positioning\r\n\t\t\tposition = this.uiDialog.css(\"position\"),\r\n\t\t\tresizeHandles = typeof handles === \"string\" ?\r\n\t\t\t\thandles\t:\r\n\t\t\t\t\"n,e,s,w,se,sw,ne,nw\";\r\n\r\n\t\tfunction filteredUi( ui ) {\r\n\t\t\treturn {\r\n\t\t\t\toriginalPosition: ui.originalPosition,\r\n\t\t\t\toriginalSize: ui.originalSize,\r\n\t\t\t\tposition: ui.position,\r\n\t\t\t\tsize: ui.size\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tthis.uiDialog.resizable({\r\n\t\t\tcancel: \".ui-dialog-content\",\r\n\t\t\tcontainment: \"document\",\r\n\t\t\talsoResize: this.element,\r\n\t\t\tmaxWidth: options.maxWidth,\r\n\t\t\tmaxHeight: options.maxHeight,\r\n\t\t\tminWidth: options.minWidth,\r\n\t\t\tminHeight: this._minHeight(),\r\n\t\t\thandles: resizeHandles,\r\n\t\t\tstart: function( event, ui ) {\r\n\t\t\t\t$( this ).addClass(\"ui-dialog-resizing\");\r\n\t\t\t\tthat._blockFrames();\r\n\t\t\t\tthat._trigger( \"resizeStart\", event, filteredUi( ui ) );\r\n\t\t\t},\r\n\t\t\tresize: function( event, ui ) {\r\n\t\t\t\tthat._trigger( \"resize\", event, filteredUi( ui ) );\r\n\t\t\t},\r\n\t\t\tstop: function( event, ui ) {\r\n\t\t\t\toptions.height = $( this ).height();\r\n\t\t\t\toptions.width = $( this ).width();\r\n\t\t\t\t$( this ).removeClass(\"ui-dialog-resizing\");\r\n\t\t\t\tthat._unblockFrames();\r\n\t\t\t\tthat._trigger( \"resizeStop\", event, filteredUi( ui ) );\r\n\t\t\t}\r\n\t\t})\r\n\t\t.css( \"position\", position );\r\n\t},\r\n\r\n\t_minHeight: function() {\r\n\t\tvar options = this.options;\r\n\r\n\t\treturn options.height === \"auto\" ?\r\n\t\t\toptions.minHeight :\r\n\t\t\tMath.min( options.minHeight, options.height );\r\n\t},\r\n\r\n\t_position: function() {\r\n\t\t// Need to show the dialog to get the actual offset in the position plugin\r\n\t\tvar isVisible = this.uiDialog.is(\":visible\");\r\n\t\tif ( !isVisible ) {\r\n\t\t\tthis.uiDialog.show();\r\n\t\t}\r\n\t\tthis.uiDialog.position( this.options.position );\r\n\t\tif ( !isVisible ) {\r\n\t\t\tthis.uiDialog.hide();\r\n\t\t}\r\n\t},\r\n\r\n\t_setOptions: function( options ) {\r\n\t\tvar that = this,\r\n\t\t\tresize = false,\r\n\t\t\tresizableOptions = {};\r\n\r\n\t\t$.each( options, function( key, value ) {\r\n\t\t\tthat._setOption( key, value );\r\n\r\n\t\t\tif ( key in sizeRelatedOptions ) {\r\n\t\t\t\tresize = true;\r\n\t\t\t}\r\n\t\t\tif ( key in resizableRelatedOptions ) {\r\n\t\t\t\tresizableOptions[ key ] = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif ( resize ) {\r\n\t\t\tthis._size();\r\n\t\t\tthis._position();\r\n\t\t}\r\n\t\tif ( this.uiDialog.is(\":data(ui-resizable)\") ) {\r\n\t\t\tthis.uiDialog.resizable( \"option\", resizableOptions );\r\n\t\t}\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tvar isDraggable, isResizable,\r\n\t\t\tuiDialog = this.uiDialog;\r\n\r\n\t\tif ( key === \"dialogClass\" ) {\r\n\t\t\tuiDialog\r\n\t\t\t\t.removeClass( this.options.dialogClass )\r\n\t\t\t\t.addClass( value );\r\n\t\t}\r\n\r\n\t\tif ( key === \"disabled\" ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._super( key, value );\r\n\r\n\t\tif ( key === \"appendTo\" ) {\r\n\t\t\tthis.uiDialog.appendTo( this._appendTo() );\r\n\t\t}\r\n\r\n\t\tif ( key === \"buttons\" ) {\r\n\t\t\tthis._createButtons();\r\n\t\t}\r\n\r\n\t\tif ( key === \"closeText\" ) {\r\n\t\t\tthis.uiDialogTitlebarClose.button({\r\n\t\t\t\t// Ensure that we always pass a string\r\n\t\t\t\tlabel: \"\" + value\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ( key === \"draggable\" ) {\r\n\t\t\tisDraggable = uiDialog.is(\":data(ui-draggable)\");\r\n\t\t\tif ( isDraggable && !value ) {\r\n\t\t\t\tuiDialog.draggable(\"destroy\");\r\n\t\t\t}\r\n\r\n\t\t\tif ( !isDraggable && value ) {\r\n\t\t\t\tthis._makeDraggable();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( key === \"position\" ) {\r\n\t\t\tthis._position();\r\n\t\t}\r\n\r\n\t\tif ( key === \"resizable\" ) {\r\n\t\t\t// currently resizable, becoming non-resizable\r\n\t\t\tisResizable = uiDialog.is(\":data(ui-resizable)\");\r\n\t\t\tif ( isResizable && !value ) {\r\n\t\t\t\tuiDialog.resizable(\"destroy\");\r\n\t\t\t}\r\n\r\n\t\t\t// currently resizable, changing handles\r\n\t\t\tif ( isResizable && typeof value === \"string\" ) {\r\n\t\t\t\tuiDialog.resizable( \"option\", \"handles\", value );\r\n\t\t\t}\r\n\r\n\t\t\t// currently non-resizable, becoming resizable\r\n\t\t\tif ( !isResizable && value !== false ) {\r\n\t\t\t\tthis._makeResizable();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( key === \"title\" ) {\r\n\t\t\tthis._title( this.uiDialogTitlebar.find(\".ui-dialog-title\") );\r\n\t\t}\r\n\t},\r\n\r\n\t_size: function() {\r\n\t\t// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\r\n\t\t// divs will both have width and height set, so we need to reset them\r\n\t\tvar nonContentHeight, minContentHeight, maxContentHeight,\r\n\t\t\toptions = this.options;\r\n\r\n\t\t// Reset content sizing\r\n\t\tthis.element.show().css({\r\n\t\t\twidth: \"auto\",\r\n\t\t\tminHeight: 0,\r\n\t\t\tmaxHeight: \"none\",\r\n\t\t\theight: 0\r\n\t\t});\r\n\r\n\t\tif ( options.minWidth > options.width ) {\r\n\t\t\toptions.width = options.minWidth;\r\n\t\t}\r\n\r\n\t\t// reset wrapper sizing\r\n\t\t// determine the height of all the non-content elements\r\n\t\tnonContentHeight = this.uiDialog.css({\r\n\t\t\t\theight: \"auto\",\r\n\t\t\t\twidth: options.width\r\n\t\t\t})\r\n\t\t\t.outerHeight();\r\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\r\n\t\tmaxContentHeight = typeof options.maxHeight === \"number\" ?\r\n\t\t\tMath.max( 0, options.maxHeight - nonContentHeight ) :\r\n\t\t\t\"none\";\r\n\r\n\t\tif ( options.height === \"auto\" ) {\r\n\t\t\tthis.element.css({\r\n\t\t\t\tminHeight: minContentHeight,\r\n\t\t\t\tmaxHeight: maxContentHeight,\r\n\t\t\t\theight: \"auto\"\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.element.height( Math.max( 0, options.height - nonContentHeight ) );\r\n\t\t}\r\n\r\n\t\tif (this.uiDialog.is(\":data(ui-resizable)\") ) {\r\n\t\t\tthis.uiDialog.resizable( \"option\", \"minHeight\", this._minHeight() );\r\n\t\t}\r\n\t},\r\n\r\n\t_blockFrames: function() {\r\n\t\tthis.iframeBlocks = this.document.find( \"iframe\" ).map(function() {\r\n\t\t\tvar iframe = $( this );\r\n\r\n\t\t\treturn $( \"<div>\" )\r\n\t\t\t\t.css({\r\n\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\twidth: iframe.outerWidth(),\r\n\t\t\t\t\theight: iframe.outerHeight()\r\n\t\t\t\t})\r\n\t\t\t\t.appendTo( iframe.parent() )\r\n\t\t\t\t.offset( iframe.offset() )[0];\r\n\t\t});\r\n\t},\r\n\r\n\t_unblockFrames: function() {\r\n\t\tif ( this.iframeBlocks ) {\r\n\t\t\tthis.iframeBlocks.remove();\r\n\t\t\tdelete this.iframeBlocks;\r\n\t\t}\r\n\t},\r\n\r\n\t_allowInteraction: function( event ) {\r\n\t\tif ( $( event.target ).closest(\".ui-dialog\").length ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// TODO: Remove hack when datepicker implements\r\n\t\t// the .ui-front logic (#8989)\r\n\t\treturn !!$( event.target ).closest(\".ui-datepicker\").length;\r\n\t},\r\n\r\n\t_createOverlay: function() {\r\n\t\tif ( !this.options.modal ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar that = this,\r\n\t\t\twidgetFullName = this.widgetFullName;\r\n\t\tif ( !$.ui.dialog.overlayInstances ) {\r\n\t\t\t// Prevent use of anchors and inputs.\r\n\t\t\t// We use a delay in case the overlay is created from an\r\n\t\t\t// event that we're going to be cancelling. (#2804)\r\n\t\t\tthis._delay(function() {\r\n\t\t\t\t// Handle .dialog().dialog(\"close\") (#4065)\r\n\t\t\t\tif ( $.ui.dialog.overlayInstances ) {\r\n\t\t\t\t\tthis.document.bind( \"focusin.dialog\", function( event ) {\r\n\t\t\t\t\t\tif ( !that._allowInteraction( event ) ) {\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\t$(\".ui-dialog:visible:last .ui-dialog-content\")\r\n\t\t\t\t\t\t\t\t.data( widgetFullName )._focusTabbable();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.overlay = $(\"<div>\")\r\n\t\t\t.addClass(\"ui-widget-overlay ui-front\")\r\n\t\t\t.appendTo( this._appendTo() );\r\n\t\tthis._on( this.overlay, {\r\n\t\t\tmousedown: \"_keepFocus\"\r\n\t\t});\r\n\t\t$.ui.dialog.overlayInstances++;\r\n\t},\r\n\r\n\t_destroyOverlay: function() {\r\n\t\tif ( !this.options.modal ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( this.overlay ) {\r\n\t\t\t$.ui.dialog.overlayInstances--;\r\n\r\n\t\t\tif ( !$.ui.dialog.overlayInstances ) {\r\n\t\t\t\tthis.document.unbind( \"focusin.dialog\" );\r\n\t\t\t}\r\n\t\t\tthis.overlay.remove();\r\n\t\t\tthis.overlay = null;\r\n\t\t}\r\n\t}\r\n});\r\n\r\n$.ui.dialog.overlayInstances = 0;\r\n\r\n// DEPRECATED\r\nif ( $.uiBackCompat !== false ) {\r\n\t// position option with array notation\r\n\t// just override with old implementation\r\n\t$.widget( \"ui.dialog\", $.ui.dialog, {\r\n\t\t_position: function() {\r\n\t\t\tvar position = this.options.position,\r\n\t\t\t\tmyAt = [],\r\n\t\t\t\toffset = [ 0, 0 ],\r\n\t\t\t\tisVisible;\r\n\r\n\t\t\tif ( position ) {\r\n\t\t\t\tif ( typeof position === \"string\" || (typeof position === \"object\" && \"0\" in position ) ) {\r\n\t\t\t\t\tmyAt = position.split ? position.split(\" \") : [ position[0], position[1] ];\r\n\t\t\t\t\tif ( myAt.length === 1 ) {\r\n\t\t\t\t\t\tmyAt[1] = myAt[0];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$.each( [ \"left\", \"top\" ], function( i, offsetPosition ) {\r\n\t\t\t\t\t\tif ( +myAt[ i ] === myAt[ i ] ) {\r\n\t\t\t\t\t\t\toffset[ i ] = myAt[ i ];\r\n\t\t\t\t\t\t\tmyAt[ i ] = offsetPosition;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tposition = {\r\n\t\t\t\t\t\tmy: myAt[0] + (offset[0] < 0 ? offset[0] : \"+\" + offset[0]) + \" \" +\r\n\t\t\t\t\t\t\tmyAt[1] + (offset[1] < 0 ? offset[1] : \"+\" + offset[1]),\r\n\t\t\t\t\t\tat: myAt.join(\" \")\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tposition = $.extend( {}, $.ui.dialog.prototype.options.position, position );\r\n\t\t\t} else {\r\n\t\t\t\tposition = $.ui.dialog.prototype.options.position;\r\n\t\t\t}\r\n\r\n\t\t\t// need to show the dialog to get the actual offset in the position plugin\r\n\t\t\tisVisible = this.uiDialog.is(\":visible\");\r\n\t\t\tif ( !isVisible ) {\r\n\t\t\t\tthis.uiDialog.show();\r\n\t\t\t}\r\n\t\t\tthis.uiDialog.position( position );\r\n\t\t\tif ( !isVisible ) {\r\n\t\t\t\tthis.uiDialog.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\n}( jQuery ) );\r\n(function( $, undefined ) {\r\n\r\n$.widget( \"ui.menu\", {\r\n\tversion: \"1.10.4\",\r\n\tdefaultElement: \"<ul>\",\r\n\tdelay: 300,\r\n\toptions: {\r\n\t\ticons: {\r\n\t\t\tsubmenu: \"ui-icon-carat-1-e\"\r\n\t\t},\r\n\t\tmenus: \"ul\",\r\n\t\tposition: {\r\n\t\t\tmy: \"left top\",\r\n\t\t\tat: \"right top\"\r\n\t\t},\r\n\t\trole: \"menu\",\r\n\r\n\t\t// callbacks\r\n\t\tblur: null,\r\n\t\tfocus: null,\r\n\t\tselect: null\r\n\t},\r\n\r\n\t_create: function() {\r\n\t\tthis.activeMenu = this.element;\r\n\t\t// flag used to prevent firing of the click handler\r\n\t\t// as the event bubbles up through nested menus\r\n\t\tthis.mouseHandled = false;\r\n\t\tthis.element\r\n\t\t\t.uniqueId()\r\n\t\t\t.addClass( \"ui-menu ui-widget ui-widget-content ui-corner-all\" )\r\n\t\t\t.toggleClass( \"ui-menu-icons\", !!this.element.find( \".ui-icon\" ).length )\r\n\t\t\t.attr({\r\n\t\t\t\trole: this.options.role,\r\n\t\t\t\ttabIndex: 0\r\n\t\t\t})\r\n\t\t\t// need to catch all clicks on disabled menu\r\n\t\t\t// not possible through _on\r\n\t\t\t.bind( \"click\" + this.eventNamespace, $.proxy(function( event ) {\r\n\t\t\t\tif ( this.options.disabled ) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t}, this ));\r\n\r\n\t\tif ( this.options.disabled ) {\r\n\t\t\tthis.element\r\n\t\t\t\t.addClass( \"ui-state-disabled\" )\r\n\t\t\t\t.attr( \"aria-disabled\", \"true\" );\r\n\t\t}\r\n\r\n\t\tthis._on({\r\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\r\n\t\t\t// them (focus should always stay on UL during navigation).\r\n\t\t\t\"mousedown .ui-menu-item > a\": function( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t},\r\n\t\t\t\"click .ui-state-disabled > a\": function( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t},\r\n\t\t\t\"click .ui-menu-item:has(a)\": function( event ) {\r\n\t\t\t\tvar target = $( event.target ).closest( \".ui-menu-item\" );\r\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\r\n\t\t\t\t\tthis.select( event );\r\n\r\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\r\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\r\n\t\t\t\t\t\tthis.mouseHandled = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Open submenu on click\r\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\r\n\t\t\t\t\t\tthis.expand( event );\r\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) && $( this.document[ 0 ].activeElement ).closest( \".ui-menu\" ).length ) {\r\n\r\n\t\t\t\t\t\t// Redirect focus to the menu\r\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\r\n\r\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\r\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\r\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\r\n\t\t\t\t\t\t\tclearTimeout( this.timer );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"mouseenter .ui-menu-item\": function( event ) {\r\n\t\t\t\tvar target = $( event.currentTarget );\r\n\t\t\t\t// Remove ui-state-active class from siblings of the newly focused menu item\r\n\t\t\t\t// to avoid a jump caused by adjacent elements both having a class with a border\r\n\t\t\t\ttarget.siblings().children( \".ui-state-active\" ).removeClass( \"ui-state-active\" );\r\n\t\t\t\tthis.focus( event, target );\r\n\t\t\t},\r\n\t\t\tmouseleave: \"collapseAll\",\r\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\r\n\t\t\tfocus: function( event, keepActiveItem ) {\r\n\t\t\t\t// If there's already an active item, keep it active\r\n\t\t\t\t// If not, activate the first item\r\n\t\t\t\tvar item = this.active || this.element.children( \".ui-menu-item\" ).eq( 0 );\r\n\r\n\t\t\t\tif ( !keepActiveItem ) {\r\n\t\t\t\t\tthis.focus( event, item );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tblur: function( event ) {\r\n\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\tif ( !$.contains( this.element[0], this.document[0].activeElement ) ) {\r\n\t\t\t\t\t\tthis.collapseAll( event );\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tkeydown: \"_keydown\"\r\n\t\t});\r\n\r\n\t\tthis.refresh();\r\n\r\n\t\t// Clicks outside of a menu collapse any open menus\r\n\t\tthis._on( this.document, {\r\n\t\t\tclick: function( event ) {\r\n\t\t\t\tif ( !$( event.target ).closest( \".ui-menu\" ).length ) {\r\n\t\t\t\t\tthis.collapseAll( event );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Reset the mouseHandled flag\r\n\t\t\t\tthis.mouseHandled = false;\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\t// Destroy (sub)menus\r\n\t\tthis.element\r\n\t\t\t.removeAttr( \"aria-activedescendant\" )\r\n\t\t\t.find( \".ui-menu\" ).addBack()\r\n\t\t\t\t.removeClass( \"ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons\" )\r\n\t\t\t\t.removeAttr( \"role\" )\r\n\t\t\t\t.removeAttr( \"tabIndex\" )\r\n\t\t\t\t.removeAttr( \"aria-labelledby\" )\r\n\t\t\t\t.removeAttr( \"aria-expanded\" )\r\n\t\t\t\t.removeAttr( \"aria-hidden\" )\r\n\t\t\t\t.removeAttr( \"aria-disabled\" )\r\n\t\t\t\t.removeUniqueId()\r\n\t\t\t\t.show();\r\n\r\n\t\t// Destroy menu items\r\n\t\tthis.element.find( \".ui-menu-item\" )\r\n\t\t\t.removeClass( \"ui-menu-item\" )\r\n\t\t\t.removeAttr( \"role\" )\r\n\t\t\t.removeAttr( \"aria-disabled\" )\r\n\t\t\t.children( \"a\" )\r\n\t\t\t\t.removeUniqueId()\r\n\t\t\t\t.removeClass( \"ui-corner-all ui-state-hover\" )\r\n\t\t\t\t.removeAttr( \"tabIndex\" )\r\n\t\t\t\t.removeAttr( \"role\" )\r\n\t\t\t\t.removeAttr( \"aria-haspopup\" )\r\n\t\t\t\t.children().each( function() {\r\n\t\t\t\t\tvar elem = $( this );\r\n\t\t\t\t\tif ( elem.data( \"ui-menu-submenu-carat\" ) ) {\r\n\t\t\t\t\t\telem.remove();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t// Destroy menu dividers\r\n\t\tthis.element.find( \".ui-menu-divider\" ).removeClass( \"ui-menu-divider ui-widget-content\" );\r\n\t},\r\n\r\n\t_keydown: function( event ) {\r\n\t\tvar match, prev, character, skip, regex,\r\n\t\t\tpreventDefault = true;\r\n\r\n\t\tfunction escape( value ) {\r\n\t\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\r\n\t\t}\r\n\r\n\t\tswitch ( event.keyCode ) {\r\n\t\tcase $.ui.keyCode.PAGE_UP:\r\n\t\t\tthis.previousPage( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.PAGE_DOWN:\r\n\t\t\tthis.nextPage( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.HOME:\r\n\t\t\tthis._move( \"first\", \"first\", event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.END:\r\n\t\t\tthis._move( \"last\", \"last\", event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.UP:\r\n\t\t\tthis.previous( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.DOWN:\r\n\t\t\tthis.next( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.LEFT:\r\n\t\t\tthis.collapse( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.RIGHT:\r\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\r\n\t\t\t\tthis.expand( event );\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.ENTER:\r\n\t\tcase $.ui.keyCode.SPACE:\r\n\t\t\tthis._activate( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.ESCAPE:\r\n\t\t\tthis.collapse( event );\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tpreventDefault = false;\r\n\t\t\tprev = this.previousFilter || \"\";\r\n\t\t\tcharacter = String.fromCharCode( event.keyCode );\r\n\t\t\tskip = false;\r\n\r\n\t\t\tclearTimeout( this.filterTimer );\r\n\r\n\t\t\tif ( character === prev ) {\r\n\t\t\t\tskip = true;\r\n\t\t\t} else {\r\n\t\t\t\tcharacter = prev + character;\r\n\t\t\t}\r\n\r\n\t\t\tregex = new RegExp( \"^\" + escape( character ), \"i\" );\r\n\t\t\tmatch = this.activeMenu.children( \".ui-menu-item\" ).filter(function() {\r\n\t\t\t\treturn regex.test( $( this ).children( \"a\" ).text() );\r\n\t\t\t});\r\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\r\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\r\n\t\t\t\tmatch;\r\n\r\n\t\t\t// If no matches on the current filter, reset to the last character pressed\r\n\t\t\t// to move down the menu to the first item that starts with that character\r\n\t\t\tif ( !match.length ) {\r\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\r\n\t\t\t\tregex = new RegExp( \"^\" + escape( character ), \"i\" );\r\n\t\t\t\tmatch = this.activeMenu.children( \".ui-menu-item\" ).filter(function() {\r\n\t\t\t\t\treturn regex.test( $( this ).children( \"a\" ).text() );\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif ( match.length ) {\r\n\t\t\t\tthis.focus( event, match );\r\n\t\t\t\tif ( match.length > 1 ) {\r\n\t\t\t\t\tthis.previousFilter = character;\r\n\t\t\t\t\tthis.filterTimer = this._delay(function() {\r\n\t\t\t\t\t\tdelete this.previousFilter;\r\n\t\t\t\t\t}, 1000 );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdelete this.previousFilter;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tdelete this.previousFilter;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( preventDefault ) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t},\r\n\r\n\t_activate: function( event ) {\r\n\t\tif ( !this.active.is( \".ui-state-disabled\" ) ) {\r\n\t\t\tif ( this.active.children( \"a[aria-haspopup='true']\" ).length ) {\r\n\t\t\t\tthis.expand( event );\r\n\t\t\t} else {\r\n\t\t\t\tthis.select( event );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\trefresh: function() {\r\n\t\tvar menus,\r\n\t\t\ticon = this.options.icons.submenu,\r\n\t\t\tsubmenus = this.element.find( this.options.menus );\r\n\r\n\t\tthis.element.toggleClass( \"ui-menu-icons\", !!this.element.find( \".ui-icon\" ).length );\r\n\r\n\t\t// Initialize nested menus\r\n\t\tsubmenus.filter( \":not(.ui-menu)\" )\r\n\t\t\t.addClass( \"ui-menu ui-widget ui-widget-content ui-corner-all\" )\r\n\t\t\t.hide()\r\n\t\t\t.attr({\r\n\t\t\t\trole: this.options.role,\r\n\t\t\t\t\"aria-hidden\": \"true\",\r\n\t\t\t\t\"aria-expanded\": \"false\"\r\n\t\t\t})\r\n\t\t\t.each(function() {\r\n\t\t\t\tvar menu = $( this ),\r\n\t\t\t\t\titem = menu.prev( \"a\" ),\r\n\t\t\t\t\tsubmenuCarat = $( \"<span>\" )\r\n\t\t\t\t\t\t.addClass( \"ui-menu-icon ui-icon \" + icon )\r\n\t\t\t\t\t\t.data( \"ui-menu-submenu-carat\", true );\r\n\r\n\t\t\t\titem\r\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\r\n\t\t\t\t\t.prepend( submenuCarat );\r\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\r\n\t\t\t});\r\n\r\n\t\tmenus = submenus.add( this.element );\r\n\r\n\t\t// Don't refresh list items that are already adapted\r\n\t\tmenus.children( \":not(.ui-menu-item):has(a)\" )\r\n\t\t\t.addClass( \"ui-menu-item\" )\r\n\t\t\t.attr( \"role\", \"presentation\" )\r\n\t\t\t.children( \"a\" )\r\n\t\t\t\t.uniqueId()\r\n\t\t\t\t.addClass( \"ui-corner-all\" )\r\n\t\t\t\t.attr({\r\n\t\t\t\t\ttabIndex: -1,\r\n\t\t\t\t\trole: this._itemRole()\r\n\t\t\t\t});\r\n\r\n\t\t// Initialize unlinked menu-items containing spaces and/or dashes only as dividers\r\n\t\tmenus.children( \":not(.ui-menu-item)\" ).each(function() {\r\n\t\t\tvar item = $( this );\r\n\t\t\t// hyphen, em dash, en dash\r\n\t\t\tif ( !/[^\\-\\u2014\\u2013\\s]/.test( item.text() ) ) {\r\n\t\t\t\titem.addClass( \"ui-widget-content ui-menu-divider\" );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Add aria-disabled attribute to any disabled menu item\r\n\t\tmenus.children( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\r\n\r\n\t\t// If the active item has been removed, blur the menu\r\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\r\n\t\t\tthis.blur();\r\n\t\t}\r\n\t},\r\n\r\n\t_itemRole: function() {\r\n\t\treturn {\r\n\t\t\tmenu: \"menuitem\",\r\n\t\t\tlistbox: \"option\"\r\n\t\t}[ this.options.role ];\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tif ( key === \"icons\" ) {\r\n\t\t\tthis.element.find( \".ui-menu-icon\" )\r\n\t\t\t\t.removeClass( this.options.icons.submenu )\r\n\t\t\t\t.addClass( value.submenu );\r\n\t\t}\r\n\t\tthis._super( key, value );\r\n\t},\r\n\r\n\tfocus: function( event, item ) {\r\n\t\tvar nested, focused;\r\n\t\tthis.blur( event, event && event.type === \"focus\" );\r\n\r\n\t\tthis._scrollIntoView( item );\r\n\r\n\t\tthis.active = item.first();\r\n\t\tfocused = this.active.children( \"a\" ).addClass( \"ui-state-focus\" );\r\n\t\t// Only update aria-activedescendant if there's a role\r\n\t\t// otherwise we assume focus is managed elsewhere\r\n\t\tif ( this.options.role ) {\r\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\r\n\t\t}\r\n\r\n\t\t// Highlight active parent menu item, if any\r\n\t\tthis.active\r\n\t\t\t.parent()\r\n\t\t\t.closest( \".ui-menu-item\" )\r\n\t\t\t.children( \"a:first\" )\r\n\t\t\t.addClass( \"ui-state-active\" );\r\n\r\n\t\tif ( event && event.type === \"keydown\" ) {\r\n\t\t\tthis._close();\r\n\t\t} else {\r\n\t\t\tthis.timer = this._delay(function() {\r\n\t\t\t\tthis._close();\r\n\t\t\t}, this.delay );\r\n\t\t}\r\n\r\n\t\tnested = item.children( \".ui-menu\" );\r\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\r\n\t\t\tthis._startOpening(nested);\r\n\t\t}\r\n\t\tthis.activeMenu = item.parent();\r\n\r\n\t\tthis._trigger( \"focus\", event, { item: item } );\r\n\t},\r\n\r\n\t_scrollIntoView: function( item ) {\r\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\r\n\t\tif ( this._hasScroll() ) {\r\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[0], \"borderTopWidth\" ) ) || 0;\r\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[0], \"paddingTop\" ) ) || 0;\r\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\r\n\t\t\tscroll = this.activeMenu.scrollTop();\r\n\t\t\telementHeight = this.activeMenu.height();\r\n\t\t\titemHeight = item.height();\r\n\r\n\t\t\tif ( offset < 0 ) {\r\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\r\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\r\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tblur: function( event, fromFocus ) {\r\n\t\tif ( !fromFocus ) {\r\n\t\t\tclearTimeout( this.timer );\r\n\t\t}\r\n\r\n\t\tif ( !this.active ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.active.children( \"a\" ).removeClass( \"ui-state-focus\" );\r\n\t\tthis.active = null;\r\n\r\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\r\n\t},\r\n\r\n\t_startOpening: function( submenu ) {\r\n\t\tclearTimeout( this.timer );\r\n\r\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\r\n\t\t// shift in the submenu position when mousing over the carat icon\r\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.timer = this._delay(function() {\r\n\t\t\tthis._close();\r\n\t\t\tthis._open( submenu );\r\n\t\t}, this.delay );\r\n\t},\r\n\r\n\t_open: function( submenu ) {\r\n\t\tvar position = $.extend({\r\n\t\t\tof: this.active\r\n\t\t}, this.options.position );\r\n\r\n\t\tclearTimeout( this.timer );\r\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\r\n\t\t\t.hide()\r\n\t\t\t.attr( \"aria-hidden\", \"true\" );\r\n\r\n\t\tsubmenu\r\n\t\t\t.show()\r\n\t\t\t.removeAttr( \"aria-hidden\" )\r\n\t\t\t.attr( \"aria-expanded\", \"true\" )\r\n\t\t\t.position( position );\r\n\t},\r\n\r\n\tcollapseAll: function( event, all ) {\r\n\t\tclearTimeout( this.timer );\r\n\t\tthis.timer = this._delay(function() {\r\n\t\t\t// If we were passed an event, look for the submenu that contains the event\r\n\t\t\tvar currentMenu = all ? this.element :\r\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\r\n\r\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway\r\n\t\t\tif ( !currentMenu.length ) {\r\n\t\t\t\tcurrentMenu = this.element;\r\n\t\t\t}\r\n\r\n\t\t\tthis._close( currentMenu );\r\n\r\n\t\t\tthis.blur( event );\r\n\t\t\tthis.activeMenu = currentMenu;\r\n\t\t}, this.delay );\r\n\t},\r\n\r\n\t// With no arguments, closes the currently active menu - if nothing is active\r\n\t// it closes all menus. If passed an argument, it will search for menus BELOW\r\n\t_close: function( startMenu ) {\r\n\t\tif ( !startMenu ) {\r\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\r\n\t\t}\r\n\r\n\t\tstartMenu\r\n\t\t\t.find( \".ui-menu\" )\r\n\t\t\t\t.hide()\r\n\t\t\t\t.attr( \"aria-hidden\", \"true\" )\r\n\t\t\t\t.attr( \"aria-expanded\", \"false\" )\r\n\t\t\t.end()\r\n\t\t\t.find( \"a.ui-state-active\" )\r\n\t\t\t\t.removeClass( \"ui-state-active\" );\r\n\t},\r\n\r\n\tcollapse: function( event ) {\r\n\t\tvar newItem = this.active &&\r\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\r\n\t\tif ( newItem && newItem.length ) {\r\n\t\t\tthis._close();\r\n\t\t\tthis.focus( event, newItem );\r\n\t\t}\r\n\t},\r\n\r\n\texpand: function( event ) {\r\n\t\tvar newItem = this.active &&\r\n\t\t\tthis.active\r\n\t\t\t\t.children( \".ui-menu \" )\r\n\t\t\t\t.children( \".ui-menu-item\" )\r\n\t\t\t\t.first();\r\n\r\n\t\tif ( newItem && newItem.length ) {\r\n\t\t\tthis._open( newItem.parent() );\r\n\r\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\r\n\t\t\tthis._delay(function() {\r\n\t\t\t\tthis.focus( event, newItem );\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\tnext: function( event ) {\r\n\t\tthis._move( \"next\", \"first\", event );\r\n\t},\r\n\r\n\tprevious: function( event ) {\r\n\t\tthis._move( \"prev\", \"last\", event );\r\n\t},\r\n\r\n\tisFirstItem: function() {\r\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\r\n\t},\r\n\r\n\tisLastItem: function() {\r\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\r\n\t},\r\n\r\n\t_move: function( direction, filter, event ) {\r\n\t\tvar next;\r\n\t\tif ( this.active ) {\r\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\r\n\t\t\t\tnext = this.active\r\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\r\n\t\t\t\t\t.eq( -1 );\r\n\t\t\t} else {\r\n\t\t\t\tnext = this.active\r\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\r\n\t\t\t\t\t.eq( 0 );\r\n\t\t\t}\r\n\t\t}\r\n\t\tif ( !next || !next.length || !this.active ) {\r\n\t\t\tnext = this.activeMenu.children( \".ui-menu-item\" )[ filter ]();\r\n\t\t}\r\n\r\n\t\tthis.focus( event, next );\r\n\t},\r\n\r\n\tnextPage: function( event ) {\r\n\t\tvar item, base, height;\r\n\r\n\t\tif ( !this.active ) {\r\n\t\t\tthis.next( event );\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this.isLastItem() ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this._hasScroll() ) {\r\n\t\t\tbase = this.active.offset().top;\r\n\t\t\theight = this.element.height();\r\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each(function() {\r\n\t\t\t\titem = $( this );\r\n\t\t\t\treturn item.offset().top - base - height < 0;\r\n\t\t\t});\r\n\r\n\t\t\tthis.focus( event, item );\r\n\t\t} else {\r\n\t\t\tthis.focus( event, this.activeMenu.children( \".ui-menu-item\" )\r\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\r\n\t\t}\r\n\t},\r\n\r\n\tpreviousPage: function( event ) {\r\n\t\tvar item, base, height;\r\n\t\tif ( !this.active ) {\r\n\t\t\tthis.next( event );\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this.isFirstItem() ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this._hasScroll() ) {\r\n\t\t\tbase = this.active.offset().top;\r\n\t\t\theight = this.element.height();\r\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each(function() {\r\n\t\t\t\titem = $( this );\r\n\t\t\t\treturn item.offset().top - base + height > 0;\r\n\t\t\t});\r\n\r\n\t\t\tthis.focus( event, item );\r\n\t\t} else {\r\n\t\t\tthis.focus( event, this.activeMenu.children( \".ui-menu-item\" ).first() );\r\n\t\t}\r\n\t},\r\n\r\n\t_hasScroll: function() {\r\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\r\n\t},\r\n\r\n\tselect: function( event ) {\r\n\t\t// TODO: It should never be possible to not have an active item at this\r\n\t\t// point, but the tests don't trigger mouseenter before click.\r\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\r\n\t\tvar ui = { item: this.active };\r\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\r\n\t\t\tthis.collapseAll( event, true );\r\n\t\t}\r\n\t\tthis._trigger( \"select\", event, ui );\r\n\t}\r\n});\r\n\r\n}( jQuery ));\r\n(function( $, undefined ) {\r\n\r\n$.widget( \"ui.progressbar\", {\r\n\tversion: \"1.10.4\",\r\n\toptions: {\r\n\t\tmax: 100,\r\n\t\tvalue: 0,\r\n\r\n\t\tchange: null,\r\n\t\tcomplete: null\r\n\t},\r\n\r\n\tmin: 0,\r\n\r\n\t_create: function() {\r\n\t\t// Constrain initial value\r\n\t\tthis.oldValue = this.options.value = this._constrainedValue();\r\n\r\n\t\tthis.element\r\n\t\t\t.addClass( \"ui-progressbar ui-widget ui-widget-content ui-corner-all\" )\r\n\t\t\t.attr({\r\n\t\t\t\t// Only set static values, aria-valuenow and aria-valuemax are\r\n\t\t\t\t// set inside _refreshValue()\r\n\t\t\t\trole: \"progressbar\",\r\n\t\t\t\t\"aria-valuemin\": this.min\r\n\t\t\t});\r\n\r\n\t\tthis.valueDiv = $( \"<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>\" )\r\n\t\t\t.appendTo( this.element );\r\n\r\n\t\tthis._refreshValue();\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tthis.element\r\n\t\t\t.removeClass( \"ui-progressbar ui-widget ui-widget-content ui-corner-all\" )\r\n\t\t\t.removeAttr( \"role\" )\r\n\t\t\t.removeAttr( \"aria-valuemin\" )\r\n\t\t\t.removeAttr( \"aria-valuemax\" )\r\n\t\t\t.removeAttr( \"aria-valuenow\" );\r\n\r\n\t\tthis.valueDiv.remove();\r\n\t},\r\n\r\n\tvalue: function( newValue ) {\r\n\t\tif ( newValue === undefined ) {\r\n\t\t\treturn this.options.value;\r\n\t\t}\r\n\r\n\t\tthis.options.value = this._constrainedValue( newValue );\r\n\t\tthis._refreshValue();\r\n\t},\r\n\r\n\t_constrainedValue: function( newValue ) {\r\n\t\tif ( newValue === undefined ) {\r\n\t\t\tnewValue = this.options.value;\r\n\t\t}\r\n\r\n\t\tthis.indeterminate = newValue === false;\r\n\r\n\t\t// sanitize value\r\n\t\tif ( typeof newValue !== \"number\" ) {\r\n\t\t\tnewValue = 0;\r\n\t\t}\r\n\r\n\t\treturn this.indeterminate ? false :\r\n\t\t\tMath.min( this.options.max, Math.max( this.min, newValue ) );\r\n\t},\r\n\r\n\t_setOptions: function( options ) {\r\n\t\t// Ensure \"value\" option is set after other values (like max)\r\n\t\tvar value = options.value;\r\n\t\tdelete options.value;\r\n\r\n\t\tthis._super( options );\r\n\r\n\t\tthis.options.value = this._constrainedValue( value );\r\n\t\tthis._refreshValue();\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tif ( key === \"max\" ) {\r\n\t\t\t// Don't allow a max less than min\r\n\t\t\tvalue = Math.max( this.min, value );\r\n\t\t}\r\n\r\n\t\tthis._super( key, value );\r\n\t},\r\n\r\n\t_percentage: function() {\r\n\t\treturn this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );\r\n\t},\r\n\r\n\t_refreshValue: function() {\r\n\t\tvar value = this.options.value,\r\n\t\t\tpercentage = this._percentage();\r\n\r\n\t\tthis.valueDiv\r\n\t\t\t.toggle( this.indeterminate || value > this.min )\r\n\t\t\t.toggleClass( \"ui-corner-right\", value === this.options.max )\r\n\t\t\t.width( percentage.toFixed(0) + \"%\" );\r\n\r\n\t\tthis.element.toggleClass( \"ui-progressbar-indeterminate\", this.indeterminate );\r\n\r\n\t\tif ( this.indeterminate ) {\r\n\t\t\tthis.element.removeAttr( \"aria-valuenow\" );\r\n\t\t\tif ( !this.overlayDiv ) {\r\n\t\t\t\tthis.overlayDiv = $( \"<div class='ui-progressbar-overlay'></div>\" ).appendTo( this.valueDiv );\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.element.attr({\r\n\t\t\t\t\"aria-valuemax\": this.options.max,\r\n\t\t\t\t\"aria-valuenow\": value\r\n\t\t\t});\r\n\t\t\tif ( this.overlayDiv ) {\r\n\t\t\t\tthis.overlayDiv.remove();\r\n\t\t\t\tthis.overlayDiv = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( this.oldValue !== value ) {\r\n\t\t\tthis.oldValue = value;\r\n\t\t\tthis._trigger( \"change\" );\r\n\t\t}\r\n\t\tif ( value === this.options.max ) {\r\n\t\t\tthis._trigger( \"complete\" );\r\n\t\t}\r\n\t}\r\n});\r\n\r\n})( jQuery );\r\n(function( $, undefined ) {\r\n\r\n// number of pages in a slider\r\n// (how many times can you page up/down to go through the whole range)\r\nvar numPages = 5;\r\n\r\n$.widget( \"ui.slider\", $.ui.mouse, {\r\n\tversion: \"1.10.4\",\r\n\twidgetEventPrefix: \"slide\",\r\n\r\n\toptions: {\r\n\t\tanimate: false,\r\n\t\tdistance: 0,\r\n\t\tmax: 100,\r\n\t\tmin: 0,\r\n\t\torientation: \"horizontal\",\r\n\t\trange: false,\r\n\t\tstep: 1,\r\n\t\tvalue: 0,\r\n\t\tvalues: null,\r\n\r\n\t\t// callbacks\r\n\t\tchange: null,\r\n\t\tslide: null,\r\n\t\tstart: null,\r\n\t\tstop: null\r\n\t},\r\n\r\n\t_create: function() {\r\n\t\tthis._keySliding = false;\r\n\t\tthis._mouseSliding = false;\r\n\t\tthis._animateOff = true;\r\n\t\tthis._handleIndex = null;\r\n\t\tthis._detectOrientation();\r\n\t\tthis._mouseInit();\r\n\r\n\t\tthis.element\r\n\t\t\t.addClass( \"ui-slider\" +\r\n\t\t\t\t\" ui-slider-\" + this.orientation +\r\n\t\t\t\t\" ui-widget\" +\r\n\t\t\t\t\" ui-widget-content\" +\r\n\t\t\t\t\" ui-corner-all\");\r\n\r\n\t\tthis._refresh();\r\n\t\tthis._setOption( \"disabled\", this.options.disabled );\r\n\r\n\t\tthis._animateOff = false;\r\n\t},\r\n\r\n\t_refresh: function() {\r\n\t\tthis._createRange();\r\n\t\tthis._createHandles();\r\n\t\tthis._setupEvents();\r\n\t\tthis._refreshValue();\r\n\t},\r\n\r\n\t_createHandles: function() {\r\n\t\tvar i, handleCount,\r\n\t\t\toptions = this.options,\r\n\t\t\texistingHandles = this.element.find( \".ui-slider-handle\" ).addClass( \"ui-state-default ui-corner-all\" ),\r\n\t\t\thandle = \"<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>\",\r\n\t\t\thandles = [];\r\n\r\n\t\thandleCount = ( options.values && options.values.length ) || 1;\r\n\r\n\t\tif ( existingHandles.length > handleCount ) {\r\n\t\t\texistingHandles.slice( handleCount ).remove();\r\n\t\t\texistingHandles = existingHandles.slice( 0, handleCount );\r\n\t\t}\r\n\r\n\t\tfor ( i = existingHandles.length; i < handleCount; i++ ) {\r\n\t\t\thandles.push( handle );\r\n\t\t}\r\n\r\n\t\tthis.handles = existingHandles.add( $( handles.join( \"\" ) ).appendTo( this.element ) );\r\n\r\n\t\tthis.handle = this.handles.eq( 0 );\r\n\r\n\t\tthis.handles.each(function( i ) {\r\n\t\t\t$( this ).data( \"ui-slider-handle-index\", i );\r\n\t\t});\r\n\t},\r\n\r\n\t_createRange: function() {\r\n\t\tvar options = this.options,\r\n\t\t\tclasses = \"\";\r\n\r\n\t\tif ( options.range ) {\r\n\t\t\tif ( options.range === true ) {\r\n\t\t\t\tif ( !options.values ) {\r\n\t\t\t\t\toptions.values = [ this._valueMin(), this._valueMin() ];\r\n\t\t\t\t} else if ( options.values.length && options.values.length !== 2 ) {\r\n\t\t\t\t\toptions.values = [ options.values[0], options.values[0] ];\r\n\t\t\t\t} else if ( $.isArray( options.values ) ) {\r\n\t\t\t\t\toptions.values = options.values.slice(0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ( !this.range || !this.range.length ) {\r\n\t\t\t\tthis.range = $( \"<div></div>\" )\r\n\t\t\t\t\t.appendTo( this.element );\r\n\r\n\t\t\t\tclasses = \"ui-slider-range\" +\r\n\t\t\t\t// note: this isn't the most fittingly semantic framework class for this element,\r\n\t\t\t\t// but worked best visually with a variety of themes\r\n\t\t\t\t\" ui-widget-header ui-corner-all\";\r\n\t\t\t} else {\r\n\t\t\t\tthis.range.removeClass( \"ui-slider-range-min ui-slider-range-max\" )\r\n\t\t\t\t\t// Handle range switching from true to min/max\r\n\t\t\t\t\t.css({\r\n\t\t\t\t\t\t\"left\": \"\",\r\n\t\t\t\t\t\t\"bottom\": \"\"\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.range.addClass( classes +\r\n\t\t\t\t( ( options.range === \"min\" || options.range === \"max\" ) ? \" ui-slider-range-\" + options.range : \"\" ) );\r\n\t\t} else {\r\n\t\t\tif ( this.range ) {\r\n\t\t\t\tthis.range.remove();\r\n\t\t\t}\r\n\t\t\tthis.range = null;\r\n\t\t}\r\n\t},\r\n\r\n\t_setupEvents: function() {\r\n\t\tvar elements = this.handles.add( this.range ).filter( \"a\" );\r\n\t\tthis._off( elements );\r\n\t\tthis._on( elements, this._handleEvents );\r\n\t\tthis._hoverable( elements );\r\n\t\tthis._focusable( elements );\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tthis.handles.remove();\r\n\t\tif ( this.range ) {\r\n\t\t\tthis.range.remove();\r\n\t\t}\r\n\r\n\t\tthis.element\r\n\t\t\t.removeClass( \"ui-slider\" +\r\n\t\t\t\t\" ui-slider-horizontal\" +\r\n\t\t\t\t\" ui-slider-vertical\" +\r\n\t\t\t\t\" ui-widget\" +\r\n\t\t\t\t\" ui-widget-content\" +\r\n\t\t\t\t\" ui-corner-all\" );\r\n\r\n\t\tthis._mouseDestroy();\r\n\t},\r\n\r\n\t_mouseCapture: function( event ) {\r\n\t\tvar position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,\r\n\t\t\tthat = this,\r\n\t\t\to = this.options;\r\n\r\n\t\tif ( o.disabled ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis.elementSize = {\r\n\t\t\twidth: this.element.outerWidth(),\r\n\t\t\theight: this.element.outerHeight()\r\n\t\t};\r\n\t\tthis.elementOffset = this.element.offset();\r\n\r\n\t\tposition = { x: event.pageX, y: event.pageY };\r\n\t\tnormValue = this._normValueFromMouse( position );\r\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\r\n\t\tthis.handles.each(function( i ) {\r\n\t\t\tvar thisDistance = Math.abs( normValue - that.values(i) );\r\n\t\t\tif (( distance > thisDistance ) ||\r\n\t\t\t\t( distance === thisDistance &&\r\n\t\t\t\t\t(i === that._lastChangedValue || that.values(i) === o.min ))) {\r\n\t\t\t\tdistance = thisDistance;\r\n\t\t\t\tclosestHandle = $( this );\r\n\t\t\t\tindex = i;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tallowed = this._start( event, index );\r\n\t\tif ( allowed === false ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tthis._mouseSliding = true;\r\n\r\n\t\tthis._handleIndex = index;\r\n\r\n\t\tclosestHandle\r\n\t\t\t.addClass( \"ui-state-active\" )\r\n\t\t\t.focus();\r\n\r\n\t\toffset = closestHandle.offset();\r\n\t\tmouseOverHandle = !$( event.target ).parents().addBack().is( \".ui-slider-handle\" );\r\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\r\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\r\n\t\t\ttop: event.pageY - offset.top -\r\n\t\t\t\t( closestHandle.height() / 2 ) -\r\n\t\t\t\t( parseInt( closestHandle.css(\"borderTopWidth\"), 10 ) || 0 ) -\r\n\t\t\t\t( parseInt( closestHandle.css(\"borderBottomWidth\"), 10 ) || 0) +\r\n\t\t\t\t( parseInt( closestHandle.css(\"marginTop\"), 10 ) || 0)\r\n\t\t};\r\n\r\n\t\tif ( !this.handles.hasClass( \"ui-state-hover\" ) ) {\r\n\t\t\tthis._slide( event, index, normValue );\r\n\t\t}\r\n\t\tthis._animateOff = true;\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_mouseStart: function() {\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_mouseDrag: function( event ) {\r\n\t\tvar position = { x: event.pageX, y: event.pageY },\r\n\t\t\tnormValue = this._normValueFromMouse( position );\r\n\r\n\t\tthis._slide( event, this._handleIndex, normValue );\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_mouseStop: function( event ) {\r\n\t\tthis.handles.removeClass( \"ui-state-active\" );\r\n\t\tthis._mouseSliding = false;\r\n\r\n\t\tthis._stop( event, this._handleIndex );\r\n\t\tthis._change( event, this._handleIndex );\r\n\r\n\t\tthis._handleIndex = null;\r\n\t\tthis._clickOffset = null;\r\n\t\tthis._animateOff = false;\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_detectOrientation: function() {\r\n\t\tthis.orientation = ( this.options.orientation === \"vertical\" ) ? \"vertical\" : \"horizontal\";\r\n\t},\r\n\r\n\t_normValueFromMouse: function( position ) {\r\n\t\tvar pixelTotal,\r\n\t\t\tpixelMouse,\r\n\t\t\tpercentMouse,\r\n\t\t\tvalueTotal,\r\n\t\t\tvalueMouse;\r\n\r\n\t\tif ( this.orientation === \"horizontal\" ) {\r\n\t\t\tpixelTotal = this.elementSize.width;\r\n\t\t\tpixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );\r\n\t\t} else {\r\n\t\t\tpixelTotal = this.elementSize.height;\r\n\t\t\tpixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );\r\n\t\t}\r\n\r\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\r\n\t\tif ( percentMouse > 1 ) {\r\n\t\t\tpercentMouse = 1;\r\n\t\t}\r\n\t\tif ( percentMouse < 0 ) {\r\n\t\t\tpercentMouse = 0;\r\n\t\t}\r\n\t\tif ( this.orientation === \"vertical\" ) {\r\n\t\t\tpercentMouse = 1 - percentMouse;\r\n\t\t}\r\n\r\n\t\tvalueTotal = this._valueMax() - this._valueMin();\r\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\r\n\r\n\t\treturn this._trimAlignValue( valueMouse );\r\n\t},\r\n\r\n\t_start: function( event, index ) {\r\n\t\tvar uiHash = {\r\n\t\t\thandle: this.handles[ index ],\r\n\t\t\tvalue: this.value()\r\n\t\t};\r\n\t\tif ( this.options.values && this.options.values.length ) {\r\n\t\t\tuiHash.value = this.values( index );\r\n\t\t\tuiHash.values = this.values();\r\n\t\t}\r\n\t\treturn this._trigger( \"start\", event, uiHash );\r\n\t},\r\n\r\n\t_slide: function( event, index, newVal ) {\r\n\t\tvar otherVal,\r\n\t\t\tnewValues,\r\n\t\t\tallowed;\r\n\r\n\t\tif ( this.options.values && this.options.values.length ) {\r\n\t\t\totherVal = this.values( index ? 0 : 1 );\r\n\r\n\t\t\tif ( ( this.options.values.length === 2 && this.options.range === true ) &&\r\n\t\t\t\t\t( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )\r\n\t\t\t\t) {\r\n\t\t\t\tnewVal = otherVal;\r\n\t\t\t}\r\n\r\n\t\t\tif ( newVal !== this.values( index ) ) {\r\n\t\t\t\tnewValues = this.values();\r\n\t\t\t\tnewValues[ index ] = newVal;\r\n\t\t\t\t// A slide can be canceled by returning false from the slide callback\r\n\t\t\t\tallowed = this._trigger( \"slide\", event, {\r\n\t\t\t\t\thandle: this.handles[ index ],\r\n\t\t\t\t\tvalue: newVal,\r\n\t\t\t\t\tvalues: newValues\r\n\t\t\t\t} );\r\n\t\t\t\totherVal = this.values( index ? 0 : 1 );\r\n\t\t\t\tif ( allowed !== false ) {\r\n\t\t\t\t\tthis.values( index, newVal );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif ( newVal !== this.value() ) {\r\n\t\t\t\t// A slide can be canceled by returning false from the slide callback\r\n\t\t\t\tallowed = this._trigger( \"slide\", event, {\r\n\t\t\t\t\thandle: this.handles[ index ],\r\n\t\t\t\t\tvalue: newVal\r\n\t\t\t\t} );\r\n\t\t\t\tif ( allowed !== false ) {\r\n\t\t\t\t\tthis.value( newVal );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_stop: function( event, index ) {\r\n\t\tvar uiHash = {\r\n\t\t\thandle: this.handles[ index ],\r\n\t\t\tvalue: this.value()\r\n\t\t};\r\n\t\tif ( this.options.values && this.options.values.length ) {\r\n\t\t\tuiHash.value = this.values( index );\r\n\t\t\tuiHash.values = this.values();\r\n\t\t}\r\n\r\n\t\tthis._trigger( \"stop\", event, uiHash );\r\n\t},\r\n\r\n\t_change: function( event, index ) {\r\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\r\n\t\t\tvar uiHash = {\r\n\t\t\t\thandle: this.handles[ index ],\r\n\t\t\t\tvalue: this.value()\r\n\t\t\t};\r\n\t\t\tif ( this.options.values && this.options.values.length ) {\r\n\t\t\t\tuiHash.value = this.values( index );\r\n\t\t\t\tuiHash.values = this.values();\r\n\t\t\t}\r\n\r\n\t\t\t//store the last changed value index for reference when handles overlap\r\n\t\t\tthis._lastChangedValue = index;\r\n\r\n\t\t\tthis._trigger( \"change\", event, uiHash );\r\n\t\t}\r\n\t},\r\n\r\n\tvalue: function( newValue ) {\r\n\t\tif ( arguments.length ) {\r\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\r\n\t\t\tthis._refreshValue();\r\n\t\t\tthis._change( null, 0 );\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn this._value();\r\n\t},\r\n\r\n\tvalues: function( index, newValue ) {\r\n\t\tvar vals,\r\n\t\t\tnewValues,\r\n\t\t\ti;\r\n\r\n\t\tif ( arguments.length > 1 ) {\r\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\r\n\t\t\tthis._refreshValue();\r\n\t\t\tthis._change( null, index );\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( arguments.length ) {\r\n\t\t\tif ( $.isArray( arguments[ 0 ] ) ) {\r\n\t\t\t\tvals = this.options.values;\r\n\t\t\t\tnewValues = arguments[ 0 ];\r\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\r\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\r\n\t\t\t\t\tthis._change( null, i );\r\n\t\t\t\t}\r\n\t\t\t\tthis._refreshValue();\r\n\t\t\t} else {\r\n\t\t\t\tif ( this.options.values && this.options.values.length ) {\r\n\t\t\t\t\treturn this._values( index );\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn this.value();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn this._values();\r\n\t\t}\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tvar i,\r\n\t\t\tvalsLength = 0;\r\n\r\n\t\tif ( key === \"range\" && this.options.range === true ) {\r\n\t\t\tif ( value === \"min\" ) {\r\n\t\t\t\tthis.options.value = this._values( 0 );\r\n\t\t\t\tthis.options.values = null;\r\n\t\t\t} else if ( value === \"max\" ) {\r\n\t\t\t\tthis.options.value = this._values( this.options.values.length-1 );\r\n\t\t\t\tthis.options.values = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( $.isArray( this.options.values ) ) {\r\n\t\t\tvalsLength = this.options.values.length;\r\n\t\t}\r\n\r\n\t\t$.Widget.prototype._setOption.apply( this, arguments );\r\n\r\n\t\tswitch ( key ) {\r\n\t\t\tcase \"orientation\":\r\n\t\t\t\tthis._detectOrientation();\r\n\t\t\t\tthis.element\r\n\t\t\t\t\t.removeClass( \"ui-slider-horizontal ui-slider-vertical\" )\r\n\t\t\t\t\t.addClass( \"ui-slider-\" + this.orientation );\r\n\t\t\t\tthis._refreshValue();\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"value\":\r\n\t\t\t\tthis._animateOff = true;\r\n\t\t\t\tthis._refreshValue();\r\n\t\t\t\tthis._change( null, 0 );\r\n\t\t\t\tthis._animateOff = false;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"values\":\r\n\t\t\t\tthis._animateOff = true;\r\n\t\t\t\tthis._refreshValue();\r\n\t\t\t\tfor ( i = 0; i < valsLength; i += 1 ) {\r\n\t\t\t\t\tthis._change( null, i );\r\n\t\t\t\t}\r\n\t\t\t\tthis._animateOff = false;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"min\":\r\n\t\t\tcase \"max\":\r\n\t\t\t\tthis._animateOff = true;\r\n\t\t\t\tthis._refreshValue();\r\n\t\t\t\tthis._animateOff = false;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"range\":\r\n\t\t\t\tthis._animateOff = true;\r\n\t\t\t\tthis._refresh();\r\n\t\t\t\tthis._animateOff = false;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t},\r\n\r\n\t//internal value getter\r\n\t// _value() returns value trimmed by min and max, aligned by step\r\n\t_value: function() {\r\n\t\tvar val = this.options.value;\r\n\t\tval = this._trimAlignValue( val );\r\n\r\n\t\treturn val;\r\n\t},\r\n\r\n\t//internal values getter\r\n\t// _values() returns array of values trimmed by min and max, aligned by step\r\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\r\n\t_values: function( index ) {\r\n\t\tvar val,\r\n\t\t\tvals,\r\n\t\t\ti;\r\n\r\n\t\tif ( arguments.length ) {\r\n\t\t\tval = this.options.values[ index ];\r\n\t\t\tval = this._trimAlignValue( val );\r\n\r\n\t\t\treturn val;\r\n\t\t} else if ( this.options.values && this.options.values.length ) {\r\n\t\t\t// .slice() creates a copy of the array\r\n\t\t\t// this copy gets trimmed by min and max and then returned\r\n\t\t\tvals = this.options.values.slice();\r\n\t\t\tfor ( i = 0; i < vals.length; i+= 1) {\r\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\r\n\t\t\t}\r\n\r\n\t\t\treturn vals;\r\n\t\t} else {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t},\r\n\r\n\t// returns the step-aligned value that val is closest to, between (inclusive) min and max\r\n\t_trimAlignValue: function( val ) {\r\n\t\tif ( val <= this._valueMin() ) {\r\n\t\t\treturn this._valueMin();\r\n\t\t}\r\n\t\tif ( val >= this._valueMax() ) {\r\n\t\t\treturn this._valueMax();\r\n\t\t}\r\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\r\n\t\t\tvalModStep = (val - this._valueMin()) % step,\r\n\t\t\talignValue = val - valModStep;\r\n\r\n\t\tif ( Math.abs(valModStep) * 2 >= step ) {\r\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\r\n\t\t}\r\n\r\n\t\t// Since JavaScript has problems with large floats, round\r\n\t\t// the final value to 5 digits after the decimal point (see #4124)\r\n\t\treturn parseFloat( alignValue.toFixed(5) );\r\n\t},\r\n\r\n\t_valueMin: function() {\r\n\t\treturn this.options.min;\r\n\t},\r\n\r\n\t_valueMax: function() {\r\n\t\treturn this.options.max;\r\n\t},\r\n\r\n\t_refreshValue: function() {\r\n\t\tvar lastValPercent, valPercent, value, valueMin, valueMax,\r\n\t\t\toRange = this.options.range,\r\n\t\t\to = this.options,\r\n\t\t\tthat = this,\r\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\r\n\t\t\t_set = {};\r\n\r\n\t\tif ( this.options.values && this.options.values.length ) {\r\n\t\t\tthis.handles.each(function( i ) {\r\n\t\t\t\tvalPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;\r\n\t\t\t\t_set[ that.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\r\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\r\n\t\t\t\tif ( that.options.range === true ) {\r\n\t\t\t\t\tif ( that.orientation === \"horizontal\" ) {\r\n\t\t\t\t\t\tif ( i === 0 ) {\r\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { left: valPercent + \"%\" }, o.animate );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( i === 1 ) {\r\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( { width: ( valPercent - lastValPercent ) + \"%\" }, { queue: false, duration: o.animate } );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif ( i === 0 ) {\r\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { bottom: ( valPercent ) + \"%\" }, o.animate );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( i === 1 ) {\r\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( { height: ( valPercent - lastValPercent ) + \"%\" }, { queue: false, duration: o.animate } );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tlastValPercent = valPercent;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tvalue = this.value();\r\n\t\t\tvalueMin = this._valueMin();\r\n\t\t\tvalueMax = this._valueMax();\r\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\r\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\r\n\t\t\t\t\t0;\r\n\t\t\t_set[ this.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\r\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\r\n\r\n\t\t\tif ( oRange === \"min\" && this.orientation === \"horizontal\" ) {\r\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { width: valPercent + \"%\" }, o.animate );\r\n\t\t\t}\r\n\t\t\tif ( oRange === \"max\" && this.orientation === \"horizontal\" ) {\r\n\t\t\t\tthis.range[ animate ? \"animate\" : \"css\" ]( { width: ( 100 - valPercent ) + \"%\" }, { queue: false, duration: o.animate } );\r\n\t\t\t}\r\n\t\t\tif ( oRange === \"min\" && this.orientation === \"vertical\" ) {\r\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { height: valPercent + \"%\" }, o.animate );\r\n\t\t\t}\r\n\t\t\tif ( oRange === \"max\" && this.orientation === \"vertical\" ) {\r\n\t\t\t\tthis.range[ animate ? \"animate\" : \"css\" ]( { height: ( 100 - valPercent ) + \"%\" }, { queue: false, duration: o.animate } );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_handleEvents: {\r\n\t\tkeydown: function( event ) {\r\n\t\t\tvar allowed, curVal, newVal, step,\r\n\t\t\t\tindex = $( event.target ).data( \"ui-slider-handle-index\" );\r\n\r\n\t\t\tswitch ( event.keyCode ) {\r\n\t\t\t\tcase $.ui.keyCode.HOME:\r\n\t\t\t\tcase $.ui.keyCode.END:\r\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\r\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\r\n\t\t\t\tcase $.ui.keyCode.UP:\r\n\t\t\t\tcase $.ui.keyCode.RIGHT:\r\n\t\t\t\tcase $.ui.keyCode.DOWN:\r\n\t\t\t\tcase $.ui.keyCode.LEFT:\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tif ( !this._keySliding ) {\r\n\t\t\t\t\t\tthis._keySliding = true;\r\n\t\t\t\t\t\t$( event.target ).addClass( \"ui-state-active\" );\r\n\t\t\t\t\t\tallowed = this._start( event, index );\r\n\t\t\t\t\t\tif ( allowed === false ) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tstep = this.options.step;\r\n\t\t\tif ( this.options.values && this.options.values.length ) {\r\n\t\t\t\tcurVal = newVal = this.values( index );\r\n\t\t\t} else {\r\n\t\t\t\tcurVal = newVal = this.value();\r\n\t\t\t}\r\n\r\n\t\t\tswitch ( event.keyCode ) {\r\n\t\t\t\tcase $.ui.keyCode.HOME:\r\n\t\t\t\t\tnewVal = this._valueMin();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase $.ui.keyCode.END:\r\n\t\t\t\t\tnewVal = this._valueMax();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\r\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\r\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase $.ui.keyCode.UP:\r\n\t\t\t\tcase $.ui.keyCode.RIGHT:\r\n\t\t\t\t\tif ( curVal === this._valueMax() ) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + step );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase $.ui.keyCode.DOWN:\r\n\t\t\t\tcase $.ui.keyCode.LEFT:\r\n\t\t\t\t\tif ( curVal === this._valueMin() ) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - step );\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tthis._slide( event, index, newVal );\r\n\t\t},\r\n\t\tclick: function( event ) {\r\n\t\t\tevent.preventDefault();\r\n\t\t},\r\n\t\tkeyup: function( event ) {\r\n\t\t\tvar index = $( event.target ).data( \"ui-slider-handle-index\" );\r\n\r\n\t\t\tif ( this._keySliding ) {\r\n\t\t\t\tthis._keySliding = false;\r\n\t\t\t\tthis._stop( event, index );\r\n\t\t\t\tthis._change( event, index );\r\n\t\t\t\t$( event.target ).removeClass( \"ui-state-active\" );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n});\r\n\r\n}(jQuery));\r\n(function( $ ) {\r\n\r\nvar increments = 0;\r\n\r\nfunction addDescribedBy( elem, id ) {\r\n\tvar describedby = (elem.attr( \"aria-describedby\" ) || \"\").split( /\\s+/ );\r\n\tdescribedby.push( id );\r\n\telem\r\n\t\t.data( \"ui-tooltip-id\", id )\r\n\t\t.attr( \"aria-describedby\", $.trim( describedby.join( \" \" ) ) );\r\n}\r\n\r\nfunction removeDescribedBy( elem ) {\r\n\tvar id = elem.data( \"ui-tooltip-id\" ),\r\n\t\tdescribedby = (elem.attr( \"aria-describedby\" ) || \"\").split( /\\s+/ ),\r\n\t\tindex = $.inArray( id, describedby );\r\n\tif ( index !== -1 ) {\r\n\t\tdescribedby.splice( index, 1 );\r\n\t}\r\n\r\n\telem.removeData( \"ui-tooltip-id\" );\r\n\tdescribedby = $.trim( describedby.join( \" \" ) );\r\n\tif ( describedby ) {\r\n\t\telem.attr( \"aria-describedby\", describedby );\r\n\t} else {\r\n\t\telem.removeAttr( \"aria-describedby\" );\r\n\t}\r\n}\r\n\r\n$.widget( \"ui.tooltip\", {\r\n\tversion: \"1.10.4\",\r\n\toptions: {\r\n\t\tcontent: function() {\r\n\t\t\t// support: IE<9, Opera in jQuery <1.7\r\n\t\t\t// .text() can't accept undefined, so coerce to a string\r\n\t\t\tvar title = $( this ).attr( \"title\" ) || \"\";\r\n\t\t\t// Escape title, since we're going from an attribute to raw HTML\r\n\t\t\treturn $( \"<a>\" ).text( title ).html();\r\n\t\t},\r\n\t\thide: true,\r\n\t\t// Disabled elements have inconsistent behavior across browsers (#8661)\r\n\t\titems: \"[title]:not([disabled])\",\r\n\t\tposition: {\r\n\t\t\tmy: \"left top+15\",\r\n\t\t\tat: \"left bottom\",\r\n\t\t\tcollision: \"flipfit flip\"\r\n\t\t},\r\n\t\tshow: true,\r\n\t\ttooltipClass: null,\r\n\t\ttrack: false,\r\n\r\n\t\t// callbacks\r\n\t\tclose: null,\r\n\t\topen: null\r\n\t},\r\n\r\n\t_create: function() {\r\n\t\tthis._on({\r\n\t\t\tmouseover: \"open\",\r\n\t\t\tfocusin: \"open\"\r\n\t\t});\r\n\r\n\t\t// IDs of generated tooltips, needed for destroy\r\n\t\tthis.tooltips = {};\r\n\t\t// IDs of parent tooltips where we removed the title attribute\r\n\t\tthis.parents = {};\r\n\r\n\t\tif ( this.options.disabled ) {\r\n\t\t\tthis._disable();\r\n\t\t}\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tvar that = this;\r\n\r\n\t\tif ( key === \"disabled\" ) {\r\n\t\t\tthis[ value ? \"_disable\" : \"_enable\" ]();\r\n\t\t\tthis.options[ key ] = value;\r\n\t\t\t// disable element style changes\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._super( key, value );\r\n\r\n\t\tif ( key === \"content\" ) {\r\n\t\t\t$.each( this.tooltips, function( id, element ) {\r\n\t\t\t\tthat._updateContent( element );\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\t_disable: function() {\r\n\t\tvar that = this;\r\n\r\n\t\t// close open tooltips\r\n\t\t$.each( this.tooltips, function( id, element ) {\r\n\t\t\tvar event = $.Event( \"blur\" );\r\n\t\t\tevent.target = event.currentTarget = element[0];\r\n\t\t\tthat.close( event, true );\r\n\t\t});\r\n\r\n\t\t// remove title attributes to prevent native tooltips\r\n\t\tthis.element.find( this.options.items ).addBack().each(function() {\r\n\t\t\tvar element = $( this );\r\n\t\t\tif ( element.is( \"[title]\" ) ) {\r\n\t\t\t\telement\r\n\t\t\t\t\t.data( \"ui-tooltip-title\", element.attr( \"title\" ) )\r\n\t\t\t\t\t.attr( \"title\", \"\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_enable: function() {\r\n\t\t// restore title attributes\r\n\t\tthis.element.find( this.options.items ).addBack().each(function() {\r\n\t\t\tvar element = $( this );\r\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\r\n\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\topen: function( event ) {\r\n\t\tvar that = this,\r\n\t\t\ttarget = $( event ? event.target : this.element )\r\n\t\t\t\t// we need closest here due to mouseover bubbling,\r\n\t\t\t\t// but always pointing at the same event target\r\n\t\t\t\t.closest( this.options.items );\r\n\r\n\t\t// No element to show a tooltip for or the tooltip is already open\r\n\t\tif ( !target.length || target.data( \"ui-tooltip-id\" ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( target.attr( \"title\" ) ) {\r\n\t\t\ttarget.data( \"ui-tooltip-title\", target.attr( \"title\" ) );\r\n\t\t}\r\n\r\n\t\ttarget.data( \"ui-tooltip-open\", true );\r\n\r\n\t\t// kill parent tooltips, custom or native, for hover\r\n\t\tif ( event && event.type === \"mouseover\" ) {\r\n\t\t\ttarget.parents().each(function() {\r\n\t\t\t\tvar parent = $( this ),\r\n\t\t\t\t\tblurEvent;\r\n\t\t\t\tif ( parent.data( \"ui-tooltip-open\" ) ) {\r\n\t\t\t\t\tblurEvent = $.Event( \"blur\" );\r\n\t\t\t\t\tblurEvent.target = blurEvent.currentTarget = this;\r\n\t\t\t\t\tthat.close( blurEvent, true );\r\n\t\t\t\t}\r\n\t\t\t\tif ( parent.attr( \"title\" ) ) {\r\n\t\t\t\t\tparent.uniqueId();\r\n\t\t\t\t\tthat.parents[ this.id ] = {\r\n\t\t\t\t\t\telement: this,\r\n\t\t\t\t\t\ttitle: parent.attr( \"title\" )\r\n\t\t\t\t\t};\r\n\t\t\t\t\tparent.attr( \"title\", \"\" );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._updateContent( target, event );\r\n\t},\r\n\r\n\t_updateContent: function( target, event ) {\r\n\t\tvar content,\r\n\t\t\tcontentOption = this.options.content,\r\n\t\t\tthat = this,\r\n\t\t\teventType = event ? event.type : null;\r\n\r\n\t\tif ( typeof contentOption === \"string\" ) {\r\n\t\t\treturn this._open( event, target, contentOption );\r\n\t\t}\r\n\r\n\t\tcontent = contentOption.call( target[0], function( response ) {\r\n\t\t\t// ignore async response if tooltip was closed already\r\n\t\t\tif ( !target.data( \"ui-tooltip-open\" ) ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// IE may instantly serve a cached response for ajax requests\r\n\t\t\t// delay this call to _open so the other call to _open runs first\r\n\t\t\tthat._delay(function() {\r\n\t\t\t\t// jQuery creates a special event for focusin when it doesn't\r\n\t\t\t\t// exist natively. To improve performance, the native event\r\n\t\t\t\t// object is reused and the type is changed. Therefore, we can't\r\n\t\t\t\t// rely on the type being correct after the event finished\r\n\t\t\t\t// bubbling, so we set it back to the previous value. (#8740)\r\n\t\t\t\tif ( event ) {\r\n\t\t\t\t\tevent.type = eventType;\r\n\t\t\t\t}\r\n\t\t\t\tthis._open( event, target, response );\r\n\t\t\t});\r\n\t\t});\r\n\t\tif ( content ) {\r\n\t\t\tthis._open( event, target, content );\r\n\t\t}\r\n\t},\r\n\r\n\t_open: function( event, target, content ) {\r\n\t\tvar tooltip, events, delayedShow,\r\n\t\t\tpositionOption = $.extend( {}, this.options.position );\r\n\r\n\t\tif ( !content ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Content can be updated multiple times. If the tooltip already\r\n\t\t// exists, then just update the content and bail.\r\n\t\ttooltip = this._find( target );\r\n\t\tif ( tooltip.length ) {\r\n\t\t\ttooltip.find( \".ui-tooltip-content\" ).html( content );\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// if we have a title, clear it to prevent the native tooltip\r\n\t\t// we have to check first to avoid defining a title if none exists\r\n\t\t// (we don't want to cause an element to start matching [title])\r\n\t\t//\r\n\t\t// We use removeAttr only for key events, to allow IE to export the correct\r\n\t\t// accessible attributes. For mouse events, set to empty string to avoid\r\n\t\t// native tooltip showing up (happens only when removing inside mouseover).\r\n\t\tif ( target.is( \"[title]\" ) ) {\r\n\t\t\tif ( event && event.type === \"mouseover\" ) {\r\n\t\t\t\ttarget.attr( \"title\", \"\" );\r\n\t\t\t} else {\r\n\t\t\t\ttarget.removeAttr( \"title\" );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttooltip = this._tooltip( target );\r\n\t\taddDescribedBy( target, tooltip.attr( \"id\" ) );\r\n\t\ttooltip.find( \".ui-tooltip-content\" ).html( content );\r\n\r\n\t\tfunction position( event ) {\r\n\t\t\tpositionOption.of = event;\r\n\t\t\tif ( tooltip.is( \":hidden\" ) ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\ttooltip.position( positionOption );\r\n\t\t}\r\n\t\tif ( this.options.track && event && /^mouse/.test( event.type ) ) {\r\n\t\t\tthis._on( this.document, {\r\n\t\t\t\tmousemove: position\r\n\t\t\t});\r\n\t\t\t// trigger once to override element-relative positioning\r\n\t\t\tposition( event );\r\n\t\t} else {\r\n\t\t\ttooltip.position( $.extend({\r\n\t\t\t\tof: target\r\n\t\t\t}, this.options.position ) );\r\n\t\t}\r\n\r\n\t\ttooltip.hide();\r\n\r\n\t\tthis._show( tooltip, this.options.show );\r\n\t\t// Handle tracking tooltips that are shown with a delay (#8644). As soon\r\n\t\t// as the tooltip is visible, position the tooltip using the most recent\r\n\t\t// event.\r\n\t\tif ( this.options.show && this.options.show.delay ) {\r\n\t\t\tdelayedShow = this.delayedShow = setInterval(function() {\r\n\t\t\t\tif ( tooltip.is( \":visible\" ) ) {\r\n\t\t\t\t\tposition( positionOption.of );\r\n\t\t\t\t\tclearInterval( delayedShow );\r\n\t\t\t\t}\r\n\t\t\t}, $.fx.interval );\r\n\t\t}\r\n\r\n\t\tthis._trigger( \"open\", event, { tooltip: tooltip } );\r\n\r\n\t\tevents = {\r\n\t\t\tkeyup: function( event ) {\r\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ESCAPE ) {\r\n\t\t\t\t\tvar fakeEvent = $.Event(event);\r\n\t\t\t\t\tfakeEvent.currentTarget = target[0];\r\n\t\t\t\t\tthis.close( fakeEvent, true );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tremove: function() {\r\n\t\t\t\tthis._removeTooltip( tooltip );\r\n\t\t\t}\r\n\t\t};\r\n\t\tif ( !event || event.type === \"mouseover\" ) {\r\n\t\t\tevents.mouseleave = \"close\";\r\n\t\t}\r\n\t\tif ( !event || event.type === \"focusin\" ) {\r\n\t\t\tevents.focusout = \"close\";\r\n\t\t}\r\n\t\tthis._on( true, target, events );\r\n\t},\r\n\r\n\tclose: function( event ) {\r\n\t\tvar that = this,\r\n\t\t\ttarget = $( event ? event.currentTarget : this.element ),\r\n\t\t\ttooltip = this._find( target );\r\n\r\n\t\t// disabling closes the tooltip, so we need to track when we're closing\r\n\t\t// to avoid an infinite loop in case the tooltip becomes disabled on close\r\n\t\tif ( this.closing ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Clear the interval for delayed tracking tooltips\r\n\t\tclearInterval( this.delayedShow );\r\n\r\n\t\t// only set title if we had one before (see comment in _open())\r\n\t\tif ( target.data( \"ui-tooltip-title\" ) ) {\r\n\t\t\ttarget.attr( \"title\", target.data( \"ui-tooltip-title\" ) );\r\n\t\t}\r\n\r\n\t\tremoveDescribedBy( target );\r\n\r\n\t\ttooltip.stop( true );\r\n\t\tthis._hide( tooltip, this.options.hide, function() {\r\n\t\t\tthat._removeTooltip( $( this ) );\r\n\t\t});\r\n\r\n\t\ttarget.removeData( \"ui-tooltip-open\" );\r\n\t\tthis._off( target, \"mouseleave focusout keyup\" );\r\n\t\t// Remove 'remove' binding only on delegated targets\r\n\t\tif ( target[0] !== this.element[0] ) {\r\n\t\t\tthis._off( target, \"remove\" );\r\n\t\t}\r\n\t\tthis._off( this.document, \"mousemove\" );\r\n\r\n\t\tif ( event && event.type === \"mouseleave\" ) {\r\n\t\t\t$.each( this.parents, function( id, parent ) {\r\n\t\t\t\t$( parent.element ).attr( \"title\", parent.title );\r\n\t\t\t\tdelete that.parents[ id ];\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.closing = true;\r\n\t\tthis._trigger( \"close\", event, { tooltip: tooltip } );\r\n\t\tthis.closing = false;\r\n\t},\r\n\r\n\t_tooltip: function( element ) {\r\n\t\tvar id = \"ui-tooltip-\" + increments++,\r\n\t\t\ttooltip = $( \"<div>\" )\r\n\t\t\t\t.attr({\r\n\t\t\t\t\tid: id,\r\n\t\t\t\t\trole: \"tooltip\"\r\n\t\t\t\t})\r\n\t\t\t\t.addClass( \"ui-tooltip ui-widget ui-corner-all ui-widget-content \" +\r\n\t\t\t\t\t( this.options.tooltipClass || \"\" ) );\r\n\t\t$( \"<div>\" )\r\n\t\t\t.addClass( \"ui-tooltip-content\" )\r\n\t\t\t.appendTo( tooltip );\r\n\t\ttooltip.appendTo( this.document[0].body );\r\n\t\tthis.tooltips[ id ] = element;\r\n\t\treturn tooltip;\r\n\t},\r\n\r\n\t_find: function( target ) {\r\n\t\tvar id = target.data( \"ui-tooltip-id\" );\r\n\t\treturn id ? $( \"#\" + id ) : $();\r\n\t},\r\n\r\n\t_removeTooltip: function( tooltip ) {\r\n\t\ttooltip.remove();\r\n\t\tdelete this.tooltips[ tooltip.attr( \"id\" ) ];\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tvar that = this;\r\n\r\n\t\t// close open tooltips\r\n\t\t$.each( this.tooltips, function( id, element ) {\r\n\t\t\t// Delegate to close method to handle common cleanup\r\n\t\t\tvar event = $.Event( \"blur\" );\r\n\t\t\tevent.target = event.currentTarget = element[0];\r\n\t\t\tthat.close( event, true );\r\n\r\n\t\t\t// Remove immediately; destroying an open tooltip doesn't use the\r\n\t\t\t// hide animation\r\n\t\t\t$( \"#\" + id ).remove();\r\n\r\n\t\t\t// Restore the title\r\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\r\n\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\r\n\t\t\t\telement.removeData( \"ui-tooltip-title\" );\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n\r\n}( jQuery ) );\r\n","/*\r\n* jQuery Form Plugin; v20131017\r\n* http://jquery.malsup.com/form/\r\n* Copyright (c) 2013 M. Alsup; Dual licensed: MIT/GPL\r\n* https://github.com/malsup/form#copyright-and-license\r\n*/\r\nvar jQuery = require('jquery');\r\n;(function(e){\"use strict\";function t(t){var r=t.data;t.isDefaultPrevented()||(t.preventDefault(),e(t.target).ajaxSubmit(r))}function r(t){var r=t.target,a=e(r);if(!a.is(\"[type=submit],[type=image]\")){var n=a.closest(\"[type=submit]\");if(0===n.length)return;r=n[0]}var i=this;if(i.clk=r,\"image\"==r.type)if(void 0!==t.offsetX)i.clk_x=t.offsetX,i.clk_y=t.offsetY;else if(\"function\"==typeof e.fn.offset){var o=a.offset();i.clk_x=t.pageX-o.left,i.clk_y=t.pageY-o.top}else i.clk_x=t.pageX-r.offsetLeft,i.clk_y=t.pageY-r.offsetTop;setTimeout(function(){i.clk=i.clk_x=i.clk_y=null},100)}function a(){if(e.fn.ajaxSubmit.debug){var t=\"[jquery.form] \"+Array.prototype.join.call(arguments,\"\");window.console&&window.console.log?window.console.log(t):window.opera&&window.opera.postError&&window.opera.postError(t)}}var n={};n.fileapi=void 0!==e(\"<input type='file'/>\").get(0).files,n.formdata=void 0!==window.FormData;var i=!!e.fn.prop;e.fn.attr2=function(){if(!i)return this.attr.apply(this,arguments);var e=this.prop.apply(this,arguments);return e&&e.jquery||\"string\"==typeof e?e:this.attr.apply(this,arguments)},e.fn.ajaxSubmit=function(t){function r(r){var a,n,i=e.param(r,t.traditional).split(\"&\"),o=i.length,s=[];for(a=0;o>a;a++)i[a]=i[a].replace(/\\+/g,\" \"),n=i[a].split(\"=\"),s.push([decodeURIComponent(n[0]),decodeURIComponent(n[1])]);return s}function o(a){for(var n=new FormData,i=0;a.length>i;i++)n.append(a[i].name,a[i].value);if(t.extraData){var o=r(t.extraData);for(i=0;o.length>i;i++)o[i]&&n.append(o[i][0],o[i][1])}t.data=null;var s=e.extend(!0,{},e.ajaxSettings,t,{contentType:!1,processData:!1,cache:!1,type:u||\"POST\"});t.uploadProgress&&(s.xhr=function(){var r=e.ajaxSettings.xhr();return r.upload&&r.upload.addEventListener(\"progress\",function(e){var r=0,a=e.loaded||e.position,n=e.total;e.lengthComputable&&(r=Math.ceil(100*(a/n))),t.uploadProgress(e,a,n,r)},!1),r}),s.data=null;var l=s.beforeSend;return s.beforeSend=function(e,r){r.data=t.formData?t.formData:n,l&&l.call(this,e,r)},e.ajax(s)}function s(r){function n(e){var t=null;try{e.contentWindow&&(t=e.contentWindow.document)}catch(r){a(\"cannot get iframe.contentWindow document: \"+r)}if(t)return t;try{t=e.contentDocument?e.contentDocument:e.document}catch(r){a(\"cannot get iframe.contentDocument: \"+r),t=e.document}return t}function o(){function t(){try{var e=n(g).readyState;a(\"state = \"+e),e&&\"uninitialized\"==e.toLowerCase()&&setTimeout(t,50)}catch(r){a(\"Server abort: \",r,\" (\",r.name,\")\"),s(k),j&&clearTimeout(j),j=void 0}}var r=f.attr2(\"target\"),i=f.attr2(\"action\");w.setAttribute(\"target\",d),(!u||/post/i.test(u))&&w.setAttribute(\"method\",\"POST\"),i!=m.url&&w.setAttribute(\"action\",m.url),m.skipEncodingOverride||u&&!/post/i.test(u)||f.attr({encoding:\"multipart/form-data\",enctype:\"multipart/form-data\"}),m.timeout&&(j=setTimeout(function(){T=!0,s(D)},m.timeout));var o=[];try{if(m.extraData)for(var l in m.extraData)m.extraData.hasOwnProperty(l)&&(e.isPlainObject(m.extraData[l])&&m.extraData[l].hasOwnProperty(\"name\")&&m.extraData[l].hasOwnProperty(\"value\")?o.push(e('<input type=\"hidden\" name=\"'+m.extraData[l].name+'\">').val(m.extraData[l].value).appendTo(w)[0]):o.push(e('<input type=\"hidden\" name=\"'+l+'\">').val(m.extraData[l]).appendTo(w)[0]));m.iframeTarget||v.appendTo(\"body\"),g.attachEvent?g.attachEvent(\"onload\",s):g.addEventListener(\"load\",s,!1),setTimeout(t,15);try{w.submit()}catch(c){var p=document.createElement(\"form\").submit;p.apply(w)}}finally{w.setAttribute(\"action\",i),r?w.setAttribute(\"target\",r):f.removeAttr(\"target\"),e(o).remove()}}function s(t){if(!x.aborted&&!F){if(M=n(g),M||(a(\"cannot access response document\"),t=k),t===D&&x)return x.abort(\"timeout\"),S.reject(x,\"timeout\"),void 0;if(t==k&&x)return x.abort(\"server abort\"),S.reject(x,\"error\",\"server abort\"),void 0;if(M&&M.location.href!=m.iframeSrc||T){g.detachEvent?g.detachEvent(\"onload\",s):g.removeEventListener(\"load\",s,!1);var r,i=\"success\";try{if(T)throw\"timeout\";var o=\"xml\"==m.dataType||M.XMLDocument||e.isXMLDoc(M);if(a(\"isXml=\"+o),!o&&window.opera&&(null===M.body||!M.body.innerHTML)&&--O)return a(\"requeing onLoad callback, DOM not available\"),setTimeout(s,250),void 0;var u=M.body?M.body:M.documentElement;x.responseText=u?u.innerHTML:null,x.responseXML=M.XMLDocument?M.XMLDocument:M,o&&(m.dataType=\"xml\"),x.getResponseHeader=function(e){var t={\"content-type\":m.dataType};return t[e.toLowerCase()]},u&&(x.status=Number(u.getAttribute(\"status\"))||x.status,x.statusText=u.getAttribute(\"statusText\")||x.statusText);var l=(m.dataType||\"\").toLowerCase(),c=/(json|script|text)/.test(l);if(c||m.textarea){var f=M.getElementsByTagName(\"textarea\")[0];if(f)x.responseText=f.value,x.status=Number(f.getAttribute(\"status\"))||x.status,x.statusText=f.getAttribute(\"statusText\")||x.statusText;else if(c){var d=M.getElementsByTagName(\"pre\")[0],h=M.getElementsByTagName(\"body\")[0];d?x.responseText=d.textContent?d.textContent:d.innerText:h&&(x.responseText=h.textContent?h.textContent:h.innerText)}}else\"xml\"==l&&!x.responseXML&&x.responseText&&(x.responseXML=X(x.responseText));try{E=_(x,l,m)}catch(b){i=\"parsererror\",x.error=r=b||i}}catch(b){a(\"error caught: \",b),i=\"error\",x.error=r=b||i}x.aborted&&(a(\"upload aborted\"),i=null),x.status&&(i=x.status>=200&&300>x.status||304===x.status?\"success\":\"error\"),\"success\"===i?(m.success&&m.success.call(m.context,E,\"success\",x),S.resolve(x.responseText,\"success\",x),p&&e.event.trigger(\"ajaxSuccess\",[x,m])):i&&(void 0===r&&(r=x.statusText),m.error&&m.error.call(m.context,x,i,r),S.reject(x,\"error\",r),p&&e.event.trigger(\"ajaxError\",[x,m,r])),p&&e.event.trigger(\"ajaxComplete\",[x,m]),p&&!--e.active&&e.event.trigger(\"ajaxStop\"),m.complete&&m.complete.call(m.context,x,i),F=!0,m.timeout&&clearTimeout(j),setTimeout(function(){m.iframeTarget?v.attr(\"src\",m.iframeSrc):v.remove(),x.responseXML=null},100)}}}var l,c,m,p,d,v,g,x,b,y,T,j,w=f[0],S=e.Deferred();if(S.abort=function(e){x.abort(e)},r)for(c=0;h.length>c;c++)l=e(h[c]),i?l.prop(\"disabled\",!1):l.removeAttr(\"disabled\");if(m=e.extend(!0,{},e.ajaxSettings,t),m.context=m.context||m,d=\"jqFormIO\"+(new Date).getTime(),m.iframeTarget?(v=e(m.iframeTarget),y=v.attr2(\"name\"),y?d=y:v.attr2(\"name\",d)):(v=e('<iframe name=\"'+d+'\" src=\"'+m.iframeSrc+'\" />'),v.css({position:\"absolute\",top:\"-1000px\",left:\"-1000px\"})),g=v[0],x={aborted:0,responseText:null,responseXML:null,status:0,statusText:\"n/a\",getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(t){var r=\"timeout\"===t?\"timeout\":\"aborted\";a(\"aborting upload... \"+r),this.aborted=1;try{g.contentWindow.document.execCommand&&g.contentWindow.document.execCommand(\"Stop\")}catch(n){}v.attr(\"src\",m.iframeSrc),x.error=r,m.error&&m.error.call(m.context,x,r,t),p&&e.event.trigger(\"ajaxError\",[x,m,r]),m.complete&&m.complete.call(m.context,x,r)}},p=m.global,p&&0===e.active++&&e.event.trigger(\"ajaxStart\"),p&&e.event.trigger(\"ajaxSend\",[x,m]),m.beforeSend&&m.beforeSend.call(m.context,x,m)===!1)return m.global&&e.active--,S.reject(),S;if(x.aborted)return S.reject(),S;b=w.clk,b&&(y=b.name,y&&!b.disabled&&(m.extraData=m.extraData||{},m.extraData[y]=b.value,\"image\"==b.type&&(m.extraData[y+\".x\"]=w.clk_x,m.extraData[y+\".y\"]=w.clk_y)));var D=1,k=2,A=e(\"meta[name=csrf-token]\").attr(\"content\"),L=e(\"meta[name=csrf-param]\").attr(\"content\");L&&A&&(m.extraData=m.extraData||{},m.extraData[L]=A),m.forceSync?o():setTimeout(o,10);var E,M,F,O=50,X=e.parseXML||function(e,t){return window.ActiveXObject?(t=new ActiveXObject(\"Microsoft.XMLDOM\"),t.async=\"false\",t.loadXML(e)):t=(new DOMParser).parseFromString(e,\"text/xml\"),t&&t.documentElement&&\"parsererror\"!=t.documentElement.nodeName?t:null},C=e.parseJSON||function(e){return window.eval(\"(\"+e+\")\")},_=function(t,r,a){var n=t.getResponseHeader(\"content-type\")||\"\",i=\"xml\"===r||!r&&n.indexOf(\"xml\")>=0,o=i?t.responseXML:t.responseText;return i&&\"parsererror\"===o.documentElement.nodeName&&e.error&&e.error(\"parsererror\"),a&&a.dataFilter&&(o=a.dataFilter(o,r)),\"string\"==typeof o&&(\"json\"===r||!r&&n.indexOf(\"json\")>=0?o=C(o):(\"script\"===r||!r&&n.indexOf(\"javascript\")>=0)&&e.globalEval(o)),o};return S}if(!this.length)return a(\"ajaxSubmit: skipping submit process - no element selected\"),this;var u,l,c,f=this;\"function\"==typeof t?t={success:t}:void 0===t&&(t={}),u=t.type||this.attr2(\"method\"),l=t.url||this.attr2(\"action\"),c=\"string\"==typeof l?e.trim(l):\"\",c=c||window.location.href||\"\",c&&(c=(c.match(/^([^#]+)/)||[])[1]),t=e.extend(!0,{url:c,success:e.ajaxSettings.success,type:u||e.ajaxSettings.type,iframeSrc:/^https/i.test(window.location.href||\"\")?\"javascript:false\":\"about:blank\"},t);var m={};if(this.trigger(\"form-pre-serialize\",[this,t,m]),m.veto)return a(\"ajaxSubmit: submit vetoed via form-pre-serialize trigger\"),this;if(t.beforeSerialize&&t.beforeSerialize(this,t)===!1)return a(\"ajaxSubmit: submit aborted via beforeSerialize callback\"),this;var p=t.traditional;void 0===p&&(p=e.ajaxSettings.traditional);var d,h=[],v=this.formToArray(t.semantic,h);if(t.data&&(t.extraData=t.data,d=e.param(t.data,p)),t.beforeSubmit&&t.beforeSubmit(v,this,t)===!1)return a(\"ajaxSubmit: submit aborted via beforeSubmit callback\"),this;if(this.trigger(\"form-submit-validate\",[v,this,t,m]),m.veto)return a(\"ajaxSubmit: submit vetoed via form-submit-validate trigger\"),this;var g=e.param(v,p);d&&(g=g?g+\"&\"+d:d),\"GET\"==t.type.toUpperCase()?(t.url+=(t.url.indexOf(\"?\")>=0?\"&\":\"?\")+g,t.data=null):t.data=g;var x=[];if(t.resetForm&&x.push(function(){f.resetForm()}),t.clearForm&&x.push(function(){f.clearForm(t.includeHidden)}),!t.dataType&&t.target){var b=t.success||function(){};x.push(function(r){var a=t.replaceTarget?\"replaceWith\":\"html\";e(t.target)[a](r).each(b,arguments)})}else t.success&&x.push(t.success);if(t.success=function(e,r,a){for(var n=t.context||this,i=0,o=x.length;o>i;i++)x[i].apply(n,[e,r,a||f,f])},t.error){var y=t.error;t.error=function(e,r,a){var n=t.context||this;y.apply(n,[e,r,a,f])}}if(t.complete){var T=t.complete;t.complete=function(e,r){var a=t.context||this;T.apply(a,[e,r,f])}}var j=e(\"input[type=file]:enabled\",this).filter(function(){return\"\"!==e(this).val()}),w=j.length>0,S=\"multipart/form-data\",D=f.attr(\"enctype\")==S||f.attr(\"encoding\")==S,k=n.fileapi&&n.formdata;a(\"fileAPI :\"+k);var A,L=(w||D)&&!k;t.iframe!==!1&&(t.iframe||L)?t.closeKeepAlive?e.get(t.closeKeepAlive,function(){A=s(v)}):A=s(v):A=(w||D)&&k?o(v):e.ajax(t),f.removeData(\"jqxhr\").data(\"jqxhr\",A);for(var E=0;h.length>E;E++)h[E]=null;return this.trigger(\"form-submit-notify\",[this,t]),this},e.fn.ajaxForm=function(n){if(n=n||{},n.delegation=n.delegation&&e.isFunction(e.fn.on),!n.delegation&&0===this.length){var i={s:this.selector,c:this.context};return!e.isReady&&i.s?(a(\"DOM not ready, queuing ajaxForm\"),e(function(){e(i.s,i.c).ajaxForm(n)}),this):(a(\"terminating; zero elements found by selector\"+(e.isReady?\"\":\" (DOM not ready)\")),this)}return n.delegation?(e(document).off(\"submit.form-plugin\",this.selector,t).off(\"click.form-plugin\",this.selector,r).on(\"submit.form-plugin\",this.selector,n,t).on(\"click.form-plugin\",this.selector,n,r),this):this.ajaxFormUnbind().bind(\"submit.form-plugin\",n,t).bind(\"click.form-plugin\",n,r)},e.fn.ajaxFormUnbind=function(){return this.unbind(\"submit.form-plugin click.form-plugin\")},e.fn.formToArray=function(t,r){var a=[];if(0===this.length)return a;var i=this[0],o=t?i.getElementsByTagName(\"*\"):i.elements;if(!o)return a;var s,u,l,c,f,m,p;for(s=0,m=o.length;m>s;s++)if(f=o[s],l=f.name,l&&!f.disabled)if(t&&i.clk&&\"image\"==f.type)i.clk==f&&(a.push({name:l,value:e(f).val(),type:f.type}),a.push({name:l+\".x\",value:i.clk_x},{name:l+\".y\",value:i.clk_y}));else if(c=e.fieldValue(f,!0),c&&c.constructor==Array)for(r&&r.push(f),u=0,p=c.length;p>u;u++)a.push({name:l,value:c[u]});else if(n.fileapi&&\"file\"==f.type){r&&r.push(f);var d=f.files;if(d.length)for(u=0;d.length>u;u++)a.push({name:l,value:d[u],type:f.type});else a.push({name:l,value:\"\",type:f.type})}else null!==c&&c!==void 0&&(r&&r.push(f),a.push({name:l,value:c,type:f.type,required:f.required}));if(!t&&i.clk){var h=e(i.clk),v=h[0];l=v.name,l&&!v.disabled&&\"image\"==v.type&&(a.push({name:l,value:h.val()}),a.push({name:l+\".x\",value:i.clk_x},{name:l+\".y\",value:i.clk_y}))}return a},e.fn.formSerialize=function(t){return e.param(this.formToArray(t))},e.fn.fieldSerialize=function(t){var r=[];return this.each(function(){var a=this.name;if(a){var n=e.fieldValue(this,t);if(n&&n.constructor==Array)for(var i=0,o=n.length;o>i;i++)r.push({name:a,value:n[i]});else null!==n&&n!==void 0&&r.push({name:this.name,value:n})}}),e.param(r)},e.fn.fieldValue=function(t){for(var r=[],a=0,n=this.length;n>a;a++){var i=this[a],o=e.fieldValue(i,t);null===o||void 0===o||o.constructor==Array&&!o.length||(o.constructor==Array?e.merge(r,o):r.push(o))}return r},e.fieldValue=function(t,r){var a=t.name,n=t.type,i=t.tagName.toLowerCase();if(void 0===r&&(r=!0),r&&(!a||t.disabled||\"reset\"==n||\"button\"==n||(\"checkbox\"==n||\"radio\"==n)&&!t.checked||(\"submit\"==n||\"image\"==n)&&t.form&&t.form.clk!=t||\"select\"==i&&-1==t.selectedIndex))return null;if(\"select\"==i){var o=t.selectedIndex;if(0>o)return null;for(var s=[],u=t.options,l=\"select-one\"==n,c=l?o+1:u.length,f=l?o:0;c>f;f++){var m=u[f];if(m.selected){var p=m.value;if(p||(p=m.attributes&&m.attributes.value&&!m.attributes.value.specified?m.text:m.value),l)return p;s.push(p)}}return s}return e(t).val()},e.fn.clearForm=function(t){return this.each(function(){e(\"input,select,textarea\",this).clearFields(t)})},e.fn.clearFields=e.fn.clearInputs=function(t){var r=/^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;return this.each(function(){var a=this.type,n=this.tagName.toLowerCase();r.test(a)||\"textarea\"==n?this.value=\"\":\"checkbox\"==a||\"radio\"==a?this.checked=!1:\"select\"==n?this.selectedIndex=-1:\"file\"==a?/MSIE/.test(navigator.userAgent)?e(this).replaceWith(e(this).clone(!0)):e(this).val(\"\"):t&&(t===!0&&/hidden/.test(a)||\"string\"==typeof t&&e(this).is(t))&&(this.value=\"\")})},e.fn.resetForm=function(){return this.each(function(){(\"function\"==typeof this.reset||\"object\"==typeof this.reset&&!this.reset.nodeType)&&this.reset()})},e.fn.enable=function(e){return void 0===e&&(e=!0),this.each(function(){this.disabled=!e})},e.fn.selected=function(t){return void 0===t&&(t=!0),this.each(function(){var r=this.type;if(\"checkbox\"==r||\"radio\"==r)this.checked=t;else if(\"option\"==this.tagName.toLowerCase()){var a=e(this).parent(\"select\");t&&a[0]&&\"select-one\"==a[0].type&&a.find(\"option\").selected(!1),this.selected=t}})},e.fn.ajaxSubmit.debug=!1})(\"undefined\"!=typeof jQuery?jQuery:window.Zepto);","/*!\r\n * JavaScript Cookie v2.1.3\r\n * https://github.com/js-cookie/js-cookie\r\n *\r\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\r\n * Released under the MIT license\r\n */\r\n; (function (factory) {\r\n var registeredInModuleLoader = false;\r\n if (typeof define === 'function' && define.amd) {\r\n define(factory);\r\n registeredInModuleLoader = true;\r\n }\r\n if (typeof exports === 'object') {\r\n module.exports = factory();\r\n registeredInModuleLoader = true;\r\n }\r\n if (!registeredInModuleLoader) {\r\n var OldCookies = window.Cookies;\r\n var api = window.Cookies = factory();\r\n api.noConflict = function () {\r\n window.Cookies = OldCookies;\r\n return api;\r\n };\r\n }\r\n}(function () {\r\n function extend() {\r\n var i = 0;\r\n var result = {};\r\n for (; i < arguments.length; i++) {\r\n var attributes = arguments[i];\r\n for (var key in attributes) {\r\n result[key] = attributes[key];\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n function init(converter) {\r\n function api(key, value, attributes) {\r\n var result;\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n // Write\r\n\r\n if (arguments.length > 1) {\r\n attributes = extend({\r\n path: '/'\r\n }, api.defaults, attributes);\r\n\r\n if (typeof attributes.expires === 'number') {\r\n var expires = new Date();\r\n expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\r\n attributes.expires = expires;\r\n }\r\n\r\n // We're using \"expires\" because \"max-age\" is not supported by IE\r\n attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\r\n\r\n try {\r\n result = JSON.stringify(value);\r\n if (/^[\\{\\[]/.test(result)) {\r\n value = result;\r\n }\r\n } catch (e) { }\r\n\r\n if (!converter.write) {\r\n value = encodeURIComponent(String(value))\r\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\r\n } else {\r\n value = converter.write(value, key);\r\n }\r\n\r\n key = encodeURIComponent(String(key));\r\n key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\r\n key = key.replace(/[\\(\\)]/g, escape);\r\n\r\n var stringifiedAttributes = '';\r\n\r\n for (var attributeName in attributes) {\r\n if (!attributes[attributeName]) {\r\n continue;\r\n }\r\n stringifiedAttributes += '; ' + attributeName;\r\n if (attributes[attributeName] === true) {\r\n continue;\r\n }\r\n stringifiedAttributes += '=' + attributes[attributeName];\r\n }\r\n return (document.cookie = key + '=' + value + stringifiedAttributes);\r\n }\r\n\r\n // Read\r\n\r\n if (!key) {\r\n result = {};\r\n }\r\n\r\n // To prevent the for loop in the first place assign an empty array\r\n // in case there are no cookies at all. Also prevents odd result when\r\n // calling \"get()\"\r\n var cookies = document.cookie ? document.cookie.split('; ') : [];\r\n var rdecode = /(%[0-9A-Z]{2})+/g;\r\n var i = 0;\r\n\r\n for (; i < cookies.length; i++) {\r\n var parts = cookies[i].split('=');\r\n var cookie = parts.slice(1).join('=');\r\n\r\n if (cookie.charAt(0) === '\"') {\r\n cookie = cookie.slice(1, -1);\r\n }\r\n\r\n try {\r\n var name = parts[0].replace(rdecode, decodeURIComponent);\r\n cookie = converter.read ?\r\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\r\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\r\n\r\n if (this.json) {\r\n try {\r\n cookie = JSON.parse(cookie);\r\n } catch (e) { }\r\n }\r\n\r\n if (key === name) {\r\n result = cookie;\r\n break;\r\n }\r\n\r\n if (!key) {\r\n result[name] = cookie;\r\n }\r\n } catch (e) { }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n api.set = api;\r\n api.get = function (key) {\r\n return api.call(api, key);\r\n };\r\n api.getJSON = function () {\r\n return api.apply({\r\n json: true\r\n }, [].slice.call(arguments));\r\n };\r\n api.defaults = {};\r\n\r\n api.remove = function (key, attributes) {\r\n api(key, '', extend(attributes, {\r\n expires: -1\r\n }));\r\n };\r\n\r\n api.withConverter = init;\r\n\r\n return api;\r\n }\r\n\r\n return init(function () { });\r\n}));","/*** IMPORTS FROM imports-loader ***/\nimport jQuery from \"jquery\";\nimport _ from \"./jquery-ui-1.10.4.custom\";\n\n(function($)\r\n{\r\n $.widget(\"custom.combobox\", {\r\n _create: function()\r\n {\r\n this.wrapper = $(\"<span>\")\r\n .addClass(\"custom-combobox\")\r\n .insertAfter(this.element);\r\n this.element.hide();\r\n this._createAutocomplete();\r\n this._createShowAllButton();\r\n },\r\n _createAutocomplete: function()\r\n {\r\n var selected = this.element.children(\":selected\");\r\n var value = selected.val() ? selected.text() : \"\";\r\n\r\n this.input = $(\"<input>\")\r\n .appendTo(this.wrapper)\r\n .attr(\"title\", \"\")\r\n .attr(\"type\", \"text\")\r\n .addClass(\"custom-combobox-input\")\r\n .autocomplete({\r\n delay: 0,\r\n minLength: 0,\r\n source: $.proxy(this, \"_source\")\r\n });\r\n\r\n this._on(this.input, {\r\n autocompleteselect: function(event, ui)\r\n {\r\n ui.item.option.selected = true;\r\n this._trigger(\"select\", event, {\r\n item: ui.item.option\r\n });\r\n },\r\n autocompletechange: \"_removeIfInvalid\"\r\n });\r\n },\r\n _createShowAllButton: function()\r\n {\r\n var input = this.input;\r\n var wasOpen = false;\r\n\r\n $(\"<a href='javascript:void(0)'>\")\r\n .attr(\"tabIndex\", -1)\r\n .attr(\"title\", \"Show All Items\")\r\n .appendTo(this.wrapper)\r\n .button({\r\n icons: {\r\n primary: \"ui-icon-triangle-1-s\"\r\n },\r\n text: false\r\n })\r\n .removeClass(\"ui-corner-all\")\r\n .addClass(\"custom-combobox-toggle\")\r\n .mousedown(function()\r\n {\r\n wasOpen = input.autocomplete(\"widget\").is(\":visible\");\r\n })\r\n .click(function()\r\n {\r\n input.focus();\r\n // Close if already visible\r\n if (wasOpen)\r\n {\r\n return;\r\n }\r\n // Pass empty string as value to search for, displaying all results\r\n input.autocomplete(\"search\", \"\");\r\n });\r\n },\r\n _source: function(request, response)\r\n {\r\n var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), \"i\");\r\n\r\n response(this.element.children(\"option\").map(function()\r\n {\r\n var text = $(this).text();\r\n\r\n if (this.value && (!request.term || matcher.test(text)))\r\n return {\r\n label: text,\r\n value: text,\r\n option: this\r\n };\r\n }));\r\n },\r\n _removeIfInvalid: function(event, ui)\r\n {\r\n // Selected an item, nothing to do\r\n if (ui.item)\r\n {\r\n return;\r\n }\r\n // Search for a match (case-insensitive)\r\n var value = this.input.val();\r\n var valueLowerCase = value.tLowerCase();\r\n var valid = false;\r\n\r\n this.element.children(\"option\").each(function()\r\n {\r\n if ($(this).text().toLowerCase() === valueLowerCase)\r\n {\r\n this.selected = valid = true;\r\n return false;\r\n }\r\n });\r\n // Found a match, nothing to do\r\n if (valid)\r\n {\r\n return;\r\n }\r\n // Remove invalid value\r\n this.input\r\n .val(\"\")\r\n .attr(\"title\", value + \" didn't match any item\")\r\n .tooltip(\"open\");\r\n this.element.val(\"\");\r\n this._delay(function()\r\n {\r\n this.input.tooltip(\"close\").attr(\"title\", \"\");\r\n }, 2500);\r\n this.input.data(\"ui-autocomplete\").term = \"\";\r\n },\r\n _destroy: function()\r\n {\r\n this.wrapper.remove();\r\n this.element.show();\r\n },\r\n clear: function()\r\n {\r\n this.input.val(\"\");\r\n this.input.data(\"ui-autocomplete\").term = \"\";\r\n }\r\n });\r\n})(jQuery);","/*!\n * jQuery JavaScript Library v1.11.1\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-05-01T17:42Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper window is present,\n\t\t// execute the factory and get jQuery\n\t\t// For environments that do not inherently posses a window with a document\n\t\t// (such as Node.js), expose a jQuery-making factory as module.exports\n\t\t// This accentuates the need for the creation of a real window\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\n\nvar deletedIds = [];\n\nvar slice = deletedIds.slice;\n\nvar concat = deletedIds.concat;\n\nvar push = deletedIds.push;\n\nvar indexOf = deletedIds.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"1.11.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1, IE<9\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: deletedIds.sort,\n\tsplice: deletedIds.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\treturn !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( support.ownLast ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1, IE<9\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( indexOf ) {\n\t\t\t\treturn indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\twhile ( j < len ) {\n\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\n\t\tif ( len !== len ) {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: function() {\n\t\treturn +( new Date() );\n\t},\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n});\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v1.10.19\n * http://sizzlejs.com/\n *\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-04-18\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( documentIsHTML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== strundefined && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc,\n\t\tparent = doc.defaultView;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsHTML = !isXML( doc );\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent !== parent.top ) {\n\t\t// IE11 does not have attachEvent, so all must suffer\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t}, false );\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t});\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {\n\t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\n\n\t\t// Support: Safari<4\n\t\t// Catch class over-caching\n\t\tdiv.firstChild.className = \"i\";\n\t\t// Support: Opera<10\n\t\t// Catch gEBCN failure to find non-leading classes\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\n\t});\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select msallowclip=''><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowclip^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is no seed and only one group\n\tif ( match.length === 1 ) {\n\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome<14\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;\n\t});\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n});\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof rootjQuery.ready !== \"undefined\" ?\n\t\t\t\trootjQuery.ready( selector ) :\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.extend({\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\njQuery.fn.extend({\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.unique(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.unique( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\nvar rnotwhite = (/\\S+/g);\n\n\n\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\t\t// Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\n\t\t\t\t\t} else if ( !(--remaining) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend({\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready );\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n});\n\n/**\n * Clean-up method for dom ready events\n */\nfunction detach() {\n\tif ( document.addEventListener ) {\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\t\twindow.removeEventListener( \"load\", completed, false );\n\n\t} else {\n\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\twindow.detachEvent( \"onload\", completed );\n\t}\n}\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\n\t\tdetach();\n\t\tjQuery.ready();\n\t}\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n\nvar strundefined = typeof undefined;\n\n\n\n// Support: IE<9\n// Iteration over object's inherited properties before its own\nvar i;\nfor ( i in jQuery( support ) ) {\n\tbreak;\n}\nsupport.ownLast = i !== \"0\";\n\n// Note: most support tests are defined in their respective modules.\n// false until the test is run\nsupport.inlineBlockNeedsLayout = false;\n\n// Execute ASAP in case we need to set body.style.zoom\njQuery(function() {\n\t// Minified: var a,b,c,d\n\tvar val, div, body, container;\n\n\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\tif ( !body || !body.style ) {\n\t\t// Return for frameset docs that don't have a body\n\t\treturn;\n\t}\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tcontainer = document.createElement( \"div\" );\n\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\tbody.appendChild( container ).appendChild( div );\n\n\tif ( typeof div.style.zoom !== strundefined ) {\n\t\t// Support: IE<8\n\t\t// Check if natively block-level elements act like inline-block\n\t\t// elements when setting their display to 'inline' and giving\n\t\t// them layout\n\t\tdiv.style.cssText = \"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\";\n\n\t\tsupport.inlineBlockNeedsLayout = val = div.offsetWidth === 3;\n\t\tif ( val ) {\n\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t// Support: IE<8\n\t\t\tbody.style.zoom = 1;\n\t\t}\n\t}\n\n\tbody.removeChild( container );\n});\n\n\n\n\n(function() {\n\tvar div = document.createElement( \"div\" );\n\n\t// Execute the test only if not already executed in another module.\n\tif (support.deleteExpando == null) {\n\t\t// Support: IE<9\n\t\tsupport.deleteExpando = true;\n\t\ttry {\n\t\t\tdelete div.test;\n\t\t} catch( e ) {\n\t\t\tsupport.deleteExpando = false;\n\t\t}\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n})();\n\n\n/**\n * Determines whether an object can have data\n */\njQuery.acceptData = function( elem ) {\n\tvar noData = jQuery.noData[ (elem.nodeName + \" \").toLowerCase() ],\n\t\tnodeType = +elem.nodeType || 1;\n\n\t// Do not set data on non-element DOM nodes because it will not be cleared (#8335).\n\treturn nodeType !== 1 && nodeType !== 9 ?\n\t\tfalse :\n\n\t\t// Nodes accept data unless otherwise specified; rejection can be conditional\n\t\t!noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n};\n\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ) {\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, null\n\t} else {\n\t\tcache[ id ] = null;\n\t}\n}\n\njQuery.extend({\n\tcache: {},\n\n\t// The following elements (space-suffixed to avoid Object.prototype collisions)\n\t// throw uncatchable exceptions if you attempt to set expando properties\n\tnoData: {\n\t\t\"applet \": true,\n\t\t\"embed \": true,\n\t\t// ...but Flash objects (which have this classid) *can* handle expandos\n\t\t\"object \": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[0],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each(function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t}) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\n\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlength = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n};\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\n\n(function() {\n\t// Minified: var a,b,c\n\tvar input = document.createElement( \"input\" ),\n\t\tdiv = document.createElement( \"div\" ),\n\t\tfragment = document.createDocumentFragment();\n\n\t// Setup\n\tdiv.innerHTML = \" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName( \"tbody\" ).length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName( \"link\" ).length;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone =\n\t\tdocument.createElement( \"nav\" ).cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tinput.type = \"checkbox\";\n\tinput.checked = true;\n\tfragment.appendChild( input );\n\tsupport.appendChecked = input.checked;\n\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t// Support: IE6-IE11+\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tfragment.appendChild( div );\n\tdiv.innerHTML = \"<input type='radio' checked='checked' name='t'/>\";\n\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n\t// old WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\n\tsupport.noCloneEvent = true;\n\tif ( div.attachEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\n\t\tdiv.cloneNode( true ).click();\n\t}\n\n\t// Execute the test only if not already executed in another module.\n\tif (support.deleteExpando == null) {\n\t\t// Support: IE<9\n\t\tsupport.deleteExpando = true;\n\t\ttry {\n\t\t\tdelete div.test;\n\t\t} catch( e ) {\n\t\t\tsupport.deleteExpando = false;\n\t\t}\n\t}\n})();\n\n\n(function() {\n\tvar i, eventName,\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)\n\tfor ( i in { submit: true, change: true, focusin: true }) {\n\t\teventName = \"on\" + i;\n\n\t\tif ( !(support[ i + \"Bubbles\" ] = eventName in window) ) {\n\t\t\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\t\t\tdiv.setAttribute( eventName, \"t\" );\n\t\t\tsupport[ i + \"Bubbles\" ] = div.attributes[ eventName ].expando === false;\n\t\t}\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n})();\n\n\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && jQuery.acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, ret, handleObj, matched, j,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar sel, handleObj, matches, i,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== \"click\") ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Chrome 23+, Safari?\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === strundefined ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\t\t\t\t// Support: IE < 9, Android < 4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tjQuery._data( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tjQuery._removeData( doc, fix );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery._data( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar type, origFn;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\n\n\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\tparam: [ 1, \"<object>\", \"</object>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\n\t\t_default: support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\" ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n// Used in buildFragment, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (jQuery.find.attr( elem, \"type\" ) !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[1];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!support.noCloneEvent || !support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar j, elem, contains,\n\t\t\ttmp, tag, tbody, wrap,\n\t\t\tl = elems.length,\n\n\t\t\t// Ensure a safe fragment\n\t\t\tsafe = createSafeFragment( context ),\n\n\t\t\tnodes = [],\n\t\t\ti = 0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec( elem ) || [ \"\", \"\" ])[ 1 ].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\t\tif ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\twrap[1] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t\t0;\n\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\t\ttmp = safe.lastChild;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from fragment\n\t\tif ( tmp ) {\n\t\t\tsafe.removeChild( tmp );\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !support.appendChecked ) {\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t\t}\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttmp = null;\n\n\t\treturn safe;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== strundefined ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdeletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\tremove: function( selector, keepData /* Internal Use Only */ ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map(function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( support.htmlSerialize || !rnoshimcache.test( value ) ) &&\n\t\t\t\t( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ (rtagName.exec( value ) || [ \"\", \"\" ])[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar arg = arguments[ 0 ];\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\targ = this.parentNode;\n\n\t\t\tjQuery.cleanData( getAll( this ) );\n\n\t\t\tif ( arg ) {\n\t\t\t\targ.replaceChild( elem, this );\n\t\t\t}\n\t\t});\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar first, node, hasScripts,\n\t\t\tscripts, doc, fragment,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[0] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[i], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\t\tfragment = first = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone(true);\n\t\t\tjQuery( insert[i] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\n\nvar iframe,\n\telemdisplay = {};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar style,\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n\n\t\t\t// Use of this method is a temporary fix (more like optmization) until something better comes along,\n\t\t\t// since it was removed from specification and supported only in FF\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\n\n\n(function() {\n\tvar shrinkWrapBlocksVal;\n\n\tsupport.shrinkWrapBlocks = function() {\n\t\tif ( shrinkWrapBlocksVal != null ) {\n\t\t\treturn shrinkWrapBlocksVal;\n\t\t}\n\n\t\t// Will be changed later if needed.\n\t\tshrinkWrapBlocksVal = false;\n\n\t\t// Minified: var b,c,d\n\t\tvar div, body, container;\n\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\t\tif ( !body || !body.style ) {\n\t\t\t// Test fired too early or in an unsupported environment, exit.\n\t\t\treturn;\n\t\t}\n\n\t\t// Setup\n\t\tdiv = document.createElement( \"div\" );\n\t\tcontainer = document.createElement( \"div\" );\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE6\n\t\t// Check if elements with layout shrink-wrap their children\n\t\tif ( typeof div.style.zoom !== strundefined ) {\n\t\t\t// Reset CSS: box-sizing; display; margin; border\n\t\t\tdiv.style.cssText =\n\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;\" +\n\t\t\t\t\"padding:1px;width:1px;zoom:1\";\n\t\t\tdiv.appendChild( document.createElement( \"div\" ) ).style.width = \"5px\";\n\t\t\tshrinkWrapBlocksVal = div.offsetWidth !== 3;\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\treturn shrinkWrapBlocksVal;\n\t};\n\n})();\nvar rmargin = (/^margin/);\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\n\n\nvar getStyles, curCSS,\n\trposition = /^(top|right|bottom|left)$/;\n\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\n\t};\n\n\tcurCSS = function( elem, name, computed ) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles( elem );\n\n\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t\tif ( computed ) {\n\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\treturn ret === undefined ?\n\t\t\tret :\n\t\t\tret + \"\";\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, computed ) {\n\t\tvar left, rs, rsLeft, ret,\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles( elem );\n\t\tret = computed ? computed[ name ] : undefined;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\treturn ret === undefined ?\n\t\t\tret :\n\t\t\tret + \"\" || \"auto\";\n\t};\n}\n\n\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tvar condition = conditionFn();\n\n\t\t\tif ( condition == null ) {\n\t\t\t\t// The test was not ready at this point; screw the hook this time\n\t\t\t\t// but check again when needed next time.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( condition ) {\n\t\t\t\t// Hook not needed (or it's not possible to use it due to missing dependency),\n\t\t\t\t// remove it.\n\t\t\t\t// Since there are no other hooks for marginRight, remove the whole object.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\n(function() {\n\t// Minified: var b,c,d,e,f,g, h,i\n\tvar div, style, a, pixelPositionVal, boxSizingReliableVal,\n\t\treliableHiddenOffsetsVal, reliableMarginRightVal;\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tdiv.innerHTML = \" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\tstyle = a && a.style;\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !style ) {\n\t\treturn;\n\t}\n\n\tstyle.cssText = \"float:left;opacity:.5\";\n\n\t// Support: IE<9\n\t// Make sure that element opacity exists (as opposed to filter)\n\tsupport.opacity = style.opacity === \"0.5\";\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!style.cssFloat;\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t// Support: Firefox<29, Android 2.3\n\t// Vendor-prefix box-sizing\n\tsupport.boxSizing = style.boxSizing === \"\" || style.MozBoxSizing === \"\" ||\n\t\tstyle.WebkitBoxSizing === \"\";\n\n\tjQuery.extend(support, {\n\t\treliableHiddenOffsets: function() {\n\t\t\tif ( reliableHiddenOffsetsVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableHiddenOffsetsVal;\n\t\t},\n\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\n\t\tpixelPosition: function() {\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelPositionVal;\n\t\t},\n\n\t\t// Support: Android 2.3\n\t\treliableMarginRight: function() {\n\t\t\tif ( reliableMarginRightVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginRightVal;\n\t\t}\n\t});\n\n\tfunction computeStyleTests() {\n\t\t// Minified: var b,c,d,j\n\t\tvar div, body, container, contents;\n\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\t\tif ( !body || !body.style ) {\n\t\t\t// Test fired too early or in an unsupported environment, exit.\n\t\t\treturn;\n\t\t}\n\n\t\t// Setup\n\t\tdiv = document.createElement( \"div\" );\n\t\tcontainer = document.createElement( \"div\" );\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\tdiv.style.cssText =\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\n\n\t\t// Support: IE<9\n\t\t// Assume reasonable values in the absence of getComputedStyle\n\t\tpixelPositionVal = boxSizingReliableVal = false;\n\t\treliableMarginRightVal = true;\n\n\t\t// Check for getComputedStyle so that this code is not run in IE<9.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tpixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tboxSizingReliableVal =\n\t\t\t\t( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tcontents = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tcontents.style.cssText = div.style.cssText =\n\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\tcontents.style.marginRight = contents.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\treliableMarginRightVal =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );\n\t\t}\n\n\t\t// Support: IE8\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\tcontents = div.getElementsByTagName( \"td\" );\n\t\tcontents[ 0 ].style.cssText = \"margin:0;border:0;padding:0;display:none\";\n\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\n\t\tif ( reliableHiddenOffsetsVal ) {\n\t\t\tcontents[ 0 ].style.display = \"\";\n\t\t\tcontents[ 1 ].style.display = \"none\";\n\t\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\n\t\t}\n\n\t\tbody.removeChild( container );\n\t}\n\n})();\n\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\njQuery.swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar\n\t\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\n\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set. See: #7116\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\n\t\t\t\t// Support: IE\n\t\t\t\t// Swallow errors from 'invalid' CSS values (#5509)\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tsupport.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\nif ( !support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t}\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t} ]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tjQuery._data( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !support.shrinkWrapBlocks() ) {\n\t\t\tanim.always(function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t});\n\t\t}\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = jQuery._data( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t});\n};\n\n\n(function() {\n\t// Minified: var a,b,c,d,e\n\tvar input, div, select, a, opt;\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\n\t// First batch of tests.\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\ta.style.cssText = \"top:1px\";\n\n\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute(\"style\") );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute(\"href\") === \"/a\";\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement(\"form\").enctype;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE8 only\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement( \"input\" );\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n})();\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend({\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {\n\n\t\t\t\t\t\t// Support: IE6\n\t\t\t\t\t\t// When new option element is added to select box we need to\n\t\t\t\t\t\t// force reflow of newly added node in order to workaround delay\n\t\t\t\t\t\t// of initialization properties\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\toption.selected = optionSet = true;\n\n\t\t\t\t\t\t} catch ( _ ) {\n\n\t\t\t\t\t\t\t// Will be executed only in IE6\n\t\t\t\t\t\t\toption.scrollHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\toption.selected = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\n\t\t\t\treturn options;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t// Support: Webkit\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\n\n\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = support.getSetAttribute,\n\tgetSetInput = support.input;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hook for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t} else {\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\n\t\treturn name;\n\t}\n};\n\n// Retrieve booleans specially\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret, handle;\n\t\t\tif ( !isXML ) {\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[ name ];\n\t\t\t\tattrHandle[ name ] = ret;\n\t\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[ name ] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t} :\n\t\tfunction( elem, name, isXML ) {\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn elem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t};\n});\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\tif ( name === \"value\" || value === elem.getAttribute( name ) ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n\n\t// Some attributes are constructed with empty-string values when not defined\n\tattrHandle.id = attrHandle.name = attrHandle.coords =\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn (ret = elem.getAttributeNode( name )) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t};\n\n\t// Fixing value retrieval on a button requires this module\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( ret && ret.specified ) {\n\t\t\t\treturn ret.value;\n\t\t\t}\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\nif ( !support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend({\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !support.hrefNormalized ) {\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t});\n}\n\n// Support: Safari, IE9+\n// mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n// IE6/7 call enctype encoding\nif ( !support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\njQuery.fn.extend({\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n});\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\n\n\nvar nonce = jQuery.now();\n\nvar rquery = (/\\?/);\n\n\n\nvar rvalidtokens = /(,)|(\\[|{)|(}|])|\"(?:[^\"\\\\\\r\\n]|\\\\[\"\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*\"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;\n\njQuery.parseJSON = function( data ) {\n\t// Attempt to parse using the native JSON parser first\n\tif ( window.JSON && window.JSON.parse ) {\n\t\t// Support: Android 2.3\n\t\t// Workaround failure to string-cast null input\n\t\treturn window.JSON.parse( data + \"\" );\n\t}\n\n\tvar requireNonComma,\n\t\tdepth = null,\n\t\tstr = jQuery.trim( data + \"\" );\n\n\t// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains\n\t// after removing valid tokens\n\treturn str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {\n\n\t\t// Force termination if we see a misplaced comma\n\t\tif ( requireNonComma && comma ) {\n\t\t\tdepth = 0;\n\t\t}\n\n\t\t// Perform no more replacements after returning to outermost depth\n\t\tif ( depth === 0 ) {\n\t\t\treturn token;\n\t\t}\n\n\t\t// Commas must not follow \"[\", \"{\", or \",\"\n\t\trequireNonComma = open || comma;\n\n\t\t// Determine new depth\n\t\t// array/object open (\"[\" or \"{\"): depth += true - false (increment)\n\t\t// array/object close (\"]\" or \"}\"): depth += false - true (decrement)\n\t\t// other cases (\",\" or primitive): depth += true - true (numeric cast)\n\t\tdepth += !close - !open;\n\n\t\t// Remove this token\n\t\treturn \"\";\n\t}) ) ?\n\t\t( Function( \"return \" + str ) )() :\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tif ( window.DOMParser ) { // Standard\n\t\t\ttmp = new DOMParser();\n\t\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t\t} else { // IE\n\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\txml.async = \"false\";\n\t\t\txml.loadXML( data );\n\t\t}\n\t} catch( e ) {\n\t\txml = undefined;\n\t}\n\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat(\"*\");\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType.charAt( 0 ) === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar deep, key,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n});\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t});\n};\n\n\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||\n\t\t(!support.reliableHiddenOffsets() &&\n\t\t\t((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\n};\n\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function() {\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function() {\n\t\t\tvar type = this.type;\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?\n\t// Support: IE6+\n\tfunction() {\n\n\t\t// XHR cannot access local files, always use ActiveX for that case\n\t\treturn !this.isLocal &&\n\n\t\t\t// Support: IE7-8\n\t\t\t// oldIE XHR does not support non-RFC2616 methods (#13240)\n\t\t\t// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx\n\t\t\t// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9\n\t\t\t// Although this check for six methods instead of eight\n\t\t\t// since IE also does not support \"trace\" and \"connect\"\n\t\t\t/^(get|post|head|put|delete|options)$/i.test( this.type ) &&\n\n\t\t\tcreateStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE<10\n// Open requests must be manually aborted on unload (#5280)\nif ( window.ActiveXObject ) {\n\tjQuery( window ).on( \"unload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t});\n}\n\n// Determine support properties\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport(function( options ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !options.crossDomain || support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// IE's ActiveXObject throws a 'Type Mismatch' exception when setting\n\t\t\t\t\t\t// request header to a null-value.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// To keep consistent with other XHR implementations, cast the value\n\t\t\t\t\t\t// to string and ignore `undefined`.\n\t\t\t\t\t\tif ( headers[ i ] !== undefined ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] + \"\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( options.hasContent && options.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, statusText, responses;\n\n\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\t\t\t\t\t\t\t// Clean up\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = undefined;\n\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\n\t\t\t\t\t\t\t// Abort manually if needed\n\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\tstatus = xhr.status;\n\n\t\t\t\t\t\t\t\t// Support: IE<10\n\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\tif ( !status && options.isLocal && !options.crossDomain ) {\n\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, xhr.getAllResponseHeaders() );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( !options.async ) {\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\tsetTimeout( callback );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Add to the list of active xhr callbacks\n\t\t\t\t\t\txhr.onreadystatechange = xhrCallbacks[ id ] = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n\t} catch( e ) {}\n}\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery(\"head\")[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement(\"script\");\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context, defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[1] ) ];\n\t}\n\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, response, type,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = jQuery.trim( url.slice( off, url.length ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t}).length;\n};\n\n\n\n\n\nvar docElem = window.document.documentElement;\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\tjQuery.inArray(\"auto\", [ curCSSTop, curCSSLeft ] ) > -1;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend({\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t});\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ],\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),\n\t\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true)\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// getComputedStyle returns percent when specified for top/left/bottom/right\n// rather than make the css module depend on the offset module, we just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n});\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t});\n}\n\n\n\n\nvar\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === strundefined ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n\n}));\n"],"names":["$","core","formEditor","filterTables","stringTable","root","metaUrl","setupLinks","find","each","a","this","hasClass","addClass","on","section","closest","url","attr","length","removeAttr","editor","click","highlight","data","setupPaging","links","off","paging","urlMatch","callback","setupFilter","ctrl","autoComplete","execute","ajax","headers","cache","done","status","xhr","replaceWith","close","container","message","get","showLoading","settings","callbackLoaded","document","trigger","callbackSave","saveUrl","refreshListing","refreshEditor","refreshMeta","callbackDelete","redirect","redirectUrl","hideEditor","location","href","create","target","redirectOnSave","console","warn","replace","setup","clone","rootEl","siblings","remove","wrap","append","forms","standalone","meta","templateUrl","hash","window","substring","checkForInitialFormToLoad","combobox","imageDialog","Cookies","LISTING_REFRESH_EVENT","AJAX_HEADER_VALUE","keyCodeMap","fn","setupNavigation","extend","menuHoverClass","top_level_links","all_level_links","next","parent","hover","removeClass","focus","keydown","e","keyCode","preventDefault","prev","parents","last","first","text","toLowerCase","found","nextAll","prevAll","selectedLink","parentsUntil","stopPropagation","buttonDropdown","$this","$openbutton","$menu","closeMenu","keyCloseMenu","timeoutId","focusout","setTimeout","focusin","clearTimeout","getUrlVars","vars","hashes","slice","indexOf","split","i","push","getUrlVar","name","highlightText","options","value","completeMatch","reg","tagName","RegExp","stack","spl","join","pop","node","ignore","prematched","undefined","attributes","getNamedItem","nodeType","v","nodeValue","rep","contents","object","attrExists","scrollToShow","time","el","scroll","scrollTop","offset","top","animate","checkboxController","childSelector","allChecked","noneChecked","master","checkboxControllerToggleSelected","chk","set","children","is","prop","checkboxControllerSetMasterState","count","filter","checkboxControllerCheckMasterState","checked","conflictLinks","type","fs","hide","slideDown","bulletins","expand","td","id","tgt","s","log","show","corona","setAccessibleMenu","setupDropdownButtons","highlightBodyText","search","allVars","Date","getSeconds","getMilliseconds","r","q","decodeURI","handleLogOut","urlLogin","fieldNotes","note","field","icon","before","wrapInner","toggleClass","disableInputButtons","buttonSelector","inputs","disabledClick","disabler","_items","start","buttons","btn","force","link","revert","item","waitNotice","cancelMessage","delay","cancel","cancelCallback","progressMessage","progressCancel","progressBar","div","waiter","_timeout","_cancelling","targetBar","targetMessage","prgrss","progressbar","fadeIn","fadeOut","setMessage","html","showCancel","hideCancel","filingsBulkActions","bulkActions","init","filingDetails","addOns","rates","b","c","alternateTableRows","filings","publications","asyncStatus","filingImport","filingForm","filingCommit","roots","filingRateForm","shippingRequestForm","shipmentRequestEditor","shipmentBookingForm","bookingForms","initBookingForm","shipmentQuotes","shipmentQuotesPage","inlineEditor","ac","filingReport","$that","covidEditor","form","toolTipsData","popup","element","limitTextareaLength","area","after","max","val","webServiceSandbox","sandbox","selector","dataUrl","selected","select","ui","bound","change","input","fields","autocomplete","switchCmsPageView","submit","checkboxListController","reset","update","complete","binder","add","option","empty","li","unchecked","left","right","button","list","removeMessage","txt","opt","checkboxListWithDetailsController","debug","toggle","refreshList","removeButton","detailsUrl","confirm","addButton","alert","datePickerFields","skipPreload","changeMonth","changeYear","dateFormat","onClose","onSelect","beforeShowDay","d","onChangeMonthYear","y","m","inst","datepicker","$ui","notificationEditor","fullTextEditor","large","autoGrowTextArea","autogrow","fixMinHeight","onInitialize","queryForm","online","cargoRouteControl","tables","cargoRoutes","ancillaryEditor","containers","editorForms","formUtilities","utilties","initialise","checkboxToggle","that","invert","targetName","checkboxDisplayToggle","setStateOfFields","disabled","setDisplayStateAction","check","inverted","inp","groupedSelects","selects","total","updateAll","not","curSelect","tbl","bodies","allowed","index","jobDeliveryOptions","iiNet","bulletinsEditor","productEditor","admin","userAdmin","agentAdmin","selectEnabler","selectSelector","fieldSelector","attrData","attrFallback","handle","toEnable","roles","values","fallBack","fileFormatOptions","collapsible","sections","collapseFormSections","foldedLocationLookups","addition","info","mergedLocationLookups","lookups","foldedItemLookups","foldedProductLookups","foldedCommodityLookups","foldedSphLookups","products","label","className","itemName","lookupDataName","attachedName","titleName","storeName","labelName","scheduledJobs","orderForm","distributionJobs","switchCarrier","customSettings","uis","uisSubs","elem","exchangeRates","eff","exp","date","dat","valueOf","setDate","getDate","tabs","tablists","hideStatusMessage","autoSubmitForms","fieldType","nodeName","fieldSubType","canSubmit","setExternalLinks","setFormReadOnly","errorToConsole","error","logToConsole","timestamp","getTime","getQuerystring","key","getNvcValue","qs","exec","showPublishWarning","toastr","cargoIs","cargo","cargoIsEditor","heading","verifyCallback","response","cargoIsAccept","siteKey","grecaptcha","ready","render","ratesAdmin","directory","copyToClipboard","$temp","execCommand","forwarderAdmin","elements","forwarder","awbEditor","awb","deniedParties","sanctionWrapper","currentTarget","$item","open","$el","slideUp","Object","o","f","prototype","Array","binarySearch","comparator","comparison","low","high","Math","floor","history","arguments","executeFilter","parseHTML","findMatchingUrl","active","withoutQueryString","substr","destroy","lst","frm","serialize","helper","clearErrorsInForm","warningsFromResponse","submitResponse","warnings","unique","errorsFromResponse","errors","errorFieldsFromResponse","showErrorMessagesInForm","formErrors","filtered","validation","prepend","ul","err_count","position","tablist","pnl","showErrorsInForm","showWarningsInForm","$forms","messagebox","formHelper","disableButtons","beforeSend","onSubmitForm","evt","formData","processData","contentType","FormData","callbackError","callbackJson","handleSuccess","onDeleteForm","wait","visibleForm","setupValidation","autocompleteCanSelectMultiple","inlineValidate","relatedField","pair","pairs","err","fld","validate","createFormTarget","formDelete","rootOfForm","cancelButton","del","btnTgt","msg","report","deleteReport","callbackTrue","editorForm","json","loading","wrapper","fadedOut","optionsScroll","fail","textStatus","errorThrown","ImageDialog","pub","me","_cleanInput","_currentInput","uploadType","_dialog","baseUrl","afterSelection","fileUrl","$image","fullPath","relativePath","virtualDirectory","callbackFalse","_container","_resize","dialog","title","draggable","maxHeight","minWidth","modal","appendTo","btngroup","parser","usePost","keepCentred","parsed","glob","_store","table","loadedHandlers","handleComplete","loaded","dataType","async","mouseHandled","jQuery","orig","removeData","uuid","runiqueId","focusable","isTabIndexNotNaN","map","mapName","img","parentNode","visible","test","expr","filters","addBack","css","version","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","ESCAPE","HOME","LEFT","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SPACE","TAB","UP","call","apply","scrollParent","ie","eq","zIndex","parseInt","isNaN","uniqueId","removeUniqueId","createPseudo","dataName","match","tabbable","tabIndex","isTabIndexNaN","outerWidth","jquery","side","innerWidth","innerHeight","outerHeight","reduce","size","border","margin","parseFloat","prevObject","camelCase","navigator","userAgent","support","selectstart","createElement","disableSelection","bind","event","enableSelection","unbind","plugin","module","proto","plugins","instance","args","hasScroll","has","_cleanData","cleanData","elems","triggerHandler","widget","base","fullName","existingConstructor","constructor","basePrototype","proxiedPrototype","namespace","Widget","_createWidget","_proto","_childConstructors","_super","_superApply","isFunction","returnValue","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","child","childPrototype","bridge","inputIndex","inputLength","hasOwnProperty","isPlainObject","isMethodCall","concat","methodValue","charAt","pushStack","_init","defaultElement","eventNamespace","_getCreateOptions","bindings","hoverable","_on","style","ownerDocument","defaultView","parentWindow","_create","_trigger","_getCreateEventData","noop","_destroy","parts","curOption","shift","_setOptions","_setOption","enable","disable","suppressDisabledCheck","handlers","delegateElement","handler","handlerProxy","guid","eventName","delegate","_off","undelegate","_delay","_hoverable","mouseenter","mouseleave","_focusable","Event","originalEvent","isDefaultPrevented","method","defaultEffect","effect","hasOptions","effectName","duration","isEmptyObject","effects","easing","queue","mouseup","distance","_mouseInit","_mouseDown","stopImmediatePropagation","started","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseStarted","_mouseUp","_mouseDownEvent","btnIsLeft","which","elIsCancel","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","documentMode","_mouseDrag","_mouseStop","abs","pageX","pageY","cachedScrollbarWidth","round","rhorizontal","rvertical","roffset","rposition","rpercent","_position","getOffsets","offsets","width","height","parseCss","property","getDimensions","raw","isWindow","scrollLeft","scrollbarWidth","w1","w2","innerDiv","offsetWidth","clientWidth","getScrollInfo","within","overflowX","isDocument","overflowY","hasOverflowX","scrollWidth","scrollHeight","getWithinInfo","withinElement","of","atOffset","targetWidth","targetHeight","targetOffset","basePosition","dimensions","scrollInfo","collision","at","horizontalOffset","verticalOffset","pos","collisionPosition","using","elemWidth","elemHeight","marginLeft","marginTop","collisionWidth","collisionHeight","myOffset","my","offsetFractions","dir","props","bottom","feedback","horizontal","vertical","important","fit","newOverRight","withinOffset","collisionPosLeft","overLeft","overRight","newOverBottom","collisionPosTop","overTop","overBottom","flip","newOverLeft","offsetLeft","newOverTop","offsetTop","flipfit","testElement","testElementParent","testElementStyle","body","getElementsByTagName","visibility","background","appendChild","documentElement","insertBefore","firstChild","cssText","innerHTML","removeChild","mouse","addClasses","axis","connectToSortable","containment","cursor","cursorAt","grid","iframeFix","opacity","refreshPositions","revertDuration","scope","scrollSensitivity","scrollSpeed","snap","snapMode","snapTolerance","drag","stop","_getHandle","offsetHeight","_createHelper","_cacheHelperProportions","ddmanager","current","_cacheMargins","cssPosition","offsetParent","offsetParentCssPosition","positionAbs","margins","_getParentOffset","relative","_getRelativeOffset","originalPosition","_generatePosition","originalPageX","originalPageY","_adjustOffsetFromHelper","_setContainment","_clear","dropBehaviour","prepareOffsets","dragStart","noPropagation","_convertPositionTo","_uiHash","dropped","drop","contains","dragStop","obj","isArray","helperProportions","po","p","over","ce","relative_container","mod","co","cancelHelperRemoval","uiSortable","sortables","sortable","shouldRevert","isOver","_helper","currentItem","innermostIntersecting","thisSortable","_intersectsWith","containerCache","fromOutside","placeholder","t","_cursor","_opacity","overflowOffset","scrolled","snapElements","String","items","$t","$o","ts","bs","ls","rs","l","x1","x2","y1","y2","snapping","release","snapItem","min","group","makeArray","sort","_zIndex","num","isNumber","alsoResize","animateDuration","animateEasing","aspectRatio","autoHide","ghost","handles","maxWidth","minHeight","resize","n","_aspectRatio","originalElement","_proportionallyResizeElements","elementIsWrapper","marginRight","marginBottom","originalResizeStyle","zoom","display","_proportionallyResize","w","se","sw","ne","nw","trim","_renderAxis","padPos","padWrapper","_handles","mouseover","resizing","insertAfter","capture","curleft","curtop","iniPos","_renderProxy","originalSize","sizeDiff","originalMousePosition","_propagate","smp","prevTop","prevLeft","prevWidth","prevHeight","dx","dy","_change","_updateVirtualBoundaries","shiftKey","_updateRatio","_respectSize","_updateCache","pr","ista","soffseth","soffsetw","forceAspectRatio","pMinWidth","pMaxWidth","pMinHeight","pMaxHeight","Infinity","_vBoundaries","cpos","csize","ismaxw","ismaxh","isminw","isminh","dw","dh","cw","ch","j","borders","paddings","prel","borderDif","elementOffset","cs","step","oc","containerElement","containerOffset","containerPosition","parentData","containerSize","woset","hoset","isParent","isOffsetRelative","cp","pRatio","cop","ho","h","os","op","delta","_alsoResize","sum","gridX","gridY","ox","oy","newWidth","newHeight","isMaxWidth","isMaxHeight","isMinWidth","isMinHeight","isOverAxis","x","reference","isFloating","connectWith","dropOnEmpty","forcePlaceholderSize","forceHelperSize","tolerance","activate","beforeStop","deactivate","out","receive","refresh","floating","overrideHandle","validHandle","reverting","_refreshItems","_removeCurrentsFromItems","noActivation","currentContainer","domPosition","_createPlaceholder","storedCursor","storedStylesheet","_storedOpacity","_storedZIndex","_preserveHelperProportions","dragging","itemElement","intersection","lastPositionAbs","_intersectsWithPointer","direction","_intersectsWithSides","_rearrange","_contactContainers","cur","animation","_storedCSS","_noFinalSort","_getItemsAsjQuery","connected","str","res","attribute","expression","toArray","ret","dyClick","dxClick","isOverElementHeight","isOverElementWidth","isOverElement","forcePointerForContainers","verticalDirection","_getDragVerticalDirection","horizontalDirection","_getDragHorizontalDirection","isOverBottomHalf","isOverRightHalf","_connectWith","queries","addItems","grep","targetData","_queries","queriesLength","fast","toleranceElement","custom","refreshContainers","dist","itemWithLeastDistance","posProperty","sizeProperty","nearBottom","innermostContainer","innermostIndex","scrollIsRootNode","hardRefresh","nextSibling","counter","delayedTriggers","delayEvent","_inst","sender","autoFocus","minLength","source","requestIndex","pending","suppressKeyPress","suppressKeyPressRepeat","suppressInput","isTextarea","isInput","isMultiLine","valueMethod","isNewMenu","_move","_keyEvent","menu","_value","term","_searchTimeout","keypress","selectedItem","previous","blur","cancelBlur","searching","_initSource","_appendTo","role","mousedown","menuElement","one","menufocus","liveRegion","menuselect","activeElement","beforeunload","abort","array","request","success","_search","cancelSearch","_response","proxy","content","__response","_normalize","_suggest","_close","_renderMenu","_resizeMenu","_renderItemData","_renderItem","isFirstItem","isLastItem","keyEvent","escapeRegex","matcher","messages","noResults","results","amount","lastActive","baseClasses","typeClasses","formResetHandler","radioGroup","radio","radios","icons","primary","secondary","_determineButtonType","hasTitle","buttonElement","toggleButton","activeClass","keyup","_resetButton","ancestor","labelSelector","isDisabled","buttonText","multipleIcons","buttonClasses","rtl","end","instActive","PROP_NAME","Datepicker","_curInst","_disabledInputs","_datepickerShowing","_inDialog","_mainDivId","_inlineClass","_appendClass","_triggerClass","_dialogClass","_disableClass","_unselectableClass","_currentClass","_dayOverClass","regional","closeText","prevText","nextText","currentText","monthNames","monthNamesShort","dayNames","dayNamesShort","dayNamesMin","weekHeader","firstDay","isRTL","showMonthAfterYear","yearSuffix","_defaults","showOn","showAnim","showOptions","defaultDate","appendText","buttonImage","buttonImageOnly","hideIfNoPrevNext","navigationAsDateFormat","gotoCurrent","yearRange","showOtherMonths","selectOtherMonths","showWeek","calculateWeek","iso8601Week","shortYearCutoff","minDate","maxDate","beforeShow","numberOfMonths","showCurrentAtPos","stepMonths","stepBigMonths","altField","altFormat","constrainInput","showButtonPanel","autoSize","dpDiv","bindHover","_isDisabledDatepicker","inline","extendRemove","markerClassName","maxRows","_widgetDatepicker","setDefaults","_attachDatepicker","_newInst","_connectDatepicker","_inlineDatepicker","selectedDay","selectedMonth","selectedYear","drawMonth","drawYear","_attachments","_doKeyDown","_doKeyPress","_doKeyUp","_autoSize","_disableDatepicker","_get","_showDatepicker","src","alt","_lastInput","_hideDatepicker","findMax","maxI","names","setMonth","getDay","_formatDate","divSpan","_setDate","_getDefaultDate","_updateDatepicker","_updateAlternate","_dialogDatepicker","browserWidth","browserHeight","scrollX","scrollY","_dialogInst","_dialogInput","_pos","clientHeight","blockUI","_destroyDatepicker","$target","_enableDatepicker","_getInst","_optionDatepicker","_getDateDatepicker","_getMinMaxDate","_changeDatepicker","_refreshDatepicker","_setDateDatepicker","noDefault","_setDateFromField","_getDate","dateStr","sel","handled","_selectDay","_adjustDate","ctrlKey","metaKey","_clearDate","_gotoToday","altKey","chars","chr","_possibleChars","fromCharCode","charCode","lastVal","parseDate","_getFormatConfig","beforeShowSettings","isFixed","_findPos","_checkOffset","_shouldFocusInput","_generateHTML","_attachHandlers","origyearshtml","numMonths","_getNumberOfMonths","cols","yearshtml","dpWidth","dpHeight","inputWidth","inputHeight","viewWidth","viewHeight","hidden","postProcess","_tidyDialog","unblockUI","_checkExternalClick","period","_adjustInstDate","currentDay","currentMonth","currentYear","getMonth","getFullYear","_notifyChange","_selectMonthYear","selectedIndex","month","year","_selectDate","formatDate","noWeekends","day","checkDate","format","toString","iFormat","dim","extra","iValue","shortYearCutoffTemp","doy","literal","lookAhead","matches","getNumber","isDoubled","digits","getName","shortNames","longNames","k","checkLiteral","_ticksTo1970","_getDaysInMonth","_daylightSavingAdjust","ATOM","COOKIE","ISO_8601","RFC_822","RFC_850","RFC_1036","RFC_1123","RFC_2822","RSS","TICKS","TIMESTAMP","W3C","formatNumber","len","formatName","output","getYear","dates","_restrictMinMax","_determineDate","newDate","pattern","offsetString","offsetNumeric","setHours","setMinutes","setSeconds","setMilliseconds","getHours","noChange","clear","origMonth","origYear","today","selectDay","getAttribute","selectMonth","selectYear","maxDraw","gotoDate","controls","buttonPanel","dow","row","col","selectedDate","cornerClass","calender","thead","daysInMonth","leadDays","curRows","numRows","printDate","dRow","tbody","daySettings","otherMonth","unselectable","tempDate","isMultiMonth","currentDate","_canAdjustMonth","_isInRange","_generateMonthYearHeader","_getFirstDayOfMonth","ceil","inMinYear","inMaxYear","years","thisYear","determineYear","endYear","monthHtml","onChange","minMax","curYear","curMonth","yearSplit","minYear","maxYear","initialized","otherArgs","sizeRelatedOptions","resizableRelatedOptions","autoOpen","closeOnEscape","dialogClass","topOffset","resizable","beforeClose","resizeStart","resizeStop","originalCss","originalTitle","_createWrapper","uiDialog","_createTitlebar","_createButtonPane","_makeDraggable","_makeResizable","_isOpen","_destroyOverlay","detach","opener","_hide","isOpen","moveToTop","_moveToTop","silent","moved","_focusTabbable","_size","_createOverlay","_show","hasFocus","uiDialogButtonPane","uiDialogTitlebarClose","_keepFocus","checkFocus","tabbables","uiDialogTitle","uiDialogTitlebar","prependTo","_title","uiButtonSet","_createButtons","buttonOptions","showText","filteredUi","_blockFrames","_unblockFrames","resizeHandles","_minHeight","isVisible","resizableOptions","isDraggable","isResizable","nonContentHeight","minContentHeight","maxContentHeight","iframeBlocks","iframe","_allowInteraction","overlayInstances","overlay","uiBackCompat","myAt","offsetPosition","submenu","menus","activeMenu","isPropagationStopped","timer","keepActiveItem","collapseAll","_keydown","character","skip","regex","escape","previousPage","nextPage","collapse","_activate","previousFilter","filterTimer","submenus","submenuCarat","_itemRole","listbox","nested","focused","_scrollIntoView","_startOpening","borderTop","paddingTop","elementHeight","itemHeight","_hasScroll","fromFocus","_open","all","currentMenu","startMenu","newItem","oldValue","_constrainedValue","valueDiv","_refreshValue","newValue","indeterminate","_percentage","percentage","toFixed","overlayDiv","orientation","range","slide","_keySliding","_mouseSliding","_animateOff","_handleIndex","_detectOrientation","_refresh","_createRange","_createHandles","_setupEvents","handleCount","existingHandles","classes","_valueMin","_handleEvents","normValue","closestHandle","mouseOverHandle","elementSize","_normValueFromMouse","_valueMax","thisDistance","_lastChangedValue","_start","_clickOffset","_slide","_stop","pixelTotal","pixelMouse","percentMouse","valueTotal","valueMouse","_trimAlignValue","uiHash","newVal","otherVal","newValues","vals","_values","valsLength","valModStep","alignValue","lastValPercent","valPercent","valueMin","valueMax","oRange","_set","curVal","increments","tooltipClass","track","tooltips","_disable","_updateContent","_enable","blurEvent","contentOption","eventType","tooltip","events","delayedShow","describedby","positionOption","_find","_tooltip","mousemove","setInterval","clearInterval","fx","interval","fakeEvent","_removeTooltip","closing","inArray","splice","ajaxSubmit","clk","offsetX","clk_x","clk_y","offsetY","opera","postError","fileapi","files","formdata","attr2","contentWindow","contentDocument","setAttribute","u","skipEncodingOverride","encoding","enctype","timeout","T","D","extraData","iframeTarget","g","attachEvent","addEventListener","readyState","aborted","F","M","S","reject","iframeSrc","detachEvent","removeEventListener","XMLDocument","isXMLDoc","O","responseText","responseXML","getResponseHeader","Number","statusText","textarea","textContent","innerText","X","E","_","context","resolve","Deferred","ajaxSettings","getAllResponseHeaders","setRequestHeader","global","A","L","forceSync","parseXML","ActiveXObject","loadXML","DOMParser","parseFromString","C","parseJSON","eval","dataFilter","globalEval","veto","beforeSerialize","traditional","formToArray","semantic","param","beforeSubmit","toUpperCase","resetForm","clearForm","includeHidden","replaceTarget","closeKeepAlive","decodeURIComponent","uploadProgress","upload","lengthComputable","ajaxForm","delegation","isReady","ajaxFormUnbind","fieldValue","required","formSerialize","fieldSerialize","merge","specified","clearFields","clearInputs","Zepto","factory","result","converter","api","path","defaults","expires","toUTCString","JSON","stringify","write","encodeURIComponent","stringifiedAttributes","attributeName","cookie","cookies","rdecode","read","parse","getJSON","withConverter","exports","_createAutocomplete","_createShowAllButton","autocompleteselect","autocompletechange","wasOpen","_source","_removeIfInvalid","valueLowerCase","tLowerCase","valid","noGlobal","deletedIds","class2type","hasOwn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","letter","isArraylike","copyIsArray","copy","deep","expando","random","Error","isNumeric","ownLast","execScript","string","arr","second","callbackExpect","arg","tmp","now","Sizzle","Expr","getText","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","strundefined","MAX_NEGATIVE","push_native","booleans","whitespace","characterEncoding","identifier","pseudos","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","childNodes","els","seed","groups","old","nid","newContext","newSelector","getElementById","getElementsByClassName","qsa","toSelector","testContext","querySelectorAll","qsaError","removeAttribute","keys","cacheLength","markFunction","assert","addHandle","attrs","attrHandle","siblingCheck","diff","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","hasCompare","doc","createComment","getById","getElementsByName","attrId","getAttributeNode","tag","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","uniqueSort","duplicates","detectDuplicates","sortStable","selectors","preFilter","excess","unquoted","nodeNameSelector","operator","what","simple","forward","ofType","xml","outerCache","nodeIndex","useCache","lastChild","pseudo","setFilters","idx","matched","unmatched","lang","elemLang","checkbox","file","password","image","tokens","addCombinator","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","div1","defaultValue","rneedsContext","needsContext","rsingleTag","risSimple","winnow","qualifier","self","rootjQuery","rparentsprev","guaranteedUnique","sibling","until","targets","nextUntil","prevUntil","reverse","readyList","rnotwhite","optionsCache","completed","Callbacks","flag","createOptions","firing","memory","fired","firingLength","firingIndex","firingStart","once","fire","stopOnFalse","lock","locked","fireWith","func","tuples","state","promise","always","deferred","then","fns","newDefer","tuple","returned","progress","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","remaining","updateFunc","notifyWith","resolveWith","readyWait","holdReady","hold","frameElement","doScroll","doScrollCheck","inlineBlockNeedsLayout","deleteExpando","acceptData","noData","rbrace","rmultiDash","dataAttr","isEmptyDataObject","internalData","pvt","thisCache","internalKey","isNode","toJSON","internalRemoveData","hasData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","setter","clearQueue","defer","pnum","cssExpand","isHidden","access","chainable","emptyGet","bulk","rcheckableType","fragment","createDocumentFragment","leadingWhitespace","htmlSerialize","html5Clone","cloneNode","outerHTML","appendChecked","noCloneChecked","checkClone","noCloneEvent","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","createSafeFragment","nodeNames","safeFrag","types","handleObjIn","special","eventHandle","handleObj","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","delegateCount","mappedTypes","origCount","teardown","removeEvent","onlyHandlers","ontype","bubbleType","eventPath","isTrigger","namespace_re","noBubble","_default","fix","handlerQueue","delegateTarget","preDispatch","isImmediatePropagationStopped","postDispatch","fixHook","fixHooks","mouseHooks","keyHooks","srcElement","original","eventDoc","fromElement","clientX","clientLeft","clientY","clientTop","relatedTarget","toElement","load","simulate","bubble","isSimulated","defaultPrevented","timeStamp","cancelBubble","pointerenter","pointerleave","related","submitBubbles","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","origFn","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","rchecked","rscriptType","rscriptTypeMasked","rcleanScript","wrapMap","legend","tr","fragmentDiv","getAll","fixDefaultChecked","defaultChecked","manipulationTarget","disableScript","restoreScript","setGlobalEval","refElements","cloneCopyEvent","dest","oldData","curData","fixCloneNodeIssues","defaultSelected","optgroup","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","buildFragment","scripts","selection","safe","nodes","createTextNode","domManip","keepData","replaceChild","hasScripts","iNoClone","_evalUrl","replaceAll","insert","shrinkWrapBlocksVal","elemdisplay","actualDisplay","getDefaultComputedStyle","defaultDisplay","shrinkWrapBlocks","getStyles","curCSS","rmargin","rnumnonpx","addGetHookIf","conditionFn","hookFn","condition","getComputedStyle","computed","getPropertyValue","currentStyle","rsLeft","runtimeStyle","pixelLeft","pixelPositionVal","boxSizingReliableVal","reliableHiddenOffsetsVal","reliableMarginRightVal","computeStyleTests","cssFloat","backgroundClip","clearCloneStyle","boxSizing","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","boxSizingReliable","pixelPosition","reliableMarginRight","swap","ralpha","ropacity","rdisplayswap","rnumsplit","rrelNum","cssShow","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","vendorPropName","capName","origName","showHide","setPositiveNumber","subtract","augmentWidthOrHeight","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","Tween","cssHooks","cssNumber","cssProps","$1","padding","prefix","suffix","expanded","unit","propHooks","run","percent","eased","tween","linear","swing","cos","PI","fxNow","timerId","rfxtypes","rfxnum","rrun","animationPrefilters","opts","oldfire","anim","dataShow","unqueued","overflow","createTween","tweeners","scale","maxIterations","createFxNow","genFx","includeWidth","collection","Animation","properties","stopped","tick","currentTime","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","rejectWith","propFilter","tweener","prefilter","speed","speeds","fadeTo","to","optall","doAnimation","finish","stopQueue","timers","cssFn","slideToggle","fadeToggle","slow","getSetAttribute","hrefNormalized","checkOn","optSelected","optDisabled","radioValue","rreturn","valHooks","optionSet","nodeHook","boolHook","ruseDefault","getSetInput","nType","attrHooks","bool","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","tabindex","rclass","clazz","finalValue","proceed","stateVal","classNames","fnOver","fnOut","nonce","rquery","rvalidtokens","requireNonComma","depth","comma","Function","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rnoContent","rprotocol","rurl","prefilters","transports","allTypes","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","lastModified","etag","isLocal","accepts","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","cacheURL","responseHeadersString","timeoutTimer","fireGlobals","transport","responseHeaders","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","lname","overrideMimeType","mimeType","code","finalText","crossDomain","hasContent","ifModified","send","nativeStatusText","responses","isSuccess","modified","firstDataType","ct","finalDataType","ajaxHandleResponses","conv2","conv","ajaxConvert","getScript","wrapAll","unwrap","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","serializeArray","createStandardXHR","createActiveXHR","xhrId","xhrCallbacks","xhrSupported","XMLHttpRequest","cors","username","xhrFields","isAbort","onreadystatechange","script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","_load","params","animated","getWindow","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","win","box","getBoundingClientRect","pageYOffset","pageXOffset","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","andSelf","_jQuery","_$","noConflict"],"sourceRoot":""}