{"version":3,"file":"scripts/chunks/plugins-929028f7.5aafba36a48ab59a8b34.js","mappings":"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","sources":["webpack://disp0001/./src/plugins/semantic/search.js","webpack://disp0001/./src/plugins/semantic/tab.js","webpack://disp0001/./src/plugins/star-rating/star-rating.js"],"sourcesContent":["/*!\r\n * # Semantic UI 2.4.2 - Search\r\n * http://github.com/semantic-org/semantic-ui/\r\n *\r\n *\r\n * Released under the MIT license\r\n * http://opensource.org/licenses/MIT\r\n *\r\n */\r\n\r\n;(function ($, window, document, undefined) {\r\n\r\n'use strict';\r\n\r\nwindow = (typeof window != 'undefined' && window.Math == Math)\r\n  ? window\r\n  : (typeof self != 'undefined' && self.Math == Math)\r\n    ? self\r\n    : Function('return this')()\r\n;\r\n\r\n$.fn.search = function(parameters) {\r\n  var\r\n    $allModules     = $(this),\r\n    moduleSelector  = $allModules.selector || '',\r\n\r\n    time            = new Date().getTime(),\r\n    performance     = [],\r\n\r\n    query           = arguments[0],\r\n    methodInvoked   = (typeof query == 'string'),\r\n    queryArguments  = [].slice.call(arguments, 1),\r\n    returnedValue\r\n  ;\r\n  $(this)\r\n    .each(function() {\r\n      var\r\n        settings          = ( $.isPlainObject(parameters) )\r\n          ? $.extend(true, {}, $.fn.search.settings, parameters)\r\n          : $.extend({}, $.fn.search.settings),\r\n\r\n        className        = settings.className,\r\n        metadata         = settings.metadata,\r\n        regExp           = settings.regExp,\r\n        fields           = settings.fields,\r\n        selector         = settings.selector,\r\n        error            = settings.error,\r\n        namespace        = settings.namespace,\r\n\r\n        eventNamespace   = '.' + namespace,\r\n        moduleNamespace  = namespace + '-module',\r\n\r\n        $module          = $(this),\r\n        $prompt          = $module.find(selector.prompt),\r\n        $searchButton    = $module.find(selector.searchButton),\r\n        $results         = $module.find(selector.results),\r\n        $result          = $module.find(selector.result),\r\n        $category        = $module.find(selector.category),\r\n\r\n        element          = this,\r\n        instance         = $module.data(moduleNamespace),\r\n\r\n        disabledBubbled  = false,\r\n        resultsDismissed = false,\r\n\r\n        module\r\n      ;\r\n\r\n      module = {\r\n\r\n        initialize: function() {\r\n          module.verbose('Initializing module');\r\n          module.get.settings();\r\n          module.determine.searchFields();\r\n          module.bind.events();\r\n          module.set.type();\r\n          module.create.results();\r\n          module.instantiate();\r\n        },\r\n        instantiate: function() {\r\n          module.verbose('Storing instance of module', module);\r\n          instance = module;\r\n          $module\r\n            .data(moduleNamespace, module)\r\n          ;\r\n        },\r\n        destroy: function() {\r\n          module.verbose('Destroying instance');\r\n          $module\r\n            .off(eventNamespace)\r\n            .removeData(moduleNamespace)\r\n          ;\r\n        },\r\n\r\n        refresh: function() {\r\n          module.debug('Refreshing selector cache');\r\n          $prompt         = $module.find(selector.prompt);\r\n          $searchButton   = $module.find(selector.searchButton);\r\n          $category       = $module.find(selector.category);\r\n          $results        = $module.find(selector.results);\r\n          $result         = $module.find(selector.result);\r\n        },\r\n\r\n        refreshResults: function() {\r\n          $results = $module.find(selector.results);\r\n          $result  = $module.find(selector.result);\r\n        },\r\n\r\n        bind: {\r\n          events: function() {\r\n            module.verbose('Binding events to search');\r\n            if(settings.automatic) {\r\n              $module\r\n                .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\r\n              ;\r\n              $prompt\r\n                .attr('autocomplete', 'off')\r\n              ;\r\n            }\r\n            $module\r\n              // prompt\r\n              .on('focus'     + eventNamespace, selector.prompt, module.event.focus)\r\n              .on('blur'      + eventNamespace, selector.prompt, module.event.blur)\r\n              .on('keydown'   + eventNamespace, selector.prompt, module.handleKeyboard)\r\n              // search button\r\n              .on('click'     + eventNamespace, selector.searchButton, module.query)\r\n              // results\r\n              .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\r\n              .on('mouseup'   + eventNamespace, selector.results, module.event.result.mouseup)\r\n              .on('click'     + eventNamespace, selector.result,  module.event.result.click)\r\n            ;\r\n          }\r\n        },\r\n\r\n        determine: {\r\n          searchFields: function() {\r\n            // this makes sure $.extend does not add specified search fields to default fields\r\n            // this is the only setting which should not extend defaults\r\n            if(parameters && parameters.searchFields !== undefined) {\r\n              settings.searchFields = parameters.searchFields;\r\n            }\r\n          }\r\n        },\r\n\r\n        event: {\r\n          input: function() {\r\n            if(settings.searchDelay) {\r\n              clearTimeout(module.timer);\r\n              module.timer = setTimeout(function() {\r\n                if(module.is.focused()) {\r\n                  module.query();\r\n                }\r\n              }, settings.searchDelay);\r\n            }\r\n            else {\r\n              module.query();\r\n            }\r\n          },\r\n          focus: function() {\r\n            module.set.focus();\r\n            if(settings.searchOnFocus && module.has.minimumCharacters() ) {\r\n              module.query(function() {\r\n                if(module.can.show() ) {\r\n                  module.showResults();\r\n                }\r\n              });\r\n            }\r\n          },\r\n          blur: function(event) {\r\n            var\r\n              pageLostFocus = (document.activeElement === this),\r\n              callback      = function() {\r\n                module.cancel.query();\r\n                // module.remove.focus();\r\n                // module.timer = setTimeout(module.hideResults, settings.hideDelay);\r\n              }\r\n            ;\r\n            if(pageLostFocus) {\r\n              return;\r\n            }\r\n            resultsDismissed = false;\r\n            if(module.resultsClicked) {\r\n              module.debug('Determining if user action caused search to close');\r\n              $module\r\n                .one('click.close' + eventNamespace, selector.results, function(event) {\r\n                  if(module.is.inMessage(event) || disabledBubbled) {\r\n                    $prompt.focus();\r\n                    return;\r\n                  }\r\n                  disabledBubbled = false;\r\n                  if( !module.is.animating() && !module.is.hidden()) {\r\n                    callback();\r\n                  }\r\n                })\r\n              ;\r\n            }\r\n            else {\r\n              module.debug('Input blurred without user action, closing results');\r\n              callback();\r\n            }\r\n          },\r\n          result: {\r\n            mousedown: function() {\r\n              module.resultsClicked = true;\r\n            },\r\n            mouseup: function() {\r\n              module.resultsClicked = false;\r\n            },\r\n            click: function(event) {\r\n              module.debug('Search result selected');\r\n              var\r\n                $result = $(this),\r\n                $title  = $result.find(selector.title).eq(0),\r\n                $link   = $result.is('a[href]')\r\n                  ? $result\r\n                  : $result.find('a[href]').eq(0),\r\n                href    = $link.attr('href')   || false,\r\n                target  = $link.attr('target') || false,\r\n                title   = $title.html(),\r\n                // title is used for result lookup\r\n                value   = ($title.length > 0)\r\n                  ? $title.text()\r\n                  : false,\r\n                results = module.get.results(),\r\n                result  = $result.data(metadata.result) || module.get.result(value, results),\r\n                returnedValue\r\n              ;\r\n              if( $.isFunction(settings.onSelect) ) {\r\n                if(settings.onSelect.call(element, result, results) === false) {\r\n                  module.debug('Custom onSelect callback cancelled default select action');\r\n                  disabledBubbled = true;\r\n                  return;\r\n                }\r\n              }\r\n              module.hideResults();\r\n              if(value) {\r\n                module.set.value(value);\r\n              }\r\n              if(href) {\r\n                module.verbose('Opening search link found in result', $link);\r\n                if(target == '_blank' || event.ctrlKey) {\r\n                  window.open(href);\r\n                }\r\n                else {\r\n                  window.location.href = (href);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        },\r\n        handleKeyboard: function(event) {\r\n          var\r\n            // force selector refresh\r\n            $result         = $module.find(selector.result),\r\n            $category       = $module.find(selector.category),\r\n            $activeResult   = $result.filter('.' + className.active),\r\n            currentIndex    = $result.index( $activeResult ),\r\n            resultSize      = $result.length,\r\n            hasActiveResult = $activeResult.length > 0,\r\n\r\n            keyCode         = event.which,\r\n            keys            = {\r\n              backspace : 8,\r\n              enter     : 13,\r\n              escape    : 27,\r\n              upArrow   : 38,\r\n              downArrow : 40\r\n            },\r\n            newIndex\r\n          ;\r\n          // search shortcuts\r\n          if(keyCode == keys.escape) {\r\n            module.verbose('Escape key pressed, blurring search field');\r\n            module.hideResults();\r\n            resultsDismissed = true;\r\n          }\r\n          if( module.is.visible() ) {\r\n            if(keyCode == keys.enter) {\r\n              module.verbose('Enter key pressed, selecting active result');\r\n              if( $result.filter('.' + className.active).length > 0 ) {\r\n                module.event.result.click.call($result.filter('.' + className.active), event);\r\n                event.preventDefault();\r\n                return false;\r\n              }\r\n            }\r\n            else if(keyCode == keys.upArrow && hasActiveResult) {\r\n              module.verbose('Up key pressed, changing active result');\r\n              newIndex = (currentIndex - 1 < 0)\r\n                ? currentIndex\r\n                : currentIndex - 1\r\n              ;\r\n              $category\r\n                .removeClass(className.active)\r\n              ;\r\n              $result\r\n                .removeClass(className.active)\r\n                .eq(newIndex)\r\n                  .addClass(className.active)\r\n                  .closest($category)\r\n                    .addClass(className.active)\r\n              ;\r\n              event.preventDefault();\r\n            }\r\n            else if(keyCode == keys.downArrow) {\r\n              module.verbose('Down key pressed, changing active result');\r\n              newIndex = (currentIndex + 1 >= resultSize)\r\n                ? currentIndex\r\n                : currentIndex + 1\r\n              ;\r\n              $category\r\n                .removeClass(className.active)\r\n              ;\r\n              $result\r\n                .removeClass(className.active)\r\n                .eq(newIndex)\r\n                  .addClass(className.active)\r\n                  .closest($category)\r\n                    .addClass(className.active)\r\n              ;\r\n              event.preventDefault();\r\n            }\r\n          }\r\n          else {\r\n            // query shortcuts\r\n            if(keyCode == keys.enter) {\r\n              module.verbose('Enter key pressed, executing query');\r\n              module.query();\r\n              module.set.buttonPressed();\r\n              $prompt.one('keyup', module.remove.buttonFocus);\r\n            }\r\n          }\r\n        },\r\n\r\n        setup: {\r\n          api: function(searchTerm, callback) {\r\n            var\r\n              apiSettings = {\r\n                debug             : settings.debug,\r\n                on                : false,\r\n                cache             : settings.cache,\r\n                action            : 'search',\r\n                urlData           : {\r\n                  query : searchTerm\r\n                },\r\n                onSuccess         : function(response) {\r\n                  module.parse.response.call(element, response, searchTerm);\r\n                  callback();\r\n                },\r\n                onFailure         : function() {\r\n                  module.displayMessage(error.serverError);\r\n                  callback();\r\n                },\r\n                onAbort : function(response) {\r\n                },\r\n                onError           : module.error\r\n              },\r\n              searchHTML\r\n            ;\r\n            $.extend(true, apiSettings, settings.apiSettings);\r\n            module.verbose('Setting up API request', apiSettings);\r\n            $module.api(apiSettings);\r\n          }\r\n        },\r\n\r\n        can: {\r\n          useAPI: function() {\r\n            return $.fn.api !== undefined;\r\n          },\r\n          show: function() {\r\n            return module.is.focused() && !module.is.visible() && !module.is.empty();\r\n          },\r\n          transition: function() {\r\n            return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\r\n          }\r\n        },\r\n\r\n        is: {\r\n          animating: function() {\r\n            return $results.hasClass(className.animating);\r\n          },\r\n          hidden: function() {\r\n            return $results.hasClass(className.hidden);\r\n          },\r\n          inMessage: function(event) {\r\n            if(!event.target) {\r\n              return;\r\n            }\r\n            var\r\n              $target = $(event.target),\r\n              isInDOM = $.contains(document.documentElement, event.target)\r\n            ;\r\n            return (isInDOM && $target.closest(selector.message).length > 0);\r\n          },\r\n          empty: function() {\r\n            return ($results.html() === '');\r\n          },\r\n          visible: function() {\r\n            return ($results.filter(':visible').length > 0);\r\n          },\r\n          focused: function() {\r\n            return ($prompt.filter(':focus').length > 0);\r\n          }\r\n        },\r\n\r\n        get: {\r\n          settings: function() {\r\n            if($.isPlainObject(parameters) && parameters.searchFullText) {\r\n              settings.fullTextSearch = parameters.searchFullText;\r\n              module.error(settings.error.oldSearchSyntax, element);\r\n            }\r\n          },\r\n          inputEvent: function() {\r\n            var\r\n              prompt = $prompt[0],\r\n              inputEvent   = (prompt !== undefined && prompt.oninput !== undefined)\r\n                ? 'input'\r\n                : (prompt !== undefined && prompt.onpropertychange !== undefined)\r\n                  ? 'propertychange'\r\n                  : 'keyup'\r\n            ;\r\n            return inputEvent;\r\n          },\r\n          value: function() {\r\n            return $prompt.val();\r\n          },\r\n          results: function() {\r\n            var\r\n              results = $module.data(metadata.results)\r\n            ;\r\n            return results;\r\n          },\r\n          result: function(value, results) {\r\n            var\r\n              lookupFields = ['title', 'id'],\r\n              result       = false\r\n            ;\r\n            value = (value !== undefined)\r\n              ? value\r\n              : module.get.value()\r\n            ;\r\n            results = (results !== undefined)\r\n              ? results\r\n              : module.get.results()\r\n            ;\r\n            if(settings.type === 'category' || settings.type === 'siteSearch') {\r\n              module.debug('Finding result that matches', value);\r\n              $.each(results, function(index, category) {\r\n                if($.isArray(category.results)) {\r\n                  result = module.search.object(value, category.results, lookupFields)[0];\r\n                  // don't continue searching if a result is found\r\n                  if(result) {\r\n                    return false;\r\n                  }\r\n                }\r\n              });\r\n            }\r\n            else {\r\n              module.debug('Finding result in results object', value);\r\n              result = module.search.object(value, results, lookupFields)[0];\r\n            }\r\n            return result || false;\r\n          },\r\n        },\r\n\r\n        select: {\r\n          firstResult: function() {\r\n            module.verbose('Selecting first result');\r\n            $result.first().addClass(className.active);\r\n          }\r\n        },\r\n\r\n        set: {\r\n          focus: function() {\r\n            $module.addClass(className.focus);\r\n          },\r\n          loading: function() {\r\n            $module.addClass(className.loading);\r\n          },\r\n          value: function(value) {\r\n            module.verbose('Setting search input value', value);\r\n            $prompt\r\n              .val(value)\r\n            ;\r\n          },\r\n          type: function(type) {\r\n            type = type || settings.type;\r\n            if(settings.type == 'category') {\r\n              $module.addClass(settings.type);\r\n            }\r\n          },\r\n          buttonPressed: function() {\r\n            $searchButton.addClass(className.pressed);\r\n          }\r\n        },\r\n\r\n        remove: {\r\n          loading: function() {\r\n            $module.removeClass(className.loading);\r\n          },\r\n          focus: function() {\r\n            $module.removeClass(className.focus);\r\n          },\r\n          buttonPressed: function() {\r\n            $searchButton.removeClass(className.pressed);\r\n          }\r\n        },\r\n\r\n        query: function(callback) {\r\n          callback = $.isFunction(callback)\r\n            ? callback\r\n            : function(){}\r\n          ;\r\n          var\r\n            searchTerm = module.get.value(),\r\n            cache = module.read.cache(searchTerm)\r\n          ;\r\n          callback = callback || function() {};\r\n          if( module.has.minimumCharacters() )  {\r\n            if(cache) {\r\n              module.debug('Reading result from cache', searchTerm);\r\n              module.save.results(cache.results);\r\n              module.addResults(cache.html);\r\n              module.inject.id(cache.results);\r\n              callback();\r\n            }\r\n            else {\r\n              module.debug('Querying for', searchTerm);\r\n              if($.isPlainObject(settings.source) || $.isArray(settings.source)) {\r\n                module.search.local(searchTerm);\r\n                callback();\r\n              }\r\n              else if( module.can.useAPI() ) {\r\n                module.search.remote(searchTerm, callback);\r\n              }\r\n              else {\r\n                module.error(error.source);\r\n                callback();\r\n              }\r\n            }\r\n            settings.onSearchQuery.call(element, searchTerm);\r\n          }\r\n          else {\r\n            module.hideResults();\r\n          }\r\n        },\r\n\r\n        search: {\r\n          local: function(searchTerm) {\r\n            var\r\n              results = module.search.object(searchTerm, settings.content),\r\n              searchHTML\r\n            ;\r\n            module.set.loading();\r\n            module.save.results(results);\r\n            module.debug('Returned full local search results', results);\r\n            if(settings.maxResults > 0) {\r\n              module.debug('Using specified max results', results);\r\n              results = results.slice(0, settings.maxResults);\r\n            }\r\n            if(settings.type == 'category') {\r\n              results = module.create.categoryResults(results);\r\n            }\r\n            searchHTML = module.generateResults({\r\n              results: results\r\n            });\r\n            module.remove.loading();\r\n            module.addResults(searchHTML);\r\n            module.inject.id(results);\r\n            module.write.cache(searchTerm, {\r\n              html    : searchHTML,\r\n              results : results\r\n            });\r\n          },\r\n          remote: function(searchTerm, callback) {\r\n            callback = $.isFunction(callback)\r\n              ? callback\r\n              : function(){}\r\n            ;\r\n            if($module.api('is loading')) {\r\n              $module.api('abort');\r\n            }\r\n            module.setup.api(searchTerm, callback);\r\n            $module\r\n              .api('query')\r\n            ;\r\n          },\r\n          object: function(searchTerm, source, searchFields) {\r\n            var\r\n              results      = [],\r\n              exactResults = [],\r\n              fuzzyResults = [],\r\n              searchExp    = searchTerm.toString().replace(regExp.escape, '\\\\$&'),\r\n              matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),\r\n\r\n              // avoid duplicates when pushing results\r\n              addResult = function(array, result) {\r\n                var\r\n                  notResult      = ($.inArray(result, results) == -1),\r\n                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1),\r\n                  notExactResults = ($.inArray(result, exactResults) == -1)\r\n                ;\r\n                if(notResult && notFuzzyResult && notExactResults) {\r\n                  array.push(result);\r\n                }\r\n              }\r\n            ;\r\n            source = source || settings.source;\r\n            searchFields = (searchFields !== undefined)\r\n              ? searchFields\r\n              : settings.searchFields\r\n            ;\r\n\r\n            // search fields should be array to loop correctly\r\n            if(!$.isArray(searchFields)) {\r\n              searchFields = [searchFields];\r\n            }\r\n\r\n            // exit conditions if no source\r\n            if(source === undefined || source === false) {\r\n              module.error(error.source);\r\n              return [];\r\n            }\r\n            // iterate through search fields looking for matches\r\n            $.each(searchFields, function(index, field) {\r\n              $.each(source, function(label, content) {\r\n                var\r\n                  fieldExists = (typeof content[field] == 'string')\r\n                ;\r\n                if(fieldExists) {\r\n                  if( content[field].search(matchRegExp) !== -1) {\r\n                    // content starts with value (first in results)\r\n                    addResult(results, content);\r\n                  }\r\n                  else if(settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, content[field]) ) {\r\n                    // content fuzzy matches (last in results)\r\n                    addResult(exactResults, content);\r\n                  }\r\n                  else if(settings.fullTextSearch == true && module.fuzzySearch(searchTerm, content[field]) ) {\r\n                    // content fuzzy matches (last in results)\r\n                    addResult(fuzzyResults, content);\r\n                  }\r\n                }\r\n              });\r\n            });\r\n            $.merge(exactResults, fuzzyResults)\r\n            $.merge(results, exactResults);\r\n            return results;\r\n          }\r\n        },\r\n        exactSearch: function (query, term) {\r\n          query = query.toLowerCase();\r\n          term  = term.toLowerCase();\r\n          if(term.indexOf(query) > -1) {\r\n             return true;\r\n          }\r\n          return false;\r\n        },\r\n        fuzzySearch: function(query, term) {\r\n          var\r\n            termLength  = term.length,\r\n            queryLength = query.length\r\n          ;\r\n          if(typeof query !== 'string') {\r\n            return false;\r\n          }\r\n          query = query.toLowerCase();\r\n          term  = term.toLowerCase();\r\n          if(queryLength > termLength) {\r\n            return false;\r\n          }\r\n          if(queryLength === termLength) {\r\n            return (query === term);\r\n          }\r\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\r\n            var\r\n              queryCharacter = query.charCodeAt(characterIndex)\r\n            ;\r\n            while(nextCharacterIndex < termLength) {\r\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\r\n                continue search;\r\n              }\r\n            }\r\n            return false;\r\n          }\r\n          return true;\r\n        },\r\n\r\n        parse: {\r\n          response: function(response, searchTerm) {\r\n            var\r\n              searchHTML = module.generateResults(response)\r\n            ;\r\n            module.verbose('Parsing server response', response);\r\n            if(response !== undefined) {\r\n              if(searchTerm !== undefined && response[fields.results] !== undefined) {\r\n                module.addResults(searchHTML);\r\n                module.inject.id(response[fields.results]);\r\n                module.write.cache(searchTerm, {\r\n                  html    : searchHTML,\r\n                  results : response[fields.results]\r\n                });\r\n                module.save.results(response[fields.results]);\r\n              }\r\n            }\r\n          }\r\n        },\r\n\r\n        cancel: {\r\n          query: function() {\r\n            if( module.can.useAPI() ) {\r\n              $module.api('abort');\r\n            }\r\n          }\r\n        },\r\n\r\n        has: {\r\n          minimumCharacters: function() {\r\n            var\r\n              searchTerm    = module.get.value(),\r\n              numCharacters = searchTerm.length\r\n            ;\r\n            return (numCharacters >= settings.minCharacters);\r\n          },\r\n          results: function() {\r\n            if($results.length === 0) {\r\n              return false;\r\n            }\r\n            var\r\n              html = $results.html()\r\n            ;\r\n            return html != '';\r\n          }\r\n        },\r\n\r\n        clear: {\r\n          cache: function(value) {\r\n            var\r\n              cache = $module.data(metadata.cache)\r\n            ;\r\n            if(!value) {\r\n              module.debug('Clearing cache', value);\r\n              $module.removeData(metadata.cache);\r\n            }\r\n            else if(value && cache && cache[value]) {\r\n              module.debug('Removing value from cache', value);\r\n              delete cache[value];\r\n              $module.data(metadata.cache, cache);\r\n            }\r\n          }\r\n        },\r\n\r\n        read: {\r\n          cache: function(name) {\r\n            var\r\n              cache = $module.data(metadata.cache)\r\n            ;\r\n            if(settings.cache) {\r\n              module.verbose('Checking cache for generated html for query', name);\r\n              return (typeof cache == 'object') && (cache[name] !== undefined)\r\n                ? cache[name]\r\n                : false\r\n              ;\r\n            }\r\n            return false;\r\n          }\r\n        },\r\n\r\n        create: {\r\n          categoryResults: function(results) {\r\n            var\r\n              categoryResults = {}\r\n            ;\r\n            $.each(results, function(index, result) {\r\n              if(!result.category) {\r\n                return;\r\n              }\r\n              if(categoryResults[result.category] === undefined) {\r\n                module.verbose('Creating new category of results', result.category);\r\n                categoryResults[result.category] = {\r\n                  name    : result.category,\r\n                  results : [result]\r\n                }\r\n              }\r\n              else {\r\n                categoryResults[result.category].results.push(result);\r\n              }\r\n            });\r\n            return categoryResults;\r\n          },\r\n          id: function(resultIndex, categoryIndex) {\r\n            var\r\n              resultID      = (resultIndex + 1), // not zero indexed\r\n              categoryID    = (categoryIndex + 1),\r\n              firstCharCode,\r\n              letterID,\r\n              id\r\n            ;\r\n            if(categoryIndex !== undefined) {\r\n              // start char code for \"A\"\r\n              letterID = String.fromCharCode(97 + categoryIndex);\r\n              id          = letterID + resultID;\r\n              module.verbose('Creating category result id', id);\r\n            }\r\n            else {\r\n              id = resultID;\r\n              module.verbose('Creating result id', id);\r\n            }\r\n            return id;\r\n          },\r\n          results: function() {\r\n            if($results.length === 0) {\r\n              $results = $('<div />')\r\n                .addClass(className.results)\r\n                .appendTo($module)\r\n              ;\r\n            }\r\n          }\r\n        },\r\n\r\n        inject: {\r\n          result: function(result, resultIndex, categoryIndex) {\r\n            module.verbose('Injecting result into results');\r\n            var\r\n              $selectedResult = (categoryIndex !== undefined)\r\n                ? $results\r\n                    .children().eq(categoryIndex)\r\n                      .children(selector.results)\r\n                        .first()\r\n                        .children(selector.result)\r\n                          .eq(resultIndex)\r\n                : $results\r\n                    .children(selector.result).eq(resultIndex)\r\n            ;\r\n            module.verbose('Injecting results metadata', $selectedResult);\r\n            $selectedResult\r\n              .data(metadata.result, result)\r\n            ;\r\n          },\r\n          id: function(results) {\r\n            module.debug('Injecting unique ids into results');\r\n            var\r\n              // since results may be object, we must use counters\r\n              categoryIndex = 0,\r\n              resultIndex   = 0\r\n            ;\r\n            if(settings.type === 'category' || settings.type === 'siteSearch') {\r\n              // iterate through each category result\r\n              $.each(results, function(index, category) {\r\n                resultIndex = 0;\r\n                $.each(category.results, function(index, value) {\r\n                  var\r\n                    result = category.results[index]\r\n                  ;\r\n                  if(result.id === undefined) {\r\n                    result.id = module.create.id(resultIndex, categoryIndex);\r\n                  }\r\n                  module.inject.result(result, resultIndex, categoryIndex);\r\n                  resultIndex++;\r\n                });\r\n                categoryIndex++;\r\n              });\r\n            }\r\n            else {\r\n              // top level\r\n              $.each(results, function(index, value) {\r\n                var\r\n                  result = results[index]\r\n                ;\r\n                if(result.id === undefined) {\r\n                  result.id = module.create.id(resultIndex);\r\n                }\r\n                module.inject.result(result, resultIndex);\r\n                resultIndex++;\r\n              });\r\n            }\r\n            return results;\r\n          }\r\n        },\r\n\r\n        save: {\r\n          results: function(results) {\r\n            module.verbose('Saving current search results to metadata', results);\r\n            $module.data(metadata.results, results);\r\n          }\r\n        },\r\n\r\n        write: {\r\n          cache: function(name, value) {\r\n            var\r\n              cache = ($module.data(metadata.cache) !== undefined)\r\n                ? $module.data(metadata.cache)\r\n                : {}\r\n            ;\r\n            if(settings.cache) {\r\n              module.verbose('Writing generated html to cache', name, value);\r\n              cache[name] = value;\r\n              $module\r\n                .data(metadata.cache, cache)\r\n              ;\r\n            }\r\n          }\r\n        },\r\n\r\n        addResults: function(html) {\r\n          if( $.isFunction(settings.onResultsAdd) ) {\r\n            if( settings.onResultsAdd.call($results, html) === false ) {\r\n              module.debug('onResultsAdd callback cancelled default action');\r\n              return false;\r\n            }\r\n          }\r\n          if(html) {\r\n            $results\r\n              .html(html)\r\n            ;\r\n            module.refreshResults();\r\n            if(settings.selectFirstResult) {\r\n              module.select.firstResult();\r\n            }\r\n            module.showResults();\r\n          }\r\n          else {\r\n            module.hideResults(function() {\r\n              $results.empty();\r\n            });\r\n          }\r\n        },\r\n\r\n        showResults: function(callback) {\r\n          callback = $.isFunction(callback)\r\n            ? callback\r\n            : function(){}\r\n          ;\r\n          if(resultsDismissed) {\r\n            return;\r\n          }\r\n          if(!module.is.visible() && module.has.results()) {\r\n            if( module.can.transition() ) {\r\n              module.debug('Showing results with css animations');\r\n              $results\r\n                .transition({\r\n                  animation  : settings.transition + ' in',\r\n                  debug      : settings.debug,\r\n                  verbose    : settings.verbose,\r\n                  duration   : settings.duration,\r\n                  onComplete : function() {\r\n                    callback();\r\n                  },\r\n                  queue      : true\r\n                })\r\n              ;\r\n            }\r\n            else {\r\n              module.debug('Showing results with javascript');\r\n              $results\r\n                .stop()\r\n                .fadeIn(settings.duration, settings.easing)\r\n              ;\r\n            }\r\n            settings.onResultsOpen.call($results);\r\n          }\r\n        },\r\n        hideResults: function(callback) {\r\n          callback = $.isFunction(callback)\r\n            ? callback\r\n            : function(){}\r\n          ;\r\n          if( module.is.visible() ) {\r\n            if( module.can.transition() ) {\r\n              module.debug('Hiding results with css animations');\r\n              $results\r\n                .transition({\r\n                  animation  : settings.transition + ' out',\r\n                  debug      : settings.debug,\r\n                  verbose    : settings.verbose,\r\n                  duration   : settings.duration,\r\n                  onComplete : function() {\r\n                    callback();\r\n                  },\r\n                  queue      : true\r\n                })\r\n              ;\r\n            }\r\n            else {\r\n              module.debug('Hiding results with javascript');\r\n              $results\r\n                .stop()\r\n                .fadeOut(settings.duration, settings.easing)\r\n              ;\r\n            }\r\n            settings.onResultsClose.call($results);\r\n          }\r\n        },\r\n\r\n        generateResults: function(response) {\r\n          module.debug('Generating html from response', response);\r\n          var\r\n            template       = settings.templates[settings.type],\r\n            isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),\r\n            isProperArray  = ($.isArray(response[fields.results]) && response[fields.results].length > 0),\r\n            html           = ''\r\n          ;\r\n          if(isProperObject || isProperArray ) {\r\n            if(settings.maxResults > 0) {\r\n              if(isProperObject) {\r\n                if(settings.type == 'standard') {\r\n                  module.error(error.maxResults);\r\n                }\r\n              }\r\n              else {\r\n                response[fields.results] = response[fields.results].slice(0, settings.maxResults);\r\n              }\r\n            }\r\n            if($.isFunction(template)) {\r\n              html = template(response, fields);\r\n            }\r\n            else {\r\n              module.error(error.noTemplate, false);\r\n            }\r\n          }\r\n          else if(settings.showNoResults) {\r\n            html = module.displayMessage(error.noResults, 'empty');\r\n          }\r\n          settings.onResults.call(element, response);\r\n          return html;\r\n        },\r\n\r\n        displayMessage: function(text, type) {\r\n          type = type || 'standard';\r\n          module.debug('Displaying message', text, type);\r\n          module.addResults( settings.templates.message(text, type) );\r\n          return settings.templates.message(text, type);\r\n        },\r\n\r\n        setting: function(name, value) {\r\n          if( $.isPlainObject(name) ) {\r\n            $.extend(true, settings, name);\r\n          }\r\n          else if(value !== undefined) {\r\n            settings[name] = value;\r\n          }\r\n          else {\r\n            return settings[name];\r\n          }\r\n        },\r\n        internal: function(name, value) {\r\n          if( $.isPlainObject(name) ) {\r\n            $.extend(true, module, name);\r\n          }\r\n          else if(value !== undefined) {\r\n            module[name] = value;\r\n          }\r\n          else {\r\n            return module[name];\r\n          }\r\n        },\r\n        debug: function() {\r\n          if(!settings.silent && settings.debug) {\r\n            if(settings.performance) {\r\n              module.performance.log(arguments);\r\n            }\r\n            else {\r\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\r\n              module.debug.apply(console, arguments);\r\n            }\r\n          }\r\n        },\r\n        verbose: function() {\r\n          if(!settings.silent && settings.verbose && settings.debug) {\r\n            if(settings.performance) {\r\n              module.performance.log(arguments);\r\n            }\r\n            else {\r\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\r\n              module.verbose.apply(console, arguments);\r\n            }\r\n          }\r\n        },\r\n        error: function() {\r\n          if(!settings.silent) {\r\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\r\n            module.error.apply(console, arguments);\r\n          }\r\n        },\r\n        performance: {\r\n          log: function(message) {\r\n            var\r\n              currentTime,\r\n              executionTime,\r\n              previousTime\r\n            ;\r\n            if(settings.performance) {\r\n              currentTime   = new Date().getTime();\r\n              previousTime  = time || currentTime;\r\n              executionTime = currentTime - previousTime;\r\n              time          = currentTime;\r\n              performance.push({\r\n                'Name'           : message[0],\r\n                'Arguments'      : [].slice.call(message, 1) || '',\r\n                'Element'        : element,\r\n                'Execution Time' : executionTime\r\n              });\r\n            }\r\n            clearTimeout(module.performance.timer);\r\n            module.performance.timer = setTimeout(module.performance.display, 500);\r\n          },\r\n          display: function() {\r\n            var\r\n              title = settings.name + ':',\r\n              totalTime = 0\r\n            ;\r\n            time = false;\r\n            clearTimeout(module.performance.timer);\r\n            $.each(performance, function(index, data) {\r\n              totalTime += data['Execution Time'];\r\n            });\r\n            title += ' ' + totalTime + 'ms';\r\n            if(moduleSelector) {\r\n              title += ' \\'' + moduleSelector + '\\'';\r\n            }\r\n            if($allModules.length > 1) {\r\n              title += ' ' + '(' + $allModules.length + ')';\r\n            }\r\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\r\n              console.groupCollapsed(title);\r\n              if(console.table) {\r\n                console.table(performance);\r\n              }\r\n              else {\r\n                $.each(performance, function(index, data) {\r\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\r\n                });\r\n              }\r\n              console.groupEnd();\r\n            }\r\n            performance = [];\r\n          }\r\n        },\r\n        invoke: function(query, passedArguments, context) {\r\n          var\r\n            object = instance,\r\n            maxDepth,\r\n            found,\r\n            response\r\n          ;\r\n          passedArguments = passedArguments || queryArguments;\r\n          context         = element         || context;\r\n          if(typeof query == 'string' && object !== undefined) {\r\n            query    = query.split(/[\\. ]/);\r\n            maxDepth = query.length - 1;\r\n            $.each(query, function(depth, value) {\r\n              var camelCaseValue = (depth != maxDepth)\r\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\r\n                : query\r\n              ;\r\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\r\n                object = object[camelCaseValue];\r\n              }\r\n              else if( object[camelCaseValue] !== undefined ) {\r\n                found = object[camelCaseValue];\r\n                return false;\r\n              }\r\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\r\n                object = object[value];\r\n              }\r\n              else if( object[value] !== undefined ) {\r\n                found = object[value];\r\n                return false;\r\n              }\r\n              else {\r\n                return false;\r\n              }\r\n            });\r\n          }\r\n          if( $.isFunction( found ) ) {\r\n            response = found.apply(context, passedArguments);\r\n          }\r\n          else if(found !== undefined) {\r\n            response = found;\r\n          }\r\n          if($.isArray(returnedValue)) {\r\n            returnedValue.push(response);\r\n          }\r\n          else if(returnedValue !== undefined) {\r\n            returnedValue = [returnedValue, response];\r\n          }\r\n          else if(response !== undefined) {\r\n            returnedValue = response;\r\n          }\r\n          return found;\r\n        }\r\n      };\r\n      if(methodInvoked) {\r\n        if(instance === undefined) {\r\n          module.initialize();\r\n        }\r\n        module.invoke(query);\r\n      }\r\n      else {\r\n        if(instance !== undefined) {\r\n          instance.invoke('destroy');\r\n        }\r\n        module.initialize();\r\n      }\r\n\r\n    })\r\n  ;\r\n\r\n  return (returnedValue !== undefined)\r\n    ? returnedValue\r\n    : this\r\n  ;\r\n};\r\n\r\n$.fn.search.settings = {\r\n\r\n  name              : 'Search',\r\n  namespace         : 'search',\r\n\r\n  silent            : false,\r\n  debug             : false,\r\n  verbose           : false,\r\n  performance       : true,\r\n\r\n  // template to use (specified in settings.templates)\r\n  type              : 'standard',\r\n\r\n  // minimum characters required to search\r\n  minCharacters     : 1,\r\n\r\n  // whether to select first result after searching automatically\r\n  selectFirstResult : false,\r\n\r\n  // API config\r\n  apiSettings       : false,\r\n\r\n  // object to search\r\n  source            : false,\r\n\r\n  // Whether search should query current term on focus\r\n  searchOnFocus     : true,\r\n\r\n  // fields to search\r\n  searchFields   : [\r\n    'title',\r\n    'description'\r\n  ],\r\n\r\n  // field to display in standard results template\r\n  displayField   : '',\r\n\r\n  // search anywhere in value (set to 'exact' to require exact matches\r\n  fullTextSearch : 'exact',\r\n\r\n  // whether to add events to prompt automatically\r\n  automatic      : true,\r\n\r\n  // delay before hiding menu after blur\r\n  hideDelay      : 0,\r\n\r\n  // delay before searching\r\n  searchDelay    : 200,\r\n\r\n  // maximum results returned from search\r\n  maxResults     : 7,\r\n\r\n  // whether to store lookups in local cache\r\n  cache          : true,\r\n\r\n  // whether no results errors should be shown\r\n  showNoResults  : true,\r\n\r\n  // transition settings\r\n  transition     : 'scale',\r\n  duration       : 200,\r\n  easing         : 'easeOutExpo',\r\n\r\n  // callbacks\r\n  onSelect       : false,\r\n  onResultsAdd   : false,\r\n\r\n  onSearchQuery  : function(query){},\r\n  onResults      : function(response){},\r\n\r\n  onResultsOpen  : function(){},\r\n  onResultsClose : function(){},\r\n\r\n  className: {\r\n    animating : 'animating',\r\n    active    : 'active',\r\n    empty     : 'empty',\r\n    focus     : 'focus',\r\n    hidden    : 'hidden',\r\n    loading   : 'loading',\r\n    results   : 'results',\r\n    pressed   : 'down'\r\n  },\r\n\r\n  error : {\r\n    source          : 'Cannot search. No source used, and Semantic API module was not included',\r\n    noResults       : 'Your search returned no results',\r\n    logging         : 'Error in debug logging, exiting.',\r\n    noEndpoint      : 'No search endpoint was specified',\r\n    noTemplate      : 'A valid template name was not specified.',\r\n    oldSearchSyntax : 'searchFullText setting has been renamed fullTextSearch for consistency, please adjust your settings.',\r\n    serverError     : 'There was an issue querying the server.',\r\n    maxResults      : 'Results must be an array to use maxResults setting',\r\n    method          : 'The method you called is not defined.'\r\n  },\r\n\r\n  metadata: {\r\n    cache   : 'cache',\r\n    results : 'results',\r\n    result  : 'result'\r\n  },\r\n\r\n  regExp: {\r\n    escape     : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\r\n    beginsWith : '(?:\\s|^)'\r\n  },\r\n\r\n  // maps api response attributes to internal representation\r\n  fields: {\r\n    categories      : 'results',     // array of categories (category view)\r\n    categoryName    : 'name',        // name of category (category view)\r\n    categoryResults : 'results',     // array of results (category view)\r\n    description     : 'description', // result description\r\n    image           : 'image',       // result image\r\n    price           : 'price',       // result price\r\n    results         : 'results',     // array of results (standard)\r\n    title           : 'title',       // result title\r\n    url             : 'url',         // result url\r\n    action          : 'action',      // \"view more\" object name\r\n    actionText      : 'text',        // \"view more\" text\r\n    actionURL       : 'url'          // \"view more\" url\r\n  },\r\n\r\n  selector : {\r\n    prompt       : '.prompt',\r\n    searchButton : '.search.button',\r\n    results      : '.results',\r\n    message      : '.results > .message',\r\n    category     : '.category',\r\n    result       : '.result',\r\n    title        : '.title, .name'\r\n  },\r\n\r\n  templates: {\r\n    escape: function(string) {\r\n      var\r\n        badChars     = /[&<>\"'`]/g,\r\n        shouldEscape = /[&<>\"'`]/,\r\n        escape       = {\r\n          \"&\": \"&amp;\",\r\n          \"<\": \"&lt;\",\r\n          \">\": \"&gt;\",\r\n          '\"': \"&quot;\",\r\n          \"'\": \"&#x27;\",\r\n          \"`\": \"&#x60;\"\r\n        },\r\n        escapedChar  = function(chr) {\r\n          return escape[chr];\r\n        }\r\n      ;\r\n      if(shouldEscape.test(string)) {\r\n        return string.replace(badChars, escapedChar);\r\n      }\r\n      return string;\r\n    },\r\n    message: function(message, type) {\r\n      var\r\n        html = ''\r\n      ;\r\n      if(message !== undefined && type !== undefined) {\r\n        html +=  ''\r\n          + '<div class=\"message ' + type + '\">'\r\n        ;\r\n        // message type\r\n        if(type == 'empty') {\r\n          html += ''\r\n            + '<div class=\"header\">No Results</div class=\"header\">'\r\n            + '<div class=\"description\">' + message + '</div class=\"description\">'\r\n          ;\r\n        }\r\n        else {\r\n          html += ' <div class=\"description\">' + message + '</div>';\r\n        }\r\n        html += '</div>';\r\n      }\r\n      return html;\r\n    },\r\n    category: function(response, fields) {\r\n      var\r\n        html = '',\r\n        escape = $.fn.search.settings.templates.escape\r\n      ;\r\n      if(response[fields.categoryResults] !== undefined) {\r\n\r\n        // each category\r\n        $.each(response[fields.categoryResults], function(index, category) {\r\n          if(category[fields.results] !== undefined && category.results.length > 0) {\r\n\r\n            html  += '<div class=\"category\">';\r\n\r\n            if(category[fields.categoryName] !== undefined) {\r\n              html += '<div class=\"name\">' + category[fields.categoryName] + '</div>';\r\n            }\r\n\r\n            // each item inside category\r\n            html += '<div class=\"results\">';\r\n            $.each(category.results, function(index, result) {\r\n              if(result[fields.url]) {\r\n                html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\r\n              }\r\n              else {\r\n                html  += '<a class=\"result\">';\r\n              }\r\n              if(result[fields.image] !== undefined) {\r\n                html += ''\r\n                  + '<div class=\"image\">'\r\n                  + ' <img src=\"' + result[fields.image] + '\">'\r\n                  + '</div>'\r\n                ;\r\n              }\r\n              html += '<div class=\"content\">';\r\n              if(result[fields.price] !== undefined) {\r\n                html += '<div class=\"price\">' + result[fields.price] + '</div>';\r\n              }\r\n              if(result[fields.title] !== undefined) {\r\n                html += '<div class=\"title\">' + result[fields.title] + '</div>';\r\n              }\r\n              if(result[fields.description] !== undefined) {\r\n                html += '<div class=\"description\">' + result[fields.description] + '</div>';\r\n              }\r\n              html  += ''\r\n                + '</div>'\r\n              ;\r\n              html += '</a>';\r\n            });\r\n            html += '</div>';\r\n            html  += ''\r\n              + '</div>'\r\n            ;\r\n          }\r\n        });\r\n        if(response[fields.action]) {\r\n          html += ''\r\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\r\n          +   response[fields.action][fields.actionText]\r\n          + '</a>';\r\n        }\r\n        return html;\r\n      }\r\n      return false;\r\n    },\r\n    standard: function(response, fields) {\r\n      var\r\n        html = ''\r\n      ;\r\n      if(response[fields.results] !== undefined) {\r\n\r\n        // each result\r\n        $.each(response[fields.results], function(index, result) {\r\n          if(result[fields.url]) {\r\n            html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\r\n          }\r\n          else {\r\n            html  += '<a class=\"result\">';\r\n          }\r\n          if(result[fields.image] !== undefined) {\r\n            html += ''\r\n              + '<div class=\"image\">'\r\n              + ' <img src=\"' + result[fields.image] + '\">'\r\n              + '</div>'\r\n            ;\r\n          }\r\n          html += '<div class=\"content\">';\r\n          if(result[fields.price] !== undefined) {\r\n            html += '<div class=\"price\">' + result[fields.price] + '</div>';\r\n          }\r\n          if(result[fields.title] !== undefined) {\r\n            html += '<div class=\"title\">' + result[fields.title] + '</div>';\r\n          }\r\n          if(result[fields.description] !== undefined) {\r\n            html += '<div class=\"description\">' + result[fields.description] + '</div>';\r\n          }\r\n          html  += ''\r\n            + '</div>'\r\n          ;\r\n          html += '</a>';\r\n        });\r\n\r\n        if(response[fields.action]) {\r\n          html += ''\r\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\r\n          +   response[fields.action][fields.actionText]\r\n          + '</a>';\r\n        }\r\n        return html;\r\n      }\r\n      return false;\r\n    }\r\n  }\r\n};\r\n\r\n})( jQuery, window, document );\r\n","/*!\r\n * # Semantic UI 2.4.2 - Tab\r\n * http://github.com/semantic-org/semantic-ui/\r\n *\r\n *\r\n * Released under the MIT license\r\n * http://opensource.org/licenses/MIT\r\n *\r\n */\r\n\r\n;(function ($, window, document, undefined) {\r\n\r\n'use strict';\r\n\r\nwindow = (typeof window != 'undefined' && window.Math == Math)\r\n  ? window\r\n  : (typeof self != 'undefined' && self.Math == Math)\r\n    ? self\r\n    : Function('return this')()\r\n;\r\n\r\n$.fn.tab = function(parameters) {\r\n\r\n  var\r\n    // use window context if none specified\r\n    $allModules     = $.isFunction(this)\r\n        ? $(window)\r\n        : $(this),\r\n\r\n    moduleSelector  = $allModules.selector || '',\r\n    time            = new Date().getTime(),\r\n    performance     = [],\r\n\r\n    query           = arguments[0],\r\n    methodInvoked   = (typeof query == 'string'),\r\n    queryArguments  = [].slice.call(arguments, 1),\r\n\r\n    initializedHistory = false,\r\n    returnedValue\r\n  ;\r\n\r\n  $allModules\r\n    .each(function() {\r\n      var\r\n\r\n        settings        = ( $.isPlainObject(parameters) )\r\n          ? $.extend(true, {}, $.fn.tab.settings, parameters)\r\n          : $.extend({}, $.fn.tab.settings),\r\n\r\n        className       = settings.className,\r\n        metadata        = settings.metadata,\r\n        selector        = settings.selector,\r\n        error           = settings.error,\r\n\r\n        eventNamespace  = '.' + settings.namespace,\r\n        moduleNamespace = 'module-' + settings.namespace,\r\n\r\n        $module         = $(this),\r\n        $context,\r\n        $tabs,\r\n\r\n        cache           = {},\r\n        firstLoad       = true,\r\n        recursionDepth  = 0,\r\n        element         = this,\r\n        instance        = $module.data(moduleNamespace),\r\n\r\n        activeTabPath,\r\n        parameterArray,\r\n        module,\r\n\r\n        historyEvent\r\n\r\n      ;\r\n\r\n      module = {\r\n\r\n        initialize: function() {\r\n          module.debug('Initializing tab menu item', $module);\r\n          module.fix.callbacks();\r\n          module.determineTabs();\r\n\r\n          module.debug('Determining tabs', settings.context, $tabs);\r\n          // set up automatic routing\r\n          if(settings.auto) {\r\n            module.set.auto();\r\n          }\r\n          module.bind.events();\r\n\r\n          if(settings.history && !initializedHistory) {\r\n            module.initializeHistory();\r\n            initializedHistory = true;\r\n          }\r\n\r\n          module.instantiate();\r\n        },\r\n\r\n        instantiate: function () {\r\n          module.verbose('Storing instance of module', module);\r\n          instance = module;\r\n          $module\r\n            .data(moduleNamespace, module)\r\n          ;\r\n        },\r\n\r\n        destroy: function() {\r\n          module.debug('Destroying tabs', $module);\r\n          $module\r\n            .removeData(moduleNamespace)\r\n            .off(eventNamespace)\r\n          ;\r\n        },\r\n\r\n        bind: {\r\n          events: function() {\r\n            // if using $.tab don't add events\r\n            if( !$.isWindow( element ) ) {\r\n              module.debug('Attaching tab activation events to element', $module);\r\n              $module\r\n                .on('click' + eventNamespace, module.event.click)\r\n              ;\r\n            }\r\n          }\r\n        },\r\n\r\n        determineTabs: function() {\r\n          var\r\n            $reference\r\n          ;\r\n\r\n          // determine tab context\r\n          if(settings.context === 'parent') {\r\n            if($module.closest(selector.ui).length > 0) {\r\n              $reference = $module.closest(selector.ui);\r\n              module.verbose('Using closest UI element as parent', $reference);\r\n            }\r\n            else {\r\n              $reference = $module;\r\n            }\r\n            $context = $reference.parent();\r\n            module.verbose('Determined parent element for creating context', $context);\r\n          }\r\n          else if(settings.context) {\r\n            $context = $(settings.context);\r\n            module.verbose('Using selector for tab context', settings.context, $context);\r\n          }\r\n          else {\r\n            $context = $('body');\r\n          }\r\n          // find tabs\r\n          if(settings.childrenOnly) {\r\n            $tabs = $context.children(selector.tabs);\r\n            module.debug('Searching tab context children for tabs', $context, $tabs);\r\n          }\r\n          else {\r\n            $tabs = $context.find(selector.tabs);\r\n            module.debug('Searching tab context for tabs', $context, $tabs);\r\n          }\r\n        },\r\n\r\n        fix: {\r\n          callbacks: function() {\r\n            if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {\r\n              if(parameters.onTabLoad) {\r\n                parameters.onLoad = parameters.onTabLoad;\r\n                delete parameters.onTabLoad;\r\n                module.error(error.legacyLoad, parameters.onLoad);\r\n              }\r\n              if(parameters.onTabInit) {\r\n                parameters.onFirstLoad = parameters.onTabInit;\r\n                delete parameters.onTabInit;\r\n                module.error(error.legacyInit, parameters.onFirstLoad);\r\n              }\r\n              settings = $.extend(true, {}, $.fn.tab.settings, parameters);\r\n            }\r\n          }\r\n        },\r\n\r\n        initializeHistory: function() {\r\n          module.debug('Initializing page state');\r\n          if( $.address === undefined ) {\r\n            module.error(error.state);\r\n            return false;\r\n          }\r\n          else {\r\n            if(settings.historyType == 'state') {\r\n              module.debug('Using HTML5 to manage state');\r\n              if(settings.path !== false) {\r\n                $.address\r\n                  .history(true)\r\n                  .state(settings.path)\r\n                ;\r\n              }\r\n              else {\r\n                module.error(error.path);\r\n                return false;\r\n              }\r\n            }\r\n            $.address\r\n              .bind('change', module.event.history.change)\r\n            ;\r\n          }\r\n        },\r\n\r\n        event: {\r\n          click: function(event) {\r\n            var\r\n              tabPath = $(this).data(metadata.tab)\r\n            ;\r\n            if(tabPath !== undefined) {\r\n              if(settings.history) {\r\n                module.verbose('Updating page state', event);\r\n                $.address.value(tabPath);\r\n              }\r\n              else {\r\n                module.verbose('Changing tab', event);\r\n                module.changeTab(tabPath);\r\n              }\r\n              event.preventDefault();\r\n            }\r\n            else {\r\n              module.debug('No tab specified');\r\n            }\r\n          },\r\n          history: {\r\n            change: function(event) {\r\n              var\r\n                tabPath   = event.pathNames.join('/') || module.get.initialPath(),\r\n                pageTitle = settings.templates.determineTitle(tabPath) || false\r\n              ;\r\n              module.performance.display();\r\n              module.debug('History change event', tabPath, event);\r\n              historyEvent = event;\r\n              if(tabPath !== undefined) {\r\n                module.changeTab(tabPath);\r\n              }\r\n              if(pageTitle) {\r\n                $.address.title(pageTitle);\r\n              }\r\n            }\r\n          }\r\n        },\r\n\r\n        refresh: function() {\r\n          if(activeTabPath) {\r\n            module.debug('Refreshing tab', activeTabPath);\r\n            module.changeTab(activeTabPath);\r\n          }\r\n        },\r\n\r\n        cache: {\r\n\r\n          read: function(cacheKey) {\r\n            return (cacheKey !== undefined)\r\n              ? cache[cacheKey]\r\n              : false\r\n            ;\r\n          },\r\n          add: function(cacheKey, content) {\r\n            cacheKey = cacheKey || activeTabPath;\r\n            module.debug('Adding cached content for', cacheKey);\r\n            cache[cacheKey] = content;\r\n          },\r\n          remove: function(cacheKey) {\r\n            cacheKey = cacheKey || activeTabPath;\r\n            module.debug('Removing cached content for', cacheKey);\r\n            delete cache[cacheKey];\r\n          }\r\n        },\r\n\r\n        set: {\r\n          auto: function() {\r\n            var\r\n              url = (typeof settings.path == 'string')\r\n                ? settings.path.replace(/\\/$/, '') + '/{$tab}'\r\n                : '/{$tab}'\r\n            ;\r\n            module.verbose('Setting up automatic tab retrieval from server', url);\r\n            if($.isPlainObject(settings.apiSettings)) {\r\n              settings.apiSettings.url = url;\r\n            }\r\n            else {\r\n              settings.apiSettings = {\r\n                url: url\r\n              };\r\n            }\r\n          },\r\n          loading: function(tabPath) {\r\n            var\r\n              $tab      = module.get.tabElement(tabPath),\r\n              isLoading = $tab.hasClass(className.loading)\r\n            ;\r\n            if(!isLoading) {\r\n              module.verbose('Setting loading state for', $tab);\r\n              $tab\r\n                .addClass(className.loading)\r\n                .siblings($tabs)\r\n                  .removeClass(className.active + ' ' + className.loading)\r\n              ;\r\n              if($tab.length > 0) {\r\n                settings.onRequest.call($tab[0], tabPath);\r\n              }\r\n            }\r\n          },\r\n          state: function(state) {\r\n            $.address.value(state);\r\n          }\r\n        },\r\n\r\n        changeTab: function(tabPath) {\r\n          var\r\n            pushStateAvailable = (window.history && window.history.pushState),\r\n            shouldIgnoreLoad   = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),\r\n            remoteContent      = (settings.auto || $.isPlainObject(settings.apiSettings) ),\r\n            // only add default path if not remote content\r\n            pathArray = (remoteContent && !shouldIgnoreLoad)\r\n              ? module.utilities.pathToArray(tabPath)\r\n              : module.get.defaultPathArray(tabPath)\r\n          ;\r\n          tabPath = module.utilities.arrayToPath(pathArray);\r\n          $.each(pathArray, function(index, tab) {\r\n            var\r\n              currentPathArray   = pathArray.slice(0, index + 1),\r\n              currentPath        = module.utilities.arrayToPath(currentPathArray),\r\n\r\n              isTab              = module.is.tab(currentPath),\r\n              isLastIndex        = (index + 1 == pathArray.length),\r\n\r\n              $tab               = module.get.tabElement(currentPath),\r\n              $anchor,\r\n              nextPathArray,\r\n              nextPath,\r\n              isLastTab\r\n            ;\r\n            module.verbose('Looking for tab', tab);\r\n            if(isTab) {\r\n              module.verbose('Tab was found', tab);\r\n              // scope up\r\n              activeTabPath  = currentPath;\r\n              parameterArray = module.utilities.filterArray(pathArray, currentPathArray);\r\n\r\n              if(isLastIndex) {\r\n                isLastTab = true;\r\n              }\r\n              else {\r\n                nextPathArray = pathArray.slice(0, index + 2);\r\n                nextPath      = module.utilities.arrayToPath(nextPathArray);\r\n                isLastTab     = ( !module.is.tab(nextPath) );\r\n                if(isLastTab) {\r\n                  module.verbose('Tab parameters found', nextPathArray);\r\n                }\r\n              }\r\n              if(isLastTab && remoteContent) {\r\n                if(!shouldIgnoreLoad) {\r\n                  module.activate.navigation(currentPath);\r\n                  module.fetch.content(currentPath, tabPath);\r\n                }\r\n                else {\r\n                  module.debug('Ignoring remote content on first tab load', currentPath);\r\n                  firstLoad = false;\r\n                  module.cache.add(tabPath, $tab.html());\r\n                  module.activate.all(currentPath);\r\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\r\n                  settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\r\n                }\r\n                return false;\r\n              }\r\n              else {\r\n                module.debug('Opened local tab', currentPath);\r\n                module.activate.all(currentPath);\r\n                if( !module.cache.read(currentPath) ) {\r\n                  module.cache.add(currentPath, true);\r\n                  module.debug('First time tab loaded calling tab init');\r\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\r\n                }\r\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\r\n              }\r\n\r\n            }\r\n            else if(tabPath.search('/') == -1 && tabPath !== '') {\r\n              // look for in page anchor\r\n              $anchor     = $('#' + tabPath + ', a[name=\"' + tabPath + '\"]');\r\n              currentPath = $anchor.closest('[data-tab]').data(metadata.tab);\r\n              $tab        = module.get.tabElement(currentPath);\r\n              // if anchor exists use parent tab\r\n              if($anchor && $anchor.length > 0 && currentPath) {\r\n                module.debug('Anchor link used, opening parent tab', $tab, $anchor);\r\n                if( !$tab.hasClass(className.active) ) {\r\n                  setTimeout(function() {\r\n                    module.scrollTo($anchor);\r\n                  }, 0);\r\n                }\r\n                module.activate.all(currentPath);\r\n                if( !module.cache.read(currentPath) ) {\r\n                  module.cache.add(currentPath, true);\r\n                  module.debug('First time tab loaded calling tab init');\r\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\r\n                }\r\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\r\n                return false;\r\n              }\r\n            }\r\n            else {\r\n              module.error(error.missingTab, $module, $context, currentPath);\r\n              return false;\r\n            }\r\n          });\r\n        },\r\n\r\n        scrollTo: function($element) {\r\n          var\r\n            scrollOffset = ($element && $element.length > 0)\r\n              ? $element.offset().top\r\n              : false\r\n          ;\r\n          if(scrollOffset !== false) {\r\n            module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);\r\n            $(document).scrollTop(scrollOffset);\r\n          }\r\n        },\r\n\r\n        update: {\r\n          content: function(tabPath, html, evaluateScripts) {\r\n            var\r\n              $tab = module.get.tabElement(tabPath),\r\n              tab  = $tab[0]\r\n            ;\r\n            evaluateScripts = (evaluateScripts !== undefined)\r\n              ? evaluateScripts\r\n              : settings.evaluateScripts\r\n            ;\r\n            if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && typeof html !== 'string') {\r\n              $tab\r\n                .empty()\r\n                .append($(html).clone(true))\r\n              ;\r\n            }\r\n            else {\r\n              if(evaluateScripts) {\r\n                module.debug('Updating HTML and evaluating inline scripts', tabPath, html);\r\n                $tab.html(html);\r\n              }\r\n              else {\r\n                module.debug('Updating HTML', tabPath, html);\r\n                tab.innerHTML = html;\r\n              }\r\n            }\r\n          }\r\n        },\r\n\r\n        fetch: {\r\n\r\n          content: function(tabPath, fullTabPath) {\r\n            var\r\n              $tab        = module.get.tabElement(tabPath),\r\n              apiSettings = {\r\n                dataType         : 'html',\r\n                encodeParameters : false,\r\n                on               : 'now',\r\n                cache            : settings.alwaysRefresh,\r\n                headers          : {\r\n                  'X-Remote': true\r\n                },\r\n                onSuccess : function(response) {\r\n                  if(settings.cacheType == 'response') {\r\n                    module.cache.add(fullTabPath, response);\r\n                  }\r\n                  module.update.content(tabPath, response);\r\n                  if(tabPath == activeTabPath) {\r\n                    module.debug('Content loaded', tabPath);\r\n                    module.activate.tab(tabPath);\r\n                  }\r\n                  else {\r\n                    module.debug('Content loaded in background', tabPath);\r\n                  }\r\n                  settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);\r\n                  settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\r\n\r\n                  if(settings.loadOnce) {\r\n                    module.cache.add(fullTabPath, true);\r\n                  }\r\n                  else if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && $tab.children().length > 0) {\r\n                    setTimeout(function() {\r\n                      var\r\n                        $clone = $tab.children().clone(true)\r\n                      ;\r\n                      $clone = $clone.not('script');\r\n                      module.cache.add(fullTabPath, $clone);\r\n                    }, 0);\r\n                  }\r\n                  else {\r\n                    module.cache.add(fullTabPath, $tab.html());\r\n                  }\r\n                },\r\n                urlData: {\r\n                  tab: fullTabPath\r\n                }\r\n              },\r\n              request         = $tab.api('get request') || false,\r\n              existingRequest = ( request && request.state() === 'pending' ),\r\n              requestSettings,\r\n              cachedContent\r\n            ;\r\n\r\n            fullTabPath   = fullTabPath || tabPath;\r\n            cachedContent = module.cache.read(fullTabPath);\r\n\r\n\r\n            if(settings.cache && cachedContent) {\r\n              module.activate.tab(tabPath);\r\n              module.debug('Adding cached content', fullTabPath);\r\n              if(!settings.loadOnce) {\r\n                if(settings.evaluateScripts == 'once') {\r\n                  module.update.content(tabPath, cachedContent, false);\r\n                }\r\n                else {\r\n                  module.update.content(tabPath, cachedContent);\r\n                }\r\n              }\r\n              settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\r\n            }\r\n            else if(existingRequest) {\r\n              module.set.loading(tabPath);\r\n              module.debug('Content is already loading', fullTabPath);\r\n            }\r\n            else if($.api !== undefined) {\r\n              requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);\r\n              module.debug('Retrieving remote content', fullTabPath, requestSettings);\r\n              module.set.loading(tabPath);\r\n              $tab.api(requestSettings);\r\n            }\r\n            else {\r\n              module.error(error.api);\r\n            }\r\n          }\r\n        },\r\n\r\n        activate: {\r\n          all: function(tabPath) {\r\n            module.activate.tab(tabPath);\r\n            module.activate.navigation(tabPath);\r\n          },\r\n          tab: function(tabPath) {\r\n            var\r\n              $tab          = module.get.tabElement(tabPath),\r\n              $deactiveTabs = (settings.deactivate == 'siblings')\r\n                ? $tab.siblings($tabs)\r\n                : $tabs.not($tab),\r\n              isActive      = $tab.hasClass(className.active)\r\n            ;\r\n            module.verbose('Showing tab content for', $tab);\r\n            if(!isActive) {\r\n              $tab\r\n                .addClass(className.active)\r\n              ;\r\n              $deactiveTabs\r\n                .removeClass(className.active + ' ' + className.loading)\r\n              ;\r\n              if($tab.length > 0) {\r\n                settings.onVisible.call($tab[0], tabPath);\r\n              }\r\n            }\r\n          },\r\n          navigation: function(tabPath) {\r\n            var\r\n              $navigation         = module.get.navElement(tabPath),\r\n              $deactiveNavigation = (settings.deactivate == 'siblings')\r\n                ? $navigation.siblings($allModules)\r\n                : $allModules.not($navigation),\r\n              isActive    = $navigation.hasClass(className.active)\r\n            ;\r\n            module.verbose('Activating tab navigation for', $navigation, tabPath);\r\n            if(!isActive) {\r\n              $navigation\r\n                .addClass(className.active)\r\n              ;\r\n              $deactiveNavigation\r\n                .removeClass(className.active + ' ' + className.loading)\r\n              ;\r\n            }\r\n          }\r\n        },\r\n\r\n        deactivate: {\r\n          all: function() {\r\n            module.deactivate.navigation();\r\n            module.deactivate.tabs();\r\n          },\r\n          navigation: function() {\r\n            $allModules\r\n              .removeClass(className.active)\r\n            ;\r\n          },\r\n          tabs: function() {\r\n            $tabs\r\n              .removeClass(className.active + ' ' + className.loading)\r\n            ;\r\n          }\r\n        },\r\n\r\n        is: {\r\n          tab: function(tabName) {\r\n            return (tabName !== undefined)\r\n              ? ( module.get.tabElement(tabName).length > 0 )\r\n              : false\r\n            ;\r\n          }\r\n        },\r\n\r\n        get: {\r\n          initialPath: function() {\r\n            return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);\r\n          },\r\n          path: function() {\r\n            return $.address.value();\r\n          },\r\n          // adds default tabs to tab path\r\n          defaultPathArray: function(tabPath) {\r\n            return module.utilities.pathToArray( module.get.defaultPath(tabPath) );\r\n          },\r\n          defaultPath: function(tabPath) {\r\n            var\r\n              $defaultNav = $allModules.filter('[data-' + metadata.tab + '^=\"' + tabPath + '/\"]').eq(0),\r\n              defaultTab  = $defaultNav.data(metadata.tab) || false\r\n            ;\r\n            if( defaultTab ) {\r\n              module.debug('Found default tab', defaultTab);\r\n              if(recursionDepth < settings.maxDepth) {\r\n                recursionDepth++;\r\n                return module.get.defaultPath(defaultTab);\r\n              }\r\n              module.error(error.recursion);\r\n            }\r\n            else {\r\n              module.debug('No default tabs found for', tabPath, $tabs);\r\n            }\r\n            recursionDepth = 0;\r\n            return tabPath;\r\n          },\r\n          navElement: function(tabPath) {\r\n            tabPath = tabPath || activeTabPath;\r\n            return $allModules.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\r\n          },\r\n          tabElement: function(tabPath) {\r\n            var\r\n              $fullPathTab,\r\n              $simplePathTab,\r\n              tabPathArray,\r\n              lastTab\r\n            ;\r\n            tabPath        = tabPath || activeTabPath;\r\n            tabPathArray   = module.utilities.pathToArray(tabPath);\r\n            lastTab        = module.utilities.last(tabPathArray);\r\n            $fullPathTab   = $tabs.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\r\n            $simplePathTab = $tabs.filter('[data-' + metadata.tab + '=\"' + lastTab + '\"]');\r\n            return ($fullPathTab.length > 0)\r\n              ? $fullPathTab\r\n              : $simplePathTab\r\n            ;\r\n          },\r\n          tab: function() {\r\n            return activeTabPath;\r\n          }\r\n        },\r\n\r\n        utilities: {\r\n          filterArray: function(keepArray, removeArray) {\r\n            return $.grep(keepArray, function(keepValue) {\r\n              return ( $.inArray(keepValue, removeArray) == -1);\r\n            });\r\n          },\r\n          last: function(array) {\r\n            return $.isArray(array)\r\n              ? array[ array.length - 1]\r\n              : false\r\n            ;\r\n          },\r\n          pathToArray: function(pathName) {\r\n            if(pathName === undefined) {\r\n              pathName = activeTabPath;\r\n            }\r\n            return typeof pathName == 'string'\r\n              ? pathName.split('/')\r\n              : [pathName]\r\n            ;\r\n          },\r\n          arrayToPath: function(pathArray) {\r\n            return $.isArray(pathArray)\r\n              ? pathArray.join('/')\r\n              : false\r\n            ;\r\n          }\r\n        },\r\n\r\n        setting: function(name, value) {\r\n          module.debug('Changing setting', name, value);\r\n          if( $.isPlainObject(name) ) {\r\n            $.extend(true, settings, name);\r\n          }\r\n          else if(value !== undefined) {\r\n            if($.isPlainObject(settings[name])) {\r\n              $.extend(true, settings[name], value);\r\n            }\r\n            else {\r\n              settings[name] = value;\r\n            }\r\n          }\r\n          else {\r\n            return settings[name];\r\n          }\r\n        },\r\n        internal: function(name, value) {\r\n          if( $.isPlainObject(name) ) {\r\n            $.extend(true, module, name);\r\n          }\r\n          else if(value !== undefined) {\r\n            module[name] = value;\r\n          }\r\n          else {\r\n            return module[name];\r\n          }\r\n        },\r\n        debug: function() {\r\n          if(!settings.silent && settings.debug) {\r\n            if(settings.performance) {\r\n              module.performance.log(arguments);\r\n            }\r\n            else {\r\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\r\n              module.debug.apply(console, arguments);\r\n            }\r\n          }\r\n        },\r\n        verbose: function() {\r\n          if(!settings.silent && settings.verbose && settings.debug) {\r\n            if(settings.performance) {\r\n              module.performance.log(arguments);\r\n            }\r\n            else {\r\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\r\n              module.verbose.apply(console, arguments);\r\n            }\r\n          }\r\n        },\r\n        error: function() {\r\n          if(!settings.silent) {\r\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\r\n            module.error.apply(console, arguments);\r\n          }\r\n        },\r\n        performance: {\r\n          log: function(message) {\r\n            var\r\n              currentTime,\r\n              executionTime,\r\n              previousTime\r\n            ;\r\n            if(settings.performance) {\r\n              currentTime   = new Date().getTime();\r\n              previousTime  = time || currentTime;\r\n              executionTime = currentTime - previousTime;\r\n              time          = currentTime;\r\n              performance.push({\r\n                'Name'           : message[0],\r\n                'Arguments'      : [].slice.call(message, 1) || '',\r\n                'Element'        : element,\r\n                'Execution Time' : executionTime\r\n              });\r\n            }\r\n            clearTimeout(module.performance.timer);\r\n            module.performance.timer = setTimeout(module.performance.display, 500);\r\n          },\r\n          display: function() {\r\n            var\r\n              title = settings.name + ':',\r\n              totalTime = 0\r\n            ;\r\n            time = false;\r\n            clearTimeout(module.performance.timer);\r\n            $.each(performance, function(index, data) {\r\n              totalTime += data['Execution Time'];\r\n            });\r\n            title += ' ' + totalTime + 'ms';\r\n            if(moduleSelector) {\r\n              title += ' \\'' + moduleSelector + '\\'';\r\n            }\r\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\r\n              console.groupCollapsed(title);\r\n              if(console.table) {\r\n                console.table(performance);\r\n              }\r\n              else {\r\n                $.each(performance, function(index, data) {\r\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\r\n                });\r\n              }\r\n              console.groupEnd();\r\n            }\r\n            performance = [];\r\n          }\r\n        },\r\n        invoke: function(query, passedArguments, context) {\r\n          var\r\n            object = instance,\r\n            maxDepth,\r\n            found,\r\n            response\r\n          ;\r\n          passedArguments = passedArguments || queryArguments;\r\n          context         = element         || context;\r\n          if(typeof query == 'string' && object !== undefined) {\r\n            query    = query.split(/[\\. ]/);\r\n            maxDepth = query.length - 1;\r\n            $.each(query, function(depth, value) {\r\n              var camelCaseValue = (depth != maxDepth)\r\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\r\n                : query\r\n              ;\r\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\r\n                object = object[camelCaseValue];\r\n              }\r\n              else if( object[camelCaseValue] !== undefined ) {\r\n                found = object[camelCaseValue];\r\n                return false;\r\n              }\r\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\r\n                object = object[value];\r\n              }\r\n              else if( object[value] !== undefined ) {\r\n                found = object[value];\r\n                return false;\r\n              }\r\n              else {\r\n                module.error(error.method, query);\r\n                return false;\r\n              }\r\n            });\r\n          }\r\n          if ( $.isFunction( found ) ) {\r\n            response = found.apply(context, passedArguments);\r\n          }\r\n          else if(found !== undefined) {\r\n            response = found;\r\n          }\r\n          if($.isArray(returnedValue)) {\r\n            returnedValue.push(response);\r\n          }\r\n          else if(returnedValue !== undefined) {\r\n            returnedValue = [returnedValue, response];\r\n          }\r\n          else if(response !== undefined) {\r\n            returnedValue = response;\r\n          }\r\n          return found;\r\n        }\r\n      };\r\n      if(methodInvoked) {\r\n        if(instance === undefined) {\r\n          module.initialize();\r\n        }\r\n        module.invoke(query);\r\n      }\r\n      else {\r\n        if(instance !== undefined) {\r\n          instance.invoke('destroy');\r\n        }\r\n        module.initialize();\r\n      }\r\n    })\r\n  ;\r\n  return (returnedValue !== undefined)\r\n    ? returnedValue\r\n    : this\r\n  ;\r\n\r\n};\r\n\r\n// shortcut for tabbed content with no defined navigation\r\n$.tab = function() {\r\n  $(window).tab.apply(this, arguments);\r\n};\r\n\r\n$.fn.tab.settings = {\r\n\r\n  name            : 'Tab',\r\n  namespace       : 'tab',\r\n\r\n  silent          : false,\r\n  debug           : false,\r\n  verbose         : false,\r\n  performance     : true,\r\n\r\n  auto            : false,      // uses pjax style endpoints fetching content from same url with remote-content headers\r\n  history         : false,      // use browser history\r\n  historyType     : 'hash',     // #/ or html5 state\r\n  path            : false,      // base path of url\r\n\r\n  context         : false,      // specify a context that tabs must appear inside\r\n  childrenOnly    : false,      // use only tabs that are children of context\r\n  maxDepth        : 25,         // max depth a tab can be nested\r\n\r\n  deactivate      : 'siblings', // whether tabs should deactivate sibling menu elements or all elements initialized together\r\n\r\n  alwaysRefresh   : false,      // load tab content new every tab click\r\n  cache           : true,       // cache the content requests to pull locally\r\n  loadOnce        : false,      // Whether tab data should only be loaded once when using remote content\r\n  cacheType       : 'response', // Whether to cache exact response, or to html cache contents after scripts execute\r\n  ignoreFirstLoad : false,      // don't load remote content on first load\r\n\r\n  apiSettings     : false,      // settings for api call\r\n  evaluateScripts : 'once',     // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content\r\n\r\n  onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded\r\n  onLoad      : function(tabPath, parameterArray, historyEvent) {}, // called on every load\r\n  onVisible   : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible\r\n  onRequest   : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content\r\n\r\n  templates : {\r\n    determineTitle: function(tabArray) {} // returns page title for path\r\n  },\r\n\r\n  error: {\r\n    api        : 'You attempted to load content without API module',\r\n    method     : 'The method you called is not defined',\r\n    missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',\r\n    noContent  : 'The tab you specified is missing a content url.',\r\n    path       : 'History enabled, but no path was specified',\r\n    recursion  : 'Max recursive depth reached',\r\n    legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',\r\n    legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',\r\n    state      : 'History requires Asual\\'s Address library <https://github.com/asual/jquery-address>'\r\n  },\r\n\r\n  metadata : {\r\n    tab    : 'tab',\r\n    loaded : 'loaded',\r\n    promise: 'promise'\r\n  },\r\n\r\n  className   : {\r\n    loading : 'loading',\r\n    active  : 'active'\r\n  },\r\n\r\n  selector    : {\r\n    tabs : '.ui.tab',\r\n    ui   : '.ui'\r\n  }\r\n\r\n};\r\n\r\n})( jQuery, window, document );\r\n","/*\r\n *  jQuery StarRatingSvg v1.2.0\r\n *\r\n *  http://github.com/nashio/star-rating-svg\r\n *  Author: Ignacio Chavez\r\n *  hello@ignaciochavez.com\r\n *  Licensed under MIT\r\n */\r\n\r\n;(function ( $, window, document, undefined ) {\r\n\r\n  'use strict';\r\n\r\n  // Create the defaults once\r\n  var pluginName = 'starRating';\r\n  var noop = function(){};\r\n  var defaults = {\r\n    totalStars: 5,\r\n    useFullStars: false,\r\n    starShape: 'straight',\r\n    emptyColor: 'lightgray',\r\n    hoverColor: 'orange',\r\n    activeColor: 'gold',\r\n    ratedColor: 'crimson',\r\n    useGradient: true,\r\n    readOnly: false,\r\n    disableAfterRate: true,\r\n    baseUrl: false,\r\n    starGradient: {\r\n      start: '#FEF7CD',\r\n      end: '#FF9511'\r\n    },\r\n    strokeWidth: 4,\r\n    strokeColor: 'black',\r\n    initialRating: 0,\r\n    starSize: 40,\r\n    callback: noop,\r\n    onHover: noop,\r\n    onLeave: noop\r\n  };\r\n\r\n\t// The actual plugin constructor\r\n  var Plugin = function( element, options ) {\r\n    var _rating;\r\n    var newRating;\r\n    var roundFn;\r\n\r\n    this.element = element;\r\n    this.$el = $(element);\r\n    this.settings = $.extend( {}, defaults, options );\r\n\r\n    // grab rating if defined on the element\r\n    _rating = this.$el.data('rating') || this.settings.initialRating;\r\n\r\n    // round to the nearest half\r\n    roundFn = this.settings.forceRoundUp ? Math.ceil : Math.round;\r\n    newRating = (roundFn( _rating * 2 ) / 2).toFixed(1);\r\n    this._state = {\r\n      rating: newRating\r\n    };\r\n\r\n    // create unique id for stars\r\n    this._uid = Math.floor( Math.random() * 999 );\r\n\r\n    // override gradient if not used\r\n    if( !options.starGradient && !this.settings.useGradient ){\r\n      this.settings.starGradient.start = this.settings.starGradient.end = this.settings.activeColor;\r\n    }\r\n\r\n    this._defaults = defaults;\r\n    this._name = pluginName;\r\n    this.init();\r\n  };\r\n\r\n  var methods = {\r\n    init: function () {\r\n      this.renderMarkup();\r\n      this.addListeners();\r\n      this.initRating();\r\n    },\r\n\r\n    addListeners: function(){\r\n      if( this.settings.readOnly ){ return; }\r\n      this.$stars.on('mouseover', this.hoverRating.bind(this));\r\n      this.$stars.on('mouseout', this.restoreState.bind(this));\r\n      this.$stars.on('click', this.handleRating.bind(this));\r\n    },\r\n\r\n    // apply styles to hovered stars\r\n    hoverRating: function(e){\r\n      var index = this.getIndex(e);\r\n      this.paintStars(index, 'hovered');\r\n      this.settings.onHover(index + 1, this._state.rating, this.$el);\r\n    },\r\n\r\n    // clicked on a rate, apply style and state\r\n    handleRating: function(e){\r\n      var index = this.getIndex(e);\r\n      var rating = index + 1;\r\n\r\n      this.applyRating(rating, this.$el);\r\n      this.executeCallback( rating, this.$el );\r\n\r\n      if(this.settings.disableAfterRate){\r\n        this.$stars.off();\r\n      }\r\n    },\r\n\r\n    applyRating: function(rating){\r\n      var index = rating - 1;\r\n      // paint selected and remove hovered color\r\n      this.paintStars(index, 'rated');\r\n      this._state.rating = index + 1;\r\n      this._state.rated = true;\r\n    },\r\n\r\n    restoreState: function(e){\r\n      var index = this.getIndex(e);\r\n      var rating = this._state.rating || -1;\r\n      // determine star color depending on manually rated\r\n      var colorType = this._state.rated ? 'rated' : 'active';\r\n      this.paintStars(rating - 1, colorType);\r\n      this.settings.onLeave(index + 1, this._state.rating, this.$el);\r\n    },\r\n\r\n    getIndex: function(e){\r\n      var $target = $(e.currentTarget);\r\n      var width = $target.width();\r\n      var side = $(e.target).attr('data-side');\r\n      var minRating = this.settings.minRating;\r\n\r\n      // hovered outside the star, calculate by pixel instead\r\n      side = (!side) ? this.getOffsetByPixel(e, $target, width) : side;\r\n      side = (this.settings.useFullStars) ? 'right' : side ;\r\n\r\n      // get index for half or whole star\r\n      var index = $target.index() - ((side === 'left') ? 0.5 : 0);\r\n\r\n      // pointer is way to the left, rating should be none\r\n      index = ( index < 0.5 && (e.offsetX < width / 4) ) ? -1 : index;\r\n\r\n      // force minimum rating\r\n      index = ( minRating && minRating <= this.settings.totalStars && index < minRating ) ? minRating - 1 : index;\r\n      return index;\r\n    },\r\n\r\n    getOffsetByPixel: function(e, $target, width){\r\n      var leftX = e.pageX - $target.offset().left;\r\n      return ( leftX <= (width / 2) && !this.settings.useFullStars) ? 'left' : 'right';\r\n    },\r\n\r\n    initRating: function(){\r\n      this.paintStars(this._state.rating - 1, 'active');\r\n    },\r\n\r\n    paintStars: function(endIndex, stateClass){\r\n      var $polygonLeft;\r\n      var $polygonRight;\r\n      var leftClass;\r\n      var rightClass;\r\n\r\n      $.each(this.$stars, function(index, star){\r\n        $polygonLeft = $(star).find('[data-side=\"left\"]');\r\n        $polygonRight = $(star).find('[data-side=\"right\"]');\r\n        leftClass = rightClass = (index <= endIndex) ? stateClass : 'empty';\r\n\r\n        // has another half rating, add half star\r\n        leftClass = ( index - endIndex === 0.5 ) ? stateClass : leftClass;\r\n\r\n        $polygonLeft.attr('class', 'svg-'  + leftClass + '-' + this._uid);\r\n        $polygonRight.attr('class', 'svg-'  + rightClass + '-' + this._uid);\r\n\r\n      }.bind(this));\r\n    },\r\n\r\n    renderMarkup: function () {\r\n      var s = this.settings;\r\n      var baseUrl = s.baseUrl ? location.href.split('#')[0] : '';\r\n\r\n      // inject an svg manually to have control over attributes\r\n      var star = '<div class=\"jq-star\" style=\"width:' + s.starSize+ 'px;  height:' + s.starSize + 'px;\"><svg version=\"1.0\" class=\"jq-star-svg\" shape-rendering=\"geometricPrecision\" xmlns=\"http://www.w3.org/2000/svg\" ' + this.getSvgDimensions(s.starShape) +  ' stroke-width:' + s.strokeWidth + 'px;\" xml:space=\"preserve\"><style type=\"text/css\">.svg-empty-' + this._uid + '{fill:url(' + baseUrl + '#' + this._uid + '_SVGID_1_);}.svg-hovered-' + this._uid + '{fill:url(' + baseUrl + '#' + this._uid + '_SVGID_2_);}.svg-active-' + this._uid + '{fill:url(' + baseUrl + '#' + this._uid + '_SVGID_3_);}.svg-rated-' + this._uid + '{fill:' + s.ratedColor + ';}</style>' +\r\n\r\n      this.getLinearGradient(this._uid + '_SVGID_1_', s.emptyColor, s.emptyColor, s.starShape) +\r\n      this.getLinearGradient(this._uid + '_SVGID_2_', s.hoverColor, s.hoverColor, s.starShape) +\r\n      this.getLinearGradient(this._uid + '_SVGID_3_', s.starGradient.start, s.starGradient.end, s.starShape) +\r\n      this.getVectorPath(this._uid, {\r\n        starShape: s.starShape,\r\n        strokeWidth: s.strokeWidth,\r\n        strokeColor: s.strokeColor\r\n      } ) +\r\n      '</svg></div>';\r\n\r\n      // inject svg markup\r\n      var starsMarkup = '';\r\n      for( var i = 0; i < s.totalStars; i++){\r\n        starsMarkup += star;\r\n      }\r\n      this.$el.append(starsMarkup);\r\n      this.$stars = this.$el.find('.jq-star');\r\n    },\r\n\r\n    getVectorPath: function(id, attrs){\r\n      return (attrs.starShape === 'rounded') ?\r\n        this.getRoundedVectorPath(id, attrs) : this.getSpikeVectorPath(id, attrs);\r\n    },\r\n\r\n    getSpikeVectorPath: function(id, attrs){\r\n      return '<polygon data-side=\"center\" class=\"svg-empty-' + id + '\" points=\"281.1,129.8 364,55.7 255.5,46.8 214,-59 172.5,46.8 64,55.4 146.8,129.7 121.1,241 212.9,181.1 213.9,181 306.5,241 \" style=\"fill: transparent; stroke: ' + attrs.strokeColor + ';\" />' +\r\n        '<polygon data-side=\"left\" class=\"svg-empty-' + id + '\" points=\"281.1,129.8 364,55.7 255.5,46.8 214,-59 172.5,46.8 64,55.4 146.8,129.7 121.1,241 213.9,181.1 213.9,181 306.5,241 \" style=\"stroke-opacity: 0;\" />' +\r\n          '<polygon data-side=\"right\" class=\"svg-empty-' + id + '\" points=\"364,55.7 255.5,46.8 214,-59 213.9,181 306.5,241 281.1,129.8 \" style=\"stroke-opacity: 0;\" />';\r\n    },\r\n\r\n    getRoundedVectorPath: function(id, attrs){\r\n      var fullPoints = 'M520.9,336.5c-3.8-11.8-14.2-20.5-26.5-22.2l-140.9-20.5l-63-127.7 c-5.5-11.2-16.8-18.2-29.3-18.2c-12.5,0-23.8,7-29.3,18.2l-63,127.7L28,314.2C15.7,316,5.4,324.7,1.6,336.5S1,361.3,9.9,370 l102,99.4l-24,140.3c-2.1,12.3,2.9,24.6,13,32c5.7,4.2,12.4,6.2,19.2,6.2c5.2,0,10.5-1.2,15.2-3.8l126-66.3l126,66.2 c4.8,2.6,10,3.8,15.2,3.8c6.8,0,13.5-2.1,19.2-6.2c10.1-7.3,15.1-19.7,13-32l-24-140.3l102-99.4 C521.6,361.3,524.8,348.3,520.9,336.5z';\r\n\r\n      return '<path data-side=\"center\" class=\"svg-empty-' + id + '\" d=\"' + fullPoints + '\" style=\"stroke: ' + attrs.strokeColor + '; fill: transparent; \" /><path data-side=\"right\" class=\"svg-empty-' + id + '\" d=\"' + fullPoints + '\" style=\"stroke-opacity: 0;\" /><path data-side=\"left\" class=\"svg-empty-' + id + '\" d=\"M121,648c-7.3,0-14.1-2.2-19.8-6.4c-10.4-7.6-15.6-20.3-13.4-33l24-139.9l-101.6-99 c-9.1-8.9-12.4-22.4-8.6-34.5c3.9-12.1,14.6-21.1,27.2-23l140.4-20.4L232,164.6c5.7-11.6,17.3-18.8,30.2-16.8c0.6,0,1,0.4,1,1 v430.1c0,0.4-0.2,0.7-0.5,0.9l-126,66.3C132,646.6,126.6,648,121,648z\" style=\"stroke: ' + attrs.strokeColor + '; stroke-opacity: 0;\" />';\r\n    },\r\n\r\n    getSvgDimensions: function(starShape){\r\n      return (starShape === 'rounded') ? 'width=\"550px\" height=\"500.2px\" viewBox=\"0 146.8 550 500.2\" style=\"enable-background:new 0 0 550 500.2;' : 'x=\"0px\" y=\"0px\" width=\"305px\" height=\"305px\" viewBox=\"60 -62 309 309\" style=\"enable-background:new 64 -59 305 305;';\r\n    },\r\n\r\n    getLinearGradient: function(id, startColor, endColor, starShape){\r\n      var height = (starShape === 'rounded') ? 500 : 250;\r\n      return '<linearGradient id=\"' + id + '\" gradientUnits=\"userSpaceOnUse\" x1=\"0\" y1=\"-50\" x2=\"0\" y2=\"' + height + '\"><stop  offset=\"0\" style=\"stop-color:' + startColor + '\"/><stop  offset=\"1\" style=\"stop-color:' + endColor + '\"/> </linearGradient>';\r\n    },\r\n\r\n    executeCallback: function(rating, $el){\r\n      var callback = this.settings.callback;\r\n      callback(rating, $el);\r\n    }\r\n\r\n  };\r\n\r\n  var publicMethods = {\r\n\r\n    unload: function() {\r\n      var _name = 'plugin_' + pluginName;\r\n      var $el = $(this);\r\n      var $starSet = $el.data(_name).$stars;\r\n      $starSet.off();\r\n      $el.removeData(_name).remove();\r\n    },\r\n\r\n    setRating: function(rating, round) {\r\n      console.log('setRating', rating, round);\r\n      var _name = 'plugin_' + pluginName;\r\n      console.log(_name);\r\n      var $el = $(this);\r\n      var $plugin = $el.data(_name);\r\n      console.log($el.data('plugin_starRating'));\r\n      if( rating > $plugin.settings.totalStars || rating < 0 ) { return; }\r\n      if( round ){\r\n        rating = Math.round(rating);\r\n      }\r\n      $plugin.applyRating(rating);\r\n    },\r\n\r\n    getRating: function() {\r\n      var _name = 'plugin_' + pluginName;\r\n      var $el = $(this);\r\n      var $starSet = $el.data(_name);\r\n      return $starSet._state.rating;\r\n    },\r\n\r\n    resize: function(newSize) {\r\n      var _name = 'plugin_' + pluginName;\r\n      var $el = $(this);\r\n      var $starSet = $el.data(_name);\r\n      var $stars = $starSet.$stars;\r\n\r\n      if(newSize <= 1 || newSize > 200) {\r\n        console.log('star size out of bounds');\r\n        return;\r\n      }\r\n\r\n      $stars = Array.prototype.slice.call($stars);\r\n      $stars.forEach(function(star){\r\n        $(star).css({\r\n          'width': newSize + 'px',\r\n          'height': newSize + 'px'\r\n        });\r\n      });\r\n    },\r\n\r\n    setReadOnly: function(flag) {\r\n      var _name = 'plugin_' + pluginName;\r\n      var $el = $(this);\r\n      var $plugin = $el.data(_name);\r\n      if(flag === true){\r\n        $plugin.$stars.off('mouseover mouseout click');\r\n      } else {\r\n        $plugin.settings.readOnly = false;\r\n        $plugin.addListeners();\r\n      }\r\n    }\r\n\r\n  };\r\n\r\n\r\n  // Avoid Plugin.prototype conflicts\r\n  $.extend(Plugin.prototype, methods);\r\n\r\n  $.fn[ pluginName ] = function ( options ) {\r\n\r\n    // if options is a public method\r\n    if( !$.isPlainObject(options) ){\r\n      if( publicMethods.hasOwnProperty(options) ){\r\n        return publicMethods[options].apply(this, Array.prototype.slice.call(arguments, 1));\r\n      } else {\r\n        $.error('Method '+ options +' does not exist on ' + pluginName + '.js');\r\n      }\r\n    }\r\n\r\n    return this.each(function() {\r\n      // preventing against multiple instantiations\r\n      if ( !$.data( this, 'plugin_' + pluginName ) ) {\r\n        $.data( this, 'plugin_' + pluginName, new Plugin( this, options ) );\r\n      }\r\n    });\r\n  };\r\n\r\n})( jQuery, window, document );\r\n\r\n\r\n"],"names":["$","window","document","undefined","Math","self","Function","fn","search","parameters","returnedValue","$allModules","this","moduleSelector","selector","time","Date","getTime","performance","query","arguments","methodInvoked","queryArguments","slice","call","each","module","settings","isPlainObject","extend","className","metadata","regExp","fields","error","namespace","eventNamespace","moduleNamespace","$module","$prompt","find","prompt","$searchButton","searchButton","$results","results","$result","result","element","category","instance","data","disabledBubbled","resultsDismissed","initialize","verbose","get","determine","searchFields","bind","events","set","type","create","instantiate","destroy","off","removeData","refresh","debug","refreshResults","automatic","on","inputEvent","event","input","attr","focus","blur","handleKeyboard","mousedown","mouseup","click","searchDelay","clearTimeout","timer","setTimeout","is","focused","searchOnFocus","has","minimumCharacters","can","show","showResults","pageLostFocus","activeElement","callback","cancel","resultsClicked","one","inMessage","animating","hidden","$title","title","eq","$link","href","target","value","html","length","text","isFunction","onSelect","hideResults","ctrlKey","open","location","newIndex","$category","$activeResult","filter","active","currentIndex","index","resultSize","hasActiveResult","keyCode","which","keys","visible","preventDefault","removeClass","addClass","closest","buttonPressed","remove","buttonFocus","setup","api","searchTerm","apiSettings","cache","action","urlData","onSuccess","response","parse","onFailure","displayMessage","serverError","onAbort","onError","useAPI","empty","transition","hasClass","$target","contains","documentElement","message","searchFullText","fullTextSearch","oldSearchSyntax","oninput","onpropertychange","val","lookupFields","isArray","object","select","firstResult","first","loading","pressed","read","save","addResults","inject","id","source","local","remote","onSearchQuery","searchHTML","content","maxResults","categoryResults","generateResults","write","exactResults","fuzzyResults","searchExp","toString","replace","escape","matchRegExp","RegExp","beginsWith","addResult","array","notResult","inArray","notFuzzyResult","notExactResults","push","field","label","exactSearch","fuzzySearch","merge","term","toLowerCase","indexOf","termLength","queryLength","characterIndex","nextCharacterIndex","queryCharacter","charCodeAt","minCharacters","clear","name","resultIndex","categoryIndex","resultID","String","fromCharCode","appendTo","$selectedResult","children","onResultsAdd","selectFirstResult","animation","duration","onComplete","queue","stop","fadeIn","easing","onResultsOpen","fadeOut","onResultsClose","template","templates","isProperObject","isEmptyObject","isProperArray","noTemplate","showNoResults","noResults","onResults","setting","internal","silent","log","prototype","console","info","apply","currentTime","executionTime","display","totalTime","group","table","groupCollapsed","groupEnd","invoke","passedArguments","context","maxDepth","found","split","depth","camelCaseValue","charAt","toUpperCase","displayField","hideDelay","logging","noEndpoint","method","categories","categoryName","description","image","price","url","actionText","actionURL","string","test","chr","standard","jQuery","tab","initializedHistory","$context","$tabs","activeTabPath","parameterArray","historyEvent","firstLoad","recursionDepth","fix","callbacks","determineTabs","auto","history","initializeHistory","isWindow","$reference","ui","parent","childrenOnly","tabs","onTabLoad","onTabInit","onLoad","legacyLoad","onFirstLoad","legacyInit","address","state","historyType","path","change","tabPath","changeTab","pathNames","join","initialPath","pageTitle","determineTitle","cacheKey","add","$tab","tabElement","siblings","onRequest","shouldIgnoreLoad","pushState","ignoreFirstLoad","remoteContent","pathArray","utilities","pathToArray","defaultPathArray","arrayToPath","$anchor","nextPathArray","nextPath","isLastTab","currentPathArray","currentPath","isTab","isLastIndex","filterArray","activate","all","navigation","fetch","missingTab","scrollTo","$element","scrollOffset","offset","top","scrollTop","update","evaluateScripts","cacheType","append","clone","innerHTML","fullTabPath","requestSettings","cachedContent","dataType","encodeParameters","alwaysRefresh","headers","loadOnce","$clone","not","request","existingRequest","$deactiveTabs","deactivate","isActive","onVisible","$navigation","navElement","$deactiveNavigation","tabName","defaultPath","defaultTab","recursion","$fullPathTab","$simplePathTab","tabPathArray","lastTab","last","keepArray","removeArray","grep","keepValue","pathName","tabArray","noContent","loaded","promise","pluginName","noop","defaults","totalStars","useFullStars","starShape","emptyColor","hoverColor","activeColor","ratedColor","useGradient","readOnly","disableAfterRate","baseUrl","starGradient","start","end","strokeWidth","strokeColor","initialRating","starSize","onHover","onLeave","Plugin","options","_rating","newRating","$el","forceRoundUp","ceil","round","toFixed","_state","rating","_uid","floor","random","_defaults","_name","init","methods","renderMarkup","addListeners","initRating","$stars","hoverRating","restoreState","handleRating","e","getIndex","paintStars","applyRating","executeCallback","rated","colorType","currentTarget","width","side","minRating","getOffsetByPixel","offsetX","pageX","left","endIndex","stateClass","$polygonLeft","$polygonRight","leftClass","rightClass","star","s","getSvgDimensions","getLinearGradient","getVectorPath","starsMarkup","i","attrs","getRoundedVectorPath","getSpikeVectorPath","fullPoints","startColor","endColor","publicMethods","unload","setRating","$plugin","getRating","resize","newSize","Array","forEach","css","setReadOnly","flag","hasOwnProperty"],"sourceRoot":""}