{"version":3,"file":"js/9186-d37fd184cbde5485185e.js","mappings":"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","sources":["webpack://hover-mainsite/./node_modules/qtip2/dist/jquery.qtip.js"],"sourcesContent":["/*\n * qTip2 - Pretty powerful tooltips - v3.0.3\n * http://qtip2.com\n *\n * Copyright (c) 2016 \n * Released under the MIT licenses\n * http://jquery.org/license\n *\n * Date: Wed May 11 2016 10:31 GMT+0100+0100\n * Plugins: tips modal viewport svg imagemap ie6\n * Styles: core basic css3\n */\n/*global window: false, jQuery: false, console: false, define: false */\n\n/* Cache window, document, undefined */\n(function( window, document, undefined ) {\n\n// Uses AMD or browser globals to create a jQuery plugin.\n(function( factory ) {\n\t\"use strict\";\n\tif(typeof define === 'function' && define.amd) {\n\t\tdefine(['jquery'], factory);\n\t}\n\telse if(jQuery && !jQuery.fn.qtip) {\n\t\tfactory(jQuery);\n\t}\n}\n(function($) {\n\t\"use strict\"; // Enable ECMAScript \"strict\" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/\n;// Munge the primitives - Paul Irish tip\nvar TRUE = true,\nFALSE = false,\nNULL = null,\n\n// Common variables\nX = 'x', Y = 'y',\nWIDTH = 'width',\nHEIGHT = 'height',\n\n// Positioning sides\nTOP = 'top',\nLEFT = 'left',\nBOTTOM = 'bottom',\nRIGHT = 'right',\nCENTER = 'center',\n\n// Position adjustment types\nFLIP = 'flip',\nFLIPINVERT = 'flipinvert',\nSHIFT = 'shift',\n\n// Shortcut vars\nQTIP, PROTOTYPE, CORNER, CHECKS,\nPLUGINS = {},\nNAMESPACE = 'qtip',\nATTR_HAS = 'data-hasqtip',\nATTR_ID = 'data-qtip-id',\nWIDGET = ['ui-widget', 'ui-tooltip'],\nSELECTOR = '.'+NAMESPACE,\nINACTIVE_EVENTS = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split(' '),\n\nCLASS_FIXED = NAMESPACE+'-fixed',\nCLASS_DEFAULT = NAMESPACE + '-default',\nCLASS_FOCUS = NAMESPACE + '-focus',\nCLASS_HOVER = NAMESPACE + '-hover',\nCLASS_DISABLED = NAMESPACE+'-disabled',\n\nreplaceSuffix = '_replacedByqTip',\noldtitle = 'oldtitle',\ntrackingBound,\n\n// Browser detection\nBROWSER = {\n\t/*\n\t * IE version detection\n\t *\n\t * Adapted from: http://ajaxian.com/archives/attack-of-the-ie-conditional-comment\n\t * Credit to James Padolsey for the original implemntation!\n\t */\n\tie: (function() {\n\t\t/* eslint-disable no-empty */\n\t\tvar v, i;\n\t\tfor (\n\t\t\tv = 4, i = document.createElement('div');\n\t\t\t(i.innerHTML = '<!--[if gt IE ' + v + ']><i></i><![endif]-->') && i.getElementsByTagName('i')[0];\n\t\t\tv+=1\n\t\t) {}\n\t\treturn v > 4 ? v : NaN;\n\t\t/* eslint-enable no-empty */\n\t})(),\n\n\t/*\n\t * iOS version detection\n\t */\n\tiOS: parseFloat(\n\t\t('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1])\n\t\t.replace('undefined', '3_2').replace('_', '.').replace('_', '')\n\t) || FALSE\n};\n;function QTip(target, options, id, attr) {\n\t// Elements and ID\n\tthis.id = id;\n\tthis.target = target;\n\tthis.tooltip = NULL;\n\tthis.elements = { target: target };\n\n\t// Internal constructs\n\tthis._id = NAMESPACE + '-' + id;\n\tthis.timers = { img: {} };\n\tthis.options = options;\n\tthis.plugins = {};\n\n\t// Cache object\n\tthis.cache = {\n\t\tevent: {},\n\t\ttarget: $(),\n\t\tdisabled: FALSE,\n\t\tattr: attr,\n\t\tonTooltip: FALSE,\n\t\tlastClass: ''\n\t};\n\n\t// Set the initial flags\n\tthis.rendered = this.destroyed = this.disabled = this.waiting =\n\t\tthis.hiddenDuringWait = this.positioning = this.triggering = FALSE;\n}\nPROTOTYPE = QTip.prototype;\n\nPROTOTYPE._when = function(deferreds) {\n\treturn $.when.apply($, deferreds);\n};\n\nPROTOTYPE.render = function(show) {\n\tif(this.rendered || this.destroyed) { return this; } // If tooltip has already been rendered, exit\n\n\tvar self = this,\n\t\toptions = this.options,\n\t\tcache = this.cache,\n\t\telements = this.elements,\n\t\ttext = options.content.text,\n\t\ttitle = options.content.title,\n\t\tbutton = options.content.button,\n\t\tposOptions = options.position,\n\t\tdeferreds = [];\n\n\t// Add ARIA attributes to target\n\t$.attr(this.target[0], 'aria-describedby', this._id);\n\n\t// Create public position object that tracks current position corners\n\tcache.posClass = this._createPosClass(\n\t\t(this.position = { my: posOptions.my, at: posOptions.at }).my\n\t);\n\n\t// Create tooltip element\n\tthis.tooltip = elements.tooltip = $('<div/>', {\n\t\t'id': this._id,\n\t\t'class': [ NAMESPACE, CLASS_DEFAULT, options.style.classes, cache.posClass ].join(' '),\n\t\t'width': options.style.width || '',\n\t\t'height': options.style.height || '',\n\t\t'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse,\n\n\t\t/* ARIA specific attributes */\n\t\t'role': 'alert',\n\t\t'aria-live': 'polite',\n\t\t'aria-atomic': FALSE,\n\t\t'aria-describedby': this._id + '-content',\n\t\t'aria-hidden': TRUE\n\t})\n\t.toggleClass(CLASS_DISABLED, this.disabled)\n\t.attr(ATTR_ID, this.id)\n\t.data(NAMESPACE, this)\n\t.appendTo(posOptions.container)\n\t.append(\n\t\t// Create content element\n\t\telements.content = $('<div />', {\n\t\t\t'class': NAMESPACE + '-content',\n\t\t\t'id': this._id + '-content',\n\t\t\t'aria-atomic': TRUE\n\t\t})\n\t);\n\n\t// Set rendered flag and prevent redundant reposition calls for now\n\tthis.rendered = -1;\n\tthis.positioning = TRUE;\n\n\t// Create title...\n\tif(title) {\n\t\tthis._createTitle();\n\n\t\t// Update title only if its not a callback (called in toggle if so)\n\t\tif(!$.isFunction(title)) {\n\t\t\tdeferreds.push( this._updateTitle(title, FALSE) );\n\t\t}\n\t}\n\n\t// Create button\n\tif(button) { this._createButton(); }\n\n\t// Set proper rendered flag and update content if not a callback function (called in toggle)\n\tif(!$.isFunction(text)) {\n\t\tdeferreds.push( this._updateContent(text, FALSE) );\n\t}\n\tthis.rendered = TRUE;\n\n\t// Setup widget classes\n\tthis._setWidget();\n\n\t// Initialize 'render' plugins\n\t$.each(PLUGINS, function(name) {\n\t\tvar instance;\n\t\tif(this.initialize === 'render' && (instance = this(self))) {\n\t\t\tself.plugins[name] = instance;\n\t\t}\n\t});\n\n\t// Unassign initial events and assign proper events\n\tthis._unassignEvents();\n\tthis._assignEvents();\n\n\t// When deferreds have completed\n\tthis._when(deferreds).then(function() {\n\t\t// tooltiprender event\n\t\tself._trigger('render');\n\n\t\t// Reset flags\n\t\tself.positioning = FALSE;\n\n\t\t// Show tooltip if not hidden during wait period\n\t\tif(!self.hiddenDuringWait && (options.show.ready || show)) {\n\t\t\tself.toggle(TRUE, cache.event, FALSE);\n\t\t}\n\t\tself.hiddenDuringWait = FALSE;\n\t});\n\n\t// Expose API\n\tQTIP.api[this.id] = this;\n\n\treturn this;\n};\n\nPROTOTYPE.destroy = function(immediate) {\n\t// Set flag the signify destroy is taking place to plugins\n\t// and ensure it only gets destroyed once!\n\tif(this.destroyed) { return this.target; }\n\n\tfunction process() {\n\t\tif(this.destroyed) { return; }\n\t\tthis.destroyed = TRUE;\n\n\t\tvar target = this.target,\n\t\t\ttitle = target.attr(oldtitle),\n\t\t\ttimer;\n\n\t\t// Destroy tooltip if rendered\n\t\tif(this.rendered) {\n\t\t\tthis.tooltip.stop(1,0).find('*').remove().end().remove();\n\t\t}\n\n\t\t// Destroy all plugins\n\t\t$.each(this.plugins, function() {\n\t\t\tthis.destroy && this.destroy();\n\t\t});\n\n\t\t// Clear timers\n\t\tfor (timer in this.timers) {\n\t\t\tif (this.timers.hasOwnProperty(timer)) {\n\t\t\t\tclearTimeout(this.timers[timer]);\n\t\t\t}\n\t\t}\n\n\t\t// Remove api object and ARIA attributes\n\t\ttarget.removeData(NAMESPACE)\n\t\t\t.removeAttr(ATTR_ID)\n\t\t\t.removeAttr(ATTR_HAS)\n\t\t\t.removeAttr('aria-describedby');\n\n\t\t// Reset old title attribute if removed\n\t\tif(this.options.suppress && title) {\n\t\t\ttarget.attr('title', title).removeAttr(oldtitle);\n\t\t}\n\n\t\t// Remove qTip events associated with this API\n\t\tthis._unassignEvents();\n\n\t\t// Remove ID from used id objects, and delete object references\n\t\t// for better garbage collection and leak protection\n\t\tthis.options = this.elements = this.cache = this.timers =\n\t\t\tthis.plugins = this.mouse = NULL;\n\n\t\t// Delete epoxsed API object\n\t\tdelete QTIP.api[this.id];\n\t}\n\n\t// If an immediate destroy is needed\n\tif((immediate !== TRUE || this.triggering === 'hide') && this.rendered) {\n\t\tthis.tooltip.one('tooltiphidden', $.proxy(process, this));\n\t\t!this.triggering && this.hide();\n\t}\n\n\t// If we're not in the process of hiding... process\n\telse { process.call(this); }\n\n\treturn this.target;\n};\n;function invalidOpt(a) {\n\treturn a === NULL || $.type(a) !== 'object';\n}\n\nfunction invalidContent(c) {\n\treturn !($.isFunction(c) || \n            c && c.attr || \n            c.length || \n            $.type(c) === 'object' && (c.jquery || c.then));\n}\n\n// Option object sanitizer\nfunction sanitizeOptions(opts) {\n\tvar content, text, ajax, once;\n\n\tif(invalidOpt(opts)) { return FALSE; }\n\n\tif(invalidOpt(opts.metadata)) {\n\t\topts.metadata = { type: opts.metadata };\n\t}\n\n\tif('content' in opts) {\n\t\tcontent = opts.content;\n\n\t\tif(invalidOpt(content) || content.jquery || content.done) {\n\t\t\ttext = invalidContent(content) ? FALSE : content;\n\t\t\tcontent = opts.content = {\n\t\t\t\ttext: text\n\t\t\t};\n\t\t}\n\t\telse { text = content.text; }\n\n\t\t// DEPRECATED - Old content.ajax plugin functionality\n\t\t// Converts it into the proper Deferred syntax\n\t\tif('ajax' in content) {\n\t\t\tajax = content.ajax;\n\t\t\tonce = ajax && ajax.once !== FALSE;\n\t\t\tdelete content.ajax;\n\n\t\t\tcontent.text = function(event, api) {\n\t\t\t\tvar loading = text || $(this).attr(api.options.content.attr) || 'Loading...',\n\n\t\t\t\tdeferred = $.ajax(\n\t\t\t\t\t$.extend({}, ajax, { context: api })\n\t\t\t\t)\n\t\t\t\t.then(ajax.success, NULL, ajax.error)\n\t\t\t\t.then(function(newContent) {\n\t\t\t\t\tif(newContent && once) { api.set('content.text', newContent); }\n\t\t\t\t\treturn newContent;\n\t\t\t\t},\n\t\t\t\tfunction(xhr, status, error) {\n\t\t\t\t\tif(api.destroyed || xhr.status === 0) { return; }\n\t\t\t\t\tapi.set('content.text', status + ': ' + error);\n\t\t\t\t});\n\n\t\t\t\treturn !once ? (api.set('content.text', loading), deferred) : loading;\n\t\t\t};\n\t\t}\n\n\t\tif('title' in content) {\n\t\t\tif($.isPlainObject(content.title)) {\n\t\t\t\tcontent.button = content.title.button;\n\t\t\t\tcontent.title = content.title.text;\n\t\t\t}\n\n\t\t\tif(invalidContent(content.title || FALSE)) {\n\t\t\t\tcontent.title = FALSE;\n\t\t\t}\n\t\t}\n\t}\n\n\tif('position' in opts && invalidOpt(opts.position)) {\n\t\topts.position = { my: opts.position, at: opts.position };\n\t}\n\n\tif('show' in opts && invalidOpt(opts.show)) {\n\t\topts.show = opts.show.jquery ? { target: opts.show } :\n\t\t\topts.show === TRUE ? { ready: TRUE } : { event: opts.show };\n\t}\n\n\tif('hide' in opts && invalidOpt(opts.hide)) {\n\t\topts.hide = opts.hide.jquery ? { target: opts.hide } : { event: opts.hide };\n\t}\n\n\tif('style' in opts && invalidOpt(opts.style)) {\n\t\topts.style = { classes: opts.style };\n\t}\n\n\t// Sanitize plugin options\n\t$.each(PLUGINS, function() {\n\t\tthis.sanitize && this.sanitize(opts);\n\t});\n\n\treturn opts;\n}\n\n// Setup builtin .set() option checks\nCHECKS = PROTOTYPE.checks = {\n\tbuiltin: {\n\t\t// Core checks\n\t\t'^id$': function(obj, o, v, prev) {\n\t\t\tvar id = v === TRUE ? QTIP.nextid : v,\n\t\t\t\tnewId = NAMESPACE + '-' + id;\n\n\t\t\tif(id !== FALSE && id.length > 0 && !$('#'+newId).length) {\n\t\t\t\tthis._id = newId;\n\n\t\t\t\tif(this.rendered) {\n\t\t\t\t\tthis.tooltip[0].id = this._id;\n\t\t\t\t\tthis.elements.content[0].id = this._id + '-content';\n\t\t\t\t\tthis.elements.title[0].id = this._id + '-title';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse { obj[o] = prev; }\n\t\t},\n\t\t'^prerender': function(obj, o, v) {\n\t\t\tv && !this.rendered && this.render(this.options.show.ready);\n\t\t},\n\n\t\t// Content checks\n\t\t'^content.text$': function(obj, o, v) {\n\t\t\tthis._updateContent(v);\n\t\t},\n\t\t'^content.attr$': function(obj, o, v, prev) {\n\t\t\tif(this.options.content.text === this.target.attr(prev)) {\n\t\t\t\tthis._updateContent( this.target.attr(v) );\n\t\t\t}\n\t\t},\n\t\t'^content.title$': function(obj, o, v) {\n\t\t\t// Remove title if content is null\n\t\t\tif(!v) { return this._removeTitle(); }\n\n\t\t\t// If title isn't already created, create it now and update\n\t\t\tv && !this.elements.title && this._createTitle();\n\t\t\tthis._updateTitle(v);\n\t\t},\n\t\t'^content.button$': function(obj, o, v) {\n\t\t\tthis._updateButton(v);\n\t\t},\n\t\t'^content.title.(text|button)$': function(obj, o, v) {\n\t\t\tthis.set('content.'+o, v); // Backwards title.text/button compat\n\t\t},\n\n\t\t// Position checks\n\t\t'^position.(my|at)$': function(obj, o, v){\n\t\t\tif('string' === typeof v) {\n\t\t\t\tthis.position[o] = obj[o] = new CORNER(v, o === 'at');\n\t\t\t}\n\t\t},\n\t\t'^position.container$': function(obj, o, v){\n\t\t\tthis.rendered && this.tooltip.appendTo(v);\n\t\t},\n\n\t\t// Show checks\n\t\t'^show.ready$': function(obj, o, v) {\n\t\t\tv && (!this.rendered && this.render(TRUE) || this.toggle(TRUE));\n\t\t},\n\n\t\t// Style checks\n\t\t'^style.classes$': function(obj, o, v, p) {\n\t\t\tthis.rendered && this.tooltip.removeClass(p).addClass(v);\n\t\t},\n\t\t'^style.(width|height)': function(obj, o, v) {\n\t\t\tthis.rendered && this.tooltip.css(o, v);\n\t\t},\n\t\t'^style.widget|content.title': function() {\n\t\t\tthis.rendered && this._setWidget();\n\t\t},\n\t\t'^style.def': function(obj, o, v) {\n\t\t\tthis.rendered && this.tooltip.toggleClass(CLASS_DEFAULT, !!v);\n\t\t},\n\n\t\t// Events check\n\t\t'^events.(render|show|move|hide|focus|blur)$': function(obj, o, v) {\n\t\t\tthis.rendered && this.tooltip[($.isFunction(v) ? '' : 'un') + 'bind']('tooltip'+o, v);\n\t\t},\n\n\t\t// Properties which require event reassignment\n\t\t'^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() {\n\t\t\tif(!this.rendered) { return; }\n\n\t\t\t// Set tracking flag\n\t\t\tvar posOptions = this.options.position;\n\t\t\tthis.tooltip.attr('tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse);\n\n\t\t\t// Reassign events\n\t\t\tthis._unassignEvents();\n\t\t\tthis._assignEvents();\n\t\t}\n\t}\n};\n\n// Dot notation converter\nfunction convertNotation(options, notation) {\n\tvar i = 0, obj, option = options,\n\n\t// Split notation into array\n\tlevels = notation.split('.');\n\n\t// Loop through\n\twhile(option = option[ levels[i++] ]) {\n\t\tif(i < levels.length) { obj = option; }\n\t}\n\n\treturn [obj || options, levels.pop()];\n}\n\nPROTOTYPE.get = function(notation) {\n\tif(this.destroyed) { return this; }\n\n\tvar o = convertNotation(this.options, notation.toLowerCase()),\n\t\tresult = o[0][ o[1] ];\n\n\treturn result.precedance ? result.string() : result;\n};\n\nfunction setCallback(notation, args) {\n\tvar category, rule, match;\n\n\tfor(category in this.checks) {\n\t\tif (!this.checks.hasOwnProperty(category)) { continue; }\n\n\t\tfor(rule in this.checks[category]) {\n\t\t\tif (!this.checks[category].hasOwnProperty(rule)) { continue; }\n\n\t\t\tif(match = (new RegExp(rule, 'i')).exec(notation)) {\n\t\t\t\targs.push(match);\n\n\t\t\t\tif(category === 'builtin' || this.plugins[category]) {\n\t\t\t\t\tthis.checks[category][rule].apply(\n\t\t\t\t\t\tthis.plugins[category] || this, args\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar rmove = /^position\\.(my|at|adjust|target|container|viewport)|style|content|show\\.ready/i,\n\trrender = /^prerender|show\\.ready/i;\n\nPROTOTYPE.set = function(option, value) {\n\tif(this.destroyed) { return this; }\n\n\tvar rendered = this.rendered,\n\t\treposition = FALSE,\n\t\toptions = this.options,\n\t\tname;\n\n\t// Convert singular option/value pair into object form\n\tif('string' === typeof option) {\n\t\tname = option; option = {}; option[name] = value;\n\t}\n\telse { option = $.extend({}, option); }\n\n\t// Set all of the defined options to their new values\n\t$.each(option, function(notation, val) {\n\t\tif(rendered && rrender.test(notation)) {\n\t\t\tdelete option[notation]; return;\n\t\t}\n\n\t\t// Set new obj value\n\t\tvar obj = convertNotation(options, notation.toLowerCase()), previous;\n\t\tprevious = obj[0][ obj[1] ];\n\t\tobj[0][ obj[1] ] = val && val.nodeType ? $(val) : val;\n\n\t\t// Also check if we need to reposition\n\t\treposition = rmove.test(notation) || reposition;\n\n\t\t// Set the new params for the callback\n\t\toption[notation] = [obj[0], obj[1], val, previous];\n\t});\n\n\t// Re-sanitize options\n\tsanitizeOptions(options);\n\n\t/*\n\t * Execute any valid callbacks for the set options\n\t * Also set positioning flag so we don't get loads of redundant repositioning calls.\n\t */\n\tthis.positioning = TRUE;\n\t$.each(option, $.proxy(setCallback, this));\n\tthis.positioning = FALSE;\n\n\t// Update position if needed\n\tif(this.rendered && this.tooltip[0].offsetWidth > 0 && reposition) {\n\t\tthis.reposition( options.position.target === 'mouse' ? NULL : this.cache.event );\n\t}\n\n\treturn this;\n};\n;PROTOTYPE._update = function(content, element) {\n\tvar self = this,\n\t\tcache = this.cache;\n\n\t// Make sure tooltip is rendered and content is defined. If not return\n\tif(!this.rendered || !content) { return FALSE; }\n\n\t// Use function to parse content\n\tif($.isFunction(content)) {\n\t\tcontent = content.call(this.elements.target, cache.event, this) || '';\n\t}\n\n\t// Handle deferred content\n\tif($.isFunction(content.then)) {\n\t\tcache.waiting = TRUE;\n\t\treturn content.then(function(c) {\n\t\t\tcache.waiting = FALSE;\n\t\t\treturn self._update(c, element);\n\t\t}, NULL, function(e) {\n\t\t\treturn self._update(e, element);\n\t\t});\n\t}\n\n\t// If content is null... return false\n\tif(content === FALSE || !content && content !== '') { return FALSE; }\n\n\t// Append new content if its a DOM array and show it if hidden\n\tif(content.jquery && content.length > 0) {\n\t\telement.empty().append(\n\t\t\tcontent.css({ display: 'block', visibility: 'visible' })\n\t\t);\n\t}\n\n\t// Content is a regular string, insert the new content\n\telse { element.html(content); }\n\n\t// Wait for content to be loaded, and reposition\n\treturn this._waitForContent(element).then(function(images) {\n\t\tif(self.rendered && self.tooltip[0].offsetWidth > 0) {\n\t\t\tself.reposition(cache.event, !images.length);\n\t\t}\n\t});\n};\n\nPROTOTYPE._waitForContent = function(element) {\n\tvar cache = this.cache;\n\n\t// Set flag\n\tcache.waiting = TRUE;\n\n\t// If imagesLoaded is included, ensure images have loaded and return promise\n\treturn ( $.fn.imagesLoaded ? element.imagesLoaded() : new $.Deferred().resolve([]) )\n\t\t.done(function() { cache.waiting = FALSE; })\n\t\t.promise();\n};\n\nPROTOTYPE._updateContent = function(content, reposition) {\n\tthis._update(content, this.elements.content, reposition);\n};\n\nPROTOTYPE._updateTitle = function(content, reposition) {\n\tif(this._update(content, this.elements.title, reposition) === FALSE) {\n\t\tthis._removeTitle(FALSE);\n\t}\n};\n\nPROTOTYPE._createTitle = function()\n{\n\tvar elements = this.elements,\n\t\tid = this._id+'-title';\n\n\t// Destroy previous title element, if present\n\tif(elements.titlebar) { this._removeTitle(); }\n\n\t// Create title bar and title elements\n\telements.titlebar = $('<div />', {\n\t\t'class': NAMESPACE + '-titlebar ' + (this.options.style.widget ? createWidgetClass('header') : '')\n\t})\n\t.append(\n\t\telements.title = $('<div />', {\n\t\t\t'id': id,\n\t\t\t'class': NAMESPACE + '-title',\n\t\t\t'aria-atomic': TRUE\n\t\t})\n\t)\n\t.insertBefore(elements.content)\n\n\t// Button-specific events\n\t.delegate('.qtip-close', 'mousedown keydown mouseup keyup mouseout', function(event) {\n\t\t$(this).toggleClass('ui-state-active ui-state-focus', event.type.substr(-4) === 'down');\n\t})\n\t.delegate('.qtip-close', 'mouseover mouseout', function(event){\n\t\t$(this).toggleClass('ui-state-hover', event.type === 'mouseover');\n\t});\n\n\t// Create button if enabled\n\tif(this.options.content.button) { this._createButton(); }\n};\n\nPROTOTYPE._removeTitle = function(reposition)\n{\n\tvar elements = this.elements;\n\n\tif(elements.title) {\n\t\telements.titlebar.remove();\n\t\telements.titlebar = elements.title = elements.button = NULL;\n\n\t\t// Reposition if enabled\n\t\tif(reposition !== FALSE) { this.reposition(); }\n\t}\n};\n;PROTOTYPE._createPosClass = function(my) {\n\treturn NAMESPACE + '-pos-' + (my || this.options.position.my).abbrev();\n};\n\nPROTOTYPE.reposition = function(event, effect) {\n\tif(!this.rendered || this.positioning || this.destroyed) { return this; }\n\n\t// Set positioning flag\n\tthis.positioning = TRUE;\n\n\tvar cache = this.cache,\n\t\ttooltip = this.tooltip,\n\t\tposOptions = this.options.position,\n\t\ttarget = posOptions.target,\n\t\tmy = posOptions.my,\n\t\tat = posOptions.at,\n\t\tviewport = posOptions.viewport,\n\t\tcontainer = posOptions.container,\n\t\tadjust = posOptions.adjust,\n\t\tmethod = adjust.method.split(' '),\n\t\ttooltipWidth = tooltip.outerWidth(FALSE),\n\t\ttooltipHeight = tooltip.outerHeight(FALSE),\n\t\ttargetWidth = 0,\n\t\ttargetHeight = 0,\n\t\ttype = tooltip.css('position'),\n\t\tposition = { left: 0, top: 0 },\n\t\tvisible = tooltip[0].offsetWidth > 0,\n\t\tisScroll = event && event.type === 'scroll',\n\t\twin = $(window),\n\t\tdoc = container[0].ownerDocument,\n\t\tmouse = this.mouse,\n\t\tpluginCalculations, offset, adjusted, newClass;\n\n\t// Check if absolute position was passed\n\tif($.isArray(target) && target.length === 2) {\n\t\t// Force left top and set position\n\t\tat = { x: LEFT, y: TOP };\n\t\tposition = { left: target[0], top: target[1] };\n\t}\n\n\t// Check if mouse was the target\n\telse if(target === 'mouse') {\n\t\t// Force left top to allow flipping\n\t\tat = { x: LEFT, y: TOP };\n\n\t\t// Use the mouse origin that caused the show event, if distance hiding is enabled\n\t\tif((!adjust.mouse || this.options.hide.distance) && cache.origin && cache.origin.pageX) {\n\t\t\tevent =  cache.origin;\n\t\t}\n\n\t\t// Use cached event for resize/scroll events\n\t\telse if(!event || event && (event.type === 'resize' || event.type === 'scroll')) {\n\t\t\tevent = cache.event;\n\t\t}\n\n\t\t// Otherwise, use the cached mouse coordinates if available\n\t\telse if(mouse && mouse.pageX) {\n\t\t\tevent = mouse;\n\t\t}\n\n\t\t// Calculate body and container offset and take them into account below\n\t\tif(type !== 'static') { position = container.offset(); }\n\t\tif(doc.body.offsetWidth !== (window.innerWidth || doc.documentElement.clientWidth)) {\n\t\t\toffset = $(document.body).offset();\n\t\t}\n\n\t\t// Use event coordinates for position\n\t\tposition = {\n\t\t\tleft: event.pageX - position.left + (offset && offset.left || 0),\n\t\t\ttop: event.pageY - position.top + (offset && offset.top || 0)\n\t\t};\n\n\t\t// Scroll events are a pain, some browsers\n\t\tif(adjust.mouse && isScroll && mouse) {\n\t\t\tposition.left -= (mouse.scrollX || 0) - win.scrollLeft();\n\t\t\tposition.top -= (mouse.scrollY || 0) - win.scrollTop();\n\t\t}\n\t}\n\n\t// Target wasn't mouse or absolute...\n\telse {\n\t\t// Check if event targetting is being used\n\t\tif(target === 'event') {\n\t\t\tif(event && event.target && event.type !== 'scroll' && event.type !== 'resize') {\n\t\t\t\tcache.target = $(event.target);\n\t\t\t}\n\t\t\telse if(!event.target) {\n\t\t\t\tcache.target = this.elements.target;\n\t\t\t}\n\t\t}\n\t\telse if(target !== 'event'){\n\t\t\tcache.target = $(target.jquery ? target : this.elements.target);\n\t\t}\n\t\ttarget = cache.target;\n\n\t\t// Parse the target into a jQuery object and make sure there's an element present\n\t\ttarget = $(target).eq(0);\n\t\tif(target.length === 0) { return this; }\n\n\t\t// Check if window or document is the target\n\t\telse if(target[0] === document || target[0] === window) {\n\t\t\ttargetWidth = BROWSER.iOS ? window.innerWidth : target.width();\n\t\t\ttargetHeight = BROWSER.iOS ? window.innerHeight : target.height();\n\n\t\t\tif(target[0] === window) {\n\t\t\t\tposition = {\n\t\t\t\t\ttop: (viewport || target).scrollTop(),\n\t\t\t\t\tleft: (viewport || target).scrollLeft()\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// Check if the target is an <AREA> element\n\t\telse if(PLUGINS.imagemap && target.is('area')) {\n\t\t\tpluginCalculations = PLUGINS.imagemap(this, target, at, PLUGINS.viewport ? method : FALSE);\n\t\t}\n\n\t\t// Check if the target is an SVG element\n\t\telse if(PLUGINS.svg && target && target[0].ownerSVGElement) {\n\t\t\tpluginCalculations = PLUGINS.svg(this, target, at, PLUGINS.viewport ? method : FALSE);\n\t\t}\n\n\t\t// Otherwise use regular jQuery methods\n\t\telse {\n\t\t\ttargetWidth = target.outerWidth(FALSE);\n\t\t\ttargetHeight = target.outerHeight(FALSE);\n\t\t\tposition = target.offset();\n\t\t}\n\n\t\t// Parse returned plugin values into proper variables\n\t\tif(pluginCalculations) {\n\t\t\ttargetWidth = pluginCalculations.width;\n\t\t\ttargetHeight = pluginCalculations.height;\n\t\t\toffset = pluginCalculations.offset;\n\t\t\tposition = pluginCalculations.position;\n\t\t}\n\n\t\t// Adjust position to take into account offset parents\n\t\tposition = this.reposition.offset(target, position, container);\n\n\t\t// Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2)\n\t\tif(BROWSER.iOS > 3.1 && BROWSER.iOS < 4.1 ||\n\t\t\tBROWSER.iOS >= 4.3 && BROWSER.iOS < 4.33 ||\n\t\t\t!BROWSER.iOS && type === 'fixed'\n\t\t){\n\t\t\tposition.left -= win.scrollLeft();\n\t\t\tposition.top -= win.scrollTop();\n\t\t}\n\n\t\t// Adjust position relative to target\n\t\tif(!pluginCalculations || pluginCalculations && pluginCalculations.adjustable !== FALSE) {\n\t\t\tposition.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0;\n\t\t\tposition.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0;\n\t\t}\n\t}\n\n\t// Adjust position relative to tooltip\n\tposition.left += adjust.x + (my.x === RIGHT ? -tooltipWidth : my.x === CENTER ? -tooltipWidth / 2 : 0);\n\tposition.top += adjust.y + (my.y === BOTTOM ? -tooltipHeight : my.y === CENTER ? -tooltipHeight / 2 : 0);\n\n\t// Use viewport adjustment plugin if enabled\n\tif(PLUGINS.viewport) {\n\t\tadjusted = position.adjusted = PLUGINS.viewport(\n\t\t\tthis, position, posOptions, targetWidth, targetHeight, tooltipWidth, tooltipHeight\n\t\t);\n\n\t\t// Apply offsets supplied by positioning plugin (if used)\n\t\tif(offset && adjusted.left) { position.left += offset.left; }\n\t\tif(offset && adjusted.top) {  position.top += offset.top; }\n\n\t\t// Apply any new 'my' position\n\t\tif(adjusted.my) { this.position.my = adjusted.my; }\n\t}\n\n\t// Viewport adjustment is disabled, set values to zero\n\telse { position.adjusted = { left: 0, top: 0 }; }\n\n\t// Set tooltip position class if it's changed\n\tif(cache.posClass !== (newClass = this._createPosClass(this.position.my))) {\n\t\tcache.posClass = newClass;\n\t\ttooltip.removeClass(cache.posClass).addClass(newClass);\n\t}\n\n\t// tooltipmove event\n\tif(!this._trigger('move', [position, viewport.elem || viewport], event)) { return this; }\n\tdelete position.adjusted;\n\n\t// If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly\n\tif(effect === FALSE || !visible || isNaN(position.left) || isNaN(position.top) || target === 'mouse' || !$.isFunction(posOptions.effect)) {\n\t\ttooltip.css(position);\n\t}\n\n\t// Use custom function if provided\n\telse if($.isFunction(posOptions.effect)) {\n\t\tposOptions.effect.call(tooltip, this, $.extend({}, position));\n\t\ttooltip.queue(function(next) {\n\t\t\t// Reset attributes to avoid cross-browser rendering bugs\n\t\t\t$(this).css({ opacity: '', height: '' });\n\t\t\tif(BROWSER.ie) { this.style.removeAttribute('filter'); }\n\n\t\t\tnext();\n\t\t});\n\t}\n\n\t// Set positioning flag\n\tthis.positioning = FALSE;\n\n\treturn this;\n};\n\n// Custom (more correct for qTip!) offset calculator\nPROTOTYPE.reposition.offset = function(elem, pos, container) {\n\tif(!container[0]) { return pos; }\n\n\tvar ownerDocument = $(elem[0].ownerDocument),\n\t\tquirks = !!BROWSER.ie && document.compatMode !== 'CSS1Compat',\n\t\tparent = container[0],\n\t\tscrolled, position, parentOffset, overflow;\n\n\tfunction scroll(e, i) {\n\t\tpos.left += i * e.scrollLeft();\n\t\tpos.top += i * e.scrollTop();\n\t}\n\n\t// Compensate for non-static containers offset\n\tdo {\n\t\tif((position = $.css(parent, 'position')) !== 'static') {\n\t\t\tif(position === 'fixed') {\n\t\t\t\tparentOffset = parent.getBoundingClientRect();\n\t\t\t\tscroll(ownerDocument, -1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparentOffset = $(parent).position();\n\t\t\t\tparentOffset.left += parseFloat($.css(parent, 'borderLeftWidth')) || 0;\n\t\t\t\tparentOffset.top += parseFloat($.css(parent, 'borderTopWidth')) || 0;\n\t\t\t}\n\n\t\t\tpos.left -= parentOffset.left + (parseFloat($.css(parent, 'marginLeft')) || 0);\n\t\t\tpos.top -= parentOffset.top + (parseFloat($.css(parent, 'marginTop')) || 0);\n\n\t\t\t// If this is the first parent element with an overflow of \"scroll\" or \"auto\", store it\n\t\t\tif(!scrolled && (overflow = $.css(parent, 'overflow')) !== 'hidden' && overflow !== 'visible') { scrolled = $(parent); }\n\t\t}\n\t}\n\twhile(parent = parent.offsetParent);\n\n\t// Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode)\n\tif(scrolled && (scrolled[0] !== ownerDocument[0] || quirks)) {\n\t\tscroll(scrolled, 1);\n\t}\n\n\treturn pos;\n};\n\n// Corner class\nvar C = (CORNER = PROTOTYPE.reposition.Corner = function(corner, forceY) {\n\tcorner = ('' + corner).replace(/([A-Z])/, ' $1').replace(/middle/gi, CENTER).toLowerCase();\n\tthis.x = (corner.match(/left|right/i) || corner.match(/center/) || ['inherit'])[0].toLowerCase();\n\tthis.y = (corner.match(/top|bottom|center/i) || ['inherit'])[0].toLowerCase();\n\tthis.forceY = !!forceY;\n\n\tvar f = corner.charAt(0);\n\tthis.precedance = f === 't' || f === 'b' ? Y : X;\n}).prototype;\n\nC.invert = function(z, center) {\n\tthis[z] = this[z] === LEFT ? RIGHT : this[z] === RIGHT ? LEFT : center || this[z];\n};\n\nC.string = function(join) {\n\tvar x = this.x, y = this.y;\n\n\tvar result = x !== y ?\n\t\tx === 'center' || y !== 'center' && (this.precedance === Y || this.forceY) ? \n\t\t\t[y,x] : \n\t\t\t[x,y] :\n\t\t[x];\n\n\treturn join !== false ? result.join(' ') : result;\n};\n\nC.abbrev = function() {\n\tvar result = this.string(false);\n\treturn result[0].charAt(0) + (result[1] && result[1].charAt(0) || '');\n};\n\nC.clone = function() {\n\treturn new CORNER( this.string(), this.forceY );\n};\n\n;\nPROTOTYPE.toggle = function(state, event) {\n\tvar cache = this.cache,\n\t\toptions = this.options,\n\t\ttooltip = this.tooltip;\n\n\t// Try to prevent flickering when tooltip overlaps show element\n\tif(event) {\n\t\tif((/over|enter/).test(event.type) && cache.event && (/out|leave/).test(cache.event.type) &&\n\t\t\toptions.show.target.add(event.target).length === options.show.target.length &&\n\t\t\ttooltip.has(event.relatedTarget).length) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Cache event\n\t\tcache.event = $.event.fix(event);\n\t}\n\n\t// If we're currently waiting and we've just hidden... stop it\n\tthis.waiting && !state && (this.hiddenDuringWait = TRUE);\n\n\t// Render the tooltip if showing and it isn't already\n\tif(!this.rendered) { return state ? this.render(1) : this; }\n\telse if(this.destroyed || this.disabled) { return this; }\n\n\tvar type = state ? 'show' : 'hide',\n\t\topts = this.options[type],\n\t\tposOptions = this.options.position,\n\t\tcontentOptions = this.options.content,\n\t\twidth = this.tooltip.css('width'),\n\t\tvisible = this.tooltip.is(':visible'),\n\t\tanimate = state || opts.target.length === 1,\n\t\tsameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target,\n\t\tidenticalState, allow, after;\n\n\t// Detect state if valid one isn't provided\n\tif((typeof state).search('boolean|number')) { state = !visible; }\n\n\t// Check if the tooltip is in an identical state to the new would-be state\n\tidenticalState = !tooltip.is(':animated') && visible === state && sameTarget;\n\n\t// Fire tooltip(show/hide) event and check if destroyed\n\tallow = !identicalState ? !!this._trigger(type, [90]) : NULL;\n\n\t// Check to make sure the tooltip wasn't destroyed in the callback\n\tif(this.destroyed) { return this; }\n\n\t// If the user didn't stop the method prematurely and we're showing the tooltip, focus it\n\tif(allow !== FALSE && state) { this.focus(event); }\n\n\t// If the state hasn't changed or the user stopped it, return early\n\tif(!allow || identicalState) { return this; }\n\n\t// Set ARIA hidden attribute\n\t$.attr(tooltip[0], 'aria-hidden', !!!state);\n\n\t// Execute state specific properties\n\tif(state) {\n\t\t// Store show origin coordinates\n\t\tthis.mouse && (cache.origin = $.event.fix(this.mouse));\n\n\t\t// Update tooltip content & title if it's a dynamic function\n\t\tif($.isFunction(contentOptions.text)) { this._updateContent(contentOptions.text, FALSE); }\n\t\tif($.isFunction(contentOptions.title)) { this._updateTitle(contentOptions.title, FALSE); }\n\n\t\t// Cache mousemove events for positioning purposes (if not already tracking)\n\t\tif(!trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse) {\n\t\t\t$(document).bind('mousemove.'+NAMESPACE, this._storeMouse);\n\t\t\ttrackingBound = TRUE;\n\t\t}\n\n\t\t// Update the tooltip position (set width first to prevent viewport/max-width issues)\n\t\tif(!width) { tooltip.css('width', tooltip.outerWidth(FALSE)); }\n\t\tthis.reposition(event, arguments[2]);\n\t\tif(!width) { tooltip.css('width', ''); }\n\n\t\t// Hide other tooltips if tooltip is solo\n\t\tif(!!opts.solo) {\n\t\t\t(typeof opts.solo === 'string' ? $(opts.solo) : $(SELECTOR, opts.solo))\n\t\t\t\t.not(tooltip).not(opts.target).qtip('hide', new $.Event('tooltipsolo'));\n\t\t}\n\t}\n\telse {\n\t\t// Clear show timer if we're hiding\n\t\tclearTimeout(this.timers.show);\n\n\t\t// Remove cached origin on hide\n\t\tdelete cache.origin;\n\n\t\t// Remove mouse tracking event if not needed (all tracking qTips are hidden)\n\t\tif(trackingBound && !$(SELECTOR+'[tracking=\"true\"]:visible', opts.solo).not(tooltip).length) {\n\t\t\t$(document).unbind('mousemove.'+NAMESPACE);\n\t\t\ttrackingBound = FALSE;\n\t\t}\n\n\t\t// Blur the tooltip\n\t\tthis.blur(event);\n\t}\n\n\t// Define post-animation, state specific properties\n\tafter = $.proxy(function() {\n\t\tif(state) {\n\t\t\t// Prevent antialias from disappearing in IE by removing filter\n\t\t\tif(BROWSER.ie) { tooltip[0].style.removeAttribute('filter'); }\n\n\t\t\t// Remove overflow setting to prevent tip bugs\n\t\t\ttooltip.css('overflow', '');\n\n\t\t\t// Autofocus elements if enabled\n\t\t\tif('string' === typeof opts.autofocus) {\n\t\t\t\t$(this.options.show.autofocus, tooltip).focus();\n\t\t\t}\n\n\t\t\t// If set, hide tooltip when inactive for delay period\n\t\t\tthis.options.show.target.trigger('qtip-'+this.id+'-inactive');\n\t\t}\n\t\telse {\n\t\t\t// Reset CSS states\n\t\t\ttooltip.css({\n\t\t\t\tdisplay: '',\n\t\t\t\tvisibility: '',\n\t\t\t\topacity: '',\n\t\t\t\tleft: '',\n\t\t\t\ttop: ''\n\t\t\t});\n\t\t}\n\n\t\t// tooltipvisible/tooltiphidden events\n\t\tthis._trigger(state ? 'visible' : 'hidden');\n\t}, this);\n\n\t// If no effect type is supplied, use a simple toggle\n\tif(opts.effect === FALSE || animate === FALSE) {\n\t\ttooltip[ type ]();\n\t\tafter();\n\t}\n\n\t// Use custom function if provided\n\telse if($.isFunction(opts.effect)) {\n\t\ttooltip.stop(1, 1);\n\t\topts.effect.call(tooltip, this);\n\t\ttooltip.queue('fx', function(n) {\n\t\t\tafter(); n();\n\t\t});\n\t}\n\n\t// Use basic fade function by default\n\telse { tooltip.fadeTo(90, state ? 1 : 0, after); }\n\n\t// If inactive hide method is set, active it\n\tif(state) { opts.target.trigger('qtip-'+this.id+'-inactive'); }\n\n\treturn this;\n};\n\nPROTOTYPE.show = function(event) { return this.toggle(TRUE, event); };\n\nPROTOTYPE.hide = function(event) { return this.toggle(FALSE, event); };\n;PROTOTYPE.focus = function(event) {\n\tif(!this.rendered || this.destroyed) { return this; }\n\n\tvar qtips = $(SELECTOR),\n\t\ttooltip = this.tooltip,\n\t\tcurIndex = parseInt(tooltip[0].style.zIndex, 10),\n\t\tnewIndex = QTIP.zindex + qtips.length;\n\n\t// Only update the z-index if it has changed and tooltip is not already focused\n\tif(!tooltip.hasClass(CLASS_FOCUS)) {\n\t\t// tooltipfocus event\n\t\tif(this._trigger('focus', [newIndex], event)) {\n\t\t\t// Only update z-index's if they've changed\n\t\t\tif(curIndex !== newIndex) {\n\t\t\t\t// Reduce our z-index's and keep them properly ordered\n\t\t\t\tqtips.each(function() {\n\t\t\t\t\tif(this.style.zIndex > curIndex) {\n\t\t\t\t\t\tthis.style.zIndex = this.style.zIndex - 1;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Fire blur event for focused tooltip\n\t\t\t\tqtips.filter('.' + CLASS_FOCUS).qtip('blur', event);\n\t\t\t}\n\n\t\t\t// Set the new z-index\n\t\t\ttooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex;\n\t\t}\n\t}\n\n\treturn this;\n};\n\nPROTOTYPE.blur = function(event) {\n\tif(!this.rendered || this.destroyed) { return this; }\n\n\t// Set focused status to FALSE\n\tthis.tooltip.removeClass(CLASS_FOCUS);\n\n\t// tooltipblur event\n\tthis._trigger('blur', [ this.tooltip.css('zIndex') ], event);\n\n\treturn this;\n};\n;PROTOTYPE.disable = function(state) {\n\tif(this.destroyed) { return this; }\n\n\t// If 'toggle' is passed, toggle the current state\n\tif(state === 'toggle') {\n\t\tstate = !(this.rendered ? this.tooltip.hasClass(CLASS_DISABLED) : this.disabled);\n\t}\n\n\t// Disable if no state passed\n\telse if('boolean' !== typeof state) {\n\t\tstate = TRUE;\n\t}\n\n\tif(this.rendered) {\n\t\tthis.tooltip.toggleClass(CLASS_DISABLED, state)\n\t\t\t.attr('aria-disabled', state);\n\t}\n\n\tthis.disabled = !!state;\n\n\treturn this;\n};\n\nPROTOTYPE.enable = function() { return this.disable(FALSE); };\n;PROTOTYPE._createButton = function()\n{\n\tvar self = this,\n\t\telements = this.elements,\n\t\ttooltip = elements.tooltip,\n\t\tbutton = this.options.content.button,\n\t\tisString = typeof button === 'string',\n\t\tclose = isString ? button : 'Close tooltip';\n\n\tif(elements.button) { elements.button.remove(); }\n\n\t// Use custom button if one was supplied by user, else use default\n\tif(button.jquery) {\n\t\telements.button = button;\n\t}\n\telse {\n\t\telements.button = $('<a />', {\n\t\t\t'class': 'qtip-close ' + (this.options.style.widget ? '' : NAMESPACE+'-icon'),\n\t\t\t'title': close,\n\t\t\t'aria-label': close\n\t\t})\n\t\t.prepend(\n\t\t\t$('<span />', {\n\t\t\t\t'class': 'ui-icon ui-icon-close',\n\t\t\t\t'html': '&times;'\n\t\t\t})\n\t\t);\n\t}\n\n\t// Create button and setup attributes\n\telements.button.appendTo(elements.titlebar || tooltip)\n\t\t.attr('role', 'button')\n\t\t.click(function(event) {\n\t\t\tif(!tooltip.hasClass(CLASS_DISABLED)) { self.hide(event); }\n\t\t\treturn FALSE;\n\t\t});\n};\n\nPROTOTYPE._updateButton = function(button)\n{\n\t// Make sure tooltip is rendered and if not, return\n\tif(!this.rendered) { return FALSE; }\n\n\tvar elem = this.elements.button;\n\tif(button) { this._createButton(); }\n\telse { elem.remove(); }\n};\n;// Widget class creator\nfunction createWidgetClass(cls) {\n\treturn WIDGET.concat('').join(cls ? '-'+cls+' ' : ' ');\n}\n\n// Widget class setter method\nPROTOTYPE._setWidget = function()\n{\n\tvar on = this.options.style.widget,\n\t\telements = this.elements,\n\t\ttooltip = elements.tooltip,\n\t\tdisabled = tooltip.hasClass(CLASS_DISABLED);\n\n\ttooltip.removeClass(CLASS_DISABLED);\n\tCLASS_DISABLED = on ? 'ui-state-disabled' : 'qtip-disabled';\n\ttooltip.toggleClass(CLASS_DISABLED, disabled);\n\n\ttooltip.toggleClass('ui-helper-reset '+createWidgetClass(), on).toggleClass(CLASS_DEFAULT, this.options.style.def && !on);\n\n\tif(elements.content) {\n\t\telements.content.toggleClass( createWidgetClass('content'), on);\n\t}\n\tif(elements.titlebar) {\n\t\telements.titlebar.toggleClass( createWidgetClass('header'), on);\n\t}\n\tif(elements.button) {\n\t\telements.button.toggleClass(NAMESPACE+'-icon', !on);\n\t}\n};\n;function delay(callback, duration) {\n\t// If tooltip has displayed, start hide timer\n\tif(duration > 0) {\n\t\treturn setTimeout(\n\t\t\t$.proxy(callback, this), duration\n\t\t);\n\t}\n\telse{ callback.call(this); }\n}\n\nfunction showMethod(event) {\n\tif(this.tooltip.hasClass(CLASS_DISABLED)) { return; }\n\n\t// Clear hide timers\n\tclearTimeout(this.timers.show);\n\tclearTimeout(this.timers.hide);\n\n\t// Start show timer\n\tthis.timers.show = delay.call(this,\n\t\tfunction() { this.toggle(TRUE, event); },\n\t\tthis.options.show.delay\n\t);\n}\n\nfunction hideMethod(event) {\n\tif(this.tooltip.hasClass(CLASS_DISABLED) || this.destroyed) { return; }\n\n\t// Check if new target was actually the tooltip element\n\tvar relatedTarget = $(event.relatedTarget),\n\t\tontoTooltip = relatedTarget.closest(SELECTOR)[0] === this.tooltip[0],\n\t\tontoTarget = relatedTarget[0] === this.options.show.target[0];\n\n\t// Clear timers and stop animation queue\n\tclearTimeout(this.timers.show);\n\tclearTimeout(this.timers.hide);\n\n\t// Prevent hiding if tooltip is fixed and event target is the tooltip.\n\t// Or if mouse positioning is enabled and cursor momentarily overlaps\n\tif(this !== relatedTarget[0] &&\n\t\t(this.options.position.target === 'mouse' && ontoTooltip) ||\n\t\tthis.options.hide.fixed && (\n\t\t\t(/mouse(out|leave|move)/).test(event.type) && (ontoTooltip || ontoTarget))\n\t\t)\n\t{\n\t\t/* eslint-disable no-empty */\n\t\ttry {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopImmediatePropagation();\n\t\t} catch(e) {}\n\t\t/* eslint-enable no-empty */\n\n\t\treturn;\n\t}\n\n\t// If tooltip has displayed, start hide timer\n\tthis.timers.hide = delay.call(this,\n\t\tfunction() { this.toggle(FALSE, event); },\n\t\tthis.options.hide.delay,\n\t\tthis\n\t);\n}\n\nfunction inactiveMethod(event) {\n\tif(this.tooltip.hasClass(CLASS_DISABLED) || !this.options.hide.inactive) { return; }\n\n\t// Clear timer\n\tclearTimeout(this.timers.inactive);\n\n\tthis.timers.inactive = delay.call(this,\n\t\tfunction(){ this.hide(event); },\n\t\tthis.options.hide.inactive\n\t);\n}\n\nfunction repositionMethod(event) {\n\tif(this.rendered && this.tooltip[0].offsetWidth > 0) { this.reposition(event); }\n}\n\n// Store mouse coordinates\nPROTOTYPE._storeMouse = function(event) {\n\t(this.mouse = $.event.fix(event)).type = 'mousemove';\n\treturn this;\n};\n\n// Bind events\nPROTOTYPE._bind = function(targets, events, method, suffix, context) {\n\tif(!targets || !method || !events.length) { return; }\n\tvar ns = '.' + this._id + (suffix ? '-'+suffix : '');\n\t$(targets).bind(\n\t\t(events.split ? events : events.join(ns + ' ')) + ns,\n\t\t$.proxy(method, context || this)\n\t);\n\treturn this;\n};\nPROTOTYPE._unbind = function(targets, suffix) {\n\ttargets && $(targets).unbind('.' + this._id + (suffix ? '-'+suffix : ''));\n\treturn this;\n};\n\n// Global delegation helper\nfunction delegate(selector, events, method) {\n\t$(document.body).delegate(selector,\n\t\t(events.split ? events : events.join('.'+NAMESPACE + ' ')) + '.'+NAMESPACE,\n\t\tfunction() {\n\t\t\tvar api = QTIP.api[ $.attr(this, ATTR_ID) ];\n\t\t\tapi && !api.disabled && method.apply(api, arguments);\n\t\t}\n\t);\n}\n// Event trigger\nPROTOTYPE._trigger = function(type, args, event) {\n\tvar callback = new $.Event('tooltip'+type);\n\tcallback.originalEvent = event && $.extend({}, event) || this.cache.event || NULL;\n\n\tthis.triggering = type;\n\tthis.tooltip.trigger(callback, [this].concat(args || []));\n\tthis.triggering = FALSE;\n\n\treturn !callback.isDefaultPrevented();\n};\n\nPROTOTYPE._bindEvents = function(showEvents, hideEvents, showTargets, hideTargets, showCallback, hideCallback) {\n\t// Get tasrgets that lye within both\n\tvar similarTargets = showTargets.filter( hideTargets ).add( hideTargets.filter(showTargets) ),\n\t\ttoggleEvents = [];\n\n\t// If hide and show targets are the same...\n\tif(similarTargets.length) {\n\n\t\t// Filter identical show/hide events\n\t\t$.each(hideEvents, function(i, type) {\n\t\t\tvar showIndex = $.inArray(type, showEvents);\n\n\t\t\t// Both events are identical, remove from both hide and show events\n\t\t\t// and append to toggleEvents\n\t\t\tshowIndex > -1 && toggleEvents.push( showEvents.splice( showIndex, 1 )[0] );\n\t\t});\n\n\t\t// Toggle events are special case of identical show/hide events, which happen in sequence\n\t\tif(toggleEvents.length) {\n\t\t\t// Bind toggle events to the similar targets\n\t\t\tthis._bind(similarTargets, toggleEvents, function(event) {\n\t\t\t\tvar state = this.rendered ? this.tooltip[0].offsetWidth > 0 : false;\n\t\t\t\t(state ? hideCallback : showCallback).call(this, event);\n\t\t\t});\n\n\t\t\t// Remove the similar targets from the regular show/hide bindings\n\t\t\tshowTargets = showTargets.not(similarTargets);\n\t\t\thideTargets = hideTargets.not(similarTargets);\n\t\t}\n\t}\n\n\t// Apply show/hide/toggle events\n\tthis._bind(showTargets, showEvents, showCallback);\n\tthis._bind(hideTargets, hideEvents, hideCallback);\n};\n\nPROTOTYPE._assignInitialEvents = function(event) {\n\tvar options = this.options,\n\t\tshowTarget = options.show.target,\n\t\thideTarget = options.hide.target,\n\t\tshowEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [],\n\t\thideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : [];\n\n\t// Catch remove/removeqtip events on target element to destroy redundant tooltips\n\tthis._bind(this.elements.target, ['remove', 'removeqtip'], function() {\n\t\tthis.destroy(true);\n\t}, 'destroy');\n\n\t/*\n\t * Make sure hoverIntent functions properly by using mouseleave as a hide event if\n\t * mouseenter/mouseout is used for show.event, even if it isn't in the users options.\n\t */\n\tif(/mouse(over|enter)/i.test(options.show.event) && !/mouse(out|leave)/i.test(options.hide.event)) {\n\t\thideEvents.push('mouseleave');\n\t}\n\n\t/*\n\t * Also make sure initial mouse targetting works correctly by caching mousemove coords\n\t * on show targets before the tooltip has rendered. Also set onTarget when triggered to\n\t * keep mouse tracking working.\n\t */\n\tthis._bind(showTarget, 'mousemove', function(moveEvent) {\n\t\tthis._storeMouse(moveEvent);\n\t\tthis.cache.onTarget = TRUE;\n\t});\n\n\t// Define hoverIntent function\n\tfunction hoverIntent(hoverEvent) {\n\t\t// Only continue if tooltip isn't disabled\n\t\tif(this.disabled || this.destroyed) { return FALSE; }\n\n\t\t// Cache the event data\n\t\tthis.cache.event = hoverEvent && $.event.fix(hoverEvent);\n\t\tthis.cache.target = hoverEvent && $(hoverEvent.target);\n\n\t\t// Start the event sequence\n\t\tclearTimeout(this.timers.show);\n\t\tthis.timers.show = delay.call(this,\n\t\t\tfunction() { this.render(typeof hoverEvent === 'object' || options.show.ready); },\n\t\t\toptions.prerender ? 0 : options.show.delay\n\t\t);\n\t}\n\n\t// Filter and bind events\n\tthis._bindEvents(showEvents, hideEvents, showTarget, hideTarget, hoverIntent, function() {\n\t\tif(!this.timers) { return FALSE; }\n\t\tclearTimeout(this.timers.show);\n\t});\n\n\t// Prerendering is enabled, create tooltip now\n\tif(options.show.ready || options.prerender) { hoverIntent.call(this, event); }\n};\n\n// Event assignment method\nPROTOTYPE._assignEvents = function() {\n\tvar self = this,\n\t\toptions = this.options,\n\t\tposOptions = options.position,\n\n\t\ttooltip = this.tooltip,\n\t\tshowTarget = options.show.target,\n\t\thideTarget = options.hide.target,\n\t\tcontainerTarget = posOptions.container,\n\t\tviewportTarget = posOptions.viewport,\n\t\tdocumentTarget = $(document),\n\t\twindowTarget = $(window),\n\n\t\tshowEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [],\n\t\thideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : [];\n\n\n\t// Assign passed event callbacks\n\t$.each(options.events, function(name, callback) {\n\t\tself._bind(tooltip, name === 'toggle' ? ['tooltipshow','tooltiphide'] : ['tooltip'+name], callback, null, tooltip);\n\t});\n\n\t// Hide tooltips when leaving current window/frame (but not select/option elements)\n\tif(/mouse(out|leave)/i.test(options.hide.event) && options.hide.leave === 'window') {\n\t\tthis._bind(documentTarget, ['mouseout', 'blur'], function(event) {\n\t\t\tif(!/select|option/.test(event.target.nodeName) && !event.relatedTarget) {\n\t\t\t\tthis.hide(event);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Enable hide.fixed by adding appropriate class\n\tif(options.hide.fixed) {\n\t\thideTarget = hideTarget.add( tooltip.addClass(CLASS_FIXED) );\n\t}\n\n\t/*\n\t * Make sure hoverIntent functions properly by using mouseleave to clear show timer if\n\t * mouseenter/mouseout is used for show.event, even if it isn't in the users options.\n\t */\n\telse if(/mouse(over|enter)/i.test(options.show.event)) {\n\t\tthis._bind(hideTarget, 'mouseleave', function() {\n\t\t\tclearTimeout(this.timers.show);\n\t\t});\n\t}\n\n\t// Hide tooltip on document mousedown if unfocus events are enabled\n\tif(('' + options.hide.event).indexOf('unfocus') > -1) {\n\t\tthis._bind(containerTarget.closest('html'), ['mousedown', 'touchstart'], function(event) {\n\t\t\tvar elem = $(event.target),\n\t\t\t\tenabled = this.rendered && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0,\n\t\t\t\tisAncestor = elem.parents(SELECTOR).filter(this.tooltip[0]).length > 0;\n\n\t\t\tif(elem[0] !== this.target[0] && elem[0] !== this.tooltip[0] && !isAncestor &&\n\t\t\t\t!this.target.has(elem[0]).length && enabled\n\t\t\t) {\n\t\t\t\tthis.hide(event);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Check if the tooltip hides when inactive\n\tif('number' === typeof options.hide.inactive) {\n\t\t// Bind inactive method to show target(s) as a custom event\n\t\tthis._bind(showTarget, 'qtip-'+this.id+'-inactive', inactiveMethod, 'inactive');\n\n\t\t// Define events which reset the 'inactive' event handler\n\t\tthis._bind(hideTarget.add(tooltip), QTIP.inactiveEvents, inactiveMethod);\n\t}\n\n\t// Filter and bind events\n\tthis._bindEvents(showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod);\n\n\t// Mouse movement bindings\n\tthis._bind(showTarget.add(tooltip), 'mousemove', function(event) {\n\t\t// Check if the tooltip hides when mouse is moved a certain distance\n\t\tif('number' === typeof options.hide.distance) {\n\t\t\tvar origin = this.cache.origin || {},\n\t\t\t\tlimit = this.options.hide.distance,\n\t\t\t\tabs = Math.abs;\n\n\t\t\t// Check if the movement has gone beyond the limit, and hide it if so\n\t\t\tif(abs(event.pageX - origin.pageX) >= limit || abs(event.pageY - origin.pageY) >= limit) {\n\t\t\t\tthis.hide(event);\n\t\t\t}\n\t\t}\n\n\t\t// Cache mousemove coords on show targets\n\t\tthis._storeMouse(event);\n\t});\n\n\t// Mouse positioning events\n\tif(posOptions.target === 'mouse') {\n\t\t// If mouse adjustment is on...\n\t\tif(posOptions.adjust.mouse) {\n\t\t\t// Apply a mouseleave event so we don't get problems with overlapping\n\t\t\tif(options.hide.event) {\n\t\t\t\t// Track if we're on the target or not\n\t\t\t\tthis._bind(showTarget, ['mouseenter', 'mouseleave'], function(event) {\n\t\t\t\t\tif(!this.cache) {return FALSE; }\n\t\t\t\t\tthis.cache.onTarget = event.type === 'mouseenter';\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Update tooltip position on mousemove\n\t\t\tthis._bind(documentTarget, 'mousemove', function(event) {\n\t\t\t\t// Update the tooltip position only if the tooltip is visible and adjustment is enabled\n\t\t\t\tif(this.rendered && this.cache.onTarget && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0) {\n\t\t\t\t\tthis.reposition(event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t// Adjust positions of the tooltip on window resize if enabled\n\tif(posOptions.adjust.resize || viewportTarget.length) {\n\t\tthis._bind( $.event.special.resize ? viewportTarget : windowTarget, 'resize', repositionMethod );\n\t}\n\n\t// Adjust tooltip position on scroll of the window or viewport element if present\n\tif(posOptions.adjust.scroll) {\n\t\tthis._bind( windowTarget.add(posOptions.container), 'scroll', repositionMethod );\n\t}\n};\n\n// Un-assignment method\nPROTOTYPE._unassignEvents = function() {\n\tvar options = this.options,\n\t\tshowTargets = options.show.target,\n\t\thideTargets = options.hide.target,\n\t\ttargets = $.grep([\n\t\t\tthis.elements.target[0],\n\t\t\tthis.rendered && this.tooltip[0],\n\t\t\toptions.position.container[0],\n\t\t\toptions.position.viewport[0],\n\t\t\toptions.position.container.closest('html')[0], // unfocus\n\t\t\twindow,\n\t\t\tdocument\n\t\t], function(i) {\n\t\t\treturn typeof i === 'object';\n\t\t});\n\n\t// Add show and hide targets if they're valid\n\tif(showTargets && showTargets.toArray) {\n\t\ttargets = targets.concat(showTargets.toArray());\n\t}\n\tif(hideTargets && hideTargets.toArray) {\n\t\ttargets = targets.concat(hideTargets.toArray());\n\t}\n\n\t// Unbind the events\n\tthis._unbind(targets)\n\t\t._unbind(targets, 'destroy')\n\t\t._unbind(targets, 'inactive');\n};\n\n// Apply common event handlers using delegate (avoids excessive .bind calls!)\n$(function() {\n\tdelegate(SELECTOR, ['mouseenter', 'mouseleave'], function(event) {\n\t\tvar state = event.type === 'mouseenter',\n\t\t\ttooltip = $(event.currentTarget),\n\t\t\ttarget = $(event.relatedTarget || event.target),\n\t\t\toptions = this.options;\n\n\t\t// On mouseenter...\n\t\tif(state) {\n\t\t\t// Focus the tooltip on mouseenter (z-index stacking)\n\t\t\tthis.focus(event);\n\n\t\t\t// Clear hide timer on tooltip hover to prevent it from closing\n\t\t\ttooltip.hasClass(CLASS_FIXED) && !tooltip.hasClass(CLASS_DISABLED) && clearTimeout(this.timers.hide);\n\t\t}\n\n\t\t// On mouseleave...\n\t\telse {\n\t\t\t// When mouse tracking is enabled, hide when we leave the tooltip and not onto the show target (if a hide event is set)\n\t\t\tif(options.position.target === 'mouse' && options.position.adjust.mouse &&\n\t\t\t\toptions.hide.event && options.show.target && !target.closest(options.show.target[0]).length) {\n\t\t\t\tthis.hide(event);\n\t\t\t}\n\t\t}\n\n\t\t// Add hover class\n\t\ttooltip.toggleClass(CLASS_HOVER, state);\n\t});\n\n\t// Define events which reset the 'inactive' event handler\n\tdelegate('['+ATTR_ID+']', INACTIVE_EVENTS, inactiveMethod);\n});\n;// Initialization method\nfunction init(elem, id, opts) {\n\tvar obj, posOptions, attr, config, title,\n\n\t// Setup element references\n\tdocBody = $(document.body),\n\n\t// Use document body instead of document element if needed\n\tnewTarget = elem[0] === document ? docBody : elem,\n\n\t// Grab metadata from element if plugin is present\n\tmetadata = elem.metadata ? elem.metadata(opts.metadata) : NULL,\n\n\t// If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise\n\tmetadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL,\n\n\t// Grab data from metadata.name (or data-qtipopts as fallback) using .data() method,\n\thtml5 = elem.data(opts.metadata.name || 'qtipopts');\n\n\t// If we don't get an object returned attempt to parse it manualyl without parseJSON\n\t/* eslint-disable no-empty */\n\ttry { html5 = typeof html5 === 'string' ? $.parseJSON(html5) : html5; }\n\tcatch(e) {}\n\t/* eslint-enable no-empty */\n\n\t// Merge in and sanitize metadata\n\tconfig = $.extend(TRUE, {}, QTIP.defaults, opts,\n\t\ttypeof html5 === 'object' ? sanitizeOptions(html5) : NULL,\n\t\tsanitizeOptions(metadata5 || metadata));\n\n\t// Re-grab our positioning options now we've merged our metadata and set id to passed value\n\tposOptions = config.position;\n\tconfig.id = id;\n\n\t// Setup missing content if none is detected\n\tif('boolean' === typeof config.content.text) {\n\t\tattr = elem.attr(config.content.attr);\n\n\t\t// Grab from supplied attribute if available\n\t\tif(config.content.attr !== FALSE && attr) { config.content.text = attr; }\n\n\t\t// No valid content was found, abort render\n\t\telse { return FALSE; }\n\t}\n\n\t// Setup target options\n\tif(!posOptions.container.length) { posOptions.container = docBody; }\n\tif(posOptions.target === FALSE) { posOptions.target = newTarget; }\n\tif(config.show.target === FALSE) { config.show.target = newTarget; }\n\tif(config.show.solo === TRUE) { config.show.solo = posOptions.container.closest('body'); }\n\tif(config.hide.target === FALSE) { config.hide.target = newTarget; }\n\tif(config.position.viewport === TRUE) { config.position.viewport = posOptions.container; }\n\n\t// Ensure we only use a single container\n\tposOptions.container = posOptions.container.eq(0);\n\n\t// Convert position corner values into x and y strings\n\tposOptions.at = new CORNER(posOptions.at, TRUE);\n\tposOptions.my = new CORNER(posOptions.my);\n\n\t// Destroy previous tooltip if overwrite is enabled, or skip element if not\n\tif(elem.data(NAMESPACE)) {\n\t\tif(config.overwrite) {\n\t\t\telem.qtip('destroy', true);\n\t\t}\n\t\telse if(config.overwrite === FALSE) {\n\t\t\treturn FALSE;\n\t\t}\n\t}\n\n\t// Add has-qtip attribute\n\telem.attr(ATTR_HAS, id);\n\n\t// Remove title attribute and store it if present\n\tif(config.suppress && (title = elem.attr('title'))) {\n\t\t// Final attr call fixes event delegatiom and IE default tooltip showing problem\n\t\telem.removeAttr('title').attr(oldtitle, title).attr('title', '');\n\t}\n\n\t// Initialize the tooltip and add API reference\n\tobj = new QTip(elem, config, id, !!attr);\n\telem.data(NAMESPACE, obj);\n\n\treturn obj;\n}\n\n// jQuery $.fn extension method\nQTIP = $.fn.qtip = function(options, notation, newValue)\n{\n\tvar command = ('' + options).toLowerCase(), // Parse command\n\t\treturned = NULL,\n\t\targs = $.makeArray(arguments).slice(1),\n\t\tevent = args[args.length - 1],\n\t\topts = this[0] ? $.data(this[0], NAMESPACE) : NULL;\n\n\t// Check for API request\n\tif(!arguments.length && opts || command === 'api') {\n\t\treturn opts;\n\t}\n\n\t// Execute API command if present\n\telse if('string' === typeof options) {\n\t\tthis.each(function() {\n\t\t\tvar api = $.data(this, NAMESPACE);\n\t\t\tif(!api) { return TRUE; }\n\n\t\t\t// Cache the event if possible\n\t\t\tif(event && event.timeStamp) { api.cache.event = event; }\n\n\t\t\t// Check for specific API commands\n\t\t\tif(notation && (command === 'option' || command === 'options')) {\n\t\t\t\tif(newValue !== undefined || $.isPlainObject(notation)) {\n\t\t\t\t\tapi.set(notation, newValue);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturned = api.get(notation);\n\t\t\t\t\treturn FALSE;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Execute API command\n\t\t\telse if(api[command]) {\n\t\t\t\tapi[command].apply(api, args);\n\t\t\t}\n\t\t});\n\n\t\treturn returned !== NULL ? returned : this;\n\t}\n\n\t// No API commands. validate provided options and setup qTips\n\telse if('object' === typeof options || !arguments.length) {\n\t\t// Sanitize options first\n\t\topts = sanitizeOptions($.extend(TRUE, {}, options));\n\n\t\treturn this.each(function(i) {\n\t\t\tvar api, id;\n\n\t\t\t// Find next available ID, or use custom ID if provided\n\t\t\tid = $.isArray(opts.id) ? opts.id[i] : opts.id;\n\t\t\tid = !id || id === FALSE || id.length < 1 || QTIP.api[id] ? QTIP.nextid++ : id;\n\n\t\t\t// Initialize the qTip and re-grab newly sanitized options\n\t\t\tapi = init($(this), id, opts);\n\t\t\tif(api === FALSE) { return TRUE; }\n\t\t\telse { QTIP.api[id] = api; }\n\n\t\t\t// Initialize plugins\n\t\t\t$.each(PLUGINS, function() {\n\t\t\t\tif(this.initialize === 'initialize') { this(api); }\n\t\t\t});\n\n\t\t\t// Assign initial pre-render events\n\t\t\tapi._assignInitialEvents(event);\n\t\t});\n\t}\n};\n\n// Expose class\n$.qtip = QTip;\n\n// Populated in render method\nQTIP.api = {};\n;$.each({\n\t/* Allow other plugins to successfully retrieve the title of an element with a qTip applied */\n\tattr: function(attr, val) {\n\t\tif(this.length) {\n\t\t\tvar self = this[0],\n\t\t\t\ttitle = 'title',\n\t\t\t\tapi = $.data(self, 'qtip');\n\n\t\t\tif(attr === title && api && api.options && 'object' === typeof api && 'object' === typeof api.options && api.options.suppress) {\n\t\t\t\tif(arguments.length < 2) {\n\t\t\t\t\treturn $.attr(self, oldtitle);\n\t\t\t\t}\n\n\t\t\t\t// If qTip is rendered and title was originally used as content, update it\n\t\t\t\tif(api && api.options.content.attr === title && api.cache.attr) {\n\t\t\t\t\tapi.set('content.text', val);\n\t\t\t\t}\n\n\t\t\t\t// Use the regular attr method to set, then cache the result\n\t\t\t\treturn this.attr(oldtitle, val);\n\t\t\t}\n\t\t}\n\n\t\treturn $.fn['attr'+replaceSuffix].apply(this, arguments);\n\t},\n\n\t/* Allow clone to correctly retrieve cached title attributes */\n\tclone: function(keepData) {\n\t\t// Clone our element using the real clone method\n\t\tvar elems = $.fn['clone'+replaceSuffix].apply(this, arguments);\n\n\t\t// Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false\n\t\tif(!keepData) {\n\t\t\telems.filter('['+oldtitle+']').attr('title', function() {\n\t\t\t\treturn $.attr(this, oldtitle);\n\t\t\t})\n\t\t\t.removeAttr(oldtitle);\n\t\t}\n\n\t\treturn elems;\n\t}\n}, function(name, func) {\n\tif(!func || $.fn[name+replaceSuffix]) { return TRUE; }\n\n\tvar old = $.fn[name+replaceSuffix] = $.fn[name];\n\t$.fn[name] = function() {\n\t\treturn func.apply(this, arguments) || old.apply(this, arguments);\n\t};\n});\n\n/* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar).\n * This snippet is taken directly from jQuery UI source code found here:\n *     http://code.jquery.com/ui/jquery-ui-git.js\n */\nif(!$.ui) {\n\t$['cleanData'+replaceSuffix] = $.cleanData;\n\t$.cleanData = function( elems ) {\n\t\tfor(var i = 0, elem; (elem = $( elems[i] )).length; i++) {\n\t\t\tif(elem.attr(ATTR_HAS)) {\n\t\t\t\t/* eslint-disable no-empty */\n\t\t\t\ttry { elem.triggerHandler('removeqtip'); }\n\t\t\t\tcatch( e ) {}\n\t\t\t\t/* eslint-enable no-empty */\n\t\t\t}\n\t\t}\n\t\t$['cleanData'+replaceSuffix].apply(this, arguments);\n\t};\n}\n;// qTip version\nQTIP.version = '3.0.3';\n\n// Base ID for all qTips\nQTIP.nextid = 0;\n\n// Inactive events array\nQTIP.inactiveEvents = INACTIVE_EVENTS;\n\n// Base z-index for all qTips\nQTIP.zindex = 15000;\n\n// Define configuration defaults\nQTIP.defaults = {\n\tprerender: FALSE,\n\tid: FALSE,\n\toverwrite: TRUE,\n\tsuppress: TRUE,\n\tcontent: {\n\t\ttext: TRUE,\n\t\tattr: 'title',\n\t\ttitle: FALSE,\n\t\tbutton: FALSE\n\t},\n\tposition: {\n\t\tmy: 'top left',\n\t\tat: 'bottom right',\n\t\ttarget: FALSE,\n\t\tcontainer: FALSE,\n\t\tviewport: FALSE,\n\t\tadjust: {\n\t\t\tx: 0, y: 0,\n\t\t\tmouse: TRUE,\n\t\t\tscroll: TRUE,\n\t\t\tresize: TRUE,\n\t\t\tmethod: 'flipinvert flipinvert'\n\t\t},\n\t\teffect: function(api, pos) {\n\t\t\t$(this).animate(pos, {\n\t\t\t\tduration: 200,\n\t\t\t\tqueue: FALSE\n\t\t\t});\n\t\t}\n\t},\n\tshow: {\n\t\ttarget: FALSE,\n\t\tevent: 'mouseenter',\n\t\teffect: TRUE,\n\t\tdelay: 90,\n\t\tsolo: FALSE,\n\t\tready: FALSE,\n\t\tautofocus: FALSE\n\t},\n\thide: {\n\t\ttarget: FALSE,\n\t\tevent: 'mouseleave',\n\t\teffect: TRUE,\n\t\tdelay: 0,\n\t\tfixed: FALSE,\n\t\tinactive: FALSE,\n\t\tleave: 'window',\n\t\tdistance: FALSE\n\t},\n\tstyle: {\n\t\tclasses: '',\n\t\twidget: FALSE,\n\t\twidth: FALSE,\n\t\theight: FALSE,\n\t\tdef: TRUE\n\t},\n\tevents: {\n\t\trender: NULL,\n\t\tmove: NULL,\n\t\tshow: NULL,\n\t\thide: NULL,\n\t\ttoggle: NULL,\n\t\tvisible: NULL,\n\t\thidden: NULL,\n\t\tfocus: NULL,\n\t\tblur: NULL\n\t}\n};\n;var TIP,\ncreateVML,\nSCALE,\nPIXEL_RATIO,\nBACKING_STORE_RATIO,\n\n// Common CSS strings\nMARGIN = 'margin',\nBORDER = 'border',\nCOLOR = 'color',\nBG_COLOR = 'background-color',\nTRANSPARENT = 'transparent',\nIMPORTANT = ' !important',\n\n// Check if the browser supports <canvas/> elements\nHASCANVAS = !!document.createElement('canvas').getContext,\n\n// Invalid colour values used in parseColours()\nINVALID = /rgba?\\(0, 0, 0(, 0)?\\)|transparent|#123456/i;\n\n// Camel-case method, taken from jQuery source\n// http://code.jquery.com/jquery-1.8.0.js\nfunction camel(s) { return s.charAt(0).toUpperCase() + s.slice(1); }\n\n/*\n * Modified from Modernizr's testPropsAll()\n * http://modernizr.com/downloads/modernizr-latest.js\n */\nvar cssProps = {}, cssPrefixes = ['Webkit', 'O', 'Moz', 'ms'];\nfunction vendorCss(elem, prop) {\n\tvar ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),\n\t\tprops = (prop + ' ' + cssPrefixes.join(ucProp + ' ') + ucProp).split(' '),\n\t\tcur, val, i = 0;\n\n\t// If the property has already been mapped...\n\tif(cssProps[prop]) { return elem.css(cssProps[prop]); }\n\n\twhile(cur = props[i++]) {\n\t\tif((val = elem.css(cur)) !== undefined) {\n\t\t\tcssProps[prop] = cur;\n\t\t\treturn val;\n\t\t}\n\t}\n}\n\n// Parse a given elements CSS property into an int\nfunction intCss(elem, prop) {\n\treturn Math.ceil(parseFloat(vendorCss(elem, prop)));\n}\n\n\n// VML creation (for IE only)\nif(!HASCANVAS) {\n\tcreateVML = function(tag, props, style) {\n\t\treturn '<qtipvml:'+tag+' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"qtip-vml\" '+(props||'')+\n\t\t\t' style=\"behavior: url(#default#VML); '+(style||'')+ '\" />';\n\t};\n}\n\n// Canvas only definitions\nelse {\n\tPIXEL_RATIO = window.devicePixelRatio || 1;\n\tBACKING_STORE_RATIO = (function() {\n\t\tvar context = document.createElement('canvas').getContext('2d');\n\t\treturn context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio ||\n\t\t\t\tcontext.msBackingStorePixelRatio || context.oBackingStorePixelRatio || 1;\n\t})();\n\tSCALE = PIXEL_RATIO / BACKING_STORE_RATIO;\n}\n\n\nfunction Tip(qtip, options) {\n\tthis._ns = 'tip';\n\tthis.options = options;\n\tthis.offset = options.offset;\n\tthis.size = [ options.width, options.height ];\n\n\t// Initialize\n\tthis.qtip = qtip;\n\tthis.init(qtip);\n}\n\n$.extend(Tip.prototype, {\n\tinit: function(qtip) {\n\t\tvar context, tip;\n\n\t\t// Create tip element and prepend to the tooltip\n\t\ttip = this.element = qtip.elements.tip = $('<div />', { 'class': NAMESPACE+'-tip' }).prependTo(qtip.tooltip);\n\n\t\t// Create tip drawing element(s)\n\t\tif(HASCANVAS) {\n\t\t\t// save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()!\n\t\t\tcontext = $('<canvas />').appendTo(this.element)[0].getContext('2d');\n\n\t\t\t// Setup constant parameters\n\t\t\tcontext.lineJoin = 'miter';\n\t\t\tcontext.miterLimit = 100000;\n\t\t\tcontext.save();\n\t\t}\n\t\telse {\n\t\t\tcontext = createVML('shape', 'coordorigin=\"0,0\"', 'position:absolute;');\n\t\t\tthis.element.html(context + context);\n\n\t\t\t// Prevent mousing down on the tip since it causes problems with .live() handling in IE due to VML\n\t\t\tqtip._bind( $('*', tip).add(tip), ['click', 'mousedown'], function(event) { event.stopPropagation(); }, this._ns);\n\t\t}\n\n\t\t// Bind update events\n\t\tqtip._bind(qtip.tooltip, 'tooltipmove', this.reposition, this._ns, this);\n\n\t\t// Create it\n\t\tthis.create();\n\t},\n\n\t_swapDimensions: function() {\n\t\tthis.size[0] = this.options.height;\n\t\tthis.size[1] = this.options.width;\n\t},\n\t_resetDimensions: function() {\n\t\tthis.size[0] = this.options.width;\n\t\tthis.size[1] = this.options.height;\n\t},\n\n\t_useTitle: function(corner) {\n\t\tvar titlebar = this.qtip.elements.titlebar;\n\t\treturn titlebar && (\n\t\t\tcorner.y === TOP || corner.y === CENTER && this.element.position().top + this.size[1] / 2 + this.options.offset < titlebar.outerHeight(TRUE)\n\t\t);\n\t},\n\n\t_parseCorner: function(corner) {\n\t\tvar my = this.qtip.options.position.my;\n\n\t\t// Detect corner and mimic properties\n\t\tif(corner === FALSE || my === FALSE) {\n\t\t\tcorner = FALSE;\n\t\t}\n\t\telse if(corner === TRUE) {\n\t\t\tcorner = new CORNER( my.string() );\n\t\t}\n\t\telse if(!corner.string) {\n\t\t\tcorner = new CORNER(corner);\n\t\t\tcorner.fixed = TRUE;\n\t\t}\n\n\t\treturn corner;\n\t},\n\n\t_parseWidth: function(corner, side, use) {\n\t\tvar elements = this.qtip.elements,\n\t\t\tprop = BORDER + camel(side) + 'Width';\n\n\t\treturn (use ? intCss(use, prop) : \n\t\t\tintCss(elements.content, prop) ||\n\t\t\tintCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) ||\n\t\t\tintCss(elements.tooltip, prop)\n\t\t) || 0;\n\t},\n\n\t_parseRadius: function(corner) {\n\t\tvar elements = this.qtip.elements,\n\t\t\tprop = BORDER + camel(corner.y) + camel(corner.x) + 'Radius';\n\n\t\treturn BROWSER.ie < 9 ? 0 :\n\t\t\tintCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) ||\n\t\t\tintCss(elements.tooltip, prop) || 0;\n\t},\n\n\t_invalidColour: function(elem, prop, compare) {\n\t\tvar val = elem.css(prop);\n\t\treturn !val || compare && val === elem.css(compare) || INVALID.test(val) ? FALSE : val;\n\t},\n\n\t_parseColours: function(corner) {\n\t\tvar elements = this.qtip.elements,\n\t\t\ttip = this.element.css('cssText', ''),\n\t\t\tborderSide = BORDER + camel(corner[ corner.precedance ]) + camel(COLOR),\n\t\t\tcolorElem = this._useTitle(corner) && elements.titlebar || elements.content,\n\t\t\tcss = this._invalidColour, color = [];\n\n\t\t// Attempt to detect the background colour from various elements, left-to-right precedance\n\t\tcolor[0] = css(tip, BG_COLOR) || css(colorElem, BG_COLOR) || css(elements.content, BG_COLOR) ||\n\t\t\tcss(elements.tooltip, BG_COLOR) || tip.css(BG_COLOR);\n\n\t\t// Attempt to detect the correct border side colour from various elements, left-to-right precedance\n\t\tcolor[1] = css(tip, borderSide, COLOR) || css(colorElem, borderSide, COLOR) ||\n\t\t\tcss(elements.content, borderSide, COLOR) || css(elements.tooltip, borderSide, COLOR) || elements.tooltip.css(borderSide);\n\n\t\t// Reset background and border colours\n\t\t$('*', tip).add(tip).css('cssText', BG_COLOR+':'+TRANSPARENT+IMPORTANT+';'+BORDER+':0'+IMPORTANT+';');\n\n\t\treturn color;\n\t},\n\n\t_calculateSize: function(corner) {\n\t\tvar y = corner.precedance === Y,\n\t\t\twidth = this.options.width,\n\t\t\theight = this.options.height,\n\t\t\tisCenter = corner.abbrev() === 'c',\n\t\t\tbase = (y ? width: height) * (isCenter ? 0.5 : 1),\n\t\t\tpow = Math.pow,\n\t\t\tround = Math.round,\n\t\t\tbigHyp, ratio, result,\n\n\t\tsmallHyp = Math.sqrt( pow(base, 2) + pow(height, 2) ),\n\t\thyp = [\n\t\t\tthis.border / base * smallHyp,\n\t\t\tthis.border / height * smallHyp\n\t\t];\n\n\t\thyp[2] = Math.sqrt( pow(hyp[0], 2) - pow(this.border, 2) );\n\t\thyp[3] = Math.sqrt( pow(hyp[1], 2) - pow(this.border, 2) );\n\n\t\tbigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]);\n\t\tratio = bigHyp / smallHyp;\n\n\t\tresult = [ round(ratio * width), round(ratio * height) ];\n\t\treturn y ? result : result.reverse();\n\t},\n\n\t// Tip coordinates calculator\n\t_calculateTip: function(corner, size, scale) {\n\t\tscale = scale || 1;\n\t\tsize = size || this.size;\n\n\t\tvar width = size[0] * scale,\n\t\t\theight = size[1] * scale,\n\t\t\twidth2 = Math.ceil(width / 2), height2 = Math.ceil(height / 2),\n\n\t\t// Define tip coordinates in terms of height and width values\n\t\ttips = {\n\t\t\tbr:\t[0,0,\t\twidth,height,\twidth,0],\n\t\t\tbl:\t[0,0,\t\twidth,0,\t\t0,height],\n\t\t\ttr:\t[0,height,\twidth,0,\t\twidth,height],\n\t\t\ttl:\t[0,0,\t\t0,height,\t\twidth,height],\n\t\t\ttc:\t[0,height,\twidth2,0,\t\twidth,height],\n\t\t\tbc:\t[0,0,\t\twidth,0,\t\twidth2,height],\n\t\t\trc:\t[0,0,\t\twidth,height2,\t0,height],\n\t\t\tlc:\t[width,0,\twidth,height,\t0,height2]\n\t\t};\n\n\t\t// Set common side shapes\n\t\ttips.lt = tips.br; tips.rt = tips.bl;\n\t\ttips.lb = tips.tr; tips.rb = tips.tl;\n\n\t\treturn tips[ corner.abbrev() ];\n\t},\n\n\t// Tip coordinates drawer (canvas)\n\t_drawCoords: function(context, coords) {\n\t\tcontext.beginPath();\n\t\tcontext.moveTo(coords[0], coords[1]);\n\t\tcontext.lineTo(coords[2], coords[3]);\n\t\tcontext.lineTo(coords[4], coords[5]);\n\t\tcontext.closePath();\n\t},\n\n\tcreate: function() {\n\t\t// Determine tip corner\n\t\tvar c = this.corner = (HASCANVAS || BROWSER.ie) && this._parseCorner(this.options.corner);\n\n\t\t// If we have a tip corner...\n\t\tthis.enabled = !!this.corner && this.corner.abbrev() !== 'c';\n\t\tif(this.enabled) {\n\t\t\t// Cache it\n\t\t\tthis.qtip.cache.corner = c.clone();\n\n\t\t\t// Create it\n\t\t\tthis.update();\n\t\t}\n\n\t\t// Toggle tip element\n\t\tthis.element.toggle(this.enabled);\n\n\t\treturn this.corner;\n\t},\n\n\tupdate: function(corner, position) {\n\t\tif(!this.enabled) { return this; }\n\n\t\tvar elements = this.qtip.elements,\n\t\t\ttip = this.element,\n\t\t\tinner = tip.children(),\n\t\t\toptions = this.options,\n\t\t\tcurSize = this.size,\n\t\t\tmimic = options.mimic,\n\t\t\tround = Math.round,\n\t\t\tcolor, precedance, context,\n\t\t\tcoords, bigCoords, translate, newSize, border;\n\n\t\t// Re-determine tip if not already set\n\t\tif(!corner) { corner = this.qtip.cache.corner || this.corner; }\n\n\t\t// Use corner property if we detect an invalid mimic value\n\t\tif(mimic === FALSE) { mimic = corner; }\n\n\t\t// Otherwise inherit mimic properties from the corner object as necessary\n\t\telse {\n\t\t\tmimic = new CORNER(mimic);\n\t\t\tmimic.precedance = corner.precedance;\n\n\t\t\tif(mimic.x === 'inherit') { mimic.x = corner.x; }\n\t\t\telse if(mimic.y === 'inherit') { mimic.y = corner.y; }\n\t\t\telse if(mimic.x === mimic.y) {\n\t\t\t\tmimic[ corner.precedance ] = corner[ corner.precedance ];\n\t\t\t}\n\t\t}\n\t\tprecedance = mimic.precedance;\n\n\t\t// Ensure the tip width.height are relative to the tip position\n\t\tif(corner.precedance === X) { this._swapDimensions(); }\n\t\telse { this._resetDimensions(); }\n\n\t\t// Update our colours\n\t\tcolor = this.color = this._parseColours(corner);\n\n\t\t// Detect border width, taking into account colours\n\t\tif(color[1] !== TRANSPARENT) {\n\t\t\t// Grab border width\n\t\t\tborder = this.border = this._parseWidth(corner, corner[corner.precedance]);\n\n\t\t\t// If border width isn't zero, use border color as fill if it's not invalid (1.0 style tips)\n\t\t\tif(options.border && border < 1 && !INVALID.test(color[1])) { color[0] = color[1]; }\n\n\t\t\t// Set border width (use detected border width if options.border is true)\n\t\t\tthis.border = border = options.border !== TRUE ? options.border : border;\n\t\t}\n\n\t\t// Border colour was invalid, set border to zero\n\t\telse { this.border = border = 0; }\n\n\t\t// Determine tip size\n\t\tnewSize = this.size = this._calculateSize(corner);\n\t\ttip.css({\n\t\t\twidth: newSize[0],\n\t\t\theight: newSize[1],\n\t\t\tlineHeight: newSize[1]+'px'\n\t\t});\n\n\t\t// Calculate tip translation\n\t\tif(corner.precedance === Y) {\n\t\t\ttranslate = [\n\t\t\t\tround(mimic.x === LEFT ? border : mimic.x === RIGHT ? newSize[0] - curSize[0] - border : (newSize[0] - curSize[0]) / 2),\n\t\t\t\tround(mimic.y === TOP ? newSize[1] - curSize[1] : 0)\n\t\t\t];\n\t\t}\n\t\telse {\n\t\t\ttranslate = [\n\t\t\t\tround(mimic.x === LEFT ? newSize[0] - curSize[0] : 0),\n\t\t\t\tround(mimic.y === TOP ? border : mimic.y === BOTTOM ? newSize[1] - curSize[1] - border : (newSize[1] - curSize[1]) / 2)\n\t\t\t];\n\t\t}\n\n\t\t// Canvas drawing implementation\n\t\tif(HASCANVAS) {\n\t\t\t// Grab canvas context and clear/save it\n\t\t\tcontext = inner[0].getContext('2d');\n\t\t\tcontext.restore(); context.save();\n\t\t\tcontext.clearRect(0,0,6000,6000);\n\n\t\t\t// Calculate coordinates\n\t\t\tcoords = this._calculateTip(mimic, curSize, SCALE);\n\t\t\tbigCoords = this._calculateTip(mimic, this.size, SCALE);\n\n\t\t\t// Set the canvas size using calculated size\n\t\t\tinner.attr(WIDTH, newSize[0] * SCALE).attr(HEIGHT, newSize[1] * SCALE);\n\t\t\tinner.css(WIDTH, newSize[0]).css(HEIGHT, newSize[1]);\n\n\t\t\t// Draw the outer-stroke tip\n\t\t\tthis._drawCoords(context, bigCoords);\n\t\t\tcontext.fillStyle = color[1];\n\t\t\tcontext.fill();\n\n\t\t\t// Draw the actual tip\n\t\t\tcontext.translate(translate[0] * SCALE, translate[1] * SCALE);\n\t\t\tthis._drawCoords(context, coords);\n\t\t\tcontext.fillStyle = color[0];\n\t\t\tcontext.fill();\n\t\t}\n\n\t\t// VML (IE Proprietary implementation)\n\t\telse {\n\t\t\t// Calculate coordinates\n\t\t\tcoords = this._calculateTip(mimic);\n\n\t\t\t// Setup coordinates string\n\t\t\tcoords = 'm' + coords[0] + ',' + coords[1] + ' l' + coords[2] +\n\t\t\t\t',' + coords[3] + ' ' + coords[4] + ',' + coords[5] + ' xe';\n\n\t\t\t// Setup VML-specific offset for pixel-perfection\n\t\t\ttranslate[2] = border && /^(r|b)/i.test(corner.string()) ?\n\t\t\t\tBROWSER.ie === 8 ? 2 : 1 : 0;\n\n\t\t\t// Set initial CSS\n\t\t\tinner.css({\n\t\t\t\tcoordsize: newSize[0]+border + ' ' + newSize[1]+border,\n\t\t\t\tantialias: ''+(mimic.string().indexOf(CENTER) > -1),\n\t\t\t\tleft: translate[0] - translate[2] * Number(precedance === X),\n\t\t\t\ttop: translate[1] - translate[2] * Number(precedance === Y),\n\t\t\t\twidth: newSize[0] + border,\n\t\t\t\theight: newSize[1] + border\n\t\t\t})\n\t\t\t.each(function(i) {\n\t\t\t\tvar $this = $(this);\n\n\t\t\t\t// Set shape specific attributes\n\t\t\t\t$this[ $this.prop ? 'prop' : 'attr' ]({\n\t\t\t\t\tcoordsize: newSize[0]+border + ' ' + newSize[1]+border,\n\t\t\t\t\tpath: coords,\n\t\t\t\t\tfillcolor: color[0],\n\t\t\t\t\tfilled: !!i,\n\t\t\t\t\tstroked: !i\n\t\t\t\t})\n\t\t\t\t.toggle(!!(border || i));\n\n\t\t\t\t// Check if border is enabled and add stroke element\n\t\t\t\t!i && $this.html( createVML(\n\t\t\t\t\t'stroke', 'weight=\"'+border*2+'px\" color=\"'+color[1]+'\" miterlimit=\"1000\" joinstyle=\"miter\"'\n\t\t\t\t) );\n\t\t\t});\n\t\t}\n\n\t\t// Opera bug #357 - Incorrect tip position\n\t\t// https://github.com/Craga89/qTip2/issues/367\n\t\twindow.opera && setTimeout(function() {\n\t\t\telements.tip.css({\n\t\t\t\tdisplay: 'inline-block',\n\t\t\t\tvisibility: 'visible'\n\t\t\t});\n\t\t}, 1);\n\n\t\t// Position if needed\n\t\tif(position !== FALSE) { this.calculate(corner, newSize); }\n\t},\n\n\tcalculate: function(corner, size) {\n\t\tif(!this.enabled) { return FALSE; }\n\n\t\tvar self = this,\n\t\t\telements = this.qtip.elements,\n\t\t\ttip = this.element,\n\t\t\tuserOffset = this.options.offset,\n\t\t\tposition = {},\n\t\t\tprecedance, corners;\n\n\t\t// Inherit corner if not provided\n\t\tcorner = corner || this.corner;\n\t\tprecedance = corner.precedance;\n\n\t\t// Determine which tip dimension to use for adjustment\n\t\tsize = size || this._calculateSize(corner);\n\n\t\t// Setup corners and offset array\n\t\tcorners = [ corner.x, corner.y ];\n\t\tif(precedance === X) { corners.reverse(); }\n\n\t\t// Calculate tip position\n\t\t$.each(corners, function(i, side) {\n\t\t\tvar b, bc, br;\n\n\t\t\tif(side === CENTER) {\n\t\t\t\tb = precedance === Y ? LEFT : TOP;\n\t\t\t\tposition[ b ] = '50%';\n\t\t\t\tposition[MARGIN+'-' + b] = -Math.round(size[ precedance === Y ? 0 : 1 ] / 2) + userOffset;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tb = self._parseWidth(corner, side, elements.tooltip);\n\t\t\t\tbc = self._parseWidth(corner, side, elements.content);\n\t\t\t\tbr = self._parseRadius(corner);\n\n\t\t\t\tposition[ side ] = Math.max(-self.border, i ? bc : userOffset + (br > b ? br : -b));\n\t\t\t}\n\t\t});\n\n\t\t// Adjust for tip size\n\t\tposition[ corner[precedance] ] -= size[ precedance === X ? 0 : 1 ];\n\n\t\t// Set and return new position\n\t\ttip.css({ margin: '', top: '', bottom: '', left: '', right: '' }).css(position);\n\t\treturn position;\n\t},\n\n\treposition: function(event, api, pos) {\n\t\tif(!this.enabled) { return; }\n\n\t\tvar cache = api.cache,\n\t\t\tnewCorner = this.corner.clone(),\n\t\t\tadjust = pos.adjusted,\n\t\t\tmethod = api.options.position.adjust.method.split(' '),\n\t\t\thorizontal = method[0],\n\t\t\tvertical = method[1] || method[0],\n\t\t\tshift = { left: FALSE, top: FALSE, x: 0, y: 0 },\n\t\t\toffset, css = {}, props;\n\n\t\tfunction shiftflip(direction, precedance, popposite, side, opposite) {\n\t\t\t// Horizontal - Shift or flip method\n\t\t\tif(direction === SHIFT && newCorner.precedance === precedance && adjust[side] && newCorner[popposite] !== CENTER) {\n\t\t\t\tnewCorner.precedance = newCorner.precedance === X ? Y : X;\n\t\t\t}\n\t\t\telse if(direction !== SHIFT && adjust[side]){\n\t\t\t\tnewCorner[precedance] = newCorner[precedance] === CENTER ?\n\t\t\t\t\tadjust[side] > 0 ? side : opposite :\n\t\t\t\t\tnewCorner[precedance] === side ? opposite : side;\n\t\t\t}\n\t\t}\n\n\t\tfunction shiftonly(xy, side, opposite) {\n\t\t\tif(newCorner[xy] === CENTER) {\n\t\t\t\tcss[MARGIN+'-'+side] = shift[xy] = offset[MARGIN+'-'+side] - adjust[side];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprops = offset[opposite] !== undefined ?\n\t\t\t\t\t[ adjust[side], -offset[side] ] : [ -adjust[side], offset[side] ];\n\n\t\t\t\tif( (shift[xy] = Math.max(props[0], props[1])) > props[0] ) {\n\t\t\t\t\tpos[side] -= adjust[side];\n\t\t\t\t\tshift[side] = FALSE;\n\t\t\t\t}\n\n\t\t\t\tcss[ offset[opposite] !== undefined ? opposite : side ] = shift[xy];\n\t\t\t}\n\t\t}\n\n\t\t// If our tip position isn't fixed e.g. doesn't adjust with viewport...\n\t\tif(this.corner.fixed !== TRUE) {\n\t\t\t// Perform shift/flip adjustments\n\t\t\tshiftflip(horizontal, X, Y, LEFT, RIGHT);\n\t\t\tshiftflip(vertical, Y, X, TOP, BOTTOM);\n\n\t\t\t// Update and redraw the tip if needed (check cached details of last drawn tip)\n\t\t\tif(newCorner.string() !== cache.corner.string() || cache.cornerTop !== adjust.top || cache.cornerLeft !== adjust.left) {\n\t\t\t\tthis.update(newCorner, FALSE);\n\t\t\t}\n\t\t}\n\n\t\t// Setup tip offset properties\n\t\toffset = this.calculate(newCorner);\n\n\t\t// Readjust offset object to make it left/top\n\t\tif(offset.right !== undefined) { offset.left = -offset.right; }\n\t\tif(offset.bottom !== undefined) { offset.top = -offset.bottom; }\n\t\toffset.user = this.offset;\n\n\t\t// Perform shift adjustments\n\t\tshift.left = horizontal === SHIFT && !!adjust.left;\n\t\tif(shift.left) {\n\t\t\tshiftonly(X, LEFT, RIGHT);\n\t\t}\n\t\tshift.top = vertical === SHIFT && !!adjust.top;\n\t\tif(shift.top) {\n\t\t\tshiftonly(Y, TOP, BOTTOM);\n\t\t}\n\n\t\t/*\n\t\t* If the tip is adjusted in both dimensions, or in a\n\t\t* direction that would cause it to be anywhere but the\n\t\t* outer border, hide it!\n\t\t*/\n\t\tthis.element.css(css).toggle(\n\t\t\t!(shift.x && shift.y || newCorner.x === CENTER && shift.y || newCorner.y === CENTER && shift.x)\n\t\t);\n\n\t\t// Adjust position to accomodate tip dimensions\n\t\tpos.left -= offset.left.charAt ? offset.user :\n\t\t\thorizontal !== SHIFT || shift.top || !shift.left && !shift.top ? offset.left + this.border : 0;\n\t\tpos.top -= offset.top.charAt ? offset.user :\n\t\t\tvertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top + this.border : 0;\n\n\t\t// Cache details\n\t\tcache.cornerLeft = adjust.left; cache.cornerTop = adjust.top;\n\t\tcache.corner = newCorner.clone();\n\t},\n\n\tdestroy: function() {\n\t\t// Unbind events\n\t\tthis.qtip._unbind(this.qtip.tooltip, this._ns);\n\n\t\t// Remove the tip element(s)\n\t\tif(this.qtip.elements.tip) {\n\t\t\tthis.qtip.elements.tip.find('*')\n\t\t\t\t.remove().end().remove();\n\t\t}\n\t}\n});\n\nTIP = PLUGINS.tip = function(api) {\n\treturn new Tip(api, api.options.style.tip);\n};\n\n// Initialize tip on render\nTIP.initialize = 'render';\n\n// Setup plugin sanitization options\nTIP.sanitize = function(options) {\n\tif(options.style && 'tip' in options.style) {\n\t\tvar opts = options.style.tip;\n\t\tif(typeof opts !== 'object') { opts = options.style.tip = { corner: opts }; }\n\t\tif(!(/string|boolean/i).test(typeof opts.corner)) { opts.corner = TRUE; }\n\t}\n};\n\n// Add new option checks for the plugin\nCHECKS.tip = {\n\t'^position.my|style.tip.(corner|mimic|border)$': function() {\n\t\t// Make sure a tip can be drawn\n\t\tthis.create();\n\n\t\t// Reposition the tooltip\n\t\tthis.qtip.reposition();\n\t},\n\t'^style.tip.(height|width)$': function(obj) {\n\t\t// Re-set dimensions and redraw the tip\n\t\tthis.size = [ obj.width, obj.height ];\n\t\tthis.update();\n\n\t\t// Reposition the tooltip\n\t\tthis.qtip.reposition();\n\t},\n\t'^content.title|style.(classes|widget)$': function() {\n\t\tthis.update();\n\t}\n};\n\n// Extend original qTip defaults\n$.extend(TRUE, QTIP.defaults, {\n\tstyle: {\n\t\ttip: {\n\t\t\tcorner: TRUE,\n\t\t\tmimic: FALSE,\n\t\t\twidth: 6,\n\t\t\theight: 6,\n\t\t\tborder: TRUE,\n\t\t\toffset: 0\n\t\t}\n\t}\n});\n;var MODAL, OVERLAY,\n\tMODALCLASS = 'qtip-modal',\n\tMODALSELECTOR = '.'+MODALCLASS;\n\nOVERLAY = function()\n{\n\tvar self = this,\n\t\tfocusableElems = {},\n\t\tcurrent,\n\t\tprevState,\n\t\telem;\n\n\t// Modified code from jQuery UI 1.10.0 source\n\t// http://code.jquery.com/ui/1.10.0/jquery-ui.js\n\tfunction focusable(element) {\n\t\t// Use the defined focusable checker when possible\n\t\tif($.expr[':'].focusable) { return $.expr[':'].focusable; }\n\n\t\tvar isTabIndexNotNaN = !isNaN($.attr(element, 'tabindex')),\n\t\t\tnodeName = element.nodeName && element.nodeName.toLowerCase(),\n\t\t\tmap, mapName, img;\n\n\t\tif('area' === nodeName) {\n\t\t\tmap = element.parentNode;\n\t\t\tmapName = map.name;\n\t\t\tif(!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\timg = $('img[usemap=#' + mapName + ']')[0];\n\t\t\treturn !!img && img.is(':visible');\n\t\t}\n\n\t\treturn /input|select|textarea|button|object/.test( nodeName ) ?\n\t\t\t!element.disabled :\n\t\t\t'a' === nodeName ?\n\t\t\t\telement.href || isTabIndexNotNaN :\n\t\t\t\tisTabIndexNotNaN\n\t\t;\n\t}\n\n\t// Focus inputs using cached focusable elements (see update())\n\tfunction focusInputs(blurElems) {\n\t\t// Blurring body element in IE causes window.open windows to unfocus!\n\t\tif(focusableElems.length < 1 && blurElems.length) { blurElems.not('body').blur(); }\n\n\t\t// Focus the inputs\n\t\telse { focusableElems.first().focus(); }\n\t}\n\n\t// Steal focus from elements outside tooltip\n\tfunction stealFocus(event) {\n\t\tif(!elem.is(':visible')) { return; }\n\n\t\tvar target = $(event.target),\n\t\t\ttooltip = current.tooltip,\n\t\t\tcontainer = target.closest(SELECTOR),\n\t\t\ttargetOnTop;\n\n\t\t// Determine if input container target is above this\n\t\ttargetOnTop = container.length < 1 ? FALSE :\n\t\t\tparseInt(container[0].style.zIndex, 10) > parseInt(tooltip[0].style.zIndex, 10);\n\n\t\t// If we're showing a modal, but focus has landed on an input below\n\t\t// this modal, divert focus to the first visible input in this modal\n\t\t// or if we can't find one... the tooltip itself\n\t\tif(!targetOnTop && target.closest(SELECTOR)[0] !== tooltip[0]) {\n\t\t\tfocusInputs(target);\n\t\t}\n\t}\n\n\t$.extend(self, {\n\t\tinit: function() {\n\t\t\t// Create document overlay\n\t\t\telem = self.elem = $('<div />', {\n\t\t\t\tid: 'qtip-overlay',\n\t\t\t\thtml: '<div></div>',\n\t\t\t\tmousedown: function() { return FALSE; }\n\t\t\t})\n\t\t\t.hide();\n\n\t\t\t// Make sure we can't focus anything outside the tooltip\n\t\t\t$(document.body).bind('focusin'+MODALSELECTOR, stealFocus);\n\n\t\t\t// Apply keyboard \"Escape key\" close handler\n\t\t\t$(document).bind('keydown'+MODALSELECTOR, function(event) {\n\t\t\t\tif(current && current.options.show.modal.escape && event.keyCode === 27) {\n\t\t\t\t\tcurrent.hide(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Apply click handler for blur option\n\t\t\telem.bind('click'+MODALSELECTOR, function(event) {\n\t\t\t\tif(current && current.options.show.modal.blur) {\n\t\t\t\t\tcurrent.hide(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn self;\n\t\t},\n\n\t\tupdate: function(api) {\n\t\t\t// Update current API reference\n\t\t\tcurrent = api;\n\n\t\t\t// Update focusable elements if enabled\n\t\t\tif(api.options.show.modal.stealfocus !== FALSE) {\n\t\t\t\tfocusableElems = api.tooltip.find('*').filter(function() {\n\t\t\t\t\treturn focusable(this);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse { focusableElems = []; }\n\t\t},\n\n\t\ttoggle: function(api, state, duration) {\n\t\t\tvar tooltip = api.tooltip,\n\t\t\t\toptions = api.options.show.modal,\n\t\t\t\teffect = options.effect,\n\t\t\t\ttype = state ? 'show': 'hide',\n\t\t\t\tvisible = elem.is(':visible'),\n\t\t\t\tvisibleModals = $(MODALSELECTOR).filter(':visible:not(:animated)').not(tooltip);\n\n\t\t\t// Set active tooltip API reference\n\t\t\tself.update(api);\n\n\t\t\t// If the modal can steal the focus...\n\t\t\t// Blur the current item and focus anything in the modal we an\n\t\t\tif(state && options.stealfocus !== FALSE) {\n\t\t\t\tfocusInputs( $(':focus') );\n\t\t\t}\n\n\t\t\t// Toggle backdrop cursor style on show\n\t\t\telem.toggleClass('blurs', options.blur);\n\n\t\t\t// Append to body on show\n\t\t\tif(state) {\n\t\t\t\telem.appendTo(document.body);\n\t\t\t}\n\n\t\t\t// Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible\n\t\t\tif(elem.is(':animated') && visible === state && prevState !== FALSE || !state && visibleModals.length) {\n\t\t\t\treturn self;\n\t\t\t}\n\n\t\t\t// Stop all animations\n\t\t\telem.stop(TRUE, FALSE);\n\n\t\t\t// Use custom function if provided\n\t\t\tif($.isFunction(effect)) {\n\t\t\t\teffect.call(elem, state);\n\t\t\t}\n\n\t\t\t// If no effect type is supplied, use a simple toggle\n\t\t\telse if(effect === FALSE) {\n\t\t\t\telem[ type ]();\n\t\t\t}\n\n\t\t\t// Use basic fade function\n\t\t\telse {\n\t\t\t\telem.fadeTo( parseInt(duration, 10) || 90, state ? 1 : 0, function() {\n\t\t\t\t\tif(!state) { elem.hide(); }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Reset position and detach from body on hide\n\t\t\tif(!state) {\n\t\t\t\telem.queue(function(next) {\n\t\t\t\t\telem.css({ left: '', top: '' });\n\t\t\t\t\tif(!$(MODALSELECTOR).length) { elem.detach(); }\n\t\t\t\t\tnext();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Cache the state\n\t\t\tprevState = state;\n\n\t\t\t// If the tooltip is destroyed, set reference to null\n\t\t\tif(current.destroyed) { current = NULL; }\n\n\t\t\treturn self;\n\t\t}\n\t});\n\n\tself.init();\n};\nOVERLAY = new OVERLAY();\n\nfunction Modal(api, options) {\n\tthis.options = options;\n\tthis._ns = '-modal';\n\n\tthis.qtip = api;\n\tthis.init(api);\n}\n\n$.extend(Modal.prototype, {\n\tinit: function(qtip) {\n\t\tvar tooltip = qtip.tooltip;\n\n\t\t// If modal is disabled... return\n\t\tif(!this.options.on) { return this; }\n\n\t\t// Set overlay reference\n\t\tqtip.elements.overlay = OVERLAY.elem;\n\n\t\t// Add unique attribute so we can grab modal tooltips easily via a SELECTOR, and set z-index\n\t\ttooltip.addClass(MODALCLASS).css('z-index', QTIP.modal_zindex + $(MODALSELECTOR).length);\n\n\t\t// Apply our show/hide/focus modal events\n\t\tqtip._bind(tooltip, ['tooltipshow', 'tooltiphide'], function(event, api, duration) {\n\t\t\tvar oEvent = event.originalEvent;\n\n\t\t\t// Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop\n\t\t\tif(event.target === tooltip[0]) {\n\t\t\t\tif(oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test(oEvent.type) && $(oEvent.relatedTarget).closest(OVERLAY.elem[0]).length) {\n\t\t\t\t\t/* eslint-disable no-empty */\n\t\t\t\t\ttry { event.preventDefault(); }\n\t\t\t\t\tcatch(e) {}\n\t\t\t\t\t/* eslint-enable no-empty */\n\t\t\t\t}\n\t\t\t\telse if(!oEvent || oEvent && oEvent.type !== 'tooltipsolo') {\n\t\t\t\t\tthis.toggle(event, event.type === 'tooltipshow', duration);\n\t\t\t\t}\n\t\t\t}\n\t\t}, this._ns, this);\n\n\t\t// Adjust modal z-index on tooltip focus\n\t\tqtip._bind(tooltip, 'tooltipfocus', function(event, api) {\n\t\t\t// If focus was cancelled before it reached us, don't do anything\n\t\t\tif(event.isDefaultPrevented() || event.target !== tooltip[0]) { return; }\n\n\t\t\tvar qtips = $(MODALSELECTOR),\n\n\t\t\t// Keep the modal's lower than other, regular qtips\n\t\t\tnewIndex = QTIP.modal_zindex + qtips.length,\n\t\t\tcurIndex = parseInt(tooltip[0].style.zIndex, 10);\n\n\t\t\t// Set overlay z-index\n\t\t\tOVERLAY.elem[0].style.zIndex = newIndex - 1;\n\n\t\t\t// Reduce modal z-index's and keep them properly ordered\n\t\t\tqtips.each(function() {\n\t\t\t\tif(this.style.zIndex > curIndex) {\n\t\t\t\t\tthis.style.zIndex -= 1;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Fire blur event for focused tooltip\n\t\t\tqtips.filter('.' + CLASS_FOCUS).qtip('blur', event.originalEvent);\n\n\t\t\t// Set the new z-index\n\t\t\ttooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex;\n\n\t\t\t// Set current\n\t\t\tOVERLAY.update(api);\n\n\t\t\t// Prevent default handling\n\t\t\t/* eslint-disable no-empty */\n\t\t\ttry { event.preventDefault(); }\n\t\t\tcatch(e) {}\n\t\t\t/* eslint-enable no-empty */\n\t\t}, this._ns, this);\n\n\t\t// Focus any other visible modals when this one hides\n\t\tqtip._bind(tooltip, 'tooltiphide', function(event) {\n\t\t\tif(event.target === tooltip[0]) {\n\t\t\t\t$(MODALSELECTOR).filter(':visible').not(tooltip).last().qtip('focus', event);\n\t\t\t}\n\t\t}, this._ns, this);\n\t},\n\n\ttoggle: function(event, state, duration) {\n\t\t// Make sure default event hasn't been prevented\n\t\tif(event && event.isDefaultPrevented()) { return this; }\n\n\t\t// Toggle it\n\t\tOVERLAY.toggle(this.qtip, !!state, duration);\n\t},\n\n\tdestroy: function() {\n\t\t// Remove modal class\n\t\tthis.qtip.tooltip.removeClass(MODALCLASS);\n\n\t\t// Remove bound events\n\t\tthis.qtip._unbind(this.qtip.tooltip, this._ns);\n\n\t\t// Delete element reference\n\t\tOVERLAY.toggle(this.qtip, FALSE);\n\t\tdelete this.qtip.elements.overlay;\n\t}\n});\n\n\nMODAL = PLUGINS.modal = function(api) {\n\treturn new Modal(api, api.options.show.modal);\n};\n\n// Setup sanitiztion rules\nMODAL.sanitize = function(opts) {\n\tif(opts.show) {\n\t\tif(typeof opts.show.modal !== 'object') { opts.show.modal = { on: !!opts.show.modal }; }\n\t\telse if(typeof opts.show.modal.on === 'undefined') { opts.show.modal.on = TRUE; }\n\t}\n};\n\n// Base z-index for all modal tooltips (use qTip core z-index as a base)\n/* eslint-disable camelcase */\nQTIP.modal_zindex = QTIP.zindex - 200;\n/* eslint-enable camelcase */\n\n// Plugin needs to be initialized on render\nMODAL.initialize = 'render';\n\n// Setup option set checks\nCHECKS.modal = {\n\t'^show.modal.(on|blur)$': function() {\n\t\t// Initialise\n\t\tthis.destroy();\n\t\tthis.init();\n\n\t\t// Show the modal if not visible already and tooltip is visible\n\t\tthis.qtip.elems.overlay.toggle(\n\t\t\tthis.qtip.tooltip[0].offsetWidth > 0\n\t\t);\n\t}\n};\n\n// Extend original api defaults\n$.extend(TRUE, QTIP.defaults, {\n\tshow: {\n\t\tmodal: {\n\t\t\ton: FALSE,\n\t\t\teffect: TRUE,\n\t\t\tblur: TRUE,\n\t\t\tstealfocus: TRUE,\n\t\t\tescape: TRUE\n\t\t}\n\t}\n});\n;PLUGINS.viewport = function(api, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight)\n{\n\tvar target = posOptions.target,\n\t\ttooltip = api.elements.tooltip,\n\t\tmy = posOptions.my,\n\t\tat = posOptions.at,\n\t\tadjust = posOptions.adjust,\n\t\tmethod = adjust.method.split(' '),\n\t\tmethodX = method[0],\n\t\tmethodY = method[1] || method[0],\n\t\tviewport = posOptions.viewport,\n\t\tcontainer = posOptions.container,\n\t\tadjusted = { left: 0, top: 0 },\n\t\tfixed, newMy, containerOffset, containerStatic,\n\t\tviewportWidth, viewportHeight, viewportScroll, viewportOffset;\n\n\t// If viewport is not a jQuery element, or it's the window/document, or no adjustment method is used... return\n\tif(!viewport.jquery || target[0] === window || target[0] === document.body || adjust.method === 'none') {\n\t\treturn adjusted;\n\t}\n\n\t// Cach container details\n\tcontainerOffset = container.offset() || adjusted;\n\tcontainerStatic = container.css('position') === 'static';\n\n\t// Cache our viewport details\n\tfixed = tooltip.css('position') === 'fixed';\n\tviewportWidth = viewport[0] === window ? viewport.width() : viewport.outerWidth(FALSE);\n\tviewportHeight = viewport[0] === window ? viewport.height() : viewport.outerHeight(FALSE);\n\tviewportScroll = { left: fixed ? 0 : viewport.scrollLeft(), top: fixed ? 0 : viewport.scrollTop() };\n\tviewportOffset = viewport.offset() || adjusted;\n\n\t// Generic calculation method\n\tfunction calculate(side, otherSide, type, adjustment, side1, side2, lengthName, targetLength, elemLength) {\n\t\tvar initialPos = position[side1],\n\t\t\tmySide = my[side],\n\t\t\tatSide = at[side],\n\t\t\tisShift = type === SHIFT,\n\t\t\tmyLength = mySide === side1 ? elemLength : mySide === side2 ? -elemLength : -elemLength / 2,\n\t\t\tatLength = atSide === side1 ? targetLength : atSide === side2 ? -targetLength : -targetLength / 2,\n\t\t\tsideOffset = viewportScroll[side1] + viewportOffset[side1] - (containerStatic ? 0 : containerOffset[side1]),\n\t\t\toverflow1 = sideOffset - initialPos,\n\t\t\toverflow2 = initialPos + elemLength - (lengthName === WIDTH ? viewportWidth : viewportHeight) - sideOffset,\n\t\t\toffset = myLength - (my.precedance === side || mySide === my[otherSide] ? atLength : 0) - (atSide === CENTER ? targetLength / 2 : 0);\n\n\t\t// shift\n\t\tif(isShift) {\n\t\t\toffset = (mySide === side1 ? 1 : -1) * myLength;\n\n\t\t\t// Adjust position but keep it within viewport dimensions\n\t\t\tposition[side1] += overflow1 > 0 ? overflow1 : overflow2 > 0 ? -overflow2 : 0;\n\t\t\tposition[side1] = Math.max(\n\t\t\t\t-containerOffset[side1] + viewportOffset[side1],\n\t\t\t\tinitialPos - offset,\n\t\t\t\tMath.min(\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\t-containerOffset[side1] + viewportOffset[side1] + (lengthName === WIDTH ? viewportWidth : viewportHeight),\n\t\t\t\t\t\tinitialPos + offset\n\t\t\t\t\t),\n\t\t\t\t\tposition[side1],\n\n\t\t\t\t\t// Make sure we don't adjust complete off the element when using 'center'\n\t\t\t\t\tmySide === 'center' ? initialPos - myLength : 1E9\n\t\t\t\t)\n\t\t\t);\n\n\t\t}\n\n\t\t// flip/flipinvert\n\t\telse {\n\t\t\t// Update adjustment amount depending on if using flipinvert or flip\n\t\t\tadjustment *= type === FLIPINVERT ? 2 : 0;\n\n\t\t\t// Check for overflow on the left/top\n\t\t\tif(overflow1 > 0 && (mySide !== side1 || overflow2 > 0)) {\n\t\t\t\tposition[side1] -= offset + adjustment;\n\t\t\t\tnewMy.invert(side, side1);\n\t\t\t}\n\n\t\t\t// Check for overflow on the bottom/right\n\t\t\telse if(overflow2 > 0 && (mySide !== side2 || overflow1 > 0)  ) {\n\t\t\t\tposition[side1] -= (mySide === CENTER ? -offset : offset) + adjustment;\n\t\t\t\tnewMy.invert(side, side2);\n\t\t\t}\n\n\t\t\t// Make sure we haven't made things worse with the adjustment and reset if so\n\t\t\tif(position[side1] < viewportScroll[side1] && -position[side1] > overflow2) {\n\t\t\t\tposition[side1] = initialPos; newMy = my.clone();\n\t\t\t}\n\t\t}\n\n\t\treturn position[side1] - initialPos;\n\t}\n\n\t// Set newMy if using flip or flipinvert methods\n\tif(methodX !== 'shift' || methodY !== 'shift') { newMy = my.clone(); }\n\n\t// Adjust position based onviewport and adjustment options\n\tadjusted = {\n\t\tleft: methodX !== 'none' ? calculate( X, Y, methodX, adjust.x, LEFT, RIGHT, WIDTH, targetWidth, elemWidth ) : 0,\n\t\ttop: methodY !== 'none' ? calculate( Y, X, methodY, adjust.y, TOP, BOTTOM, HEIGHT, targetHeight, elemHeight ) : 0,\n\t\tmy: newMy\n\t};\n\n\treturn adjusted;\n};\n;PLUGINS.polys = {\n\t// POLY area coordinate calculator\n\t//\tSpecial thanks to Ed Cradock for helping out with this.\n\t//\tUses a binary search algorithm to find suitable coordinates.\n\tpolygon: function(baseCoords, corner) {\n\t\tvar result = {\n\t\t\twidth: 0, height: 0,\n\t\t\tposition: {\n\t\t\t\ttop: 1e10, right: 0,\n\t\t\t\tbottom: 0, left: 1e10\n\t\t\t},\n\t\t\tadjustable: FALSE\n\t\t},\n\t\ti = 0, next,\n\t\tcoords = [],\n\t\tcompareX = 1, compareY = 1,\n\t\trealX = 0, realY = 0,\n\t\tnewWidth, newHeight;\n\n\t\t// First pass, sanitize coords and determine outer edges\n\t\ti = baseCoords.length; \n\t\twhile(i--) {\n\t\t\tnext = [ parseInt(baseCoords[--i], 10), parseInt(baseCoords[i+1], 10) ];\n\n\t\t\tif(next[0] > result.position.right){ result.position.right = next[0]; }\n\t\t\tif(next[0] < result.position.left){ result.position.left = next[0]; }\n\t\t\tif(next[1] > result.position.bottom){ result.position.bottom = next[1]; }\n\t\t\tif(next[1] < result.position.top){ result.position.top = next[1]; }\n\n\t\t\tcoords.push(next);\n\t\t}\n\n\t\t// Calculate height and width from outer edges\n\t\tnewWidth = result.width = Math.abs(result.position.right - result.position.left);\n\t\tnewHeight = result.height = Math.abs(result.position.bottom - result.position.top);\n\n\t\t// If it's the center corner...\n\t\tif(corner.abbrev() === 'c') {\n\t\t\tresult.position = {\n\t\t\t\tleft: result.position.left + result.width / 2,\n\t\t\t\ttop: result.position.top + result.height / 2\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\t// Second pass, use a binary search algorithm to locate most suitable coordinate\n\t\t\twhile(newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0)\n\t\t\t{\n\t\t\t\tnewWidth = Math.floor(newWidth / 2);\n\t\t\t\tnewHeight = Math.floor(newHeight / 2);\n\n\t\t\t\tif(corner.x === LEFT){ compareX = newWidth; }\n\t\t\t\telse if(corner.x === RIGHT){ compareX = result.width - newWidth; }\n\t\t\t\telse{ compareX += Math.floor(newWidth / 2); }\n\n\t\t\t\tif(corner.y === TOP){ compareY = newHeight; }\n\t\t\t\telse if(corner.y === BOTTOM){ compareY = result.height - newHeight; }\n\t\t\t\telse{ compareY += Math.floor(newHeight / 2); }\n\n\t\t\t\ti = coords.length;\n\t\t\t\twhile(i--)\n\t\t\t\t{\n\t\t\t\t\tif(coords.length < 2){ break; }\n\n\t\t\t\t\trealX = coords[i][0] - result.position.left;\n\t\t\t\t\trealY = coords[i][1] - result.position.top;\n\n\t\t\t\t\tif(\n\t\t\t\t\t\tcorner.x === LEFT && realX >= compareX ||\n\t\t\t\t\t\tcorner.x === RIGHT && realX <= compareX ||\n\t\t\t\t\t\tcorner.x === CENTER && (realX < compareX || realX > result.width - compareX) ||\n\t\t\t\t\t\tcorner.y === TOP && realY >= compareY ||\n\t\t\t\t\t\tcorner.y === BOTTOM && realY <= compareY ||\n\t\t\t\t\t\tcorner.y === CENTER && (realY < compareY || realY > result.height - compareY)) {\n\t\t\t\t\t\tcoords.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tresult.position = { left: coords[0][0], top: coords[0][1] };\n\t\t}\n\n\t\treturn result;\n\t},\n\n\trect: function(ax, ay, bx, by) {\n\t\treturn {\n\t\t\twidth: Math.abs(bx - ax),\n\t\t\theight: Math.abs(by - ay),\n\t\t\tposition: {\n\t\t\t\tleft: Math.min(ax, bx),\n\t\t\t\ttop: Math.min(ay, by)\n\t\t\t}\n\t\t};\n\t},\n\n\t_angles: {\n\t\ttc: 3 / 2, tr: 7 / 4, tl: 5 / 4,\n\t\tbc: 1 / 2, br: 1 / 4, bl: 3 / 4,\n\t\trc: 2, lc: 1, c: 0\n\t},\n\tellipse: function(cx, cy, rx, ry, corner) {\n\t\tvar c = PLUGINS.polys._angles[ corner.abbrev() ],\n\t\t\trxc = c === 0 ? 0 : rx * Math.cos( c * Math.PI ),\n\t\t\trys = ry * Math.sin( c * Math.PI );\n\n\t\treturn {\n\t\t\twidth: rx * 2 - Math.abs(rxc),\n\t\t\theight: ry * 2 - Math.abs(rys),\n\t\t\tposition: {\n\t\t\t\tleft: cx + rxc,\n\t\t\t\ttop: cy + rys\n\t\t\t},\n\t\t\tadjustable: FALSE\n\t\t};\n\t},\n\tcircle: function(cx, cy, r, corner) {\n\t\treturn PLUGINS.polys.ellipse(cx, cy, r, r, corner);\n\t}\n};\n;PLUGINS.svg = function(api, svg, corner)\n{\n\tvar elem = svg[0],\n\t\troot = $(elem.ownerSVGElement),\n\t\townerDocument = elem.ownerDocument,\n\t\tstrokeWidth2 = (parseInt(svg.css('stroke-width'), 10) || 0) / 2,\n\t\tframeOffset, mtx, transformed,\n\t\tlen, next, i, points,\n\t\tresult, position;\n\n\t// Ascend the parentNode chain until we find an element with getBBox()\n\twhile(!elem.getBBox) { elem = elem.parentNode; }\n\tif(!elem.getBBox || !elem.parentNode) { return FALSE; }\n\n\t// Determine which shape calculation to use\n\tswitch(elem.nodeName) {\n\t\tcase 'ellipse':\n\t\tcase 'circle':\n\t\t\tresult = PLUGINS.polys.ellipse(\n\t\t\t\telem.cx.baseVal.value,\n\t\t\t\telem.cy.baseVal.value,\n\t\t\t\t(elem.rx || elem.r).baseVal.value + strokeWidth2,\n\t\t\t\t(elem.ry || elem.r).baseVal.value + strokeWidth2,\n\t\t\t\tcorner\n\t\t\t);\n\t\tbreak;\n\n\t\tcase 'line':\n\t\tcase 'polygon':\n\t\tcase 'polyline':\n\t\t\t// Determine points object (line has none, so mimic using array)\n\t\t\tpoints = elem.points || [\n\t\t\t\t{ x: elem.x1.baseVal.value, y: elem.y1.baseVal.value },\n\t\t\t\t{ x: elem.x2.baseVal.value, y: elem.y2.baseVal.value }\n\t\t\t];\n\n\t\t\tfor(result = [], i = -1, len = points.numberOfItems || points.length; ++i < len;) {\n\t\t\t\tnext = points.getItem ? points.getItem(i) : points[i];\n\t\t\t\tresult.push.apply(result, [next.x, next.y]);\n\t\t\t}\n\n\t\t\tresult = PLUGINS.polys.polygon(result, corner);\n\t\tbreak;\n\n\t\t// Unknown shape or rectangle? Use bounding box\n\t\tdefault:\n\t\t\tresult = elem.getBBox();\n\t\t\tresult = {\n\t\t\t\twidth: result.width,\n\t\t\t\theight: result.height,\n\t\t\t\tposition: {\n\t\t\t\t\tleft: result.x,\n\t\t\t\t\ttop: result.y\n\t\t\t\t}\n\t\t\t};\n\t\tbreak;\n\t}\n\n\t// Shortcut assignments\n\tposition = result.position;\n\troot = root[0];\n\n\t// Convert position into a pixel value\n\tif(root.createSVGPoint) {\n\t\tmtx = elem.getScreenCTM();\n\t\tpoints = root.createSVGPoint();\n\n\t\tpoints.x = position.left;\n\t\tpoints.y = position.top;\n\t\ttransformed = points.matrixTransform( mtx );\n\t\tposition.left = transformed.x;\n\t\tposition.top = transformed.y;\n\t}\n\n\t// Check the element is not in a child document, and if so, adjust for frame elements offset\n\tif(ownerDocument !== document && api.position.target !== 'mouse') {\n\t\tframeOffset = $((ownerDocument.defaultView || ownerDocument.parentWindow).frameElement).offset();\n\t\tif(frameOffset) {\n\t\t\tposition.left += frameOffset.left;\n\t\t\tposition.top += frameOffset.top;\n\t\t}\n\t}\n\n\t// Adjust by scroll offset of owner document\n\townerDocument = $(ownerDocument);\n\tposition.left += ownerDocument.scrollLeft();\n\tposition.top += ownerDocument.scrollTop();\n\n\treturn result;\n};\n;PLUGINS.imagemap = function(api, area, corner)\n{\n\tif(!area.jquery) { area = $(area); }\n\n\tvar shape = (area.attr('shape') || 'rect').toLowerCase().replace('poly', 'polygon'),\n\t\timage = $('img[usemap=\"#'+area.parent('map').attr('name')+'\"]'),\n\t\tcoordsString = $.trim(area.attr('coords')),\n\t\tcoordsArray = coordsString.replace(/,$/, '').split(','),\n\t\timageOffset, coords, i, result, len;\n\n\t// If we can't find the image using the map...\n\tif(!image.length) { return FALSE; }\n\n\t// Pass coordinates string if polygon\n\tif(shape === 'polygon') {\n\t\tresult = PLUGINS.polys.polygon(coordsArray, corner);\n\t}\n\n\t// Otherwise parse the coordinates and pass them as arguments\n\telse if(PLUGINS.polys[shape]) {\n\t\tfor(i = -1, len = coordsArray.length, coords = []; ++i < len;) {\n\t\t\tcoords.push( parseInt(coordsArray[i], 10) );\n\t\t}\n\n\t\tresult = PLUGINS.polys[shape].apply(\n\t\t\tthis, coords.concat(corner)\n\t\t);\n\t}\n\n\t// If no shapre calculation method was found, return false\n\telse { return FALSE; }\n\n\t// Make sure we account for padding and borders on the image\n\timageOffset = image.offset();\n\timageOffset.left += Math.ceil((image.outerWidth(FALSE) - image.width()) / 2);\n\timageOffset.top += Math.ceil((image.outerHeight(FALSE) - image.height()) / 2);\n\n\t// Add image position to offset coordinates\n\tresult.position.left += imageOffset.left;\n\tresult.position.top += imageOffset.top;\n\n\treturn result;\n};\n;var IE6,\n\n/*\n * BGIFrame adaption (http://plugins.jquery.com/project/bgiframe)\n * Special thanks to Brandon Aaron\n */\nBGIFRAME = '<iframe class=\"qtip-bgiframe\" frameborder=\"0\" tabindex=\"-1\" src=\"javascript:\\'\\';\" ' +\n\t' style=\"display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); ' +\n\t\t'-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\"></iframe>';\n\nfunction Ie6(api) {\n\tthis._ns = 'ie6';\n\n\tthis.qtip = api;\n\tthis.init(api);\n}\n\n$.extend(Ie6.prototype, {\n\t_scroll : function() {\n\t\tvar overlay = this.qtip.elements.overlay;\n\t\toverlay && (overlay[0].style.top = $(window).scrollTop() + 'px');\n\t},\n\n\tinit: function(qtip) {\n\t\tvar tooltip = qtip.tooltip;\n\n\t\t// Create the BGIFrame element if needed\n\t\tif($('select, object').length < 1) {\n\t\t\tthis.bgiframe = qtip.elements.bgiframe = $(BGIFRAME).appendTo(tooltip);\n\n\t\t\t// Update BGIFrame on tooltip move\n\t\t\tqtip._bind(tooltip, 'tooltipmove', this.adjustBGIFrame, this._ns, this);\n\t\t}\n\n\t\t// redraw() container for width/height calculations\n\t\tthis.redrawContainer = $('<div/>', { id: NAMESPACE+'-rcontainer' })\n\t\t\t.appendTo(document.body);\n\n\t\t// Fixup modal plugin if present too\n\t\tif( qtip.elements.overlay && qtip.elements.overlay.addClass('qtipmodal-ie6fix') ) {\n\t\t\tqtip._bind(window, ['scroll', 'resize'], this._scroll, this._ns, this);\n\t\t\tqtip._bind(tooltip, ['tooltipshow'], this._scroll, this._ns, this);\n\t\t}\n\n\t\t// Set dimensions\n\t\tthis.redraw();\n\t},\n\n\tadjustBGIFrame: function() {\n\t\tvar tooltip = this.qtip.tooltip,\n\t\t\tdimensions = {\n\t\t\t\theight: tooltip.outerHeight(FALSE),\n\t\t\t\twidth: tooltip.outerWidth(FALSE)\n\t\t\t},\n\t\t\tplugin = this.qtip.plugins.tip,\n\t\t\ttip = this.qtip.elements.tip,\n\t\t\ttipAdjust, offset;\n\n\t\t// Adjust border offset\n\t\toffset = parseInt(tooltip.css('borderLeftWidth'), 10) || 0;\n\t\toffset = { left: -offset, top: -offset };\n\n\t\t// Adjust for tips plugin\n\t\tif(plugin && tip) {\n\t\t\ttipAdjust = plugin.corner.precedance === 'x' ? [WIDTH, LEFT] : [HEIGHT, TOP];\n\t\t\toffset[ tipAdjust[1] ] -= tip[ tipAdjust[0] ]();\n\t\t}\n\n\t\t// Update bgiframe\n\t\tthis.bgiframe.css(offset).css(dimensions);\n\t},\n\n\t// Max/min width simulator function\n\tredraw: function() {\n\t\tif(this.qtip.rendered < 1 || this.drawing) { return this; }\n\n\t\tvar tooltip = this.qtip.tooltip,\n\t\t\tstyle = this.qtip.options.style,\n\t\t\tcontainer = this.qtip.options.position.container,\n\t\t\tperc, width, max, min;\n\n\t\t// Set drawing flag\n\t\tthis.qtip.drawing = 1;\n\n\t\t// If tooltip has a set height/width, just set it... like a boss!\n\t\tif(style.height) { tooltip.css(HEIGHT, style.height); }\n\t\tif(style.width) { tooltip.css(WIDTH, style.width); }\n\n\t\t// Simulate max/min width if not set width present...\n\t\telse {\n\t\t\t// Reset width and add fluid class\n\t\t\ttooltip.css(WIDTH, '').appendTo(this.redrawContainer);\n\n\t\t\t// Grab our tooltip width (add 1 if odd so we don't get wrapping problems.. huzzah!)\n\t\t\twidth = tooltip.width();\n\t\t\tif(width % 2 < 1) { width += 1; }\n\n\t\t\t// Grab our max/min properties\n\t\t\tmax = tooltip.css('maxWidth') || '';\n\t\t\tmin = tooltip.css('minWidth') || '';\n\n\t\t\t// Parse into proper pixel values\n\t\t\tperc = (max + min).indexOf('%') > -1 ? container.width() / 100 : 0;\n\t\t\tmax = (max.indexOf('%') > -1 ? perc : 1 * parseInt(max, 10)) || width;\n\t\t\tmin = (min.indexOf('%') > -1 ? perc : 1 * parseInt(min, 10)) || 0;\n\n\t\t\t// Determine new dimension size based on max/min/current values\n\t\t\twidth = max + min ? Math.min(Math.max(width, min), max) : width;\n\n\t\t\t// Set the newly calculated width and remvoe fluid class\n\t\t\ttooltip.css(WIDTH, Math.round(width)).appendTo(container);\n\t\t}\n\n\t\t// Set drawing flag\n\t\tthis.drawing = 0;\n\n\t\treturn this;\n\t},\n\n\tdestroy: function() {\n\t\t// Remove iframe\n\t\tthis.bgiframe && this.bgiframe.remove();\n\n\t\t// Remove bound events\n\t\tthis.qtip._unbind([window, this.qtip.tooltip], this._ns);\n\t}\n});\n\nIE6 = PLUGINS.ie6 = function(api) {\n\t// Proceed only if the browser is IE6\n\treturn BROWSER.ie === 6 ? new Ie6(api) : FALSE;\n};\n\nIE6.initialize = 'render';\n\nCHECKS.ie6 = {\n\t'^content|style$': function() {\n\t\tthis.redraw();\n\t}\n};\n;}));\n}( window, document ));\n"],"names":["window","document","undefined","factory","$","QTIP","PROTOTYPE","CORNER","CHECKS","trackingBound","TRUE","FALSE","NULL","X","Y","WIDTH","HEIGHT","TOP","LEFT","BOTTOM","RIGHT","CENTER","FLIPINVERT","SHIFT","PLUGINS","NAMESPACE","ATTR_HAS","ATTR_ID","WIDGET","SELECTOR","INACTIVE_EVENTS","split","CLASS_FIXED","CLASS_DEFAULT","CLASS_FOCUS","CLASS_HOVER","CLASS_DISABLED","replaceSuffix","oldtitle","BROWSER","ie","v","i","createElement","innerHTML","getElementsByTagName","NaN","iOS","parseFloat","exec","navigator","userAgent","replace","QTip","target","options","id","attr","this","tooltip","elements","_id","timers","img","plugins","cache","event","disabled","onTooltip","lastClass","rendered","destroyed","waiting","hiddenDuringWait","positioning","triggering","invalidOpt","a","type","invalidContent","c","isFunction","length","jquery","then","sanitizeOptions","opts","content","text","ajax","once","metadata","done","api","loading","deferred","extend","context","success","error","newContent","set","xhr","status","isPlainObject","title","button","position","my","at","show","ready","hide","style","classes","each","sanitize","convertNotation","notation","obj","option","levels","pop","setCallback","args","category","rule","match","checks","hasOwnProperty","RegExp","push","apply","prototype","_when","deferreds","when","render","self","posOptions","posClass","_createPosClass","join","width","height","adjust","mouse","toggleClass","data","appendTo","container","append","_createTitle","_updateTitle","_createButton","_updateContent","_setWidget","name","instance","initialize","_unassignEvents","_assignEvents","_trigger","toggle","destroy","immediate","process","timer","stop","find","remove","end","clearTimeout","removeData","removeAttr","suppress","call","one","proxy","builtin","o","prev","nextid","newId","_removeTitle","_updateButton","p","removeClass","addClass","css","get","toLowerCase","result","precedance","string","rmove","rrender","value","reposition","val","test","previous","nodeType","offsetWidth","_update","element","e","empty","display","visibility","html","_waitForContent","images","fn","imagesLoaded","Deferred","resolve","promise","titlebar","widget","createWidgetClass","insertBefore","delegate","substr","abbrev","effect","pluginCalculations","offset","adjusted","newClass","viewport","method","tooltipWidth","outerWidth","tooltipHeight","outerHeight","targetWidth","targetHeight","left","top","visible","isScroll","win","doc","ownerDocument","isArray","x","y","distance","origin","pageX","body","innerWidth","documentElement","clientWidth","pageY","scrollX","scrollLeft","scrollY","scrollTop","eq","innerHeight","imagemap","is","svg","ownerSVGElement","adjustable","elem","isNaN","queue","next","opacity","removeAttribute","pos","scrolled","parentOffset","overflow","quirks","compatMode","parent","scroll","getBoundingClientRect","offsetParent","C","Corner","corner","forceY","f","charAt","cls","concat","delay","callback","duration","setTimeout","showMethod","hasClass","hideMethod","relatedTarget","ontoTooltip","closest","ontoTarget","fixed","preventDefault","stopImmediatePropagation","inactiveMethod","inactive","repositionMethod","selector","events","arguments","init","config","docBody","newTarget","metadata5","html5","parseJSON","defaults","solo","overwrite","qtip","invert","z","center","clone","state","add","has","fix","identicalState","allow","after","contentOptions","animate","sameTarget","search","focus","bind","_storeMouse","not","Event","unbind","blur","autofocus","trigger","n","fadeTo","qtips","curIndex","parseInt","zIndex","newIndex","zindex","filter","disable","enable","close","prepend","click","on","def","_bind","targets","suffix","ns","_unbind","originalEvent","isDefaultPrevented","_bindEvents","showEvents","hideEvents","showTargets","hideTargets","showCallback","hideCallback","similarTargets","toggleEvents","showIndex","inArray","splice","_assignInitialEvents","showTarget","hideTarget","trim","hoverIntent","hoverEvent","prerender","moveEvent","onTarget","containerTarget","viewportTarget","documentTarget","windowTarget","leave","nodeName","indexOf","enabled","isAncestor","parents","inactiveEvents","limit","abs","Math","resize","special","grep","toArray","currentTarget","newValue","command","returned","makeArray","slice","timeStamp","keepData","elems","func","old","ui","cleanData","triggerHandler","version","move","hidden","TIP","createVML","SCALE","PIXEL_RATIO","BACKING_STORE_RATIO","MARGIN","BORDER","COLOR","BG_COLOR","TRANSPARENT","IMPORTANT","HASCANVAS","getContext","INVALID","camel","s","toUpperCase","cssProps","cssPrefixes","vendorCss","prop","cur","ucProp","props","intCss","ceil","devicePixelRatio","backingStorePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","tag","Tip","_ns","size","tip","prependTo","lineJoin","miterLimit","save","stopPropagation","create","_swapDimensions","_resetDimensions","_useTitle","_parseCorner","_parseWidth","side","use","_parseRadius","_invalidColour","compare","_parseColours","borderSide","colorElem","color","_calculateSize","ratio","isCenter","base","pow","round","smallHyp","sqrt","hyp","border","reverse","_calculateTip","scale","width2","height2","tips","br","bl","tr","tl","tc","bc","rc","lc","lt","rt","lb","rb","_drawCoords","coords","beginPath","moveTo","lineTo","closePath","update","bigCoords","translate","newSize","inner","children","curSize","mimic","lineHeight","restore","clearRect","fillStyle","fill","coordsize","antialias","Number","$this","path","fillcolor","filled","stroked","opera","calculate","corners","userOffset","b","max","margin","bottom","right","newCorner","horizontal","vertical","shift","shiftflip","cornerTop","cornerLeft","user","shiftonly","direction","popposite","opposite","xy","MODAL","OVERLAY","MODALCLASS","MODALSELECTOR","Modal","current","prevState","focusableElems","focusable","expr","map","mapName","isTabIndexNotNaN","parentNode","href","focusInputs","blurElems","first","stealFocus","mousedown","modal","escape","keyCode","stealfocus","visibleModals","detach","overlay","modal_zindex","oEvent","last","elemWidth","elemHeight","newMy","containerOffset","containerStatic","viewportWidth","viewportHeight","viewportScroll","viewportOffset","methodX","methodY","otherSide","adjustment","side1","side2","lengthName","targetLength","elemLength","initialPos","mySide","atSide","isShift","myLength","atLength","sideOffset","overflow1","overflow2","min","polys","polygon","baseCoords","newWidth","newHeight","compareX","compareY","realX","realY","floor","rect","ax","ay","bx","by","_angles","ellipse","cx","cy","rx","ry","rxc","cos","PI","rys","sin","circle","r","frameOffset","mtx","transformed","len","points","root","strokeWidth2","getBBox","baseVal","x1","y1","x2","y2","numberOfItems","getItem","createSVGPoint","getScreenCTM","matrixTransform","defaultView","parentWindow","frameElement","area","imageOffset","shape","image","coordsArray","BGIFRAME","Ie6","_scroll","bgiframe","adjustBGIFrame","redrawContainer","redraw","tipAdjust","dimensions","plugin","drawing","perc","ie6"],"sourceRoot":""}