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