hledger-web 0.23.3 → 0.24
raw patch · 95 files changed
+21920/−22886 lines, 95 filesdep −hamletdep −shakespeare-textdep ~blaze-htmldep ~blaze-markupdep ~hledgerbinary-addedPVP ok
version bump matches the API change (PVP)
Dependencies removed: hamlet, shakespeare-text
Dependency ranges changed: blaze-html, blaze-markup, hledger, hledger-lib, hledger-web, http-client, parsec, shakespeare, warp, yesod, yesod-test
API changes (from Hackage documentation)
Files
- Application.hs +2/−3
- CHANGES +34/−2
- Foundation.hs +245/−10
- Handler/Common.hs +66/−350
- Handler/JournalEditR.hs +2/−3
- Handler/JournalEntriesR.hs +21/−3
- Handler/JournalR.hs +60/−24
- Handler/Post.hs +95/−56
- Handler/RegisterR.hs +147/−24
- Handler/RootR.hs +2/−2
- Handler/SidebarR.hs +14/−0
- Handler/Utils.hs +2/−101
- Hledger/Web/Main.hs +5/−7
- Hledger/Web/Options.hs +1/−1
- Settings.hs +1/−1
- app/main.hs +13/−4
- config/favicon.ico binary
- config/keter.yaml +8/−0
- config/robots.txt +1/−0
- config/routes +5/−7
- config/settings.yml +19/−0
- hledger-web.cabal +106/−99
- static/css/bootstrap-theme.css +442/−0
- static/css/bootstrap-theme.css.map +1/−0
- static/css/bootstrap-theme.min.css +5/−0
- static/css/bootstrap.css +6202/−3989
- static/css/bootstrap.css.map +1/−0
- static/css/bootstrap.min.css +5/−0
- static/excanvas.js +0/−1427
- static/excanvas.min.js +0/−1
- static/favicon.ico binary
- static/fonts/glyphicons-halflings-regular.eot binary
- static/fonts/glyphicons-halflings-regular.svg +229/−0
- static/fonts/glyphicons-halflings-regular.ttf binary
- static/fonts/glyphicons-halflings-regular.woff binary
- static/hledger.css +262/−0
- static/hledger.js +303/−154
- static/img/glyphicons-halflings-white.png binary
- static/img/glyphicons-halflings.png binary
- static/jquery.flot.js +0/−2599
- static/jquery.flot.min.js +0/−6
- static/jquery.js +0/−9807
- static/jquery.min.js +0/−6
- static/jquery.url.js +0/−181
- static/js/bootstrap.js +2114/−0
- static/js/bootstrap.min.js +6/−0
- static/js/excanvas.js +1427/−0
- static/js/excanvas.min.js +1/−0
- static/js/jquery.colorhelpers.js +180/−0
- static/js/jquery.colorhelpers.min.js +1/−0
- static/js/jquery.cookie.js +117/−0
- static/js/jquery.flot.canvas.js +345/−0
- static/js/jquery.flot.canvas.min.js +7/−0
- static/js/jquery.flot.categories.js +190/−0
- static/js/jquery.flot.categories.min.js +7/−0
- static/js/jquery.flot.crosshair.js +176/−0
- static/js/jquery.flot.crosshair.min.js +7/−0
- static/js/jquery.flot.errorbars.js +353/−0
- static/js/jquery.flot.errorbars.min.js +7/−0
- static/js/jquery.flot.fillbetween.js +226/−0
- static/js/jquery.flot.fillbetween.min.js +7/−0
- static/js/jquery.flot.image.js +241/−0
- static/js/jquery.flot.image.min.js +7/−0
- static/js/jquery.flot.js +3168/−0
- static/js/jquery.flot.min.js +8/−0
- static/js/jquery.flot.navigate.js +346/−0
- static/js/jquery.flot.navigate.min.js +7/−0
- static/js/jquery.flot.pie.js +820/−0
- static/js/jquery.flot.pie.min.js +7/−0
- static/js/jquery.flot.resize.js +59/−0
- static/js/jquery.flot.resize.min.js +7/−0
- static/js/jquery.flot.selection.js +360/−0
- static/js/jquery.flot.selection.min.js +7/−0
- static/js/jquery.flot.stack.js +188/−0
- static/js/jquery.flot.stack.min.js +7/−0
- static/js/jquery.flot.symbol.js +71/−0
- static/js/jquery.flot.symbol.min.js +7/−0
- static/js/jquery.flot.threshold.js +142/−0
- static/js/jquery.flot.threshold.min.js +7/−0
- static/js/jquery.flot.time.js +432/−0
- static/js/jquery.flot.time.min.js +7/−0
- static/js/jquery.flot.tooltip.js +409/−0
- static/js/jquery.flot.tooltip.min.js +12/−0
- static/js/jquery.hotkeys.js +102/−0
- static/js/jquery.min.js +4/−0
- static/js/jquery.url.js +181/−0
- static/js/typeahead.bundle.js +1782/−0
- static/js/typeahead.bundle.min.js +7/−0
- static/select2-spinner.gif binary
- static/select2.css +0/−652
- static/select2.js +0/−3054
- static/select2.min.js +0/−22
- static/select2.png binary
- static/style.css +0/−291
- templates/default-layout-wrapper.hamlet +55/−0
@@ -31,9 +31,8 @@ -- Don't forget to add new modules to your cabal file! import Handler.RootR import Handler.JournalR-import Handler.JournalEditR-import Handler.JournalEntriesR import Handler.RegisterR+import Handler.SidebarR import Hledger.Web.Options (WebOpts(..), defwebopts) import Hledger.Data (Journal, nulljournal)@@ -78,7 +77,7 @@ getApplicationDev :: IO (Int, Application) getApplicationDev = do f <- journalFilePathFromOpts defcliopts- j <- either error' id `fmap` readJournalFile Nothing Nothing f+ j <- either error' id `fmap` readJournalFile Nothing Nothing True f defaultDevelApp loader (makeApplication defwebopts j) where loader = Yesod.Default.Config.loadConfig (configSettings Development)
@@ -1,8 +1,40 @@-See also the hledger changelog.+User-visible changes in hledger-web (see also hledger): +0.24 (unreleased)++General:+- fix: add missing hs/js files to package+- the web UI has been streamlined, dropping the raw and entries views and+ the edit form+- the help dialog has been improved+- keyboard shortcuts are now available+- the sidebar can be toggled open or closed (press s)++Journal view:+- layout tweaks for less truncation of descriptions and account names++Register view:+- fix: don't show all zero amounts when searching by account within an+ account register view+- chart improvements: show zero balances with correct commodity; show+ accurate balance at all dates; show transaction events & tooltips;+ show zero/today lines & background colors++Add form:+- parses data more strictly and gives better errors (eg #194)+- allows any number of postings, not just two+- after adding a transaction, goes back to the journal+- keyboard shortcut (a) allows quick access++Dependencies:+- allow warp 3*, wai-handler-launch 3*+- require yesod 1.4* (fixes #212)+- js updated (jquery, bootstrap, flot), added (typeahead, cookie, hotkeys),+ removed (select2)+ 0.23.3 (2014/9/12) -- web: remove warp, wai-handler-launch upper bounds (fixes #205)+- remove warp, wai-handler-launch upper bounds (fixes #205) 0.23.2 (2014/5/8)
@@ -8,6 +8,7 @@ module Foundation where import Prelude+import Control.Applicative ((<$>)) import Data.IORef import Yesod import Yesod.Static@@ -31,7 +32,24 @@ -- import Hledger.Web.Settings -- import Hledger.Web.Settings.StaticFiles +-- for addform+import Data.List+import Data.Maybe+import Data.Text as Text (Text,pack,unpack)+import Data.Time.Calendar+import System.FilePath (takeFileName)+#if BLAZE_HTML_0_4+import Text.Blaze (preEscapedString)+#else+import Text.Blaze.Internal (preEscapedString)+#endif+import Text.JSON+import Hledger.Data.Journal+import Hledger.Query+import Hledger hiding (is)+import Hledger.Cli hiding (version) + -- | The site argument for your application. This can be a good place to -- keep settings and values requiring initialization before your application -- starts running, such as database connections. Every handler will have@@ -103,19 +121,28 @@ pc <- widgetToPageContent $ do $(widgetFile "normalize")- addStylesheet $ StaticR css_bootstrap_css- -- load jquery early:- toWidgetHead [hamlet| <script type="text/javascript" src="@{StaticR jquery_min_js}"></script> |]- addScript $ StaticR jquery_url_js- addScript $ StaticR jquery_flot_min_js- toWidget [hamlet| \<!--[if lte IE 8]> <script type="text/javascript" src="@{StaticR excanvas_min_js}"></script> <![endif]--> |]- addScript $ StaticR select2_min_js- addStylesheet $ StaticR select2_css- addStylesheet $ StaticR style_css+ addStylesheet $ StaticR css_bootstrap_min_css+ -- load these things early, in HEAD:+ toWidgetHead [hamlet|+ <script type="text/javascript" src="@{StaticR js_jquery_min_js}"></script>+ <script type="text/javascript" src="@{StaticR js_typeahead_bundle_min_js}"></script>+ |]+ addScript $ StaticR js_bootstrap_min_js+ -- addScript $ StaticR js_typeahead_bundle_min_js+ addScript $ StaticR js_jquery_url_js+ addScript $ StaticR js_jquery_cookie_js+ addScript $ StaticR js_jquery_hotkeys_js+ addScript $ StaticR js_jquery_flot_min_js+ addScript $ StaticR js_jquery_flot_time_min_js+ addScript $ StaticR js_jquery_flot_tooltip_min_js+ toWidget [hamlet| \<!--[if lte IE 8]> <script type="text/javascript" src="@{StaticR js_excanvas_min_js}"></script> <![endif]--> |]+ addStylesheet $ StaticR hledger_css addScript $ StaticR hledger_js $(widgetFile "default-layout") - hamletToRepHtml $(hamletFile "templates/default-layout-wrapper.hamlet")+ staticRootUrl <- (staticRoot . settings) <$> getYesod+ vd@VD{..} <- getViewData+ withUrlRenderer $(hamletFile "templates/default-layout-wrapper.hamlet") -- This is done to provide an optimization for serving static files from -- a separate domain. Please see the staticRoot setting in Settings.hs@@ -154,3 +181,211 @@ -- wiki: -- -- https://github.com/yesodweb/yesod/wiki/Sending-email+++----------------------------------------------------------------------+-- template and handler utilities++-- view data, used by the add form and handlers++-- | A bundle of data useful for hledger-web request handlers and templates.+data ViewData = VD {+ opts :: WebOpts -- ^ the command-line options at startup+ ,here :: AppRoute -- ^ the current route+ ,msg :: Maybe Html -- ^ the current UI message if any, possibly from the current request+ ,today :: Day -- ^ today's date (for queries containing relative dates)+ ,j :: Journal -- ^ the up-to-date parsed unfiltered journal+ ,q :: String -- ^ the current q parameter, the main query expression+ ,m :: Query -- ^ a query parsed from the q parameter+ ,qopts :: [QueryOpt] -- ^ query options parsed from the q parameter+ ,am :: Query -- ^ a query parsed from the accounts sidebar query expr ("a" parameter)+ ,aopts :: [QueryOpt] -- ^ query options parsed from the accounts sidebar query expr+ ,showpostings :: Bool -- ^ current p parameter, 1 or 0 shows/hides all postings where applicable+ ,showsidebar :: Bool -- ^ current showsidebar cookie value+ }++-- | Make a default ViewData, using day 0 as today's date.+nullviewdata :: ViewData+nullviewdata = viewdataWithDateAndParams nulldate "" "" ""++-- | Make a ViewData using the given date and request parameters, and defaults elsewhere.+viewdataWithDateAndParams :: Day -> String -> String -> String -> ViewData+viewdataWithDateAndParams d q a p =+ let (querymatcher,queryopts) = parseQuery d q+ (acctsmatcher,acctsopts) = parseQuery d a+ in VD {+ opts = defwebopts+ ,j = nulljournal+ ,here = RootR+ ,msg = Nothing+ ,today = d+ ,q = q+ ,m = querymatcher+ ,qopts = queryopts+ ,am = acctsmatcher+ ,aopts = acctsopts+ ,showpostings = p == "1"+ ,showsidebar = False+ }++-- | Gather data used by handlers and templates in the current request.+getViewData :: Handler ViewData+getViewData = do+ app <- getYesod+ let opts@WebOpts{cliopts_=copts@CliOpts{reportopts_=ropts}} = appOpts app+ (j, err) <- getCurrentJournal app copts{reportopts_=ropts{no_elide_=True}}+ msg <- getMessageOr err+ Just here <- getCurrentRoute+ today <- liftIO getCurrentDay+ q <- getParameterOrNull "q"+ a <- getParameterOrNull "a"+ p <- getParameterOrNull "p"++ -- a "sidebar" query parameter overrides the "showsidebar" cookie+ sidebarparam <- lookupGetParam (pack "sidebar")+ cookies <- reqCookies <$> getRequest+ let sidebarcookie = lookup "showsidebar" cookies+ let showsidebar = maybe (sidebarcookie == Just "1") (=="1") sidebarparam++ return (viewdataWithDateAndParams today q a p){+ opts=opts+ ,msg=msg+ ,here=here+ ,today=today+ ,j=j+ ,showsidebar=showsidebar+ }+ where+ -- | Update our copy of the journal if the file changed. If there is an+ -- error while reloading, keep the old one and return the error, and set a+ -- ui message.+ getCurrentJournal :: App -> CliOpts -> Handler (Journal, Maybe String)+ getCurrentJournal app opts = do+ -- XXX put this inside atomicModifyIORef' for thread safety+ j <- liftIO $ readIORef $ appJournal app+ (jE, changed) <- liftIO $ journalReloadIfChanged opts j+ if not changed+ then return (j,Nothing)+ else case jE of+ Right j' -> do liftIO $ writeIORef (appJournal app) j'+ return (j',Nothing)+ Left e -> do setMessage $ "error while reading" {- ++ ": " ++ e-}+ return (j, Just e)++ -- | Get the named request parameter, or the empty string if not present.+ getParameterOrNull :: String -> Handler String+ getParameterOrNull p = unpack `fmap` fromMaybe "" <$> lookupGetParam (pack p)++-- | Get the message set by the last request, or the newer message provided, if any.+getMessageOr :: Maybe String -> Handler (Maybe Html)+getMessageOr mnewmsg = do+ oldmsg <- getMessage+ return $ maybe oldmsg (Just . toHtml) mnewmsg++-- add form dialog, part of the default template++-- | Add transaction form.+addform :: Text -> ViewData -> HtmlUrl AppRoute+addform _ vd@VD{..} = [hamlet|++<script language="javascript">+ jQuery(document).ready(function() {++ /* set up typeahead fields */++ datesSuggester = new Bloodhound({+ local:#{listToJsonValueObjArrayStr dates},+ limit:100,+ datumTokenizer: function(d) { return [d.value]; },+ queryTokenizer: function(q) { return [q]; }+ });+ datesSuggester.initialize();++ descriptionsSuggester = new Bloodhound({+ local:#{listToJsonValueObjArrayStr descriptions},+ limit:100,+ datumTokenizer: function(d) { return [d.value]; },+ queryTokenizer: function(q) { return [q]; }+ });+ descriptionsSuggester.initialize();++ accountsSuggester = new Bloodhound({+ local:#{listToJsonValueObjArrayStr accts},+ limit:100,+ datumTokenizer: function(d) { return [d.value]; },+ queryTokenizer: function(q) { return [q]; }+ /*+ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),+ datumTokenizer: Bloodhound.tokenizers.whitespace(d.value)+ queryTokenizer: Bloodhound.tokenizers.whitespace+ */+ });+ accountsSuggester.initialize();++ enableTypeahead(jQuery('input#date'), datesSuggester);+ enableTypeahead(jQuery('input#description'), descriptionsSuggester);+ enableTypeahead(jQuery('input#account1, input#account2, input#account3, input#account4'), accountsSuggester);++ });++<form#addform method=POST style="position:relative;">+ <table.form style="width:100%; white-space:nowrap;">+ <tr>+ <td colspan=4>+ <table style="width:100%;">+ <tr#descriptionrow>+ <td>+ <input #date .typeahead .form-control .input-lg type=text size=15 name=date placeholder="Date" value=#{date}>+ <td>+ <input #description .typeahead .form-control .input-lg type=text size=40 name=description placeholder="Description">+ $forall n <- postingnums+ ^{postingfields vd n}+ <span style="padding-left:2em;">+ <span .small>+ Tab in last field for <a .small href="#" onclick="addformAddPosting(); return false;">more</a> (or ctrl +, ctrl -)+|]+ where+ date = "today" :: String+ dates = ["today","yesterday","tomorrow"] :: [String]+ descriptions = sort $ nub $ map tdescription $ jtxns j+ accts = sort $ journalAccountNamesUsed j+ listToJsonValueObjArrayStr as = preEscapedString $ encode $ JSArray $ map (\a -> JSObject $ toJSObject [("value", showJSON a)]) as+ numpostings = 4+ postingnums = [1..numpostings]+ postingfields :: ViewData -> Int -> HtmlUrl AppRoute+ postingfields _ n = [hamlet|+<tr .posting>+ <td style="padding-left:2em;">+ <input ##{acctvar} .account-input .typeahead .form-control .input-lg style="width:100%;" type=text name=#{acctvar} placeholder="#{acctph}">+ ^{amtfieldorsubmitbtn}+|]+ where+ islast = n == numpostings+ acctvar = "account" ++ show n+ acctph = "Account " ++ show n+ amtfieldorsubmitbtn+ | not islast = [hamlet|+ <td>+ <input ##{amtvar} .amount-input .form-control .input-lg type=text size=10 name=#{amtvar} placeholder="#{amtph}">+ |]+ | otherwise = [hamlet|+ <td #addbtncell style="text-align:right;">+ <input type=hidden name=action value=add>+ <button type=submit .btn .btn-lg name=submit>add+ $if length files' > 1+ <br>to: ^{journalselect files'}+ |]+ where+ amtvar = "amount" ++ show n+ amtph = "Amount " ++ show n+ files' = [(takeFileName f,s) | (f,s) <- files j]++ -- <button .btn style="font-size:18px;" type=submit title="Add this transaction">Add++journalselect :: [(FilePath,String)] -> HtmlUrl AppRoute+journalselect journalfiles = [hamlet|+<select id=journalselect name=journal onchange="/*journalSelect(event)*/">+ $forall f <- journalfiles+ <option value=#{fst f}>#{fst f}+|]+
@@ -6,7 +6,6 @@ import Import import Data.List-import Data.Maybe import Data.Text(pack) import Data.Time.Calendar import System.FilePath (takeFileName)@@ -16,7 +15,6 @@ import Text.Blaze.Internal (preEscapedString) #endif import Text.Printf-import Text.JSON import Hledger.Utils import Hledger.Data@@ -25,31 +23,67 @@ import Hledger.Cli.Options import Hledger.Web.Options -import Handler.Utils- ---------------------------------------------------------------------------------- Page components+-- Common page layout +-- | Standard hledger-web page layout.+hledgerLayout :: ViewData -> String -> HtmlUrl AppRoute -> HandlerT App IO Html+hledgerLayout vd title content = do+ defaultLayout $ do+ setTitle $ toHtml $ title ++ " - hledger-web"+ toWidget [hamlet|+ <div#content>+ $if showsidebar vd+ <div#sidebar>+ <div#sidebar-spacer>+ <div#sidebar-body>+ ^{sidebar vd}+ $else+ <div#sidebar style="display:none;">+ <div#sidebar-spacer>+ <div#sidebar-body>+ <div#main>+ ^{topbar vd}+ <div#maincontent>+ ^{searchform vd}+ ^{content}+ |]+ -- | Global toolbar/heading area. topbar :: ViewData -> HtmlUrl AppRoute topbar VD{..} = [hamlet|-<div#topbar>- <a.topleftlink href=#{hledgerorgurl} title="More about hledger">- hledger-web- <br />- \#{version}- <a.toprightlink href=#{manualurl} target=hledgerhelp title="User manual">manual- <h1>#{title}-$maybe m' <- msg- <div#message>#{m'}+<nav class="navbar" role="navigation">+ <div#topbar>+ <h1>#{title}+ $maybe m' <- msg+ <div#message>#{m'} |] where title = takeFileName $ journalFilePath j -- | The sidebar used on most views. sidebar :: ViewData -> HtmlUrl AppRoute-sidebar vd@VD{..} = balanceReportAsHtml opts vd $ balanceReport (reportopts_ $ cliopts_ opts){empty_=True} am j+sidebar vd@VD{..} =+ [hamlet|+ <a href=@{JournalR} title="Go back to top">+ hledger-web + <p>+ <!--+ <a#sidebartogglebtn role="button" style="cursor:pointer;" onclick="sidebarToggle()" title="Show/hide sidebar">+ <span class="glyphicon glyphicon-expand"></span>+ -->+ <br>+ <div#sidebar-content>+ <p style="margin-top:1em;">+ <a href=@{JournalR} .#{journalcurrent} title="Show general journal entries, most recent first" style="white-space:nowrap;">Journal+ <div#accounts style="margin-top:1em;">+ ^{accounts}+|]+ where+ journalcurrent = if here == JournalR then "current" else "" :: String+ accounts = balanceReportAsHtml opts vd $ balanceReport (reportopts_ $ cliopts_ opts){empty_=True} am j+ -- -- | Navigation link, preserving parameters and possibly highlighted. -- navlink :: ViewData -> String -> AppRoute -> String -> HtmlUrl AppRoute -- navlink VD{..} s dest title = [hamlet|@@ -75,149 +109,17 @@ <form#searchform.form method=GET> <table width="100%"> <tr>- <td width="99%">- <input name=q value=#{q} style="width:98%;">- <td width="1%">- <input type=submit value="Search">- <tr valign=top>- <td colspan=2 style="text-align:right;">+ <td width="99%" style="position:relative;"> $if filtering- \ #- <span.showall>- <a href=@{here}>clear- \ #- <a#search-help-link href="#" title="Toggle search help">help- <tr>- <td colspan=2>- <div#search-help.help style="display:none;">- Leave blank to see journal (all transactions), or click account links to see transactions under that account.- <br>- Transactions/postings may additionally be filtered by- acct:REGEXP (target account), #- code:REGEXP (transaction code), #- desc:REGEXP (description), #- date:PERIODEXP (date), #- date2:PERIODEXP (secondary date), #- tag:TAG[=REGEX] (tag and optionally tag value), #- depth:N (accounts at or above this depth), #- status:*, status:!, status: (cleared status), #- real:BOOL (real/virtual-ness), #- empty:BOOL (is amount zero), #- amt:N, amt:<N, amt:>N (test magnitude of single-commodity amount).- sym:REGEXP (commodity symbol), #- <br>- Prepend not: to negate, enclose multi-word patterns in quotes, multiple search terms are AND'ed.+ <a role=button .btn .close style="position:absolute; right:0; padding-right:.1em; padding-left:.1em; margin-right:.1em; margin-left:.1em; font-size:24px;" href="@{here}" title="Clear search terms">×+ <input .form-control style="font-size:18px; padding-bottom:2px;" name=q value=#{q} title="Enter hledger search patterns to filter the data below">+ <td width="1%" style="white-space:nowrap;">+ <button .btn style="font-size:18px;" type=submit title="Apply search terms">Search+ <button .btn style="font-size:18px;" type=button data-toggle="modal" data-target="#helpmodal" title="Show search and general help">? |] where filtering = not $ null q --- | Add transaction form.-addform :: Text -> ViewData -> HtmlUrl AppRoute-addform _ vd@VD{..} = [hamlet|-<script type=text/javascript>- \$(document).ready(function() {- /* select2 setup */- var param = {- "width": "250px",- "openOnEnter": false,- // createSearchChoice allows to create new values not in the options- "createSearchChoice":function(term, data) {- if ( $(data).filter( function() {- return this.text.localeCompare(term)===0;- }).length===0) {- return {text:term};- }- },- // id is what is passed during post- "id": function(object) {- return object.text;- }- };- \$("#description").select2($.extend({}, param, {data: #{toSelectData descriptions} }));- var accountData = $.extend({}, param, {data: #{toSelectData acctnames} });- \$("#account1").select2(accountData);- \$("#account2").select2(accountData);- });--<form#addform method=POST style=display:none;>- <h2#contenttitle>#{title}- <table.form>- <tr>- <td colspan=4>- <table>- <tr#descriptionrow>- <td>- Date:- <td>- <input.textinput size=15 name=date value=#{date}>- <td style=padding-left:1em;>- Description:- <td>- <input type=hidden id=description name=description>- <tr.helprow>- <td>- <td>- <span.help>#{datehelp} #- <td>- <td>- <span.help>#{deschelp}- ^{postingfields vd 1}- ^{postingfields vd 2}- <tr#addbuttonrow>- <td colspan=4>- <input type=hidden name=action value=add>- <input type=submit name=submit value="add transaction">- $if manyfiles- \ to: ^{journalselect $ files j}- \ or #- <a href="#" onclick="return addformToggle(event)">cancel-|]- where- title = "Add transaction" :: String- datehelp = "eg: 2010/7/20" :: String- deschelp = "eg: supermarket (optional)" :: String- date = "today" :: String- descriptions = sort $ nub $ map tdescription $ jtxns j- acctnames = sort $ journalAccountNamesUsed j- -- Construct data for select2. Text must be quoted in a json string.- toSelectData as = preEscapedString $ encode $ JSArray $ map (\a -> JSObject $ toJSObject [("text", showJSON a)]) as- manyfiles = (length $ files j) > 1- postingfields :: ViewData -> Int -> HtmlUrl AppRoute- postingfields _ n = [hamlet|-<tr#postingrow>- <td align=right>#{acctlabel}:- <td>- <input type=hidden id=#{acctvar} name=#{acctvar}>- ^{amtfield}-<tr.helprow>- <td>- <td>- <span.help>#{accthelp}- <td>- <td>- <span.help>#{amthelp}-|]- where- withnumber = (++ show n)- acctvar = withnumber "account"- amtvar = withnumber "amount"- (acctlabel, accthelp, amtfield, amthelp)- | n == 1 = ("To account"- ,"eg: expenses:food"- ,[hamlet|-<td style=padding-left:1em;>- Amount:-<td>- <input.textinput size=15 name=#{amtvar} value="">-|]- ,"eg: $6"- )- | otherwise = ("From account" :: String- ,"eg: assets:bank:checking" :: String- ,nulltemplate- ,"" :: String- )- -- | Edit journal form. editform :: ViewData -> HtmlUrl AppRoute editform VD{..} = [hamlet|@@ -247,7 +149,7 @@ |] where title = "Edit journal" :: String- manyfiles = (length $ files j) > 1+ manyfiles = length (files j) > 1 formathelp = helplink "file-format" "file format help" -- | Import journal form.@@ -264,13 +166,6 @@ <a href="#" onclick="return importformToggle(event)">cancel |] -journalselect :: [(FilePath,String)] -> HtmlUrl AppRoute-journalselect journalfiles = [hamlet|-<select id=journalselect name=journal onchange="editformJournalSelect(event)">- $forall f <- journalfiles- <option value=#{fst f}>#{fst f}-|]- -- | Link to a topic in the manual. helplink :: String -> String -> HtmlUrl AppRoute helplink topic label = [hamlet|@@ -285,63 +180,36 @@ ---------------------------------------------------------------------- -- hledger report renderers --- | Render an "BalanceReport" as html.+-- | Render a "BalanceReport" as html. balanceReportAsHtml :: WebOpts -> ViewData -> BalanceReport -> HtmlUrl AppRoute balanceReportAsHtml _ vd@VD{..} (items',total) = [hamlet|-<div#accountsheading>- <a#accounts-toggle-link.togglelink href="#" title="Toggle sidebar">[+]-<div#accounts> <table.balancereport> <tr>- <td.add colspan=3>- <br>- <a#addformlink href="#" onclick="return addformToggle(event)" title="Add a new transaction to the journal">Add a transaction..-- <tr.item :allaccts:.inacct>- <td.journal colspan=3>- <br>- <a href=@{JournalR} title="Show all transactions in journal format">Journal- <span.hoverlinks>- - <a href=@{JournalEntriesR} title="Show journal entries">entries- - <a#editformlink href="#" onclick="return editformToggle(event)" title="Edit the journal">- edit-- <tr>- <td colspan=3>- <br>- Accounts-+ <td>Account+ <td style="padding-left:1em; text-align:right;">Balance $forall i <- items ^{itemAsHtml vd i}- <tr.totalrule>- <td colspan=3>+ <td colspan=2> <tr> <td> <td.balance align=right>#{mixedAmountAsHtml total}- <td> |] where l = ledgerFromJournal Any j inacctmatcher = inAccountQuery qopts- allaccts = isNothing inacctmatcher items = items' -- maybe items' (\m -> filter (matchesAccount m . \(a,_,_,_)->a) items') showacctmatcher itemAsHtml :: ViewData -> BalanceReportItem -> HtmlUrl AppRoute itemAsHtml _ ((acct, adisplay, aindent), abal) = [hamlet| <tr.item.#{inacctclass}> <td.account.#{depthclass}> \#{indent}- <a href="@?{acctquery}" title="Show transactions in this account, including subaccounts">#{adisplay}- <span.hoverlinks>- $if hassubs- - <a href="@?{acctonlyquery}" title="Show transactions in this account only">only- <!--- - <a href="@?{acctsonlyquery}" title="Focus on this account and sub-accounts and hide others">-others -->+ <a href="@?{acctquery}" title="Show transactions affecting this account and subaccounts">#{adisplay}+ <span.hoverlinks>+ $if hassubs+ + <a href="@?{acctonlyquery}" title="Show transactions affecting this account but not subaccounts">only <td.balance align=right>#{mixedAmountAsHtml abal} |]@@ -366,158 +234,6 @@ accountUrl :: AppRoute -> AccountName -> (AppRoute, [(Text, Text)]) accountUrl r a = (r, [("q", pack $ accountQuery a)]) --- | Render an "EntriesReport" as html for the journal entries view.-entriesReportAsHtml :: WebOpts -> ViewData -> EntriesReport -> HtmlUrl AppRoute-entriesReportAsHtml _ vd items = [hamlet|-<table.entriesreport>- $forall i <- numbered items- ^{itemAsHtml vd i}- |]- where- itemAsHtml :: ViewData -> (Int, EntriesReportItem) -> HtmlUrl AppRoute- itemAsHtml _ (n, t) = [hamlet|-<tr.item.#{evenodd}>- <td.transaction>- <pre>#{txn}- |]- where- evenodd = if even n then "even" else "odd" :: String- txn = trimnl $ showTransaction t where trimnl = reverse . dropWhile (=='\n') . reverse---- | Render a "TransactionsReport" as html for the formatted journal view.-journalTransactionsReportAsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute-journalTransactionsReportAsHtml _ vd (_,items) = [hamlet|-<table.transactionsreport>- <tr.headings>- <th.date align=left>Date- <th.description align=left>Description- <th.account align=left>Accounts- <th.amount align=right>Amount- $forall i <- numberTransactionsReportItems items- ^{itemAsHtml vd i}- |]- where--- .#{datetransition}- itemAsHtml :: ViewData -> (Int, Bool, Bool, Bool, TransactionsReportItem) -> HtmlUrl AppRoute- itemAsHtml VD{..} (n, _, _, _, (t, _, split, _, amt, _)) = [hamlet|-<tr.item.#{evenodd}.#{firstposting}>- <td.date>#{date}- <td.description colspan=2>#{elideRight 60 desc}- <td.amount align=right>- $if showamt- \#{mixedAmountAsHtml amt}-$forall p' <- tpostings t- <tr.item.#{evenodd}.posting>- <td.date>- <td.description>- <td.account> <a href="@?{accountUrl here $ paccount p'}" title="Show transactions in #{paccount p'}">#{elideRight 40 $ paccount p'}- <td.amount align=right>#{mixedAmountAsHtml $ pamount p'}-|]- where- evenodd = if even n then "even" else "odd" :: String- -- datetransition | newm = "newmonth"- -- | newd = "newday"- -- | otherwise = "" :: String- (firstposting, date, desc) = (False, show $ tdate t, tdescription t)- -- acctquery = (here, [("q", pack $ accountQuery acct)])- showamt = not split || not (isZeroMixedAmount amt)---- Generate html for an account register, including a balance chart and transaction list.-registerReportHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute-registerReportHtml opts vd r = [hamlet|- ^{registerChartHtml $ map snd $ transactionsReportByCommodity r}- ^{registerItemsHtml opts vd r}-|]---- Generate html for a transaction list from an "TransactionsReport".-registerItemsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute-registerItemsHtml _ vd (balancelabel,items) = [hamlet|-<table.registerreport>- <tr.headings>- <th.date align=left>Date- <th.description align=left>Description- <th.account align=left>To/From Account- <!-- \ #- <a#all-postings-toggle-link.togglelink href="#" title="Toggle all split postings">[+] -->- <th.amount align=right>Amount- <th.balance align=right>#{balancelabel}-- $forall i <- numberTransactionsReportItems items- ^{itemAsHtml vd i}- |]- where- -- inacct = inAccount qopts- -- filtering = m /= Any- itemAsHtml :: ViewData -> (Int, Bool, Bool, Bool, TransactionsReportItem) -> HtmlUrl AppRoute- itemAsHtml VD{..} (n, newd, newm, _, (t, _, split, acct, amt, bal)) = [hamlet|-<tr.item.#{evenodd}.#{firstposting}.#{datetransition}>- <td.date>#{date}- <td.description title="#{show t}">#{elideRight 30 desc}- <td.account title="#{show t}">- <a>- \#{elideRight 40 acct}- - <a.postings-toggle-link.togglelink href="#" title="Toggle all postings">- [+]- <td.amount align=right>- $if showamt- \#{mixedAmountAsHtml amt}- <td.balance align=right>#{mixedAmountAsHtml bal}-$forall p' <- tpostings t- <tr.item.#{evenodd}.posting style=#{postingsdisplaystyle}>- <td.date>- <td.description>- <td.account> <a href="@?{accountUrl here $ paccount p'}" title="Show transactions in #{paccount p'}">#{elideRight 40 $ paccount p'}- <td.amount align=right>#{mixedAmountAsHtml $ pamount p'}- <td.balance align=right>-|]- where- evenodd = if even n then "even" else "odd" :: String- datetransition | newm = "newmonth"- | newd = "newday"- | otherwise = "" :: String- (firstposting, date, desc) = (False, show $ tdate t, tdescription t)- -- acctquery = (here, [("q", pack $ accountQuery acct)])- showamt = not split || not (isZeroMixedAmount amt)- postingsdisplaystyle = if showpostings then "" else "display:none;" :: String---- | Generate javascript/html for a register balance line chart based on--- the provided "TransactionsReportItem"s.- -- registerChartHtml :: forall t (t1 :: * -> *) t2 t3 t4 t5.- -- Data.Foldable.Foldable t1 =>- -- t1 (Transaction, t2, t3, t4, t5, MixedAmount)- -- -> t -> Text.Blaze.Internal.HtmlM ()-registerChartHtml :: [[TransactionsReportItem]] -> HtmlUrl AppRoute-registerChartHtml itemss =- -- have to make sure plot is not called when our container (maincontent)- -- is hidden, eg with add form toggled- [hamlet|-<div#register-chart style="width:600px;height:100px; margin-bottom:1em;">-<script type=text/javascript>- \$(document).ready(function() {- /* render chart with flot, if visible */- var chartdiv = $('#register-chart');- if (chartdiv.is(':visible'))- \$.plot(chartdiv,- [- $forall items <- itemss- [- $forall i <- reverse items- [#{dayToJsTimestamp $ triDate i}, #{triSimpleBalance i}],- []- ],- []- ],- {- xaxis: {- mode: "time",- timeformat: "%y/%m/%d"- }- }- );- });-|]- -- stringIfLongerThan :: Int -> String -> String -- stringIfLongerThan n s = if length s > n then s else "" @@ -527,7 +243,7 @@ where number :: Int -> Day -> [TransactionsReportItem] -> [(Int,Bool,Bool,Bool,TransactionsReportItem)] number _ _ [] = []- number n prevd (i@(Transaction{tdate=d},_,_,_,_,_):rest) = (n+1,newday,newmonth,newyear,i):(number (n+1) d rest)+ number n prevd (i@(Transaction{tdate=d},_,_,_,_,_):rest) = (n+1,newday,newmonth,newyear,i): number (n+1) d rest where newday = d/=prevd newmonth = dm/=prevdm || dy/=prevdy
@@ -6,16 +6,15 @@ import Handler.Common import Handler.Post-import Handler.Utils -- | The journal editform, no sidebar.-getJournalEditR :: Handler RepHtml+getJournalEditR :: Handler Html getJournalEditR = do vd <- getViewData defaultLayout $ do setTitle "hledger-web journal edit form" toWidget $ editform vd -postJournalEditR :: Handler RepHtml+postJournalEditR :: Handler Html postJournalEditR = handlePost
@@ -16,7 +16,7 @@ -- | The journal entries view, with sidebar.-getJournalEntriesR :: Handler RepHtml+getJournalEntriesR :: Handler Html getJournalEntriesR = do vd@VD{..} <- getViewData staticRootUrl <- (staticRoot . settings) <$> getYesod@@ -33,14 +33,32 @@ ^{sidecontent} <div#main.journal> <div#maincontent>- <h2#contenttitle>#{title} ^{searchform vd}+ <h2#contenttitle>#{title} ^{maincontent} ^{addform staticRootUrl vd} ^{editform vd} ^{importform} |] -postJournalEntriesR :: Handler RepHtml+postJournalEntriesR :: Handler Html postJournalEntriesR = handlePost++-- | Render an "EntriesReport" as html for the journal entries view.+entriesReportAsHtml :: WebOpts -> ViewData -> EntriesReport -> HtmlUrl AppRoute+entriesReportAsHtml _ vd items = [hamlet|+<table.entriesreport>+ $forall i <- numbered items+ ^{itemAsHtml vd i}+ |]+ where+ itemAsHtml :: ViewData -> (Int, EntriesReportItem) -> HtmlUrl AppRoute+ itemAsHtml _ (n, t) = [hamlet|+<tr.item.#{evenodd}>+ <td.transaction>+ <pre>#{txn}+ |]+ where+ evenodd = if even n then "even" else "odd" :: String+ txn = trimnl $ showTransaction t where trimnl = reverse . dropWhile (=='\n') . reverse
@@ -6,48 +6,84 @@ import Handler.Common import Handler.Post-import Handler.Utils +import Hledger.Data import Hledger.Query import Hledger.Reports+import Hledger.Utils import Hledger.Cli.Options import Hledger.Web.Options -- | The formatted journal view, with sidebar.-getJournalR :: Handler RepHtml+getJournalR :: Handler Html getJournalR = do vd@VD{..} <- getViewData- staticRootUrl <- (staticRoot . settings) <$> getYesod- let sidecontent = sidebar vd- -- XXX like registerReportAsHtml+ let -- XXX like registerReportAsHtml inacct = inAccount qopts -- injournal = isNothing inacct filtering = m /= Any -- showlastcolumn = if injournal && not filtering then False else True title = case inacct of- Nothing -> "Journal"++s2+ Nothing -> "General Journal"++s2 Just (a,inclsubs) -> "Transactions in "++a++s1++s2- where s1 = if inclsubs then " (and subaccounts)" else ""+ where s1 = if inclsubs then "" else " (excluding subaccounts)" where s2 = if filtering then ", filtered" else "" maincontent = journalTransactionsReportAsHtml opts vd $ journalTransactionsReport (reportopts_ $ cliopts_ opts) j m- defaultLayout $ do- setTitle "hledger-web journal"- toWidget [hamlet|-^{topbar vd}-<div#content>- <div#sidebar>- ^{sidecontent}- <div#main.register>- <div#maincontent>- <h2#contenttitle>#{title}- ^{searchform vd}- ^{maincontent}- ^{addform staticRootUrl vd}- ^{editform vd}- ^{importform}-|]+ hledgerLayout vd "journal" [hamlet|+ <h2#contenttitle>#{title}+ <!-- p>Journal entries record movements of commodities between accounts. -->+ <a#addformlink role="button" style="cursor:pointer;" data-toggle="modal" data-target="#addmodal" title="Add a new transaction to the journal" style="margin-top:1em;">Add a transaction+ ^{maincontent}+ |] -postJournalR :: Handler RepHtml+postJournalR :: Handler Html postJournalR = handlePost++-- | Render a "TransactionsReport" as html for the formatted journal view.+journalTransactionsReportAsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute+journalTransactionsReportAsHtml _ vd (_,items) = [hamlet|+<table.transactionsreport>+ <tr.headings>+ <th.date style="text-align:left;">+ Date+ <span .glyphicon .glyphicon-chevron-up>+ <th.description style="text-align:left;">Description+ <th.account style="text-align:left;">Account+ <th.amount style="text-align:right;">Amount+ $forall i <- numberTransactionsReportItems items+ ^{itemAsHtml vd i}+ |]+ where+-- .#{datetransition}+ itemAsHtml :: ViewData -> (Int, Bool, Bool, Bool, TransactionsReportItem) -> HtmlUrl AppRoute+ itemAsHtml VD{..} (n, _, _, _, (t, _, split, _, amt, _)) = [hamlet|+<tr ##{date} .item.#{evenodd}.#{firstposting} style="vertical-align:top;" title="#{show t}">+ <td.date>#{date}+ <td.description colspan=2>#{elideRight 60 desc}+ <td.amount style="text-align:right;">+ $if showamt+ \#{mixedAmountAsHtml amt}+$forall p' <- tpostings t+ <tr .item.#{evenodd}.posting title="#{show t}">+ <td.date>+ <td.description>+ <td.account>+ + <a href="/register?q=inacct:'#{paccount p'}'##{date}" title="#{paccount p'}">#{elideAccountName 40 $ paccount p'}+ <td.amount style="text-align:right;">#{mixedAmountAsHtml $ pamount p'}+<tr.#{evenodd}>+ <td> + <td>+ <td>+ <td>+|]+ where+ evenodd = if even n then "even" else "odd" :: String+ -- datetransition | newm = "newmonth"+ -- | newd = "newday"+ -- | otherwise = "" :: String+ (firstposting, date, desc) = (False, show $ tdate t, tdescription t)+ -- acctquery = (here, [("q", pack $ accountQuery acct)])+ showamt = not split || not (isZeroMixedAmount amt)
@@ -4,23 +4,23 @@ import Import +import Control.Applicative import Data.Either (lefts,rights)-import Data.List (intercalate)+import Data.List (intercalate, sort) import qualified Data.List as L (head) -- qualified keeps dev & prod builds warning-free import Data.Text (unpack)-import qualified Data.Text as T (null)-import Text.Hamlet (shamlet)+import qualified Data.Text as T+import Text.Parsec (digit, eof, many1, string, runParser) import Text.Printf (printf) -import Handler.Utils import Hledger.Utils-import Hledger.Data+import Hledger.Data hiding (num) import Hledger.Read-import Hledger.Cli+import Hledger.Cli hiding (num) -- | Handle a post from any of the edit forms.-handlePost :: Handler RepHtml+handlePost :: Handler Html handlePost = do action <- lookupPostParam "action" case action of Just "add" -> handleAdd@@ -29,51 +29,59 @@ _ -> invalidArgs ["invalid action"] -- | Handle a post from the transaction add form.-handleAdd :: Handler RepHtml+handleAdd :: Handler Html handleAdd = do VD{..} <- getViewData- -- get form input values. M means a Maybe value.- dateM <- lookupPostParam "date"- descM <- lookupPostParam "description"- acct1M <- lookupPostParam "account1"- amt1M <- lookupPostParam "amount1"- acct2M <- lookupPostParam "account2"- amt2M <- lookupPostParam "amount2"- journalM <- lookupPostParam "journal"- -- supply defaults and parse date and amounts, or get errors.- let dateE = maybe (Left "date required") (either (\e -> Left $ showDateParseError e) Right . fixSmartDateStrEither today . unpack) dateM- descE = Right $ maybe "" unpack descM- maybeNonNull = maybe Nothing (\t -> if T.null t then Nothing else Just t)- acct1E = maybe (Left "to account required") (Right . unpack) $ maybeNonNull acct1M- acct2E = maybe (Left "from account required") (Right . unpack) $ maybeNonNull acct2M- amt1E = maybe (Left "amount required") (either (const $ Left "could not parse amount") Right . parseWithCtx nullctx amountp . unpack) amt1M- amt2E = maybe (Right missingamt) (either (const $ Left "could not parse amount") Right . parseWithCtx nullctx amountp . unpack) amt2M- journalE = maybe (Right $ journalFilePath j)+ -- gruesome adhoc form handling, port to yesod-form later+ mjournal <- lookupPostParam "journal"+ mdate <- lookupPostParam "date"+ mdesc <- lookupPostParam "description"+ let edate = maybe (Left "date required") (either (\e -> Left $ showDateParseError e) Right . fixSmartDateStrEither today . strip . unpack) mdate+ edesc = Right $ maybe "" unpack mdesc+ ejournal = maybe (Right $ journalFilePath j) (\f -> let f' = unpack f in if f' `elem` journalFilePaths j then Right f' else Left $ "unrecognised journal file path: " ++ f' )- journalM- strEs = [dateE, descE, acct1E, acct2E, journalE]- amtEs = [amt1E, amt2E]- errs = lefts strEs ++ lefts amtEs- [date,desc,acct1,acct2,journalpath] = rights strEs- [amt1,amt2] = rights amtEs+ mjournal+ estrs = [edate, edesc, ejournal]+ (errs1, [date,desc,journalpath]) = (lefts estrs, rights estrs)+ (params,_) <- runRequestBody+ -- mtrace params+ let paramnamep s = do {string s; n <- many1 digit; eof; return (read n :: Int)}+ numberedParams s =+ reverse $ dropWhile (T.null . snd) $ reverse $ sort+ [ (n,v) | (k,v) <- params+ , let en = parsewith (paramnamep s) $ T.unpack k+ , isRight en+ , let Right n = en+ ]+ acctparams = numberedParams "account"+ amtparams = numberedParams "amount"+ num = length acctparams+ paramErrs | map fst acctparams == [1..num] &&+ map fst amtparams `elem` [[1..num], [1..num-1]] = []+ | otherwise = ["malformed account/amount parameters"]+ eaccts = map (parsewith (accountnamep <* eof) . strip . T.unpack . snd) acctparams+ eamts = map (runParser (amountp <* eof) nullctx "" . strip . T.unpack . snd) amtparams+ (accts, acctErrs) = (rights eaccts, map show $ lefts eaccts)+ (amts', amtErrs) = (rights eamts, map show $ lefts eamts)+ amts | length amts' == num = amts'+ | otherwise = amts' ++ [missingamt] -- if no errors so far, generate a transaction and balance it or get the error.- tE | not $ null errs = Left errs+ errs = errs1 ++ if not (null paramErrs) then paramErrs else (acctErrs ++ amtErrs)+ et | not $ null errs = Left errs | otherwise = either (\e -> Left ["unbalanced postings: " ++ (L.head $ lines e)]) Right- (balanceTransaction Nothing $ nulltransaction { -- imprecise balancing- tdate=parsedate date- ,tdescription=desc- ,tpostings=[- nullposting{paccount=acct1, pamount=mixed amt1}- ,nullposting{paccount=acct2, pamount=mixed amt2}- ]- })+ (balanceTransaction Nothing $ nulltransaction {+ tdate=parsedate date+ ,tdescription=desc+ ,tpostings=[nullposting{paccount=acct, pamount=Mixed [amt]} | (acct,amt) <- zip accts amts]+ }) -- display errors or add transaction- case tE of+ case et of Left errs' -> do+ error $ show errs' -- XXX -- save current form values in session -- setMessage $ toHtml $ intercalate "; " errs setMessage [shamlet|@@ -85,29 +93,60 @@ let t' = txnTieKnot t -- XXX move into balanceTransaction liftIO $ do ensureJournalFileExists journalpath appendToJournalFileOrStdout journalpath $ showTransaction t'- -- setMessage $ toHtml $ (printf "Added transaction:\n%s" (show t') :: String)- setMessage [shamlet|<span>Added transaction:<small><pre>#{chomp $ show t'}</pre></small>|]+ setMessage [shamlet|<span>Transaction added.|] - redirect (RegisterR, [("add","1")])+ redirect (JournalR) -- , [("add","1")]) +-- personForm :: Html -> MForm Handler (FormResult Person, Widget)+-- personForm extra = do+-- (nameRes, nameView) <- mreq textField "this is not used" Nothing+-- (ageRes, ageView) <- mreq intField "neither is this" Nothing+-- let personRes = Person <$> nameRes <*> ageRes+-- let widget = do+-- toWidget+-- [lucius|+-- ##{fvId ageView} {+-- width: 3em;+-- }+-- |]+-- [whamlet|+-- #{extra}+-- <p>+-- Hello, my name is #+-- ^{fvInput nameView}+-- \ and I am #+-- ^{fvInput ageView}+-- \ years old. #+-- <input type=submit value="Introduce myself">+-- |]+-- return (personRes, widget)+--+-- ((res, widget), enctype) <- runFormGet personForm+-- defaultLayout+-- [whamlet|+-- <p>Result: #{show res}+-- <form enctype=#{enctype}>+-- ^{widget}+-- |]+ -- | Handle a post from the journal edit form.-handleEdit :: Handler RepHtml+handleEdit :: Handler Html handleEdit = do VD{..} <- getViewData -- get form input values, or validation errors. -- getRequest >>= liftIO (reqRequestBody req) >>= mtrace- textM <- lookupPostParam "text"- journalM <- lookupPostParam "journal"- let textE = maybe (Left "No value provided") (Right . unpack) textM- journalE = maybe (Right $ journalFilePath j)+ mtext <- lookupPostParam "text"+ mjournal <- lookupPostParam "journal"+ let etext = maybe (Left "No value provided") (Right . unpack) mtext+ ejournal = maybe (Right $ journalFilePath j) (\f -> let f' = unpack f in if f' `elem` journalFilePaths j then Right f'- else Left "unrecognised journal file path")- journalM- strEs = [textE, journalE]- errs = lefts strEs- [text,journalpath] = rights strEs+ else Left ("unrecognised journal file path"::String))+ mjournal+ estrs = [etext, ejournal]+ errs = lefts estrs+ [text,journalpath] = rights estrs -- display errors or perform edit if not $ null errs then do@@ -125,7 +164,7 @@ setMessage "No change" redirect JournalR else do- jE <- liftIO $ readJournal Nothing Nothing (Just journalpath) tnew+ jE <- liftIO $ readJournal Nothing Nothing True (Just journalpath) tnew either (\e -> do setMessage $ toHtml e@@ -137,7 +176,7 @@ jE -- | Handle a post from the journal import form.-handleImport :: Handler RepHtml+handleImport :: Handler Html handleImport = do setMessage "can't handle file upload yet" redirect JournalR
@@ -4,47 +4,170 @@ import Import +import Data.List import Data.Maybe+import Safe import Handler.Common import Handler.Post import Handler.Utils +import Hledger.Data import Hledger.Query import Hledger.Reports+import Hledger.Utils import Hledger.Cli.Options import Hledger.Web.Options -- | The main journal/account register view, with accounts sidebar.-getRegisterR :: Handler RepHtml+getRegisterR :: Handler Html getRegisterR = do vd@VD{..} <- getViewData- staticRootUrl <- (staticRoot . settings) <$> getYesod- let sidecontent = sidebar vd- -- injournal = isNothing inacct+ -- staticRootUrl <- (staticRoot . settings) <$> getYesod+ let -- injournal = isNothing inacct filtering = m /= Any- title = "Transactions in "++a++s1++s2+ -- title = "Transactions in "++a++s1++s2+ title = a++s1++s2 where- (a,inclsubs) = fromMaybe ("all accounts",False) $ inAccount qopts- s1 = if inclsubs then " (and subaccounts)" else ""+ (a,inclsubs) = fromMaybe ("all accounts",True) $ inAccount qopts+ s1 = if inclsubs then "" else " (excluding subaccounts)" s2 = if filtering then ", filtered" else "" maincontent = registerReportHtml opts vd $ accountTransactionsReport (reportopts_ $ cliopts_ opts) j m $ fromMaybe Any $ inAccountQuery qopts- defaultLayout $ do- setTitle "hledger-web register"- toWidget [hamlet|-^{topbar vd}-<div#content>- <div#sidebar>- ^{sidecontent}- <div#main.register>- <div#maincontent>- <h2#contenttitle>#{title}- ^{searchform vd}- ^{maincontent}- ^{addform staticRootUrl vd}- ^{editform vd}- ^{importform}-|]+ hledgerLayout vd "register" [hamlet|+ <h2#contenttitle>#{title}+ <!-- p>Transactions affecting this account, with running balance. -->+ ^{maincontent}+ |] -postRegisterR :: Handler RepHtml+postRegisterR :: Handler Html postRegisterR = handlePost++-- Generate html for an account register, including a balance chart and transaction list.+registerReportHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute+registerReportHtml opts vd r = [hamlet|+ ^{registerChartHtml $ transactionsReportByCommodity r}+ ^{registerItemsHtml opts vd r}+|]++-- Generate html for a transaction list from an "TransactionsReport".+registerItemsHtml :: WebOpts -> ViewData -> TransactionsReport -> HtmlUrl AppRoute+registerItemsHtml _ vd (balancelabel,items) = [hamlet|+<table.registerreport>+ <tr.headings>+ <th.date style="text-align:left;">+ Date+ <span .glyphicon .glyphicon-chevron-up>+ <th.description style="text-align:left;">Description+ <th.account style="text-align:left;">To/From Account(s)+ <th.amount style="text-align:right; white-space:normal;">Amount Out/In+ <th.balance style="text-align:right; white-space:normal;">#{balancelabel'}+ $forall i <- numberTransactionsReportItems items+ ^{itemAsHtml vd i}+ |]+ where+ insomeacct = isJust $ inAccount $ qopts vd+ balancelabel' = if insomeacct then balancelabel else "Total"++ -- filtering = m /= Any+ itemAsHtml :: ViewData -> (Int, Bool, Bool, Bool, TransactionsReportItem) -> HtmlUrl AppRoute+ itemAsHtml VD{..} (n, newd, newm, _, (torig, tacct, split, acct, amt, bal)) = [hamlet|++<tr ##{date} .item.#{evenodd}.#{firstposting}.#{datetransition} title="#{show torig}" style="vertical-align:top;">+ <td.date><a href="/journal##{date}">#{date}+ <td.description title="#{show torig}">#{elideRight 30 desc}+ <td.account>#{elideRight 40 acct}+ <td.amount style="text-align:right; white-space:nowrap;">+ $if showamt+ \#{mixedAmountAsHtml amt}+ <td.balance style="text-align:right;">#{mixedAmountAsHtml bal}+|]++ where+ evenodd = if even n then "even" else "odd" :: String+ datetransition | newm = "newmonth"+ | newd = "newday"+ | otherwise = "" :: String+ (firstposting, date, desc) = (False, show $ tdate tacct, tdescription tacct)+ -- acctquery = (here, [("q", pack $ accountQuery acct)])+ showamt = not split || not (isZeroMixedAmount amt)++-- | Generate javascript/html for a register balance line chart based on+-- the provided "TransactionsReportItem"s.+ -- registerChartHtml :: forall t (t1 :: * -> *) t2 t3 t4 t5.+ -- Data.Foldable.Foldable t1 =>+ -- t1 (Transaction, t2, t3, t4, t5, MixedAmount)+ -- -> t -> Text.Blaze.Internal.HtmlM ()+registerChartHtml :: [(Commodity, (String, [TransactionsReportItem]))] -> HtmlUrl AppRoute+registerChartHtml percommoditytxnreports =+ -- have to make sure plot is not called when our container (maincontent)+ -- is hidden, eg with add form toggled+ [hamlet|+<label#register-chart-label style=""><br>+<div#register-chart style="width:85%; height:150px; margin-bottom:1em; display:block;">+<script type=text/javascript>+ \$(document).ready(function() {+ var $chartdiv = $('#register-chart');+ if ($chartdiv.is(':visible')) {+ \$('#register-chart-label').text('#{charttitle}');+ var seriesData = [+ $forall (c,(_,items)) <- percommoditytxnreports+ /* we render each commodity using two series:+ * one with extra data points added to show a stepped balance line */+ {+ data: [+ $forall i <- reverse items+ [+ #{dayToJsTimestamp $ triDate i},+ #{simpleMixedAmountQuantity $ triCommodityBalance c i},+ ],+ /* [] */+ ],+ label: '#{shownull c}',+ color: #{colorForCommodity c},+ lines: {+ show: true,+ steps: true,+ },+ points: {+ show: false,+ },+ clickable: false,+ hoverable: false,+ },+ /* and one with the original data, showing one clickable, hoverable point per transaction */+ {+ data: [+ $forall i <- reverse items+ [+ #{dayToJsTimestamp $ triDate i},+ #{simpleMixedAmountQuantity $ triCommodityBalance c i},+ '#{showMixedAmountWithZeroCommodity $ triCommodityAmount c i}',+ '#{showMixedAmountWithZeroCommodity $ triCommodityBalance c i}',+ '#{concat $ intersperse "\\n" $ lines $ show $ triOrigTransaction i}',+ ],+ /* [] */+ ],+ label: '',+ color: #{colorForCommodity c},+ lines: {+ show: false,+ },+ points: {+ show: true,+ },+ },+ ]+ var plot = registerChart($chartdiv, seriesData);+ \$chartdiv.bind("plotclick", registerChartClick);+ };+ });+|]+ -- [#{dayToJsTimestamp $ ltrace "\ndate" $ triDate i}, #{ltrace "balancequantity" $ simpleMixedAmountQuantity $ triCommodityBalance c i}, '#{ltrace "balance" $ show $ triCommodityBalance c i}, '#{ltrace "amount" $ show $ triCommodityAmount c i}''],+ where+ charttitle = case maybe "" (fst.snd) $ headMay percommoditytxnreports+ of "" -> ""+ s -> s++":"+ colorForCommodity = fromMaybe 0 . flip lookup commoditiesIndex+ commoditiesIndex = zip (map fst percommoditytxnreports) [0..] :: [(Commodity,Int)]+ simpleMixedAmountQuantity = maybe 0 aquantity . headMay . amounts+ shownull c = if null c then " " else c
@@ -4,5 +4,5 @@ import Import -getRootR :: Handler RepHtml-getRootR = redirect defaultroute where defaultroute = RegisterR+getRootR :: Handler Html+getRootR = redirect defaultroute where defaultroute = JournalR
@@ -0,0 +1,14 @@+-- | /sidebar++module Handler.SidebarR where++import Import++import Handler.Common++-- | Render just the accounts sidebar, useful when opening the sidebar.+getSidebarR :: Handler Html+getSidebarR = do+ vd <- getViewData+ withUrlRenderer [hamlet|^{sidebar vd}|]+
@@ -1,117 +1,18 @@--- | Web handler utilities.+-- | Web handler utilities. More of these are in Foundation.hs, where+-- they can be used in the default template. module Handler.Utils where import Prelude-import Control.Applicative ((<$>))-import Data.IORef-import Data.Maybe-import Data.Text(pack,unpack) import Data.Time.Calendar import Data.Time.Clock import Data.Time.Format import System.Locale (defaultTimeLocale)-import Text.Hamlet-import Yesod.Core -import Foundation -import Hledger hiding (is)-import Hledger.Cli hiding (version)-import Hledger.Web.Options----- | A bundle of data useful for hledger-web request handlers and templates.-data ViewData = VD {- opts :: WebOpts -- ^ the command-line options at startup- ,here :: AppRoute -- ^ the current route- ,msg :: Maybe Html -- ^ the current UI message if any, possibly from the current request- ,today :: Day -- ^ today's date (for queries containing relative dates)- ,j :: Journal -- ^ the up-to-date parsed unfiltered journal- ,q :: String -- ^ the current q parameter, the main query expression- ,m :: Query -- ^ a query parsed from the q parameter- ,qopts :: [QueryOpt] -- ^ query options parsed from the q parameter- ,am :: Query -- ^ a query parsed from the accounts sidebar query expr ("a" parameter)- ,aopts :: [QueryOpt] -- ^ query options parsed from the accounts sidebar query expr- ,showpostings :: Bool -- ^ current p parameter, 1 or 0 shows/hides all postings where applicable- }---- | Make a default ViewData, using day 0 as today's date.-nullviewdata :: ViewData-nullviewdata = viewdataWithDateAndParams nulldate "" "" ""---- | Make a ViewData using the given date and request parameters, and defaults elsewhere.-viewdataWithDateAndParams :: Day -> String -> String -> String -> ViewData-viewdataWithDateAndParams d q a p =- let (querymatcher,queryopts) = parseQuery d q- (acctsmatcher,acctsopts) = parseQuery d a- in VD {- opts = defwebopts- ,j = nulljournal- ,here = RootR- ,msg = Nothing- ,today = d- ,q = q- ,m = querymatcher- ,qopts = queryopts- ,am = acctsmatcher- ,aopts = acctsopts- ,showpostings = p == "1"- }---- | Gather data used by handlers and templates in the current request.-getViewData :: Handler ViewData-getViewData = do- app <- getYesod- let opts@WebOpts{cliopts_=copts@CliOpts{reportopts_=ropts}} = appOpts app- (j, err) <- getCurrentJournal app copts{reportopts_=ropts{no_elide_=True}}- msg <- getMessageOr err- Just here <- getCurrentRoute- today <- liftIO getCurrentDay- q <- getParameterOrNull "q"- a <- getParameterOrNull "a"- p <- getParameterOrNull "p"- return (viewdataWithDateAndParams today q a p){- opts=opts- ,msg=msg- ,here=here- ,today=today- ,j=j- }- where- -- | Update our copy of the journal if the file changed. If there is an- -- error while reloading, keep the old one and return the error, and set a- -- ui message.- getCurrentJournal :: App -> CliOpts -> Handler (Journal, Maybe String)- getCurrentJournal app opts = do- -- XXX put this inside atomicModifyIORef' for thread safety- j <- liftIO $ readIORef $ appJournal app- (jE, changed) <- liftIO $ journalReloadIfChanged opts j- if not changed- then return (j,Nothing)- else case jE of- Right j' -> do liftIO $ writeIORef (appJournal app) j'- return (j',Nothing)- Left e -> do setMessage $ "error while reading" {- ++ ": " ++ e-}- return (j, Just e)-- -- | Get the named request parameter, or the empty string if not present.- getParameterOrNull :: String -> Handler String- getParameterOrNull p = unpack `fmap` fromMaybe "" <$> lookupGetParam (pack p)---- | Get the message set by the last request, or the newer message provided, if any.-getMessageOr :: Maybe String -> Handler (Maybe Html)-getMessageOr mnewmsg = do- oldmsg <- getMessage- return $ maybe oldmsg (Just . toHtml) mnewmsg- numbered :: [a] -> [(Int,a)] numbered = zip [1..] dayToJsTimestamp :: Day -> Integer dayToJsTimestamp d = read (formatTime defaultTimeLocale "%s" t) * 1000 -- XXX read where t = UTCTime d (secondsToDiffTime 0)--chomp :: String -> String-chomp = reverse . dropWhile (`elem` "\r\n") . reverse-
@@ -10,14 +10,12 @@ where -- yesod scaffold imports-import Prelude (IO) import Yesod.Default.Config --(fromArgs) -- import Yesod.Default.Main (defaultMain) import Settings -- (parseExtra) import Application (makeApplication) import Data.String-import Data.Conduit.Network-import Network.Wai.Handler.Warp (runSettings, defaultSettings, settingsPort)+import Network.Wai.Handler.Warp (runSettings, defaultSettings, setPort) import Network.Wai.Handler.Launch (runUrlPort) -- import Prelude hiding (putStrLn)@@ -51,7 +49,7 @@ withJournalDo' :: WebOpts -> (WebOpts -> Journal -> IO ()) -> IO () withJournalDo' opts cmd = do- journalFilePathFromOpts (cliopts_ opts) >>= readJournalFile Nothing Nothing >>=+ journalFilePathFromOpts (cliopts_ opts) >>= readJournalFile Nothing Nothing True >>= either error' (cmd opts . journalApplyAliases (aliasesFromOpts $ cliopts_ opts)) -- | The web command.@@ -61,19 +59,19 @@ let j' = filterJournalTransactions (queryFromOpts d $ reportopts_ $ cliopts_ opts) j p = port_ opts u = base_url_ opts- staticRoot = pack <$> static_root_ opts+ staticRoot' = pack <$> static_root_ opts _ <- printf "Starting web app on port %d with base url %s\n" p u app <- makeApplication opts j' AppConfig{appEnv = Development ,appPort = p ,appRoot = pack u ,appHost = fromString "*4"- ,appExtra = Extra "" Nothing staticRoot+ ,appExtra = Extra "" Nothing staticRoot' } if server_ opts then do putStrLn "Press ctrl-c to quit" hFlush stdout- runSettings defaultSettings{settingsPort=p} app+ runSettings (setPort p defaultSettings) app else do putStrLn "Starting web browser if possible" putStrLn "Web app will auto-exit after a few minutes with no browsers (or press ctrl-c)"
@@ -29,7 +29,7 @@ ,flagReq ["base-url"] (\s opts -> Right $ setopt "base-url" s opts) "BASEURL" ("set the base url (default: "++defbaseurlexample++")") ,flagReq ["file-url"] (\s opts -> Right $ setopt "file-url" s opts) "FILEURL" ("set the static files url (default: BASEURL/static)") ]- + webmode :: Mode [([Char], [Char])] webmode = (mode "hledger-web" [("command","web")] "start serving the hledger web interface"
@@ -22,7 +22,7 @@ hledgerorgurl, manualurl :: String hledgerorgurl = "http://hledger.org"-manualurl = hledgerorgurl++"/MANUAL.html"+manualurl = hledgerorgurl++"/manual" -- | The default TCP port to listen on. May be overridden with --port. defport :: Int
@@ -1,11 +1,20 @@ import Prelude (IO)++import qualified Hledger.Web.Main++main :: IO ()+main = Hledger.Web.Main.main++-- more standard yesod main, for reloading experiments+ -- import Yesod.Default.Config (fromArgs) -- import Yesod.Default.Main (defaultMain) -- import Settings (parseExtra) -- import Application (makeApplication) -import qualified Hledger.Web.Main+-- import Hledger+-- import Hledger.Web (defwebopts) -main :: IO ()--- main = defaultMain (fromArgs parseExtra) makeApplication-main = Hledger.Web.Main.main+-- main = do+-- j <- defaultJournal+-- defaultMain (fromArgs parseExtra) (makeApplication defwebopts j)
binary file changed (absent → 1150 bytes)
@@ -0,0 +1,8 @@+exec: ../dist/build/hledger-web/hledger-web+args:+ - production+host: <<HOST-NOT-SET>>++# Use the following to automatically copy your bundle upon creation via `yesod+# keter`. Uses `scp` internally, so you can set it to a remote destination+# copy-to: user@host:/opt/keter/incoming
@@ -0,0 +1,1 @@+User-agent: *
@@ -1,14 +1,12 @@-/static StaticR Static getStatic /favicon.ico FaviconR GET /robots.txt RobotsR GET-+/static StaticR Static getStatic / RootR GET- /journal JournalR GET POST-/journal/entries JournalEntriesR GET POST-/journal/edit JournalEditR GET POST- /register RegisterR GET POST-+/sidebar SidebarR GET+-- /journal/entries JournalEntriesR GET POST+-- /journal/edit JournalEditR GET POST+-- -- /accounts AccountsR GET -- /api/accounts AccountsJsonR GET
@@ -0,0 +1,19 @@+Default: &defaults+ host: "*4" # any IPv4 host+ port: 3000+ approot: "http://localhost:3000"+ copyright: " "+ #analytics: UA-YOURCODE++Development:+ <<: *defaults++Testing:+ <<: *defaults++Staging:+ <<: *defaults++Production:+ #approot: "http://www.example.com"+ <<: *defaults
@@ -1,5 +1,5 @@ name: hledger-web-version: 0.23.3+version: 0.24 stability: stable category: Finance synopsis: A web interface for the hledger accounting tool.@@ -17,33 +17,75 @@ maintainer: Simon Michael <simon@joyful.com> homepage: http://hledger.org bug-reports: http://hledger.org/bugs-tested-with: GHC==7.4.2, GHC==7.6.3, GHC==7.8.2+tested-with: GHC==7.6.3, GHC==7.8.2 cabal-version: >= 1.8 build-type: Simple extra-tmp-files: extra-source-files: messages/en.msg+ config/favicon.ico+ config/keter.yaml+ config/robots.txt config/routes+ config/settings.yml+ static/css/bootstrap-theme.css+ static/css/bootstrap-theme.css.map+ static/css/bootstrap-theme.min.css static/css/bootstrap.css- static/select2.css- static/select2.js- static/select2.min.js- static/select2-spinner.gif- static/select2.png- static/excanvas.js- static/excanvas.min.js- static/favicon.ico+ static/css/bootstrap.css.map+ static/css/bootstrap.min.css+ static/fonts/glyphicons-halflings-regular.eot+ static/fonts/glyphicons-halflings-regular.svg+ static/fonts/glyphicons-halflings-regular.ttf+ static/fonts/glyphicons-halflings-regular.woff+ static/js/bootstrap.js+ static/js/bootstrap.min.js+ static/js/excanvas.js+ static/js/excanvas.min.js+ static/js/jquery.colorhelpers.js+ static/js/jquery.colorhelpers.min.js+ static/js/jquery.cookie.js+ static/js/jquery.flot.canvas.js+ static/js/jquery.flot.canvas.min.js+ static/js/jquery.flot.categories.js+ static/js/jquery.flot.categories.min.js+ static/js/jquery.flot.crosshair.js+ static/js/jquery.flot.crosshair.min.js+ static/js/jquery.flot.errorbars.js+ static/js/jquery.flot.errorbars.min.js+ static/js/jquery.flot.fillbetween.js+ static/js/jquery.flot.fillbetween.min.js+ static/js/jquery.flot.image.js+ static/js/jquery.flot.image.min.js+ static/js/jquery.flot.js+ static/js/jquery.flot.min.js+ static/js/jquery.flot.navigate.js+ static/js/jquery.flot.navigate.min.js+ static/js/jquery.flot.pie.js+ static/js/jquery.flot.pie.min.js+ static/js/jquery.flot.resize.js+ static/js/jquery.flot.resize.min.js+ static/js/jquery.flot.selection.js+ static/js/jquery.flot.selection.min.js+ static/js/jquery.flot.stack.js+ static/js/jquery.flot.stack.min.js+ static/js/jquery.flot.symbol.js+ static/js/jquery.flot.symbol.min.js+ static/js/jquery.flot.threshold.js+ static/js/jquery.flot.threshold.min.js+ static/js/jquery.flot.time.js+ static/js/jquery.flot.time.min.js+ static/js/jquery.flot.tooltip.js+ static/js/jquery.flot.tooltip.min.js+ static/js/jquery.hotkeys.js+ static/js/jquery.min.js+ static/js/jquery.url.js+ static/js/typeahead.bundle.js+ static/js/typeahead.bundle.min.js+ static/hledger.css static/hledger.js- static/img/glyphicons-halflings-white.png- static/img/glyphicons-halflings.png- static/jquery.flot.js- static/jquery.flot.min.js- static/jquery.js- static/jquery.min.js- static/jquery.url.js- static/style.css- templates/default-layout.hamlet templates/default-layout-wrapper.hamlet+ templates/default-layout.hamlet templates/homepage.hamlet templates/homepage.julius templates/homepage.lucius@@ -58,10 +100,6 @@ Description: Build with support for multithreaded execution. Default: True -flag blaze_html_0_4- description: Use the older 0.4 version of blaze-html. No longer well tested.- default: False- flag dev Description: Turn on development settings, like auto-reload templates. Default: False@@ -70,12 +108,14 @@ Description: Build for use with "yesod devel" Default: False + library- cpp-options: -DVERSION="0.23.3"+ cpp-options: -DVERSION="0.24" if flag(dev) || flag(library-only) cpp-options: -DDEVELOPMENT - ghc-options: -Wall -fno-warn-unused-do-bind+ ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures+ ghc-options: -fno-warn-type-defaults -fno-warn-orphans extensions: CPP@@ -93,8 +133,7 @@ -- EmptyDataDecls -- NoMonomorphismRestriction - hs-source-dirs: . app- exposed-modules: Application+ exposed-modules: Application Foundation Import Settings@@ -107,16 +146,19 @@ Handler.Post Handler.RegisterR Handler.RootR+ Handler.SidebarR Handler.Utils- other-modules:+ -- other-modules: Hledger.Web Hledger.Web.Main Hledger.Web.Options -- Setup -- stops yesod devel complaining, requires build-depends: Cabal build-depends:- hledger == 0.23.3- , hledger-lib == 0.23.3+ hledger == 0.24+ , hledger-lib == 0.24 , base >= 4 && < 5+ , blaze-html+ , blaze-markup , bytestring , clientsession , cmdargs >= 0.10 && < 0.11@@ -125,25 +167,15 @@ , filepath , hjsmin , http-conduit- , http-client >= 0.2 && < 0.4+ , http-client , HUnit , network-conduit , conduit-extra , old-locale- , parsec+ , parsec >= 3 , regexpr >= 0.5.1 , safe >= 0.2--- http://www.yesodweb.com/blog/2014/04/consolidation-progress--- in order to support both the old and new versions of shakespeare,--- you just need to ensure that you have both the shakespeare and--- deprecated packages listed in your cabal file. In other words, if--- previously you depended on hamlet, now you should depend on hamlet--- and shakespeare. When you're ready to drop backwards compatibility,--- simply put a lower bound of >= 2.0 on shakespeare and remove the--- deprecated packages.- , hamlet- , shakespeare-text >= 1.0 && < 1.2- , shakespeare >= 1.0 && < 2.1+ , shakespeare >= 2.0 , template-haskell , text , time@@ -151,34 +183,30 @@ , wai , wai-extra , wai-handler-launch >= 1.3- , warp >= 1.3+ , warp , yaml- , yesod >= 1.2 && < 1.3+ , yesod >= 1.4 && < 1.5 , yesod-core , yesod-static , json-- if flag(blaze_html_0_4)- cpp-options: -DBLAZE_HTML_0_4- build-depends:- blaze-html >= 0.4 && < 0.5- else- build-depends:- blaze-html >= 0.5 && < 0.8- , blaze-markup >= 0.5.1 && < 0.7+ -- required by extra ghci utilities:+ -- , fsnotify+ -- , hsdev+ -- , mtl executable hledger-web if flag(library-only) Buildable: False - cpp-options: -DVERSION="0.23.3"+ cpp-options: -DVERSION="0.24" if flag(dev)- cpp-options: -DDEVELOPMENT+ cpp-options: -DDEVELOPMENT - ghc-options: -Wall -fno-warn-unused-do-bind+ ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures+ ghc-options: -fno-warn-type-defaults -fno-warn-orphans if flag(threaded)- ghc-options: -threaded+ ghc-options: -threaded if flag(dev) ghc-options: -O0 @@ -192,31 +220,16 @@ TemplateHaskell TypeFamilies - hs-source-dirs: . app+ hs-source-dirs: app main-is: main.hs- other-modules:- Application- Foundation- Import- Settings- Settings.StaticFiles- Settings.Development- Handler.Common- Handler.JournalEditR- Handler.JournalEntriesR- Handler.JournalR- Handler.Post- Handler.RegisterR- Handler.RootR- Handler.Utils- Hledger.Web- Hledger.Web.Main- Hledger.Web.Options build-depends:- hledger == 0.23.3- , hledger-lib == 0.23.3+ hledger-lib == 0.24+ , hledger == 0.24+ , hledger-web == 0.24 , base >= 4 && < 5+ , blaze-html+ , blaze-markup , bytestring , clientsession , cmdargs >= 0.10 && < 0.11@@ -225,17 +238,15 @@ , filepath , hjsmin , http-conduit- , http-client >= 0.2 && < 0.4+ , http-client , HUnit , network-conduit , conduit-extra , old-locale- , parsec+ , parsec >= 3 , regexpr >= 0.5.1 , safe >= 0.2- , hamlet- , shakespeare-text >= 1.0 && < 1.2- , shakespeare >= 1.0 && < 2.1+ , shakespeare >= 2.0 && < 2.1 , template-haskell , text , time@@ -243,30 +254,26 @@ , wai , wai-extra , wai-handler-launch >= 1.3- , warp >= 1.3+ , warp , yaml- , yesod >= 1.2 && < 1.3+ , yesod >= 1.4 && < 1.5 , yesod-core , yesod-static , json-- if flag(blaze_html_0_4)- cpp-options: -DBLAZE_HTML_0_4- build-depends:- blaze-html >= 0.4 && < 0.5- else- build-depends:- blaze-html >= 0.5 && < 0.8- , blaze-markup >= 0.5.1 && < 0.7+ -- required by extra ghci utilities:+ -- , fsnotify+ -- , hsdev+ -- , mtl test-suite test type: exitcode-stdio-1.0- ghc-options: -Wall+ ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures+ ghc-options: -fno-warn-type-defaults -fno-warn-orphans hs-source-dirs: tests main-is: main.hs build-depends: - hledger-web+ hledger-web == 0.24 , base , hspec- , yesod >= 1.2 && < 1.3- , yesod-test >= 1.2 && < 1.3+ , yesod+ , yesod-test
@@ -0,0 +1,442 @@+/*!+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ */++.btn-default,+.btn-primary,+.btn-success,+.btn-info,+.btn-warning,+.btn-danger {+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);+}+.btn-default:active,+.btn-primary:active,+.btn-success:active,+.btn-info:active,+.btn-warning:active,+.btn-danger:active,+.btn-default.active,+.btn-primary.active,+.btn-success.active,+.btn-info.active,+.btn-warning.active,+.btn-danger.active {+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+}+.btn:active,+.btn.active {+ background-image: none;+}+.btn-default {+ text-shadow: 0 1px 0 #fff;+ background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);+ background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));+ background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+ background-repeat: repeat-x;+ border-color: #dbdbdb;+ border-color: #ccc;+}+.btn-default:hover,+.btn-default:focus {+ background-color: #e0e0e0;+ background-position: 0 -15px;+}+.btn-default:active,+.btn-default.active {+ background-color: #e0e0e0;+ border-color: #dbdbdb;+}+.btn-default:disabled,+.btn-default[disabled] {+ background-color: #e0e0e0;+ background-image: none;+}+.btn-primary {+ background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);+ background-image: -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2));+ background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+ background-repeat: repeat-x;+ border-color: #2b669a;+}+.btn-primary:hover,+.btn-primary:focus {+ background-color: #2d6ca2;+ background-position: 0 -15px;+}+.btn-primary:active,+.btn-primary.active {+ background-color: #2d6ca2;+ border-color: #2b669a;+}+.btn-primary:disabled,+.btn-primary[disabled] {+ background-color: #2d6ca2;+ background-image: none;+}+.btn-success {+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);+ background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));+ background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+ background-repeat: repeat-x;+ border-color: #3e8f3e;+}+.btn-success:hover,+.btn-success:focus {+ background-color: #419641;+ background-position: 0 -15px;+}+.btn-success:active,+.btn-success.active {+ background-color: #419641;+ border-color: #3e8f3e;+}+.btn-success:disabled,+.btn-success[disabled] {+ background-color: #419641;+ background-image: none;+}+.btn-info {+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);+ background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));+ background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+ background-repeat: repeat-x;+ border-color: #28a4c9;+}+.btn-info:hover,+.btn-info:focus {+ background-color: #2aabd2;+ background-position: 0 -15px;+}+.btn-info:active,+.btn-info.active {+ background-color: #2aabd2;+ border-color: #28a4c9;+}+.btn-info:disabled,+.btn-info[disabled] {+ background-color: #2aabd2;+ background-image: none;+}+.btn-warning {+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+ background-repeat: repeat-x;+ border-color: #e38d13;+}+.btn-warning:hover,+.btn-warning:focus {+ background-color: #eb9316;+ background-position: 0 -15px;+}+.btn-warning:active,+.btn-warning.active {+ background-color: #eb9316;+ border-color: #e38d13;+}+.btn-warning:disabled,+.btn-warning[disabled] {+ background-color: #eb9316;+ background-image: none;+}+.btn-danger {+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);+ background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));+ background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+ background-repeat: repeat-x;+ border-color: #b92c28;+}+.btn-danger:hover,+.btn-danger:focus {+ background-color: #c12e2a;+ background-position: 0 -15px;+}+.btn-danger:active,+.btn-danger.active {+ background-color: #c12e2a;+ border-color: #b92c28;+}+.btn-danger:disabled,+.btn-danger[disabled] {+ background-color: #c12e2a;+ background-image: none;+}+.thumbnail,+.img-thumbnail {+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075);+}+.dropdown-menu > li > a:hover,+.dropdown-menu > li > a:focus {+ background-color: #e8e8e8;+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);+ background-repeat: repeat-x;+}+.dropdown-menu > .active > a,+.dropdown-menu > .active > a:hover,+.dropdown-menu > .active > a:focus {+ background-color: #357ebd;+ background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);+ background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);+ background-repeat: repeat-x;+}+.navbar-default {+ background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);+ background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));+ background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+ background-repeat: repeat-x;+ border-radius: 4px;+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);+}+.navbar-default .navbar-nav > .active > a {+ background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);+ background-image: -o-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f3f3f3));+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);+ background-repeat: repeat-x;+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);+}+.navbar-brand,+.navbar-nav > li > a {+ text-shadow: 0 1px 0 rgba(255, 255, 255, .25);+}+.navbar-inverse {+ background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);+ background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));+ background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+ background-repeat: repeat-x;+}+.navbar-inverse .navbar-nav > .active > a {+ background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);+ background-image: -o-linear-gradient(top, #222 0%, #282828 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#222), to(#282828));+ background-image: linear-gradient(to bottom, #222 0%, #282828 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);+ background-repeat: repeat-x;+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);+}+.navbar-inverse .navbar-brand,+.navbar-inverse .navbar-nav > li > a {+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);+}+.navbar-static-top,+.navbar-fixed-top,+.navbar-fixed-bottom {+ border-radius: 0;+}+.alert {+ text-shadow: 0 1px 0 rgba(255, 255, 255, .2);+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);+}+.alert-success {+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);+ background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));+ background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);+ background-repeat: repeat-x;+ border-color: #b2dba1;+}+.alert-info {+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);+ background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));+ background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);+ background-repeat: repeat-x;+ border-color: #9acfea;+}+.alert-warning {+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);+ background-repeat: repeat-x;+ border-color: #f5e79e;+}+.alert-danger {+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);+ background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));+ background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);+ background-repeat: repeat-x;+ border-color: #dca7a7;+}+.progress {+ background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);+ background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);+ background-repeat: repeat-x;+}+.progress-bar {+ background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);+ background-image: -o-linear-gradient(top, #428bca 0%, #3071a9 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9));+ background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);+ background-repeat: repeat-x;+}+.progress-bar-success {+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);+ background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));+ background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);+ background-repeat: repeat-x;+}+.progress-bar-info {+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);+ background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));+ background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);+ background-repeat: repeat-x;+}+.progress-bar-warning {+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);+ background-repeat: repeat-x;+}+.progress-bar-danger {+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);+ background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));+ background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);+ background-repeat: repeat-x;+}+.progress-bar-striped {+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+}+.list-group {+ border-radius: 4px;+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075);+}+.list-group-item.active,+.list-group-item.active:hover,+.list-group-item.active:focus {+ text-shadow: 0 -1px 0 #3071a9;+ background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);+ background-image: -o-linear-gradient(top, #428bca 0%, #3278b3 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3));+ background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);+ background-repeat: repeat-x;+ border-color: #3278b3;+}+.panel {+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);+ box-shadow: 0 1px 2px rgba(0, 0, 0, .05);+}+.panel-default > .panel-heading {+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);+ background-repeat: repeat-x;+}+.panel-primary > .panel-heading {+ background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);+ background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);+ background-repeat: repeat-x;+}+.panel-success > .panel-heading {+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);+ background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));+ background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);+ background-repeat: repeat-x;+}+.panel-info > .panel-heading {+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);+ background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));+ background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);+ background-repeat: repeat-x;+}+.panel-warning > .panel-heading {+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);+ background-repeat: repeat-x;+}+.panel-danger > .panel-heading {+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);+ background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));+ background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);+ background-repeat: repeat-x;+}+.well {+ background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);+ background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));+ background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);+ background-repeat: repeat-x;+ border-color: #dcdcdc;+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);+}+/*# sourceMappingURL=bootstrap-theme.css.map */
@@ -0,0 +1,1 @@+{"version":3,"file":"bootstrap-theme.css","sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAeA;;;;;;EAME,0CAAA;EC+CA,6FAAA;EACQ,qFAAA;EC5DT;AFiBC;;;;;;;;;;;;EC0CA,0DAAA;EACQ,kDAAA;EC7CT;AFqCC;;EAEE,wBAAA;EEnCH;AFwCD;EG/CI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EA+B2C,2BAAA;EAA2B,oBAAA;EE7BvE;AFAC;;EAEE,2BAAA;EACA,8BAAA;EEEH;AFCC;;EAEE,2BAAA;EACA,uBAAA;EECH;AFEC;;EAEE,2BAAA;EACA,wBAAA;EEAH;AFeD;EGhDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0BD;AFxBC;;EAEE,2BAAA;EACA,8BAAA;EE0BH;AFvBC;;EAEE,2BAAA;EACA,uBAAA;EEyBH;AFtBC;;EAEE,2BAAA;EACA,wBAAA;EEwBH;AFRD;EGjDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EEkDD;AFhDC;;EAEE,2BAAA;EACA,8BAAA;EEkDH;AF/CC;;EAEE,2BAAA;EACA,uBAAA;EEiDH;AF9CC;;EAEE,2BAAA;EACA,wBAAA;EEgDH;AF/BD;EGlDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0ED;AFxEC;;EAEE,2BAAA;EACA,8BAAA;EE0EH;AFvEC;;EAEE,2BAAA;EACA,uBAAA;EEyEH;AFtEC;;EAEE,2BAAA;EACA,wBAAA;EEwEH;AFtDD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EEkGD;AFhGC;;EAEE,2BAAA;EACA,8BAAA;EEkGH;AF/FC;;EAEE,2BAAA;EACA,uBAAA;EEiGH;AF9FC;;EAEE,2BAAA;EACA,wBAAA;EEgGH;AF7ED;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0HD;AFxHC;;EAEE,2BAAA;EACA,8BAAA;EE0HH;AFvHC;;EAEE,2BAAA;EACA,uBAAA;EEyHH;AFtHC;;EAEE,2BAAA;EACA,wBAAA;EEwHH;AF7FD;;ECbE,oDAAA;EACQ,4CAAA;EC8GT;AFvFD;;EGvEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHsEF,2BAAA;EE6FD;AF3FD;;;EG5EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4EF,2BAAA;EEiGD;AFvFD;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ4GA,oBAAA;EC9CA,6FAAA;EACQ,qFAAA;EC4IT;AFlGD;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;ECqJT;AF/FD;;EAEE,gDAAA;EEiGD;AF7FD;EG5GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EFgOD;AFrGD;EG5GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;EC0KT;AF9GD;;EAWI,2CAAA;EEuGH;AFlGD;;;EAGE,kBAAA;EEoGD;AF1FD;EACE,+CAAA;EC3FA,4FAAA;EACQ,oFAAA;ECwLT;AFlFD;EGtJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EE8FD;AFzFD;EGvJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EEsGD;AFhGD;EGxJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EE8GD;AFvGD;EGzJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EEsHD;AFtGD;EGlKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED2QH;AFnGD;EG5KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDkRH;AFzGD;EG7KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDyRH;AF/GD;EG9KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDgSH;AFrHD;EG/KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDuSH;AF3HD;EGhLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8SH;AF9HD;EGnJI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDoRH;AF1HD;EACE,oBAAA;EC/IA,oDAAA;EACQ,4CAAA;EC4QT;AF3HD;;;EAGE,+BAAA;EGpME,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHkMF,uBAAA;EEiID;AFvHD;ECjKE,mDAAA;EACQ,2CAAA;EC2RT;AFjHD;EG1NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8UH;AFvHD;EG3NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqVH;AF7HD;EG5NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4VH;AFnID;EG7NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDmWH;AFzID;EG9NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED0WH;AF/ID;EG/NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDiXH;AF9ID;EGvOI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHqOF,uBAAA;EC1LA,2FAAA;EACQ,mFAAA;EC+UT","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",null,"// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
@@ -0,0 +1,5 @@+/*!+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-o-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#2d6ca2));background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary:disabled,.btn-primary[disabled]{background-color:#2d6ca2;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f3f3f3));background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:-o-linear-gradient(top,#222 0,#282828 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#222),to(#282828));background-image:linear-gradient(to bottom,#222 0,#282828 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-o-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3071a9));background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-o-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3278b3));background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);background-repeat:repeat-x;border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
@@ -1,3990 +1,6203 @@ /*!- * Bootstrap v2.0.2- *- * Copyright 2012 Twitter, Inc- * Licensed under the Apache License v2.0- * http://www.apache.org/licenses/LICENSE-2.0- *- * Designed and built with all the love in the world @twitter by @mdo and @fat.- */-article,-aside,-details,-figcaption,-figure,-footer,-header,-hgroup,-nav,-section {- display: block;-}-audio,-canvas,-video {- display: inline-block;- *display: inline;- *zoom: 1;-}-audio:not([controls]) {- display: none;-}-html {- font-size: 100%;- -webkit-text-size-adjust: 100%;- -ms-text-size-adjust: 100%;-}-a:focus {- outline: thin dotted #333;- outline: 5px auto -webkit-focus-ring-color;- outline-offset: -2px;-}-a:hover,-a:active {- outline: 0;-}-sub,-sup {- position: relative;- font-size: 75%;- line-height: 0;- vertical-align: baseline;-}-sup {- top: -0.5em;-}-sub {- bottom: -0.25em;-}-img {- height: auto;- border: 0;- -ms-interpolation-mode: bicubic;- vertical-align: middle;-}-button,-input,-select,-textarea {- margin: 0;- font-size: 100%;- vertical-align: middle;-}-button,-input {- *overflow: visible;- line-height: normal;-}-button::-moz-focus-inner,-input::-moz-focus-inner {- padding: 0;- border: 0;-}-button,-input[type="button"],-input[type="reset"],-input[type="submit"] {- cursor: pointer;- -webkit-appearance: button;-}-input[type="search"] {- -webkit-appearance: textfield;- -webkit-box-sizing: content-box;- -moz-box-sizing: content-box;- box-sizing: content-box;-}-input[type="search"]::-webkit-search-decoration,-input[type="search"]::-webkit-search-cancel-button {- -webkit-appearance: none;-}-textarea {- overflow: auto;- vertical-align: top;-}-.clearfix {- *zoom: 1;-}-.clearfix:before,-.clearfix:after {- display: table;- content: "";-}-.clearfix:after {- clear: both;-}-.hide-text {- overflow: hidden;- text-indent: 100%;- white-space: nowrap;-}-.input-block-level {- display: block;- width: 100%;- min-height: 28px;- /* Make inputs at least the height of their button counterpart */-- /* Makes inputs behave like true block-level elements */-- -webkit-box-sizing: border-box;- -moz-box-sizing: border-box;- -ms-box-sizing: border-box;- box-sizing: border-box;-}-body {- margin: 0;- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;- font-size: 13px;- line-height: 18px;- color: #333333;- background-color: #ffffff;-}-a {- color: #0088cc;- text-decoration: none;-}-a:hover {- color: #005580;- text-decoration: underline;-}-.row {- margin-left: -20px;- *zoom: 1;-}-.row:before,-.row:after {- display: table;- content: "";-}-.row:after {- clear: both;-}-[class*="span"] {- float: left;- margin-left: 20px;-}-.container,-.navbar-fixed-top .container,-.navbar-fixed-bottom .container {- width: 940px;-}-.span12 {- width: 940px;-}-.span11 {- width: 860px;-}-.span10 {- width: 780px;-}-.span9 {- width: 700px;-}-.span8 {- width: 620px;-}-.span7 {- width: 540px;-}-.span6 {- width: 460px;-}-.span5 {- width: 380px;-}-.span4 {- width: 300px;-}-.span3 {- width: 220px;-}-.span2 {- width: 140px;-}-.span1 {- width: 60px;-}-.offset12 {- margin-left: 980px;-}-.offset11 {- margin-left: 900px;-}-.offset10 {- margin-left: 820px;-}-.offset9 {- margin-left: 740px;-}-.offset8 {- margin-left: 660px;-}-.offset7 {- margin-left: 580px;-}-.offset6 {- margin-left: 500px;-}-.offset5 {- margin-left: 420px;-}-.offset4 {- margin-left: 340px;-}-.offset3 {- margin-left: 260px;-}-.offset2 {- margin-left: 180px;-}-.offset1 {- margin-left: 100px;-}-.row-fluid {- width: 100%;- *zoom: 1;-}-.row-fluid:before,-.row-fluid:after {- display: table;- content: "";-}-.row-fluid:after {- clear: both;-}-.row-fluid > [class*="span"] {- float: left;- margin-left: 2.127659574%;-}-.row-fluid > [class*="span"]:first-child {- margin-left: 0;-}-.row-fluid > .span12 {- width: 99.99999998999999%;-}-.row-fluid > .span11 {- width: 91.489361693%;-}-.row-fluid > .span10 {- width: 82.97872339599999%;-}-.row-fluid > .span9 {- width: 74.468085099%;-}-.row-fluid > .span8 {- width: 65.95744680199999%;-}-.row-fluid > .span7 {- width: 57.446808505%;-}-.row-fluid > .span6 {- width: 48.93617020799999%;-}-.row-fluid > .span5 {- width: 40.425531911%;-}-.row-fluid > .span4 {- width: 31.914893614%;-}-.row-fluid > .span3 {- width: 23.404255317%;-}-.row-fluid > .span2 {- width: 14.89361702%;-}-.row-fluid > .span1 {- width: 6.382978723%;-}-.container {- margin-left: auto;- margin-right: auto;- *zoom: 1;-}-.container:before,-.container:after {- display: table;- content: "";-}-.container:after {- clear: both;-}-.container-fluid {- padding-left: 20px;- padding-right: 20px;- *zoom: 1;-}-.container-fluid:before,-.container-fluid:after {- display: table;- content: "";-}-.container-fluid:after {- clear: both;-}-p {- margin: 0 0 9px;- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;- font-size: 13px;- line-height: 18px;-}-p small {- font-size: 11px;- color: #999999;-}-.lead {- margin-bottom: 18px;- font-size: 20px;- font-weight: 200;- line-height: 27px;-}-h1,-h2,-h3,-h4,-h5,-h6 {- margin: 0;- font-family: inherit;- font-weight: bold;- color: inherit;- text-rendering: optimizelegibility;-}-h1 small,-h2 small,-h3 small,-h4 small,-h5 small,-h6 small {- font-weight: normal;- color: #999999;-}-h1 {- font-size: 30px;- line-height: 36px;-}-h1 small {- font-size: 18px;-}-h2 {- font-size: 24px;- line-height: 36px;-}-h2 small {- font-size: 18px;-}-h3 {- line-height: 27px;- font-size: 18px;-}-h3 small {- font-size: 14px;-}-h4,-h5,-h6 {- line-height: 18px;-}-h4 {- font-size: 14px;-}-h4 small {- font-size: 12px;-}-h5 {- font-size: 12px;-}-h6 {- font-size: 11px;- color: #999999;- text-transform: uppercase;-}-.page-header {- padding-bottom: 17px;- margin: 18px 0;- border-bottom: 1px solid #eeeeee;-}-.page-header h1 {- line-height: 1;-}-ul,-ol {- padding: 0;- margin: 0 0 9px 25px;-}-ul ul,-ul ol,-ol ol,-ol ul {- margin-bottom: 0;-}-ul {- list-style: disc;-}-ol {- list-style: decimal;-}-li {- line-height: 18px;-}-ul.unstyled,-ol.unstyled {- margin-left: 0;- list-style: none;-}-dl {- margin-bottom: 18px;-}-dt,-dd {- line-height: 18px;-}-dt {- font-weight: bold;- line-height: 17px;-}-dd {- margin-left: 9px;-}-.dl-horizontal dt {- float: left;- clear: left;- width: 120px;- text-align: right;-}-.dl-horizontal dd {- margin-left: 130px;-}-hr {- margin: 18px 0;- border: 0;- border-top: 1px solid #eeeeee;- border-bottom: 1px solid #ffffff;-}-strong {- font-weight: bold;-}-em {- font-style: italic;-}-.muted {- color: #999999;-}-abbr[title] {- border-bottom: 1px dotted #ddd;- cursor: help;-}-abbr.initialism {- font-size: 90%;- text-transform: uppercase;-}-blockquote {- padding: 0 0 0 15px;- margin: 0 0 18px;- border-left: 5px solid #eeeeee;-}-blockquote p {- margin-bottom: 0;- font-size: 16px;- font-weight: 300;- line-height: 22.5px;-}-blockquote small {- display: block;- line-height: 18px;- color: #999999;-}-blockquote small:before {- content: '\2014 \00A0';-}-blockquote.pull-right {- float: right;- padding-left: 0;- padding-right: 15px;- border-left: 0;- border-right: 5px solid #eeeeee;-}-blockquote.pull-right p,-blockquote.pull-right small {- text-align: right;-}-q:before,-q:after,-blockquote:before,-blockquote:after {- content: "";-}-address {- display: block;- margin-bottom: 18px;- line-height: 18px;- font-style: normal;-}-small {- font-size: 100%;-}-cite {- font-style: normal;-}-code,-pre {- padding: 0 3px 2px;- font-family: Menlo, Monaco, "Courier New", monospace;- font-size: 12px;- color: #333333;- -webkit-border-radius: 3px;- -moz-border-radius: 3px;- border-radius: 3px;-}-code {- padding: 2px 4px;- color: #d14;- background-color: #f7f7f9;- border: 1px solid #e1e1e8;-}-pre {- display: block;- padding: 8.5px;- margin: 0 0 9px;- font-size: 12.025px;- line-height: 18px;- background-color: #f5f5f5;- border: 1px solid #ccc;- border: 1px solid rgba(0, 0, 0, 0.15);- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;- white-space: pre;- white-space: pre-wrap;- word-break: break-all;- word-wrap: break-word;-}-pre.prettyprint {- margin-bottom: 18px;-}-pre code {- padding: 0;- color: inherit;- background-color: transparent;- border: 0;-}-.pre-scrollable {- max-height: 340px;- overflow-y: scroll;-}-form {- margin: 0 0 18px;-}-fieldset {- padding: 0;- margin: 0;- border: 0;-}-legend {- display: block;- width: 100%;- padding: 0;- margin-bottom: 27px;- font-size: 19.5px;- line-height: 36px;- color: #333333;- border: 0;- border-bottom: 1px solid #eee;-}-legend small {- font-size: 13.5px;- color: #999999;-}-label,-input,-button,-select,-textarea {- font-size: 13px;- font-weight: normal;- line-height: 18px;-}-input,-button,-select,-textarea {- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;-}-label {- display: block;- margin-bottom: 5px;- color: #333333;-}-input,-textarea,-select,-.uneditable-input {- display: inline-block;- width: 210px;- height: 18px;- padding: 4px;- margin-bottom: 9px;- font-size: 13px;- line-height: 18px;- color: #555555;- border: 1px solid #cccccc;- -webkit-border-radius: 3px;- -moz-border-radius: 3px;- border-radius: 3px;-}-.uneditable-textarea {- width: auto;- height: auto;-}-label input,-label textarea,-label select {- display: block;-}-input[type="image"],-input[type="checkbox"],-input[type="radio"] {- width: auto;- height: auto;- padding: 0;- margin: 3px 0;- *margin-top: 0;- /* IE7 */-- line-height: normal;- cursor: pointer;- -webkit-border-radius: 0;- -moz-border-radius: 0;- border-radius: 0;- border: 0 \9;- /* IE9 and down */--}-input[type="image"] {- border: 0;-}-input[type="file"] {- width: auto;- padding: initial;- line-height: initial;- border: initial;- background-color: #ffffff;- background-color: initial;- -webkit-box-shadow: none;- -moz-box-shadow: none;- box-shadow: none;-}-input[type="button"],-input[type="reset"],-input[type="submit"] {- width: auto;- height: auto;-}-select,-input[type="file"] {- height: 28px;- /* In IE7, the height of the select element cannot be changed by height, only font-size */-- *margin-top: 4px;- /* For IE7, add top margin to align select with labels */-- line-height: 28px;-}-input[type="file"] {- line-height: 18px \9;-}-select {- width: 220px;- background-color: #ffffff;-}-select[multiple],-select[size] {- height: auto;-}-input[type="image"] {- -webkit-box-shadow: none;- -moz-box-shadow: none;- box-shadow: none;-}-textarea {- height: auto;-}-input[type="hidden"] {- display: none;-}-.radio,-.checkbox {- padding-left: 18px;-}-.radio input[type="radio"],-.checkbox input[type="checkbox"] {- float: left;- margin-left: -18px;-}-.controls > .radio:first-child,-.controls > .checkbox:first-child {- padding-top: 5px;-}-.radio.inline,-.checkbox.inline {- display: inline-block;- padding-top: 5px;- margin-bottom: 0;- vertical-align: middle;-}-.radio.inline + .radio.inline,-.checkbox.inline + .checkbox.inline {- margin-left: 10px;-}-input,-textarea {- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);- -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;- -moz-transition: border linear 0.2s, box-shadow linear 0.2s;- -ms-transition: border linear 0.2s, box-shadow linear 0.2s;- -o-transition: border linear 0.2s, box-shadow linear 0.2s;- transition: border linear 0.2s, box-shadow linear 0.2s;-}-input:focus,-textarea:focus {- border-color: rgba(82, 168, 236, 0.8);- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);- outline: 0;- outline: thin dotted \9;- /* IE6-9 */--}-input[type="file"]:focus,-input[type="radio"]:focus,-input[type="checkbox"]:focus,-select:focus {- -webkit-box-shadow: none;- -moz-box-shadow: none;- box-shadow: none;- outline: thin dotted #333;- outline: 5px auto -webkit-focus-ring-color;- outline-offset: -2px;-}-.input-mini {- width: 60px;-}-.input-small {- width: 90px;-}-.input-medium {- width: 150px;-}-.input-large {- width: 210px;-}-.input-xlarge {- width: 270px;-}-.input-xxlarge {- width: 530px;-}-input[class*="span"],-select[class*="span"],-textarea[class*="span"],-.uneditable-input {- float: none;- margin-left: 0;-}-input,-textarea,-.uneditable-input {- margin-left: 0;-}-input.span12, textarea.span12, .uneditable-input.span12 {- width: 930px;-}-input.span11, textarea.span11, .uneditable-input.span11 {- width: 850px;-}-input.span10, textarea.span10, .uneditable-input.span10 {- width: 770px;-}-input.span9, textarea.span9, .uneditable-input.span9 {- width: 690px;-}-input.span8, textarea.span8, .uneditable-input.span8 {- width: 610px;-}-input.span7, textarea.span7, .uneditable-input.span7 {- width: 530px;-}-input.span6, textarea.span6, .uneditable-input.span6 {- width: 450px;-}-input.span5, textarea.span5, .uneditable-input.span5 {- width: 370px;-}-input.span4, textarea.span4, .uneditable-input.span4 {- width: 290px;-}-input.span3, textarea.span3, .uneditable-input.span3 {- width: 210px;-}-input.span2, textarea.span2, .uneditable-input.span2 {- width: 130px;-}-input.span1, textarea.span1, .uneditable-input.span1 {- width: 50px;-}-input[disabled],-select[disabled],-textarea[disabled],-input[readonly],-select[readonly],-textarea[readonly] {- background-color: #eeeeee;- border-color: #ddd;- cursor: not-allowed;-}-.control-group.warning > label,-.control-group.warning .help-block,-.control-group.warning .help-inline {- color: #c09853;-}-.control-group.warning input,-.control-group.warning select,-.control-group.warning textarea {- color: #c09853;- border-color: #c09853;-}-.control-group.warning input:focus,-.control-group.warning select:focus,-.control-group.warning textarea:focus {- border-color: #a47e3c;- -webkit-box-shadow: 0 0 6px #dbc59e;- -moz-box-shadow: 0 0 6px #dbc59e;- box-shadow: 0 0 6px #dbc59e;-}-.control-group.warning .input-prepend .add-on,-.control-group.warning .input-append .add-on {- color: #c09853;- background-color: #fcf8e3;- border-color: #c09853;-}-.control-group.error > label,-.control-group.error .help-block,-.control-group.error .help-inline {- color: #b94a48;-}-.control-group.error input,-.control-group.error select,-.control-group.error textarea {- color: #b94a48;- border-color: #b94a48;-}-.control-group.error input:focus,-.control-group.error select:focus,-.control-group.error textarea:focus {- border-color: #953b39;- -webkit-box-shadow: 0 0 6px #d59392;- -moz-box-shadow: 0 0 6px #d59392;- box-shadow: 0 0 6px #d59392;-}-.control-group.error .input-prepend .add-on,-.control-group.error .input-append .add-on {- color: #b94a48;- background-color: #f2dede;- border-color: #b94a48;-}-.control-group.success > label,-.control-group.success .help-block,-.control-group.success .help-inline {- color: #468847;-}-.control-group.success input,-.control-group.success select,-.control-group.success textarea {- color: #468847;- border-color: #468847;-}-.control-group.success input:focus,-.control-group.success select:focus,-.control-group.success textarea:focus {- border-color: #356635;- -webkit-box-shadow: 0 0 6px #7aba7b;- -moz-box-shadow: 0 0 6px #7aba7b;- box-shadow: 0 0 6px #7aba7b;-}-.control-group.success .input-prepend .add-on,-.control-group.success .input-append .add-on {- color: #468847;- background-color: #dff0d8;- border-color: #468847;-}-input:focus:required:invalid,-textarea:focus:required:invalid,-select:focus:required:invalid {- color: #b94a48;- border-color: #ee5f5b;-}-input:focus:required:invalid:focus,-textarea:focus:required:invalid:focus,-select:focus:required:invalid:focus {- border-color: #e9322d;- -webkit-box-shadow: 0 0 6px #f8b9b7;- -moz-box-shadow: 0 0 6px #f8b9b7;- box-shadow: 0 0 6px #f8b9b7;-}-.form-actions {- padding: 17px 20px 18px;- margin-top: 18px;- margin-bottom: 18px;- background-color: #eeeeee;- border-top: 1px solid #ddd;- *zoom: 1;-}-.form-actions:before,-.form-actions:after {- display: table;- content: "";-}-.form-actions:after {- clear: both;-}-.uneditable-input {- display: block;- background-color: #ffffff;- border-color: #eee;- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);- cursor: not-allowed;-}-:-moz-placeholder {- color: #999999;-}-::-webkit-input-placeholder {- color: #999999;-}-.help-block,-.help-inline {- color: #555555;-}-.help-block {- display: block;- margin-bottom: 9px;-}-.help-inline {- display: inline-block;- *display: inline;- /* IE7 inline-block hack */-- *zoom: 1;- vertical-align: middle;- padding-left: 5px;-}-.input-prepend,-.input-append {- margin-bottom: 5px;-}-.input-prepend input,-.input-append input,-.input-prepend select,-.input-append select,-.input-prepend .uneditable-input,-.input-append .uneditable-input {- *margin-left: 0;- -webkit-border-radius: 0 3px 3px 0;- -moz-border-radius: 0 3px 3px 0;- border-radius: 0 3px 3px 0;-}-.input-prepend input:focus,-.input-append input:focus,-.input-prepend select:focus,-.input-append select:focus,-.input-prepend .uneditable-input:focus,-.input-append .uneditable-input:focus {- position: relative;- z-index: 2;-}-.input-prepend .uneditable-input,-.input-append .uneditable-input {- border-left-color: #ccc;-}-.input-prepend .add-on,-.input-append .add-on {- display: inline-block;- width: auto;- min-width: 16px;- height: 18px;- padding: 4px 5px;- font-weight: normal;- line-height: 18px;- text-align: center;- text-shadow: 0 1px 0 #ffffff;- vertical-align: middle;- background-color: #eeeeee;- border: 1px solid #ccc;-}-.input-prepend .add-on,-.input-append .add-on,-.input-prepend .btn,-.input-append .btn {- -webkit-border-radius: 3px 0 0 3px;- -moz-border-radius: 3px 0 0 3px;- border-radius: 3px 0 0 3px;-}-.input-prepend .active,-.input-append .active {- background-color: #a9dba9;- border-color: #46a546;-}-.input-prepend .add-on,-.input-prepend .btn {- margin-right: -1px;-}-.input-append input,-.input-append select .uneditable-input {- -webkit-border-radius: 3px 0 0 3px;- -moz-border-radius: 3px 0 0 3px;- border-radius: 3px 0 0 3px;-}-.input-append .uneditable-input {- border-left-color: #eee;- border-right-color: #ccc;-}-.input-append .add-on,-.input-append .btn {- margin-left: -1px;- -webkit-border-radius: 0 3px 3px 0;- -moz-border-radius: 0 3px 3px 0;- border-radius: 0 3px 3px 0;-}-.input-prepend.input-append input,-.input-prepend.input-append select,-.input-prepend.input-append .uneditable-input {- -webkit-border-radius: 0;- -moz-border-radius: 0;- border-radius: 0;-}-.input-prepend.input-append .add-on:first-child,-.input-prepend.input-append .btn:first-child {- margin-right: -1px;- -webkit-border-radius: 3px 0 0 3px;- -moz-border-radius: 3px 0 0 3px;- border-radius: 3px 0 0 3px;-}-.input-prepend.input-append .add-on:last-child,-.input-prepend.input-append .btn:last-child {- margin-left: -1px;- -webkit-border-radius: 0 3px 3px 0;- -moz-border-radius: 0 3px 3px 0;- border-radius: 0 3px 3px 0;-}-.search-query {- padding-left: 14px;- padding-right: 14px;- margin-bottom: 0;- -webkit-border-radius: 14px;- -moz-border-radius: 14px;- border-radius: 14px;-}-.form-search input,-.form-inline input,-.form-horizontal input,-.form-search textarea,-.form-inline textarea,-.form-horizontal textarea,-.form-search select,-.form-inline select,-.form-horizontal select,-.form-search .help-inline,-.form-inline .help-inline,-.form-horizontal .help-inline,-.form-search .uneditable-input,-.form-inline .uneditable-input,-.form-horizontal .uneditable-input,-.form-search .input-prepend,-.form-inline .input-prepend,-.form-horizontal .input-prepend,-.form-search .input-append,-.form-inline .input-append,-.form-horizontal .input-append {- display: inline-block;- margin-bottom: 0;-}-.form-search .hide,-.form-inline .hide,-.form-horizontal .hide {- display: none;-}-.form-search label,-.form-inline label {- display: inline-block;-}-.form-search .input-append,-.form-inline .input-append,-.form-search .input-prepend,-.form-inline .input-prepend {- margin-bottom: 0;-}-.form-search .radio,-.form-search .checkbox,-.form-inline .radio,-.form-inline .checkbox {- padding-left: 0;- margin-bottom: 0;- vertical-align: middle;-}-.form-search .radio input[type="radio"],-.form-search .checkbox input[type="checkbox"],-.form-inline .radio input[type="radio"],-.form-inline .checkbox input[type="checkbox"] {- float: left;- margin-left: 0;- margin-right: 3px;-}-.control-group {- margin-bottom: 9px;-}-legend + .control-group {- margin-top: 18px;- -webkit-margin-top-collapse: separate;-}-.form-horizontal .control-group {- margin-bottom: 18px;- *zoom: 1;-}-.form-horizontal .control-group:before,-.form-horizontal .control-group:after {- display: table;- content: "";-}-.form-horizontal .control-group:after {- clear: both;-}-.form-horizontal .control-label {- float: left;- width: 140px;- padding-top: 5px;- text-align: right;-}-.form-horizontal .controls {- margin-left: 160px;- /* Super jank IE7 fix to ensure the inputs in .input-append and input-prepend don't inherit the margin of the parent, in this case .controls */-- *display: inline-block;- *margin-left: 0;- *padding-left: 20px;-}-.form-horizontal .help-block {- margin-top: 9px;- margin-bottom: 0;-}-.form-horizontal .form-actions {- padding-left: 160px;-}-table {- max-width: 100%;- border-collapse: collapse;- border-spacing: 0;- background-color: transparent;-}-.table {- width: 100%;- margin-bottom: 18px;-}-.table th,-.table td {- padding: 8px;- line-height: 18px;- text-align: left;- vertical-align: top;- border-top: 1px solid #dddddd;-}-.table th {- font-weight: bold;-}-.table thead th {- vertical-align: bottom;-}-.table colgroup + thead tr:first-child th,-.table colgroup + thead tr:first-child td,-.table thead:first-child tr:first-child th,-.table thead:first-child tr:first-child td {- border-top: 0;-}-.table tbody + tbody {- border-top: 2px solid #dddddd;-}-.table-condensed th,-.table-condensed td {- padding: 4px 5px;-}-.table-bordered {- border: 1px solid #dddddd;- border-left: 0;- border-collapse: separate;- *border-collapse: collapsed;- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;-}-.table-bordered th,-.table-bordered td {- border-left: 1px solid #dddddd;-}-.table-bordered thead:first-child tr:first-child th,-.table-bordered tbody:first-child tr:first-child th,-.table-bordered tbody:first-child tr:first-child td {- border-top: 0;-}-.table-bordered thead:first-child tr:first-child th:first-child,-.table-bordered tbody:first-child tr:first-child td:first-child {- -webkit-border-radius: 4px 0 0 0;- -moz-border-radius: 4px 0 0 0;- border-radius: 4px 0 0 0;-}-.table-bordered thead:first-child tr:first-child th:last-child,-.table-bordered tbody:first-child tr:first-child td:last-child {- -webkit-border-radius: 0 4px 0 0;- -moz-border-radius: 0 4px 0 0;- border-radius: 0 4px 0 0;-}-.table-bordered thead:last-child tr:last-child th:first-child,-.table-bordered tbody:last-child tr:last-child td:first-child {- -webkit-border-radius: 0 0 0 4px;- -moz-border-radius: 0 0 0 4px;- border-radius: 0 0 0 4px;-}-.table-bordered thead:last-child tr:last-child th:last-child,-.table-bordered tbody:last-child tr:last-child td:last-child {- -webkit-border-radius: 0 0 4px 0;- -moz-border-radius: 0 0 4px 0;- border-radius: 0 0 4px 0;-}-.table-striped tbody tr:nth-child(odd) td,-.table-striped tbody tr:nth-child(odd) th {- background-color: #f9f9f9;-}-.table tbody tr:hover td,-.table tbody tr:hover th {- background-color: #f5f5f5;-}-table .span1 {- float: none;- width: 44px;- margin-left: 0;-}-table .span2 {- float: none;- width: 124px;- margin-left: 0;-}-table .span3 {- float: none;- width: 204px;- margin-left: 0;-}-table .span4 {- float: none;- width: 284px;- margin-left: 0;-}-table .span5 {- float: none;- width: 364px;- margin-left: 0;-}-table .span6 {- float: none;- width: 444px;- margin-left: 0;-}-table .span7 {- float: none;- width: 524px;- margin-left: 0;-}-table .span8 {- float: none;- width: 604px;- margin-left: 0;-}-table .span9 {- float: none;- width: 684px;- margin-left: 0;-}-table .span10 {- float: none;- width: 764px;- margin-left: 0;-}-table .span11 {- float: none;- width: 844px;- margin-left: 0;-}-table .span12 {- float: none;- width: 924px;- margin-left: 0;-}-table .span13 {- float: none;- width: 1004px;- margin-left: 0;-}-table .span14 {- float: none;- width: 1084px;- margin-left: 0;-}-table .span15 {- float: none;- width: 1164px;- margin-left: 0;-}-table .span16 {- float: none;- width: 1244px;- margin-left: 0;-}-table .span17 {- float: none;- width: 1324px;- margin-left: 0;-}-table .span18 {- float: none;- width: 1404px;- margin-left: 0;-}-table .span19 {- float: none;- width: 1484px;- margin-left: 0;-}-table .span20 {- float: none;- width: 1564px;- margin-left: 0;-}-table .span21 {- float: none;- width: 1644px;- margin-left: 0;-}-table .span22 {- float: none;- width: 1724px;- margin-left: 0;-}-table .span23 {- float: none;- width: 1804px;- margin-left: 0;-}-table .span24 {- float: none;- width: 1884px;- margin-left: 0;-}-[class^="icon-"],-[class*=" icon-"] {- display: inline-block;- width: 14px;- height: 14px;- line-height: 14px;- vertical-align: text-top;- background-image: url("../img/glyphicons-halflings.png");- background-position: 14px 14px;- background-repeat: no-repeat;- *margin-right: .3em;-}-[class^="icon-"]:last-child,-[class*=" icon-"]:last-child {- *margin-left: 0;-}-.icon-white {- background-image: url("../img/glyphicons-halflings-white.png");-}-.icon-glass {- background-position: 0 0;-}-.icon-music {- background-position: -24px 0;-}-.icon-search {- background-position: -48px 0;-}-.icon-envelope {- background-position: -72px 0;-}-.icon-heart {- background-position: -96px 0;-}-.icon-star {- background-position: -120px 0;-}-.icon-star-empty {- background-position: -144px 0;-}-.icon-user {- background-position: -168px 0;-}-.icon-film {- background-position: -192px 0;-}-.icon-th-large {- background-position: -216px 0;-}-.icon-th {- background-position: -240px 0;-}-.icon-th-list {- background-position: -264px 0;-}-.icon-ok {- background-position: -288px 0;-}-.icon-remove {- background-position: -312px 0;-}-.icon-zoom-in {- background-position: -336px 0;-}-.icon-zoom-out {- background-position: -360px 0;-}-.icon-off {- background-position: -384px 0;-}-.icon-signal {- background-position: -408px 0;-}-.icon-cog {- background-position: -432px 0;-}-.icon-trash {- background-position: -456px 0;-}-.icon-home {- background-position: 0 -24px;-}-.icon-file {- background-position: -24px -24px;-}-.icon-time {- background-position: -48px -24px;-}-.icon-road {- background-position: -72px -24px;-}-.icon-download-alt {- background-position: -96px -24px;-}-.icon-download {- background-position: -120px -24px;-}-.icon-upload {- background-position: -144px -24px;-}-.icon-inbox {- background-position: -168px -24px;-}-.icon-play-circle {- background-position: -192px -24px;-}-.icon-repeat {- background-position: -216px -24px;-}-.icon-refresh {- background-position: -240px -24px;-}-.icon-list-alt {- background-position: -264px -24px;-}-.icon-lock {- background-position: -287px -24px;-}-.icon-flag {- background-position: -312px -24px;-}-.icon-headphones {- background-position: -336px -24px;-}-.icon-volume-off {- background-position: -360px -24px;-}-.icon-volume-down {- background-position: -384px -24px;-}-.icon-volume-up {- background-position: -408px -24px;-}-.icon-qrcode {- background-position: -432px -24px;-}-.icon-barcode {- background-position: -456px -24px;-}-.icon-tag {- background-position: 0 -48px;-}-.icon-tags {- background-position: -25px -48px;-}-.icon-book {- background-position: -48px -48px;-}-.icon-bookmark {- background-position: -72px -48px;-}-.icon-print {- background-position: -96px -48px;-}-.icon-camera {- background-position: -120px -48px;-}-.icon-font {- background-position: -144px -48px;-}-.icon-bold {- background-position: -167px -48px;-}-.icon-italic {- background-position: -192px -48px;-}-.icon-text-height {- background-position: -216px -48px;-}-.icon-text-width {- background-position: -240px -48px;-}-.icon-align-left {- background-position: -264px -48px;-}-.icon-align-center {- background-position: -288px -48px;-}-.icon-align-right {- background-position: -312px -48px;-}-.icon-align-justify {- background-position: -336px -48px;-}-.icon-list {- background-position: -360px -48px;-}-.icon-indent-left {- background-position: -384px -48px;-}-.icon-indent-right {- background-position: -408px -48px;-}-.icon-facetime-video {- background-position: -432px -48px;-}-.icon-picture {- background-position: -456px -48px;-}-.icon-pencil {- background-position: 0 -72px;-}-.icon-map-marker {- background-position: -24px -72px;-}-.icon-adjust {- background-position: -48px -72px;-}-.icon-tint {- background-position: -72px -72px;-}-.icon-edit {- background-position: -96px -72px;-}-.icon-share {- background-position: -120px -72px;-}-.icon-check {- background-position: -144px -72px;-}-.icon-move {- background-position: -168px -72px;-}-.icon-step-backward {- background-position: -192px -72px;-}-.icon-fast-backward {- background-position: -216px -72px;-}-.icon-backward {- background-position: -240px -72px;-}-.icon-play {- background-position: -264px -72px;-}-.icon-pause {- background-position: -288px -72px;-}-.icon-stop {- background-position: -312px -72px;-}-.icon-forward {- background-position: -336px -72px;-}-.icon-fast-forward {- background-position: -360px -72px;-}-.icon-step-forward {- background-position: -384px -72px;-}-.icon-eject {- background-position: -408px -72px;-}-.icon-chevron-left {- background-position: -432px -72px;-}-.icon-chevron-right {- background-position: -456px -72px;-}-.icon-plus-sign {- background-position: 0 -96px;-}-.icon-minus-sign {- background-position: -24px -96px;-}-.icon-remove-sign {- background-position: -48px -96px;-}-.icon-ok-sign {- background-position: -72px -96px;-}-.icon-question-sign {- background-position: -96px -96px;-}-.icon-info-sign {- background-position: -120px -96px;-}-.icon-screenshot {- background-position: -144px -96px;-}-.icon-remove-circle {- background-position: -168px -96px;-}-.icon-ok-circle {- background-position: -192px -96px;-}-.icon-ban-circle {- background-position: -216px -96px;-}-.icon-arrow-left {- background-position: -240px -96px;-}-.icon-arrow-right {- background-position: -264px -96px;-}-.icon-arrow-up {- background-position: -289px -96px;-}-.icon-arrow-down {- background-position: -312px -96px;-}-.icon-share-alt {- background-position: -336px -96px;-}-.icon-resize-full {- background-position: -360px -96px;-}-.icon-resize-small {- background-position: -384px -96px;-}-.icon-plus {- background-position: -408px -96px;-}-.icon-minus {- background-position: -433px -96px;-}-.icon-asterisk {- background-position: -456px -96px;-}-.icon-exclamation-sign {- background-position: 0 -120px;-}-.icon-gift {- background-position: -24px -120px;-}-.icon-leaf {- background-position: -48px -120px;-}-.icon-fire {- background-position: -72px -120px;-}-.icon-eye-open {- background-position: -96px -120px;-}-.icon-eye-close {- background-position: -120px -120px;-}-.icon-warning-sign {- background-position: -144px -120px;-}-.icon-plane {- background-position: -168px -120px;-}-.icon-calendar {- background-position: -192px -120px;-}-.icon-random {- background-position: -216px -120px;-}-.icon-comment {- background-position: -240px -120px;-}-.icon-magnet {- background-position: -264px -120px;-}-.icon-chevron-up {- background-position: -288px -120px;-}-.icon-chevron-down {- background-position: -313px -119px;-}-.icon-retweet {- background-position: -336px -120px;-}-.icon-shopping-cart {- background-position: -360px -120px;-}-.icon-folder-close {- background-position: -384px -120px;-}-.icon-folder-open {- background-position: -408px -120px;-}-.icon-resize-vertical {- background-position: -432px -119px;-}-.icon-resize-horizontal {- background-position: -456px -118px;-}-.dropdown {- position: relative;-}-.dropdown-toggle {- *margin-bottom: -3px;-}-.dropdown-toggle:active,-.open .dropdown-toggle {- outline: 0;-}-.caret {- display: inline-block;- width: 0;- height: 0;- vertical-align: top;- border-left: 4px solid transparent;- border-right: 4px solid transparent;- border-top: 4px solid #000000;- opacity: 0.3;- filter: alpha(opacity=30);- content: "";-}-.dropdown .caret {- margin-top: 8px;- margin-left: 2px;-}-.dropdown:hover .caret,-.open.dropdown .caret {- opacity: 1;- filter: alpha(opacity=100);-}-.dropdown-menu {- position: absolute;- top: 100%;- left: 0;- z-index: 1000;- float: left;- display: none;- min-width: 160px;- padding: 4px 0;- margin: 0;- list-style: none;- background-color: #ffffff;- border-color: #ccc;- border-color: rgba(0, 0, 0, 0.2);- border-style: solid;- border-width: 1px;- -webkit-border-radius: 0 0 5px 5px;- -moz-border-radius: 0 0 5px 5px;- border-radius: 0 0 5px 5px;- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);- -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);- -webkit-background-clip: padding-box;- -moz-background-clip: padding;- background-clip: padding-box;- *border-right-width: 2px;- *border-bottom-width: 2px;-}-.dropdown-menu.pull-right {- right: 0;- left: auto;-}-.dropdown-menu .divider {- height: 1px;- margin: 8px 1px;- overflow: hidden;- background-color: #e5e5e5;- border-bottom: 1px solid #ffffff;- *width: 100%;- *margin: -5px 0 5px;-}-.dropdown-menu a {- display: block;- padding: 3px 15px;- clear: both;- font-weight: normal;- line-height: 18px;- color: #333333;- white-space: nowrap;-}-.dropdown-menu li > a:hover,-.dropdown-menu .active > a,-.dropdown-menu .active > a:hover {- color: #ffffff;- text-decoration: none;- background-color: #0088cc;-}-.dropdown.open {- *z-index: 1000;-}-.dropdown.open .dropdown-toggle {- color: #ffffff;- background: #ccc;- background: rgba(0, 0, 0, 0.3);-}-.dropdown.open .dropdown-menu {- display: block;-}-.pull-right .dropdown-menu {- left: auto;- right: 0;-}-.dropup .caret,-.navbar-fixed-bottom .dropdown .caret {- border-top: 0;- border-bottom: 4px solid #000000;- content: "\2191";-}-.dropup .dropdown-menu,-.navbar-fixed-bottom .dropdown .dropdown-menu {- top: auto;- bottom: 100%;- margin-bottom: 1px;-}-.typeahead {- margin-top: 2px;- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;-}-.well {- min-height: 20px;- padding: 19px;- margin-bottom: 20px;- background-color: #f5f5f5;- border: 1px solid #eee;- border: 1px solid rgba(0, 0, 0, 0.05);- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);-}-.well blockquote {- border-color: #ddd;- border-color: rgba(0, 0, 0, 0.15);-}-.well-large {- padding: 24px;- -webkit-border-radius: 6px;- -moz-border-radius: 6px;- border-radius: 6px;-}-.well-small {- padding: 9px;- -webkit-border-radius: 3px;- -moz-border-radius: 3px;- border-radius: 3px;-}-.fade {- -webkit-transition: opacity 0.15s linear;- -moz-transition: opacity 0.15s linear;- -ms-transition: opacity 0.15s linear;- -o-transition: opacity 0.15s linear;- transition: opacity 0.15s linear;- opacity: 0;-}-.fade.in {- opacity: 1;-}-.collapse {- -webkit-transition: height 0.35s ease;- -moz-transition: height 0.35s ease;- -ms-transition: height 0.35s ease;- -o-transition: height 0.35s ease;- transition: height 0.35s ease;- position: relative;- overflow: hidden;- height: 0;-}-.collapse.in {- height: auto;-}-.close {- float: right;- font-size: 20px;- font-weight: bold;- line-height: 18px;- color: #000000;- text-shadow: 0 1px 0 #ffffff;- opacity: 0.2;- filter: alpha(opacity=20);-}-.close:hover {- color: #000000;- text-decoration: none;- opacity: 0.4;- filter: alpha(opacity=40);- cursor: pointer;-}-.btn {- display: inline-block;- *display: inline;- /* IE7 inline-block hack */-- *zoom: 1;- padding: 4px 10px 4px;- margin-bottom: 0;- font-size: 13px;- line-height: 18px;- color: #333333;- text-align: center;- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);- vertical-align: middle;- background-color: #f5f5f5;- background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);- background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));- background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);- background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);- background-image: linear-gradient(top, #ffffff, #e6e6e6);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);- border-color: #e6e6e6 #e6e6e6 #bfbfbf;- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);- filter: progid:dximagetransform.microsoft.gradient(enabled=false);- border: 1px solid #cccccc;- border-bottom-color: #b3b3b3;- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);- cursor: pointer;- *margin-left: .3em;-}-.btn:hover,-.btn:active,-.btn.active,-.btn.disabled,-.btn[disabled] {- background-color: #e6e6e6;-}-.btn:active,-.btn.active {- background-color: #cccccc \9;-}-.btn:first-child {- *margin-left: 0;-}-.btn:hover {- color: #333333;- text-decoration: none;- background-color: #e6e6e6;- background-position: 0 -15px;- -webkit-transition: background-position 0.1s linear;- -moz-transition: background-position 0.1s linear;- -ms-transition: background-position 0.1s linear;- -o-transition: background-position 0.1s linear;- transition: background-position 0.1s linear;-}-.btn:focus {- outline: thin dotted #333;- outline: 5px auto -webkit-focus-ring-color;- outline-offset: -2px;-}-.btn.active,-.btn:active {- background-image: none;- -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);- -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);- box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);- background-color: #e6e6e6;- background-color: #d9d9d9 \9;- outline: 0;-}-.btn.disabled,-.btn[disabled] {- cursor: default;- background-image: none;- background-color: #e6e6e6;- opacity: 0.65;- filter: alpha(opacity=65);- -webkit-box-shadow: none;- -moz-box-shadow: none;- box-shadow: none;-}-.btn-large {- padding: 9px 14px;- font-size: 15px;- line-height: normal;- -webkit-border-radius: 5px;- -moz-border-radius: 5px;- border-radius: 5px;-}-.btn-large [class^="icon-"] {- margin-top: 1px;-}-.btn-small {- padding: 5px 9px;- font-size: 11px;- line-height: 16px;-}-.btn-small [class^="icon-"] {- margin-top: -1px;-}-.btn-mini {- padding: 2px 6px;- font-size: 11px;- line-height: 14px;-}-.btn-primary,-.btn-primary:hover,-.btn-warning,-.btn-warning:hover,-.btn-danger,-.btn-danger:hover,-.btn-success,-.btn-success:hover,-.btn-info,-.btn-info:hover,-.btn-inverse,-.btn-inverse:hover {- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);- color: #ffffff;-}-.btn-primary.active,-.btn-warning.active,-.btn-danger.active,-.btn-success.active,-.btn-info.active,-.btn-inverse.active {- color: rgba(255, 255, 255, 0.75);-}-.btn-primary {- background-color: #0074cc;- background-image: -moz-linear-gradient(top, #0088cc, #0055cc);- background-image: -ms-linear-gradient(top, #0088cc, #0055cc);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));- background-image: -webkit-linear-gradient(top, #0088cc, #0055cc);- background-image: -o-linear-gradient(top, #0088cc, #0055cc);- background-image: linear-gradient(top, #0088cc, #0055cc);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);- border-color: #0055cc #0055cc #003580;- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);- filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-primary:hover,-.btn-primary:active,-.btn-primary.active,-.btn-primary.disabled,-.btn-primary[disabled] {- background-color: #0055cc;-}-.btn-primary:active,-.btn-primary.active {- background-color: #004099 \9;-}-.btn-warning {- background-color: #faa732;- background-image: -moz-linear-gradient(top, #fbb450, #f89406);- background-image: -ms-linear-gradient(top, #fbb450, #f89406);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));- background-image: -webkit-linear-gradient(top, #fbb450, #f89406);- background-image: -o-linear-gradient(top, #fbb450, #f89406);- background-image: linear-gradient(top, #fbb450, #f89406);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);- border-color: #f89406 #f89406 #ad6704;- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);- filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-warning:hover,-.btn-warning:active,-.btn-warning.active,-.btn-warning.disabled,-.btn-warning[disabled] {- background-color: #f89406;-}-.btn-warning:active,-.btn-warning.active {- background-color: #c67605 \9;-}-.btn-danger {- background-color: #da4f49;- background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);- background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));- background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);- background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);- background-image: linear-gradient(top, #ee5f5b, #bd362f);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);- border-color: #bd362f #bd362f #802420;- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);- filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-danger:hover,-.btn-danger:active,-.btn-danger.active,-.btn-danger.disabled,-.btn-danger[disabled] {- background-color: #bd362f;-}-.btn-danger:active,-.btn-danger.active {- background-color: #942a25 \9;-}-.btn-success {- background-color: #5bb75b;- background-image: -moz-linear-gradient(top, #62c462, #51a351);- background-image: -ms-linear-gradient(top, #62c462, #51a351);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));- background-image: -webkit-linear-gradient(top, #62c462, #51a351);- background-image: -o-linear-gradient(top, #62c462, #51a351);- background-image: linear-gradient(top, #62c462, #51a351);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);- border-color: #51a351 #51a351 #387038;- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);- filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-success:hover,-.btn-success:active,-.btn-success.active,-.btn-success.disabled,-.btn-success[disabled] {- background-color: #51a351;-}-.btn-success:active,-.btn-success.active {- background-color: #408140 \9;-}-.btn-info {- background-color: #49afcd;- background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);- background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));- background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);- background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);- background-image: linear-gradient(top, #5bc0de, #2f96b4);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);- border-color: #2f96b4 #2f96b4 #1f6377;- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);- filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-info:hover,-.btn-info:active,-.btn-info.active,-.btn-info.disabled,-.btn-info[disabled] {- background-color: #2f96b4;-}-.btn-info:active,-.btn-info.active {- background-color: #24748c \9;-}-.btn-inverse {- background-color: #414141;- background-image: -moz-linear-gradient(top, #555555, #222222);- background-image: -ms-linear-gradient(top, #555555, #222222);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));- background-image: -webkit-linear-gradient(top, #555555, #222222);- background-image: -o-linear-gradient(top, #555555, #222222);- background-image: linear-gradient(top, #555555, #222222);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);- border-color: #222222 #222222 #000000;- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);- filter: progid:dximagetransform.microsoft.gradient(enabled=false);-}-.btn-inverse:hover,-.btn-inverse:active,-.btn-inverse.active,-.btn-inverse.disabled,-.btn-inverse[disabled] {- background-color: #222222;-}-.btn-inverse:active,-.btn-inverse.active {- background-color: #080808 \9;-}-button.btn,-input[type="submit"].btn {- *padding-top: 2px;- *padding-bottom: 2px;-}-button.btn::-moz-focus-inner,-input[type="submit"].btn::-moz-focus-inner {- padding: 0;- border: 0;-}-button.btn.btn-large,-input[type="submit"].btn.btn-large {- *padding-top: 7px;- *padding-bottom: 7px;-}-button.btn.btn-small,-input[type="submit"].btn.btn-small {- *padding-top: 3px;- *padding-bottom: 3px;-}-button.btn.btn-mini,-input[type="submit"].btn.btn-mini {- *padding-top: 1px;- *padding-bottom: 1px;-}-.btn-group {- position: relative;- *zoom: 1;- *margin-left: .3em;-}-.btn-group:before,-.btn-group:after {- display: table;- content: "";-}-.btn-group:after {- clear: both;-}-.btn-group:first-child {- *margin-left: 0;-}-.btn-group + .btn-group {- margin-left: 5px;-}-.btn-toolbar {- margin-top: 9px;- margin-bottom: 9px;-}-.btn-toolbar .btn-group {- display: inline-block;- *display: inline;- /* IE7 inline-block hack */-- *zoom: 1;-}-.btn-group .btn {- position: relative;- float: left;- margin-left: -1px;- -webkit-border-radius: 0;- -moz-border-radius: 0;- border-radius: 0;-}-.btn-group .btn:first-child {- margin-left: 0;- -webkit-border-top-left-radius: 4px;- -moz-border-radius-topleft: 4px;- border-top-left-radius: 4px;- -webkit-border-bottom-left-radius: 4px;- -moz-border-radius-bottomleft: 4px;- border-bottom-left-radius: 4px;-}-.btn-group .btn:last-child,-.btn-group .dropdown-toggle {- -webkit-border-top-right-radius: 4px;- -moz-border-radius-topright: 4px;- border-top-right-radius: 4px;- -webkit-border-bottom-right-radius: 4px;- -moz-border-radius-bottomright: 4px;- border-bottom-right-radius: 4px;-}-.btn-group .btn.large:first-child {- margin-left: 0;- -webkit-border-top-left-radius: 6px;- -moz-border-radius-topleft: 6px;- border-top-left-radius: 6px;- -webkit-border-bottom-left-radius: 6px;- -moz-border-radius-bottomleft: 6px;- border-bottom-left-radius: 6px;-}-.btn-group .btn.large:last-child,-.btn-group .large.dropdown-toggle {- -webkit-border-top-right-radius: 6px;- -moz-border-radius-topright: 6px;- border-top-right-radius: 6px;- -webkit-border-bottom-right-radius: 6px;- -moz-border-radius-bottomright: 6px;- border-bottom-right-radius: 6px;-}-.btn-group .btn:hover,-.btn-group .btn:focus,-.btn-group .btn:active,-.btn-group .btn.active {- z-index: 2;-}-.btn-group .dropdown-toggle:active,-.btn-group.open .dropdown-toggle {- outline: 0;-}-.btn-group .dropdown-toggle {- padding-left: 8px;- padding-right: 8px;- -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);- -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);- box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);- *padding-top: 3px;- *padding-bottom: 3px;-}-.btn-group .btn-mini.dropdown-toggle {- padding-left: 5px;- padding-right: 5px;- *padding-top: 1px;- *padding-bottom: 1px;-}-.btn-group .btn-small.dropdown-toggle {- *padding-top: 4px;- *padding-bottom: 4px;-}-.btn-group .btn-large.dropdown-toggle {- padding-left: 12px;- padding-right: 12px;-}-.btn-group.open {- *z-index: 1000;-}-.btn-group.open .dropdown-menu {- display: block;- margin-top: 1px;- -webkit-border-radius: 5px;- -moz-border-radius: 5px;- border-radius: 5px;-}-.btn-group.open .dropdown-toggle {- background-image: none;- -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);- -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);- box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-}-.btn .caret {- margin-top: 7px;- margin-left: 0;-}-.btn:hover .caret,-.open.btn-group .caret {- opacity: 1;- filter: alpha(opacity=100);-}-.btn-mini .caret {- margin-top: 5px;-}-.btn-small .caret {- margin-top: 6px;-}-.btn-large .caret {- margin-top: 6px;- border-left: 5px solid transparent;- border-right: 5px solid transparent;- border-top: 5px solid #000000;-}-.btn-primary .caret,-.btn-warning .caret,-.btn-danger .caret,-.btn-info .caret,-.btn-success .caret,-.btn-inverse .caret {- border-top-color: #ffffff;- border-bottom-color: #ffffff;- opacity: 0.75;- filter: alpha(opacity=75);-}-.alert {- padding: 8px 35px 8px 14px;- margin-bottom: 18px;- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);- background-color: #fcf8e3;- border: 1px solid #fbeed5;- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;- color: #c09853;-}-.alert-heading {- color: inherit;-}-.alert .close {- position: relative;- top: -2px;- right: -21px;- line-height: 18px;-}-.alert-success {- background-color: #dff0d8;- border-color: #d6e9c6;- color: #468847;-}-.alert-danger,-.alert-error {- background-color: #f2dede;- border-color: #eed3d7;- color: #b94a48;-}-.alert-info {- background-color: #d9edf7;- border-color: #bce8f1;- color: #3a87ad;-}-.alert-block {- padding-top: 14px;- padding-bottom: 14px;-}-.alert-block > p,-.alert-block > ul {- margin-bottom: 0;-}-.alert-block p + p {- margin-top: 5px;-}-.nav {- margin-left: 0;- margin-bottom: 18px;- list-style: none;-}-.nav > li > a {- display: block;-}-.nav > li > a:hover {- text-decoration: none;- background-color: #eeeeee;-}-.nav .nav-header {- display: block;- padding: 3px 15px;- font-size: 11px;- font-weight: bold;- line-height: 18px;- color: #999999;- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);- text-transform: uppercase;-}-.nav li + .nav-header {- margin-top: 9px;-}-.nav-list {- padding-left: 15px;- padding-right: 15px;- margin-bottom: 0;-}-.nav-list > li > a,-.nav-list .nav-header {- margin-left: -15px;- margin-right: -15px;- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);-}-.nav-list > li > a {- padding: 3px 15px;-}-.nav-list > .active > a,-.nav-list > .active > a:hover {- color: #ffffff;- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);- background-color: #0088cc;-}-.nav-list [class^="icon-"] {- margin-right: 2px;-}-.nav-list .divider {- height: 1px;- margin: 8px 1px;- overflow: hidden;- background-color: #e5e5e5;- border-bottom: 1px solid #ffffff;- *width: 100%;- *margin: -5px 0 5px;-}-.nav-tabs,-.nav-pills {- *zoom: 1;-}-.nav-tabs:before,-.nav-pills:before,-.nav-tabs:after,-.nav-pills:after {- display: table;- content: "";-}-.nav-tabs:after,-.nav-pills:after {- clear: both;-}-.nav-tabs > li,-.nav-pills > li {- float: left;-}-.nav-tabs > li > a,-.nav-pills > li > a {- padding-right: 12px;- padding-left: 12px;- margin-right: 2px;- line-height: 14px;-}-.nav-tabs {- border-bottom: 1px solid #ddd;-}-.nav-tabs > li {- margin-bottom: -1px;-}-.nav-tabs > li > a {- padding-top: 8px;- padding-bottom: 8px;- line-height: 18px;- border: 1px solid transparent;- -webkit-border-radius: 4px 4px 0 0;- -moz-border-radius: 4px 4px 0 0;- border-radius: 4px 4px 0 0;-}-.nav-tabs > li > a:hover {- border-color: #eeeeee #eeeeee #dddddd;-}-.nav-tabs > .active > a,-.nav-tabs > .active > a:hover {- color: #555555;- background-color: #ffffff;- border: 1px solid #ddd;- border-bottom-color: transparent;- cursor: default;-}-.nav-pills > li > a {- padding-top: 8px;- padding-bottom: 8px;- margin-top: 2px;- margin-bottom: 2px;- -webkit-border-radius: 5px;- -moz-border-radius: 5px;- border-radius: 5px;-}-.nav-pills > .active > a,-.nav-pills > .active > a:hover {- color: #ffffff;- background-color: #0088cc;-}-.nav-stacked > li {- float: none;-}-.nav-stacked > li > a {- margin-right: 0;-}-.nav-tabs.nav-stacked {- border-bottom: 0;-}-.nav-tabs.nav-stacked > li > a {- border: 1px solid #ddd;- -webkit-border-radius: 0;- -moz-border-radius: 0;- border-radius: 0;-}-.nav-tabs.nav-stacked > li:first-child > a {- -webkit-border-radius: 4px 4px 0 0;- -moz-border-radius: 4px 4px 0 0;- border-radius: 4px 4px 0 0;-}-.nav-tabs.nav-stacked > li:last-child > a {- -webkit-border-radius: 0 0 4px 4px;- -moz-border-radius: 0 0 4px 4px;- border-radius: 0 0 4px 4px;-}-.nav-tabs.nav-stacked > li > a:hover {- border-color: #ddd;- z-index: 2;-}-.nav-pills.nav-stacked > li > a {- margin-bottom: 3px;-}-.nav-pills.nav-stacked > li:last-child > a {- margin-bottom: 1px;-}-.nav-tabs .dropdown-menu,-.nav-pills .dropdown-menu {- margin-top: 1px;- border-width: 1px;-}-.nav-pills .dropdown-menu {- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;-}-.nav-tabs .dropdown-toggle .caret,-.nav-pills .dropdown-toggle .caret {- border-top-color: #0088cc;- border-bottom-color: #0088cc;- margin-top: 6px;-}-.nav-tabs .dropdown-toggle:hover .caret,-.nav-pills .dropdown-toggle:hover .caret {- border-top-color: #005580;- border-bottom-color: #005580;-}-.nav-tabs .active .dropdown-toggle .caret,-.nav-pills .active .dropdown-toggle .caret {- border-top-color: #333333;- border-bottom-color: #333333;-}-.nav > .dropdown.active > a:hover {- color: #000000;- cursor: pointer;-}-.nav-tabs .open .dropdown-toggle,-.nav-pills .open .dropdown-toggle,-.nav > .open.active > a:hover {- color: #ffffff;- background-color: #999999;- border-color: #999999;-}-.nav .open .caret,-.nav .open.active .caret,-.nav .open a:hover .caret {- border-top-color: #ffffff;- border-bottom-color: #ffffff;- opacity: 1;- filter: alpha(opacity=100);-}-.tabs-stacked .open > a:hover {- border-color: #999999;-}-.tabbable {- *zoom: 1;-}-.tabbable:before,-.tabbable:after {- display: table;- content: "";-}-.tabbable:after {- clear: both;-}-.tab-content {- display: table;- width: 100%;-}-.tabs-below .nav-tabs,-.tabs-right .nav-tabs,-.tabs-left .nav-tabs {- border-bottom: 0;-}-.tab-content > .tab-pane,-.pill-content > .pill-pane {- display: none;-}-.tab-content > .active,-.pill-content > .active {- display: block;-}-.tabs-below .nav-tabs {- border-top: 1px solid #ddd;-}-.tabs-below .nav-tabs > li {- margin-top: -1px;- margin-bottom: 0;-}-.tabs-below .nav-tabs > li > a {- -webkit-border-radius: 0 0 4px 4px;- -moz-border-radius: 0 0 4px 4px;- border-radius: 0 0 4px 4px;-}-.tabs-below .nav-tabs > li > a:hover {- border-bottom-color: transparent;- border-top-color: #ddd;-}-.tabs-below .nav-tabs .active > a,-.tabs-below .nav-tabs .active > a:hover {- border-color: transparent #ddd #ddd #ddd;-}-.tabs-left .nav-tabs > li,-.tabs-right .nav-tabs > li {- float: none;-}-.tabs-left .nav-tabs > li > a,-.tabs-right .nav-tabs > li > a {- min-width: 74px;- margin-right: 0;- margin-bottom: 3px;-}-.tabs-left .nav-tabs {- float: left;- margin-right: 19px;- border-right: 1px solid #ddd;-}-.tabs-left .nav-tabs > li > a {- margin-right: -1px;- -webkit-border-radius: 4px 0 0 4px;- -moz-border-radius: 4px 0 0 4px;- border-radius: 4px 0 0 4px;-}-.tabs-left .nav-tabs > li > a:hover {- border-color: #eeeeee #dddddd #eeeeee #eeeeee;-}-.tabs-left .nav-tabs .active > a,-.tabs-left .nav-tabs .active > a:hover {- border-color: #ddd transparent #ddd #ddd;- *border-right-color: #ffffff;-}-.tabs-right .nav-tabs {- float: right;- margin-left: 19px;- border-left: 1px solid #ddd;-}-.tabs-right .nav-tabs > li > a {- margin-left: -1px;- -webkit-border-radius: 0 4px 4px 0;- -moz-border-radius: 0 4px 4px 0;- border-radius: 0 4px 4px 0;-}-.tabs-right .nav-tabs > li > a:hover {- border-color: #eeeeee #eeeeee #eeeeee #dddddd;-}-.tabs-right .nav-tabs .active > a,-.tabs-right .nav-tabs .active > a:hover {- border-color: #ddd #ddd #ddd transparent;- *border-left-color: #ffffff;-}-.navbar {- *position: relative;- *z-index: 2;- overflow: visible;- margin-bottom: 18px;-}-.navbar-inner {- padding-left: 20px;- padding-right: 20px;- background-color: #2c2c2c;- background-image: -moz-linear-gradient(top, #333333, #222222);- background-image: -ms-linear-gradient(top, #333333, #222222);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));- background-image: -webkit-linear-gradient(top, #333333, #222222);- background-image: -o-linear-gradient(top, #333333, #222222);- background-image: linear-gradient(top, #333333, #222222);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);- -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);-}-.navbar .container {- width: auto;-}-.btn-navbar {- display: none;- float: right;- padding: 7px 10px;- margin-left: 5px;- margin-right: 5px;- background-color: #2c2c2c;- background-image: -moz-linear-gradient(top, #333333, #222222);- background-image: -ms-linear-gradient(top, #333333, #222222);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));- background-image: -webkit-linear-gradient(top, #333333, #222222);- background-image: -o-linear-gradient(top, #333333, #222222);- background-image: linear-gradient(top, #333333, #222222);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);- border-color: #222222 #222222 #000000;- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);- filter: progid:dximagetransform.microsoft.gradient(enabled=false);- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);-}-.btn-navbar:hover,-.btn-navbar:active,-.btn-navbar.active,-.btn-navbar.disabled,-.btn-navbar[disabled] {- background-color: #222222;-}-.btn-navbar:active,-.btn-navbar.active {- background-color: #080808 \9;-}-.btn-navbar .icon-bar {- display: block;- width: 18px;- height: 2px;- background-color: #f5f5f5;- -webkit-border-radius: 1px;- -moz-border-radius: 1px;- border-radius: 1px;- -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);- -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);-}-.btn-navbar .icon-bar + .icon-bar {- margin-top: 3px;-}-.nav-collapse.collapse {- height: auto;-}-.navbar {- color: #999999;-}-.navbar .brand:hover {- text-decoration: none;-}-.navbar .brand {- float: left;- display: block;- padding: 8px 20px 12px;- margin-left: -20px;- font-size: 20px;- font-weight: 200;- line-height: 1;- color: #ffffff;-}-.navbar .navbar-text {- margin-bottom: 0;- line-height: 40px;-}-.navbar .btn,-.navbar .btn-group {- margin-top: 5px;-}-.navbar .btn-group .btn {- margin-top: 0;-}-.navbar-form {- margin-bottom: 0;- *zoom: 1;-}-.navbar-form:before,-.navbar-form:after {- display: table;- content: "";-}-.navbar-form:after {- clear: both;-}-.navbar-form input,-.navbar-form select,-.navbar-form .radio,-.navbar-form .checkbox {- margin-top: 5px;-}-.navbar-form input,-.navbar-form select {- display: inline-block;- margin-bottom: 0;-}-.navbar-form input[type="image"],-.navbar-form input[type="checkbox"],-.navbar-form input[type="radio"] {- margin-top: 3px;-}-.navbar-form .input-append,-.navbar-form .input-prepend {- margin-top: 6px;- white-space: nowrap;-}-.navbar-form .input-append input,-.navbar-form .input-prepend input {- margin-top: 0;-}-.navbar-search {- position: relative;- float: left;- margin-top: 6px;- margin-bottom: 0;-}-.navbar-search .search-query {- padding: 4px 9px;- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;- font-size: 13px;- font-weight: normal;- line-height: 1;- color: #ffffff;- background-color: #626262;- border: 1px solid #151515;- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);- -webkit-transition: none;- -moz-transition: none;- -ms-transition: none;- -o-transition: none;- transition: none;-}-.navbar-search .search-query:-moz-placeholder {- color: #cccccc;-}-.navbar-search .search-query::-webkit-input-placeholder {- color: #cccccc;-}-.navbar-search .search-query:focus,-.navbar-search .search-query.focused {- padding: 5px 10px;- color: #333333;- text-shadow: 0 1px 0 #ffffff;- background-color: #ffffff;- border: 0;- -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);- -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);- box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);- outline: 0;-}-.navbar-fixed-top,-.navbar-fixed-bottom {- position: fixed;- right: 0;- left: 0;- z-index: 1030;- margin-bottom: 0;-}-.navbar-fixed-top .navbar-inner,-.navbar-fixed-bottom .navbar-inner {- padding-left: 0;- padding-right: 0;- -webkit-border-radius: 0;- -moz-border-radius: 0;- border-radius: 0;-}-.navbar-fixed-top .container,-.navbar-fixed-bottom .container {- width: 940px;-}-.navbar-fixed-top {- top: 0;-}-.navbar-fixed-bottom {- bottom: 0;-}-.navbar .nav {- position: relative;- left: 0;- display: block;- float: left;- margin: 0 10px 0 0;-}-.navbar .nav.pull-right {- float: right;-}-.navbar .nav > li {- display: block;- float: left;-}-.navbar .nav > li > a {- float: none;- padding: 10px 10px 11px;- line-height: 19px;- color: #999999;- text-decoration: none;- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);-}-.navbar .nav > li > a:hover {- background-color: transparent;- color: #ffffff;- text-decoration: none;-}-.navbar .nav .active > a,-.navbar .nav .active > a:hover {- color: #ffffff;- text-decoration: none;- background-color: #222222;-}-.navbar .divider-vertical {- height: 40px;- width: 1px;- margin: 0 9px;- overflow: hidden;- background-color: #222222;- border-right: 1px solid #333333;-}-.navbar .nav.pull-right {- margin-left: 10px;- margin-right: 0;-}-.navbar .dropdown-menu {- margin-top: 1px;- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;-}-.navbar .dropdown-menu:before {- content: '';- display: inline-block;- border-left: 7px solid transparent;- border-right: 7px solid transparent;- border-bottom: 7px solid #ccc;- border-bottom-color: rgba(0, 0, 0, 0.2);- position: absolute;- top: -7px;- left: 9px;-}-.navbar .dropdown-menu:after {- content: '';- display: inline-block;- border-left: 6px solid transparent;- border-right: 6px solid transparent;- border-bottom: 6px solid #ffffff;- position: absolute;- top: -6px;- left: 10px;-}-.navbar-fixed-bottom .dropdown-menu:before {- border-top: 7px solid #ccc;- border-top-color: rgba(0, 0, 0, 0.2);- border-bottom: 0;- bottom: -7px;- top: auto;-}-.navbar-fixed-bottom .dropdown-menu:after {- border-top: 6px solid #ffffff;- border-bottom: 0;- bottom: -6px;- top: auto;-}-.navbar .nav .dropdown-toggle .caret,-.navbar .nav .open.dropdown .caret {- border-top-color: #ffffff;- border-bottom-color: #ffffff;-}-.navbar .nav .active .caret {- opacity: 1;- filter: alpha(opacity=100);-}-.navbar .nav .open > .dropdown-toggle,-.navbar .nav .active > .dropdown-toggle,-.navbar .nav .open.active > .dropdown-toggle {- background-color: transparent;-}-.navbar .nav .active > .dropdown-toggle:hover {- color: #ffffff;-}-.navbar .nav.pull-right .dropdown-menu,-.navbar .nav .dropdown-menu.pull-right {- left: auto;- right: 0;-}-.navbar .nav.pull-right .dropdown-menu:before,-.navbar .nav .dropdown-menu.pull-right:before {- left: auto;- right: 12px;-}-.navbar .nav.pull-right .dropdown-menu:after,-.navbar .nav .dropdown-menu.pull-right:after {- left: auto;- right: 13px;-}-.breadcrumb {- padding: 7px 14px;- margin: 0 0 18px;- list-style: none;- background-color: #fbfbfb;- background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);- background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));- background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);- background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);- background-image: linear-gradient(top, #ffffff, #f5f5f5);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);- border: 1px solid #ddd;- -webkit-border-radius: 3px;- -moz-border-radius: 3px;- border-radius: 3px;- -webkit-box-shadow: inset 0 1px 0 #ffffff;- -moz-box-shadow: inset 0 1px 0 #ffffff;- box-shadow: inset 0 1px 0 #ffffff;-}-.breadcrumb li {- display: inline-block;- *display: inline;- /* IE7 inline-block hack */-- *zoom: 1;- text-shadow: 0 1px 0 #ffffff;-}-.breadcrumb .divider {- padding: 0 5px;- color: #999999;-}-.breadcrumb .active a {- color: #333333;-}-.pagination {- height: 36px;- margin: 18px 0;-}-.pagination ul {- display: inline-block;- *display: inline;- /* IE7 inline-block hack */-- *zoom: 1;- margin-left: 0;- margin-bottom: 0;- -webkit-border-radius: 3px;- -moz-border-radius: 3px;- border-radius: 3px;- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);- -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);-}-.pagination li {- display: inline;-}-.pagination a {- float: left;- padding: 0 14px;- line-height: 34px;- text-decoration: none;- border: 1px solid #ddd;- border-left-width: 0;-}-.pagination a:hover,-.pagination .active a {- background-color: #f5f5f5;-}-.pagination .active a {- color: #999999;- cursor: default;-}-.pagination .disabled span,-.pagination .disabled a,-.pagination .disabled a:hover {- color: #999999;- background-color: transparent;- cursor: default;-}-.pagination li:first-child a {- border-left-width: 1px;- -webkit-border-radius: 3px 0 0 3px;- -moz-border-radius: 3px 0 0 3px;- border-radius: 3px 0 0 3px;-}-.pagination li:last-child a {- -webkit-border-radius: 0 3px 3px 0;- -moz-border-radius: 0 3px 3px 0;- border-radius: 0 3px 3px 0;-}-.pagination-centered {- text-align: center;-}-.pagination-right {- text-align: right;-}-.pager {- margin-left: 0;- margin-bottom: 18px;- list-style: none;- text-align: center;- *zoom: 1;-}-.pager:before,-.pager:after {- display: table;- content: "";-}-.pager:after {- clear: both;-}-.pager li {- display: inline;-}-.pager a {- display: inline-block;- padding: 5px 14px;- background-color: #fff;- border: 1px solid #ddd;- -webkit-border-radius: 15px;- -moz-border-radius: 15px;- border-radius: 15px;-}-.pager a:hover {- text-decoration: none;- background-color: #f5f5f5;-}-.pager .next a {- float: right;-}-.pager .previous a {- float: left;-}-.pager .disabled a,-.pager .disabled a:hover {- color: #999999;- background-color: #fff;- cursor: default;-}-.modal-open .dropdown-menu {- z-index: 2050;-}-.modal-open .dropdown.open {- *z-index: 2050;-}-.modal-open .popover {- z-index: 2060;-}-.modal-open .tooltip {- z-index: 2070;-}-.modal-backdrop {- position: fixed;- top: 0;- right: 0;- bottom: 0;- left: 0;- z-index: 1040;- background-color: #000000;-}-.modal-backdrop.fade {- opacity: 0;-}-.modal-backdrop,-.modal-backdrop.fade.in {- opacity: 0.8;- filter: alpha(opacity=80);-}-.modal {- position: fixed;- top: 50%;- left: 50%;- z-index: 1050;- overflow: auto;- width: 560px;- margin: -250px 0 0 -280px;- background-color: #ffffff;- border: 1px solid #999;- border: 1px solid rgba(0, 0, 0, 0.3);- *border: 1px solid #999;- /* IE6-7 */-- -webkit-border-radius: 6px;- -moz-border-radius: 6px;- border-radius: 6px;- -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);- -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);- box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);- -webkit-background-clip: padding-box;- -moz-background-clip: padding-box;- background-clip: padding-box;-}-.modal.fade {- -webkit-transition: opacity .3s linear, top .3s ease-out;- -moz-transition: opacity .3s linear, top .3s ease-out;- -ms-transition: opacity .3s linear, top .3s ease-out;- -o-transition: opacity .3s linear, top .3s ease-out;- transition: opacity .3s linear, top .3s ease-out;- top: -25%;-}-.modal.fade.in {- top: 50%;-}-.modal-header {- padding: 9px 15px;- border-bottom: 1px solid #eee;-}-.modal-header .close {- margin-top: 2px;-}-.modal-body {- overflow-y: auto;- max-height: 400px;- padding: 15px;-}-.modal-form {- margin-bottom: 0;-}-.modal-footer {- padding: 14px 15px 15px;- margin-bottom: 0;- text-align: right;- background-color: #f5f5f5;- border-top: 1px solid #ddd;- -webkit-border-radius: 0 0 6px 6px;- -moz-border-radius: 0 0 6px 6px;- border-radius: 0 0 6px 6px;- -webkit-box-shadow: inset 0 1px 0 #ffffff;- -moz-box-shadow: inset 0 1px 0 #ffffff;- box-shadow: inset 0 1px 0 #ffffff;- *zoom: 1;-}-.modal-footer:before,-.modal-footer:after {- display: table;- content: "";-}-.modal-footer:after {- clear: both;-}-.modal-footer .btn + .btn {- margin-left: 5px;- margin-bottom: 0;-}-.modal-footer .btn-group .btn + .btn {- margin-left: -1px;-}-.tooltip {- position: absolute;- z-index: 1020;- display: block;- visibility: visible;- padding: 5px;- font-size: 11px;- opacity: 0;- filter: alpha(opacity=0);-}-.tooltip.in {- opacity: 0.8;- filter: alpha(opacity=80);-}-.tooltip.top {- margin-top: -2px;-}-.tooltip.right {- margin-left: 2px;-}-.tooltip.bottom {- margin-top: 2px;-}-.tooltip.left {- margin-left: -2px;-}-.tooltip.top .tooltip-arrow {- bottom: 0;- left: 50%;- margin-left: -5px;- border-left: 5px solid transparent;- border-right: 5px solid transparent;- border-top: 5px solid #000000;-}-.tooltip.left .tooltip-arrow {- top: 50%;- right: 0;- margin-top: -5px;- border-top: 5px solid transparent;- border-bottom: 5px solid transparent;- border-left: 5px solid #000000;-}-.tooltip.bottom .tooltip-arrow {- top: 0;- left: 50%;- margin-left: -5px;- border-left: 5px solid transparent;- border-right: 5px solid transparent;- border-bottom: 5px solid #000000;-}-.tooltip.right .tooltip-arrow {- top: 50%;- left: 0;- margin-top: -5px;- border-top: 5px solid transparent;- border-bottom: 5px solid transparent;- border-right: 5px solid #000000;-}-.tooltip-inner {- max-width: 200px;- padding: 3px 8px;- color: #ffffff;- text-align: center;- text-decoration: none;- background-color: #000000;- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;-}-.tooltip-arrow {- position: absolute;- width: 0;- height: 0;-}-.popover {- position: absolute;- top: 0;- left: 0;- z-index: 1010;- display: none;- padding: 5px;-}-.popover.top {- margin-top: -5px;-}-.popover.right {- margin-left: 5px;-}-.popover.bottom {- margin-top: 5px;-}-.popover.left {- margin-left: -5px;-}-.popover.top .arrow {- bottom: 0;- left: 50%;- margin-left: -5px;- border-left: 5px solid transparent;- border-right: 5px solid transparent;- border-top: 5px solid #000000;-}-.popover.right .arrow {- top: 50%;- left: 0;- margin-top: -5px;- border-top: 5px solid transparent;- border-bottom: 5px solid transparent;- border-right: 5px solid #000000;-}-.popover.bottom .arrow {- top: 0;- left: 50%;- margin-left: -5px;- border-left: 5px solid transparent;- border-right: 5px solid transparent;- border-bottom: 5px solid #000000;-}-.popover.left .arrow {- top: 50%;- right: 0;- margin-top: -5px;- border-top: 5px solid transparent;- border-bottom: 5px solid transparent;- border-left: 5px solid #000000;-}-.popover .arrow {- position: absolute;- width: 0;- height: 0;-}-.popover-inner {- padding: 3px;- width: 280px;- overflow: hidden;- background: #000000;- background: rgba(0, 0, 0, 0.8);- -webkit-border-radius: 6px;- -moz-border-radius: 6px;- border-radius: 6px;- -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);- -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);- box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);-}-.popover-title {- padding: 9px 15px;- line-height: 1;- background-color: #f5f5f5;- border-bottom: 1px solid #eee;- -webkit-border-radius: 3px 3px 0 0;- -moz-border-radius: 3px 3px 0 0;- border-radius: 3px 3px 0 0;-}-.popover-content {- padding: 14px;- background-color: #ffffff;- -webkit-border-radius: 0 0 3px 3px;- -moz-border-radius: 0 0 3px 3px;- border-radius: 0 0 3px 3px;- -webkit-background-clip: padding-box;- -moz-background-clip: padding-box;- background-clip: padding-box;-}-.popover-content p,-.popover-content ul,-.popover-content ol {- margin-bottom: 0;-}-.thumbnails {- margin-left: -20px;- list-style: none;- *zoom: 1;-}-.thumbnails:before,-.thumbnails:after {- display: table;- content: "";-}-.thumbnails:after {- clear: both;-}-.thumbnails > li {- float: left;- margin: 0 0 18px 20px;-}-.thumbnail {- display: block;- padding: 4px;- line-height: 1;- border: 1px solid #ddd;- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);- -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);-}-a.thumbnail:hover {- border-color: #0088cc;- -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);- -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);- box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);-}-.thumbnail > img {- display: block;- max-width: 100%;- margin-left: auto;- margin-right: auto;-}-.thumbnail .caption {- padding: 9px;-}-.label {- padding: 1px 4px 2px;- font-size: 10.998px;- font-weight: bold;- line-height: 13px;- color: #ffffff;- vertical-align: middle;- white-space: nowrap;- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);- background-color: #999999;- -webkit-border-radius: 3px;- -moz-border-radius: 3px;- border-radius: 3px;-}-.label:hover {- color: #ffffff;- text-decoration: none;-}-.label-important {- background-color: #b94a48;-}-.label-important:hover {- background-color: #953b39;-}-.label-warning {- background-color: #f89406;-}-.label-warning:hover {- background-color: #c67605;-}-.label-success {- background-color: #468847;-}-.label-success:hover {- background-color: #356635;-}-.label-info {- background-color: #3a87ad;-}-.label-info:hover {- background-color: #2d6987;-}-.label-inverse {- background-color: #333333;-}-.label-inverse:hover {- background-color: #1a1a1a;-}-.badge {- padding: 1px 9px 2px;- font-size: 12.025px;- font-weight: bold;- white-space: nowrap;- color: #ffffff;- background-color: #999999;- -webkit-border-radius: 9px;- -moz-border-radius: 9px;- border-radius: 9px;-}-.badge:hover {- color: #ffffff;- text-decoration: none;- cursor: pointer;-}-.badge-error {- background-color: #b94a48;-}-.badge-error:hover {- background-color: #953b39;-}-.badge-warning {- background-color: #f89406;-}-.badge-warning:hover {- background-color: #c67605;-}-.badge-success {- background-color: #468847;-}-.badge-success:hover {- background-color: #356635;-}-.badge-info {- background-color: #3a87ad;-}-.badge-info:hover {- background-color: #2d6987;-}-.badge-inverse {- background-color: #333333;-}-.badge-inverse:hover {- background-color: #1a1a1a;-}-@-webkit-keyframes progress-bar-stripes {- from {- background-position: 0 0;- }- to {- background-position: 40px 0;- }-}-@-moz-keyframes progress-bar-stripes {- from {- background-position: 0 0;- }- to {- background-position: 40px 0;- }-}-@-ms-keyframes progress-bar-stripes {- from {- background-position: 0 0;- }- to {- background-position: 40px 0;- }-}-@keyframes progress-bar-stripes {- from {- background-position: 0 0;- }- to {- background-position: 40px 0;- }-}-.progress {- overflow: hidden;- height: 18px;- margin-bottom: 18px;- background-color: #f7f7f7;- background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);- background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));- background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);- background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);- background-image: linear-gradient(top, #f5f5f5, #f9f9f9);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;-}-.progress .bar {- width: 0%;- height: 18px;- color: #ffffff;- font-size: 12px;- text-align: center;- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);- background-color: #0e90d2;- background-image: -moz-linear-gradient(top, #149bdf, #0480be);- background-image: -ms-linear-gradient(top, #149bdf, #0480be);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));- background-image: -webkit-linear-gradient(top, #149bdf, #0480be);- background-image: -o-linear-gradient(top, #149bdf, #0480be);- background-image: linear-gradient(top, #149bdf, #0480be);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);- -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);- -webkit-box-sizing: border-box;- -moz-box-sizing: border-box;- -ms-box-sizing: border-box;- box-sizing: border-box;- -webkit-transition: width 0.6s ease;- -moz-transition: width 0.6s ease;- -ms-transition: width 0.6s ease;- -o-transition: width 0.6s ease;- transition: width 0.6s ease;-}-.progress-striped .bar {- background-color: #149bdf;- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- -webkit-background-size: 40px 40px;- -moz-background-size: 40px 40px;- -o-background-size: 40px 40px;- background-size: 40px 40px;-}-.progress.active .bar {- -webkit-animation: progress-bar-stripes 2s linear infinite;- -moz-animation: progress-bar-stripes 2s linear infinite;- animation: progress-bar-stripes 2s linear infinite;-}-.progress-danger .bar {- background-color: #dd514c;- background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);- background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));- background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);- background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);- background-image: linear-gradient(top, #ee5f5b, #c43c35);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);-}-.progress-danger.progress-striped .bar {- background-color: #ee5f5b;- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-}-.progress-success .bar {- background-color: #5eb95e;- background-image: -moz-linear-gradient(top, #62c462, #57a957);- background-image: -ms-linear-gradient(top, #62c462, #57a957);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));- background-image: -webkit-linear-gradient(top, #62c462, #57a957);- background-image: -o-linear-gradient(top, #62c462, #57a957);- background-image: linear-gradient(top, #62c462, #57a957);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);-}-.progress-success.progress-striped .bar {- background-color: #62c462;- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-}-.progress-info .bar {- background-color: #4bb1cf;- background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);- background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));- background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);- background-image: -o-linear-gradient(top, #5bc0de, #339bb9);- background-image: linear-gradient(top, #5bc0de, #339bb9);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);-}-.progress-info.progress-striped .bar {- background-color: #5bc0de;- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-}-.progress-warning .bar {- background-color: #faa732;- background-image: -moz-linear-gradient(top, #fbb450, #f89406);- background-image: -ms-linear-gradient(top, #fbb450, #f89406);- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));- background-image: -webkit-linear-gradient(top, #fbb450, #f89406);- background-image: -o-linear-gradient(top, #fbb450, #f89406);- background-image: linear-gradient(top, #fbb450, #f89406);- background-repeat: repeat-x;- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);-}-.progress-warning.progress-striped .bar {- background-color: #fbb450;- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-}-.accordion {- margin-bottom: 18px;-}-.accordion-group {- margin-bottom: 2px;- border: 1px solid #e5e5e5;- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;-}-.accordion-heading {- border-bottom: 0;-}-.accordion-heading .accordion-toggle {- display: block;- padding: 8px 15px;-}-.accordion-inner {- padding: 9px 15px;- border-top: 1px solid #e5e5e5;-}-.carousel {- position: relative;- margin-bottom: 18px;- line-height: 1;-}-.carousel-inner {- overflow: hidden;- width: 100%;- position: relative;-}-.carousel .item {- display: none;- position: relative;- -webkit-transition: 0.6s ease-in-out left;- -moz-transition: 0.6s ease-in-out left;- -ms-transition: 0.6s ease-in-out left;- -o-transition: 0.6s ease-in-out left;- transition: 0.6s ease-in-out left;-}-.carousel .item > img {- display: block;- line-height: 1;-}-.carousel .active,-.carousel .next,-.carousel .prev {- display: block;-}-.carousel .active {- left: 0;-}-.carousel .next,-.carousel .prev {- position: absolute;- top: 0;- width: 100%;-}-.carousel .next {- left: 100%;-}-.carousel .prev {- left: -100%;-}-.carousel .next.left,-.carousel .prev.right {- left: 0;-}-.carousel .active.left {- left: -100%;-}-.carousel .active.right {- left: 100%;-}-.carousel-control {- position: absolute;- top: 40%;- left: 15px;- width: 40px;- height: 40px;- margin-top: -20px;- font-size: 60px;- font-weight: 100;- line-height: 30px;- color: #ffffff;- text-align: center;- background: #222222;- border: 3px solid #ffffff;- -webkit-border-radius: 23px;- -moz-border-radius: 23px;- border-radius: 23px;- opacity: 0.5;- filter: alpha(opacity=50);-}-.carousel-control.right {- left: auto;- right: 15px;-}-.carousel-control:hover {- color: #ffffff;- text-decoration: none;- opacity: 0.9;- filter: alpha(opacity=90);-}-.carousel-caption {- position: absolute;- left: 0;- right: 0;- bottom: 0;- padding: 10px 15px 5px;- background: #333333;- background: rgba(0, 0, 0, 0.75);-}-.carousel-caption h4,-.carousel-caption p {- color: #ffffff;-}-.hero-unit {- padding: 60px;- margin-bottom: 30px;- background-color: #eeeeee;- -webkit-border-radius: 6px;- -moz-border-radius: 6px;- border-radius: 6px;-}-.hero-unit h1 {- margin-bottom: 0;- font-size: 60px;- line-height: 1;- color: inherit;- letter-spacing: -1px;-}-.hero-unit p {- font-size: 18px;- font-weight: 200;- line-height: 27px;- color: inherit;-}-.pull-right {- float: right;-}-.pull-left {- float: left;-}-.hide {- display: none;-}-.show {- display: block;-}-.invisible {- visibility: hidden;-}+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ */++/*! normalize.css v3.0.1 | MIT License | git.io/normalize */+html {+ font-family: sans-serif;+ -webkit-text-size-adjust: 100%;+ -ms-text-size-adjust: 100%;+}+body {+ margin: 0;+}+article,+aside,+details,+figcaption,+figure,+footer,+header,+hgroup,+main,+nav,+section,+summary {+ display: block;+}+audio,+canvas,+progress,+video {+ display: inline-block;+ vertical-align: baseline;+}+audio:not([controls]) {+ display: none;+ height: 0;+}+[hidden],+template {+ display: none;+}+a {+ background: transparent;+}+a:active,+a:hover {+ outline: 0;+}+abbr[title] {+ border-bottom: 1px dotted;+}+b,+strong {+ font-weight: bold;+}+dfn {+ font-style: italic;+}+h1 {+ margin: .67em 0;+ font-size: 2em;+}+mark {+ color: #000;+ background: #ff0;+}+small {+ font-size: 80%;+}+sub,+sup {+ position: relative;+ font-size: 75%;+ line-height: 0;+ vertical-align: baseline;+}+sup {+ top: -.5em;+}+sub {+ bottom: -.25em;+}+img {+ border: 0;+}+svg:not(:root) {+ overflow: hidden;+}+figure {+ margin: 1em 40px;+}+hr {+ height: 0;+ -webkit-box-sizing: content-box;+ -moz-box-sizing: content-box;+ box-sizing: content-box;+}+pre {+ overflow: auto;+}+code,+kbd,+pre,+samp {+ font-family: monospace, monospace;+ font-size: 1em;+}+button,+input,+optgroup,+select,+textarea {+ margin: 0;+ font: inherit;+ color: inherit;+}+button {+ overflow: visible;+}+button,+select {+ text-transform: none;+}+button,+html input[type="button"],+input[type="reset"],+input[type="submit"] {+ -webkit-appearance: button;+ cursor: pointer;+}+button[disabled],+html input[disabled] {+ cursor: default;+}+button::-moz-focus-inner,+input::-moz-focus-inner {+ padding: 0;+ border: 0;+}+input {+ line-height: normal;+}+input[type="checkbox"],+input[type="radio"] {+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+ padding: 0;+}+input[type="number"]::-webkit-inner-spin-button,+input[type="number"]::-webkit-outer-spin-button {+ height: auto;+}+input[type="search"] {+ -webkit-box-sizing: content-box;+ -moz-box-sizing: content-box;+ box-sizing: content-box;+ -webkit-appearance: textfield;+}+input[type="search"]::-webkit-search-cancel-button,+input[type="search"]::-webkit-search-decoration {+ -webkit-appearance: none;+}+fieldset {+ padding: .35em .625em .75em;+ margin: 0 2px;+ border: 1px solid #c0c0c0;+}+legend {+ padding: 0;+ border: 0;+}+textarea {+ overflow: auto;+}+optgroup {+ font-weight: bold;+}+table {+ border-spacing: 0;+ border-collapse: collapse;+}+td,+th {+ padding: 0;+}+@media print {+ * {+ color: #000 !important;+ text-shadow: none !important;+ background: transparent !important;+ -webkit-box-shadow: none !important;+ box-shadow: none !important;+ }+ a,+ a:visited {+ text-decoration: underline;+ }+ a[href]:after {+ content: " (" attr(href) ")";+ }+ abbr[title]:after {+ content: " (" attr(title) ")";+ }+ a[href^="javascript:"]:after,+ a[href^="#"]:after {+ content: "";+ }+ pre,+ blockquote {+ border: 1px solid #999;++ page-break-inside: avoid;+ }+ thead {+ display: table-header-group;+ }+ tr,+ img {+ page-break-inside: avoid;+ }+ img {+ max-width: 100% !important;+ }+ p,+ h2,+ h3 {+ orphans: 3;+ widows: 3;+ }+ h2,+ h3 {+ page-break-after: avoid;+ }+ select {+ background: #fff !important;+ }+ .navbar {+ display: none;+ }+ .table td,+ .table th {+ background-color: #fff !important;+ }+ .btn > .caret,+ .dropup > .btn > .caret {+ border-top-color: #000 !important;+ }+ .label {+ border: 1px solid #000;+ }+ .table {+ border-collapse: collapse !important;+ }+ .table-bordered th,+ .table-bordered td {+ border: 1px solid #ddd !important;+ }+}+@font-face {+ font-family: 'Glyphicons Halflings';++ src: url('../fonts/glyphicons-halflings-regular.eot');+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');+}+.glyphicon {+ position: relative;+ top: 1px;+ display: inline-block;+ font-family: 'Glyphicons Halflings';+ font-style: normal;+ font-weight: normal;+ line-height: 1;++ -webkit-font-smoothing: antialiased;+ -moz-osx-font-smoothing: grayscale;+}+.glyphicon-asterisk:before {+ content: "\2a";+}+.glyphicon-plus:before {+ content: "\2b";+}+.glyphicon-euro:before {+ content: "\20ac";+}+.glyphicon-minus:before {+ content: "\2212";+}+.glyphicon-cloud:before {+ content: "\2601";+}+.glyphicon-envelope:before {+ content: "\2709";+}+.glyphicon-pencil:before {+ content: "\270f";+}+.glyphicon-glass:before {+ content: "\e001";+}+.glyphicon-music:before {+ content: "\e002";+}+.glyphicon-search:before {+ content: "\e003";+}+.glyphicon-heart:before {+ content: "\e005";+}+.glyphicon-star:before {+ content: "\e006";+}+.glyphicon-star-empty:before {+ content: "\e007";+}+.glyphicon-user:before {+ content: "\e008";+}+.glyphicon-film:before {+ content: "\e009";+}+.glyphicon-th-large:before {+ content: "\e010";+}+.glyphicon-th:before {+ content: "\e011";+}+.glyphicon-th-list:before {+ content: "\e012";+}+.glyphicon-ok:before {+ content: "\e013";+}+.glyphicon-remove:before {+ content: "\e014";+}+.glyphicon-zoom-in:before {+ content: "\e015";+}+.glyphicon-zoom-out:before {+ content: "\e016";+}+.glyphicon-off:before {+ content: "\e017";+}+.glyphicon-signal:before {+ content: "\e018";+}+.glyphicon-cog:before {+ content: "\e019";+}+.glyphicon-trash:before {+ content: "\e020";+}+.glyphicon-home:before {+ content: "\e021";+}+.glyphicon-file:before {+ content: "\e022";+}+.glyphicon-time:before {+ content: "\e023";+}+.glyphicon-road:before {+ content: "\e024";+}+.glyphicon-download-alt:before {+ content: "\e025";+}+.glyphicon-download:before {+ content: "\e026";+}+.glyphicon-upload:before {+ content: "\e027";+}+.glyphicon-inbox:before {+ content: "\e028";+}+.glyphicon-play-circle:before {+ content: "\e029";+}+.glyphicon-repeat:before {+ content: "\e030";+}+.glyphicon-refresh:before {+ content: "\e031";+}+.glyphicon-list-alt:before {+ content: "\e032";+}+.glyphicon-lock:before {+ content: "\e033";+}+.glyphicon-flag:before {+ content: "\e034";+}+.glyphicon-headphones:before {+ content: "\e035";+}+.glyphicon-volume-off:before {+ content: "\e036";+}+.glyphicon-volume-down:before {+ content: "\e037";+}+.glyphicon-volume-up:before {+ content: "\e038";+}+.glyphicon-qrcode:before {+ content: "\e039";+}+.glyphicon-barcode:before {+ content: "\e040";+}+.glyphicon-tag:before {+ content: "\e041";+}+.glyphicon-tags:before {+ content: "\e042";+}+.glyphicon-book:before {+ content: "\e043";+}+.glyphicon-bookmark:before {+ content: "\e044";+}+.glyphicon-print:before {+ content: "\e045";+}+.glyphicon-camera:before {+ content: "\e046";+}+.glyphicon-font:before {+ content: "\e047";+}+.glyphicon-bold:before {+ content: "\e048";+}+.glyphicon-italic:before {+ content: "\e049";+}+.glyphicon-text-height:before {+ content: "\e050";+}+.glyphicon-text-width:before {+ content: "\e051";+}+.glyphicon-align-left:before {+ content: "\e052";+}+.glyphicon-align-center:before {+ content: "\e053";+}+.glyphicon-align-right:before {+ content: "\e054";+}+.glyphicon-align-justify:before {+ content: "\e055";+}+.glyphicon-list:before {+ content: "\e056";+}+.glyphicon-indent-left:before {+ content: "\e057";+}+.glyphicon-indent-right:before {+ content: "\e058";+}+.glyphicon-facetime-video:before {+ content: "\e059";+}+.glyphicon-picture:before {+ content: "\e060";+}+.glyphicon-map-marker:before {+ content: "\e062";+}+.glyphicon-adjust:before {+ content: "\e063";+}+.glyphicon-tint:before {+ content: "\e064";+}+.glyphicon-edit:before {+ content: "\e065";+}+.glyphicon-share:before {+ content: "\e066";+}+.glyphicon-check:before {+ content: "\e067";+}+.glyphicon-move:before {+ content: "\e068";+}+.glyphicon-step-backward:before {+ content: "\e069";+}+.glyphicon-fast-backward:before {+ content: "\e070";+}+.glyphicon-backward:before {+ content: "\e071";+}+.glyphicon-play:before {+ content: "\e072";+}+.glyphicon-pause:before {+ content: "\e073";+}+.glyphicon-stop:before {+ content: "\e074";+}+.glyphicon-forward:before {+ content: "\e075";+}+.glyphicon-fast-forward:before {+ content: "\e076";+}+.glyphicon-step-forward:before {+ content: "\e077";+}+.glyphicon-eject:before {+ content: "\e078";+}+.glyphicon-chevron-left:before {+ content: "\e079";+}+.glyphicon-chevron-right:before {+ content: "\e080";+}+.glyphicon-plus-sign:before {+ content: "\e081";+}+.glyphicon-minus-sign:before {+ content: "\e082";+}+.glyphicon-remove-sign:before {+ content: "\e083";+}+.glyphicon-ok-sign:before {+ content: "\e084";+}+.glyphicon-question-sign:before {+ content: "\e085";+}+.glyphicon-info-sign:before {+ content: "\e086";+}+.glyphicon-screenshot:before {+ content: "\e087";+}+.glyphicon-remove-circle:before {+ content: "\e088";+}+.glyphicon-ok-circle:before {+ content: "\e089";+}+.glyphicon-ban-circle:before {+ content: "\e090";+}+.glyphicon-arrow-left:before {+ content: "\e091";+}+.glyphicon-arrow-right:before {+ content: "\e092";+}+.glyphicon-arrow-up:before {+ content: "\e093";+}+.glyphicon-arrow-down:before {+ content: "\e094";+}+.glyphicon-share-alt:before {+ content: "\e095";+}+.glyphicon-resize-full:before {+ content: "\e096";+}+.glyphicon-resize-small:before {+ content: "\e097";+}+.glyphicon-exclamation-sign:before {+ content: "\e101";+}+.glyphicon-gift:before {+ content: "\e102";+}+.glyphicon-leaf:before {+ content: "\e103";+}+.glyphicon-fire:before {+ content: "\e104";+}+.glyphicon-eye-open:before {+ content: "\e105";+}+.glyphicon-eye-close:before {+ content: "\e106";+}+.glyphicon-warning-sign:before {+ content: "\e107";+}+.glyphicon-plane:before {+ content: "\e108";+}+.glyphicon-calendar:before {+ content: "\e109";+}+.glyphicon-random:before {+ content: "\e110";+}+.glyphicon-comment:before {+ content: "\e111";+}+.glyphicon-magnet:before {+ content: "\e112";+}+.glyphicon-chevron-up:before {+ content: "\e113";+}+.glyphicon-chevron-down:before {+ content: "\e114";+}+.glyphicon-retweet:before {+ content: "\e115";+}+.glyphicon-shopping-cart:before {+ content: "\e116";+}+.glyphicon-folder-close:before {+ content: "\e117";+}+.glyphicon-folder-open:before {+ content: "\e118";+}+.glyphicon-resize-vertical:before {+ content: "\e119";+}+.glyphicon-resize-horizontal:before {+ content: "\e120";+}+.glyphicon-hdd:before {+ content: "\e121";+}+.glyphicon-bullhorn:before {+ content: "\e122";+}+.glyphicon-bell:before {+ content: "\e123";+}+.glyphicon-certificate:before {+ content: "\e124";+}+.glyphicon-thumbs-up:before {+ content: "\e125";+}+.glyphicon-thumbs-down:before {+ content: "\e126";+}+.glyphicon-hand-right:before {+ content: "\e127";+}+.glyphicon-hand-left:before {+ content: "\e128";+}+.glyphicon-hand-up:before {+ content: "\e129";+}+.glyphicon-hand-down:before {+ content: "\e130";+}+.glyphicon-circle-arrow-right:before {+ content: "\e131";+}+.glyphicon-circle-arrow-left:before {+ content: "\e132";+}+.glyphicon-circle-arrow-up:before {+ content: "\e133";+}+.glyphicon-circle-arrow-down:before {+ content: "\e134";+}+.glyphicon-globe:before {+ content: "\e135";+}+.glyphicon-wrench:before {+ content: "\e136";+}+.glyphicon-tasks:before {+ content: "\e137";+}+.glyphicon-filter:before {+ content: "\e138";+}+.glyphicon-briefcase:before {+ content: "\e139";+}+.glyphicon-fullscreen:before {+ content: "\e140";+}+.glyphicon-dashboard:before {+ content: "\e141";+}+.glyphicon-paperclip:before {+ content: "\e142";+}+.glyphicon-heart-empty:before {+ content: "\e143";+}+.glyphicon-link:before {+ content: "\e144";+}+.glyphicon-phone:before {+ content: "\e145";+}+.glyphicon-pushpin:before {+ content: "\e146";+}+.glyphicon-usd:before {+ content: "\e148";+}+.glyphicon-gbp:before {+ content: "\e149";+}+.glyphicon-sort:before {+ content: "\e150";+}+.glyphicon-sort-by-alphabet:before {+ content: "\e151";+}+.glyphicon-sort-by-alphabet-alt:before {+ content: "\e152";+}+.glyphicon-sort-by-order:before {+ content: "\e153";+}+.glyphicon-sort-by-order-alt:before {+ content: "\e154";+}+.glyphicon-sort-by-attributes:before {+ content: "\e155";+}+.glyphicon-sort-by-attributes-alt:before {+ content: "\e156";+}+.glyphicon-unchecked:before {+ content: "\e157";+}+.glyphicon-expand:before {+ content: "\e158";+}+.glyphicon-collapse-down:before {+ content: "\e159";+}+.glyphicon-collapse-up:before {+ content: "\e160";+}+.glyphicon-log-in:before {+ content: "\e161";+}+.glyphicon-flash:before {+ content: "\e162";+}+.glyphicon-log-out:before {+ content: "\e163";+}+.glyphicon-new-window:before {+ content: "\e164";+}+.glyphicon-record:before {+ content: "\e165";+}+.glyphicon-save:before {+ content: "\e166";+}+.glyphicon-open:before {+ content: "\e167";+}+.glyphicon-saved:before {+ content: "\e168";+}+.glyphicon-import:before {+ content: "\e169";+}+.glyphicon-export:before {+ content: "\e170";+}+.glyphicon-send:before {+ content: "\e171";+}+.glyphicon-floppy-disk:before {+ content: "\e172";+}+.glyphicon-floppy-saved:before {+ content: "\e173";+}+.glyphicon-floppy-remove:before {+ content: "\e174";+}+.glyphicon-floppy-save:before {+ content: "\e175";+}+.glyphicon-floppy-open:before {+ content: "\e176";+}+.glyphicon-credit-card:before {+ content: "\e177";+}+.glyphicon-transfer:before {+ content: "\e178";+}+.glyphicon-cutlery:before {+ content: "\e179";+}+.glyphicon-header:before {+ content: "\e180";+}+.glyphicon-compressed:before {+ content: "\e181";+}+.glyphicon-earphone:before {+ content: "\e182";+}+.glyphicon-phone-alt:before {+ content: "\e183";+}+.glyphicon-tower:before {+ content: "\e184";+}+.glyphicon-stats:before {+ content: "\e185";+}+.glyphicon-sd-video:before {+ content: "\e186";+}+.glyphicon-hd-video:before {+ content: "\e187";+}+.glyphicon-subtitles:before {+ content: "\e188";+}+.glyphicon-sound-stereo:before {+ content: "\e189";+}+.glyphicon-sound-dolby:before {+ content: "\e190";+}+.glyphicon-sound-5-1:before {+ content: "\e191";+}+.glyphicon-sound-6-1:before {+ content: "\e192";+}+.glyphicon-sound-7-1:before {+ content: "\e193";+}+.glyphicon-copyright-mark:before {+ content: "\e194";+}+.glyphicon-registration-mark:before {+ content: "\e195";+}+.glyphicon-cloud-download:before {+ content: "\e197";+}+.glyphicon-cloud-upload:before {+ content: "\e198";+}+.glyphicon-tree-conifer:before {+ content: "\e199";+}+.glyphicon-tree-deciduous:before {+ content: "\e200";+}+* {+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+}+*:before,+*:after {+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+}+html {+ font-size: 10px;++ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);+}+body {+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;+ font-size: 14px;+ line-height: 1.42857143;+ color: #333;+ background-color: #fff;+}+input,+button,+select,+textarea {+ font-family: inherit;+ font-size: inherit;+ line-height: inherit;+}+a {+ color: #428bca;+ text-decoration: none;+}+a:hover,+a:focus {+ color: #2a6496;+ text-decoration: underline;+}+a:focus {+ outline: thin dotted;+ outline: 5px auto -webkit-focus-ring-color;+ outline-offset: -2px;+}+figure {+ margin: 0;+}+img {+ vertical-align: middle;+}+.img-responsive,+.thumbnail > img,+.thumbnail a > img,+.carousel-inner > .item > img,+.carousel-inner > .item > a > img {+ display: block;+ width: 100% \9;+ max-width: 100%;+ height: auto;+}+.img-rounded {+ border-radius: 6px;+}+.img-thumbnail {+ display: inline-block;+ width: 100% \9;+ max-width: 100%;+ height: auto;+ padding: 4px;+ line-height: 1.42857143;+ background-color: #fff;+ border: 1px solid #ddd;+ border-radius: 4px;+ -webkit-transition: all .2s ease-in-out;+ -o-transition: all .2s ease-in-out;+ transition: all .2s ease-in-out;+}+.img-circle {+ border-radius: 50%;+}+hr {+ margin-top: 20px;+ margin-bottom: 20px;+ border: 0;+ border-top: 1px solid #eee;+}+.sr-only {+ position: absolute;+ width: 1px;+ height: 1px;+ padding: 0;+ margin: -1px;+ overflow: hidden;+ clip: rect(0, 0, 0, 0);+ border: 0;+}+.sr-only-focusable:active,+.sr-only-focusable:focus {+ position: static;+ width: auto;+ height: auto;+ margin: 0;+ overflow: visible;+ clip: auto;+}+h1,+h2,+h3,+h4,+h5,+h6,+.h1,+.h2,+.h3,+.h4,+.h5,+.h6 {+ font-family: inherit;+ font-weight: 500;+ line-height: 1.1;+ color: inherit;+}+h1 small,+h2 small,+h3 small,+h4 small,+h5 small,+h6 small,+.h1 small,+.h2 small,+.h3 small,+.h4 small,+.h5 small,+.h6 small,+h1 .small,+h2 .small,+h3 .small,+h4 .small,+h5 .small,+h6 .small,+.h1 .small,+.h2 .small,+.h3 .small,+.h4 .small,+.h5 .small,+.h6 .small {+ font-weight: normal;+ line-height: 1;+ color: #777;+}+h1,+.h1,+h2,+.h2,+h3,+.h3 {+ margin-top: 20px;+ margin-bottom: 10px;+}+h1 small,+.h1 small,+h2 small,+.h2 small,+h3 small,+.h3 small,+h1 .small,+.h1 .small,+h2 .small,+.h2 .small,+h3 .small,+.h3 .small {+ font-size: 65%;+}+h4,+.h4,+h5,+.h5,+h6,+.h6 {+ margin-top: 10px;+ margin-bottom: 10px;+}+h4 small,+.h4 small,+h5 small,+.h5 small,+h6 small,+.h6 small,+h4 .small,+.h4 .small,+h5 .small,+.h5 .small,+h6 .small,+.h6 .small {+ font-size: 75%;+}+h1,+.h1 {+ font-size: 36px;+}+h2,+.h2 {+ font-size: 30px;+}+h3,+.h3 {+ font-size: 24px;+}+h4,+.h4 {+ font-size: 18px;+}+h5,+.h5 {+ font-size: 14px;+}+h6,+.h6 {+ font-size: 12px;+}+p {+ margin: 0 0 10px;+}+.lead {+ margin-bottom: 20px;+ font-size: 16px;+ font-weight: 300;+ line-height: 1.4;+}+@media (min-width: 768px) {+ .lead {+ font-size: 21px;+ }+}+small,+.small {+ font-size: 85%;+}+cite {+ font-style: normal;+}+mark,+.mark {+ padding: .2em;+ background-color: #fcf8e3;+}+.text-left {+ text-align: left;+}+.text-right {+ text-align: right;+}+.text-center {+ text-align: center;+}+.text-justify {+ text-align: justify;+}+.text-nowrap {+ white-space: nowrap;+}+.text-lowercase {+ text-transform: lowercase;+}+.text-uppercase {+ text-transform: uppercase;+}+.text-capitalize {+ text-transform: capitalize;+}+.text-muted {+ color: #777;+}+.text-primary {+ color: #428bca;+}+a.text-primary:hover {+ color: #3071a9;+}+.text-success {+ color: #3c763d;+}+a.text-success:hover {+ color: #2b542c;+}+.text-info {+ color: #31708f;+}+a.text-info:hover {+ color: #245269;+}+.text-warning {+ color: #8a6d3b;+}+a.text-warning:hover {+ color: #66512c;+}+.text-danger {+ color: #a94442;+}+a.text-danger:hover {+ color: #843534;+}+.bg-primary {+ color: #fff;+ background-color: #428bca;+}+a.bg-primary:hover {+ background-color: #3071a9;+}+.bg-success {+ background-color: #dff0d8;+}+a.bg-success:hover {+ background-color: #c1e2b3;+}+.bg-info {+ background-color: #d9edf7;+}+a.bg-info:hover {+ background-color: #afd9ee;+}+.bg-warning {+ background-color: #fcf8e3;+}+a.bg-warning:hover {+ background-color: #f7ecb5;+}+.bg-danger {+ background-color: #f2dede;+}+a.bg-danger:hover {+ background-color: #e4b9b9;+}+.page-header {+ padding-bottom: 9px;+ margin: 40px 0 20px;+ border-bottom: 1px solid #eee;+}+ul,+ol {+ margin-top: 0;+ margin-bottom: 10px;+}+ul ul,+ol ul,+ul ol,+ol ol {+ margin-bottom: 0;+}+.list-unstyled {+ padding-left: 0;+ list-style: none;+}+.list-inline {+ padding-left: 0;+ margin-left: -5px;+ list-style: none;+}+.list-inline > li {+ display: inline-block;+ padding-right: 5px;+ padding-left: 5px;+}+dl {+ margin-top: 0;+ margin-bottom: 20px;+}+dt,+dd {+ line-height: 1.42857143;+}+dt {+ font-weight: bold;+}+dd {+ margin-left: 0;+}+@media (min-width: 768px) {+ .dl-horizontal dt {+ float: left;+ width: 160px;+ overflow: hidden;+ clear: left;+ text-align: right;+ text-overflow: ellipsis;+ white-space: nowrap;+ }+ .dl-horizontal dd {+ margin-left: 180px;+ }+}+abbr[title],+abbr[data-original-title] {+ cursor: help;+ border-bottom: 1px dotted #777;+}+.initialism {+ font-size: 90%;+ text-transform: uppercase;+}+blockquote {+ padding: 10px 20px;+ margin: 0 0 20px;+ font-size: 17.5px;+ border-left: 5px solid #eee;+}+blockquote p:last-child,+blockquote ul:last-child,+blockquote ol:last-child {+ margin-bottom: 0;+}+blockquote footer,+blockquote small,+blockquote .small {+ display: block;+ font-size: 80%;+ line-height: 1.42857143;+ color: #777;+}+blockquote footer:before,+blockquote small:before,+blockquote .small:before {+ content: '\2014 \00A0';+}+.blockquote-reverse,+blockquote.pull-right {+ padding-right: 15px;+ padding-left: 0;+ text-align: right;+ border-right: 5px solid #eee;+ border-left: 0;+}+.blockquote-reverse footer:before,+blockquote.pull-right footer:before,+.blockquote-reverse small:before,+blockquote.pull-right small:before,+.blockquote-reverse .small:before,+blockquote.pull-right .small:before {+ content: '';+}+.blockquote-reverse footer:after,+blockquote.pull-right footer:after,+.blockquote-reverse small:after,+blockquote.pull-right small:after,+.blockquote-reverse .small:after,+blockquote.pull-right .small:after {+ content: '\00A0 \2014';+}+blockquote:before,+blockquote:after {+ content: "";+}+address {+ margin-bottom: 20px;+ font-style: normal;+ line-height: 1.42857143;+}+code,+kbd,+pre,+samp {+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;+}+code {+ padding: 2px 4px;+ font-size: 90%;+ color: #c7254e;+ background-color: #f9f2f4;+ border-radius: 4px;+}+kbd {+ padding: 2px 4px;+ font-size: 90%;+ color: #fff;+ background-color: #333;+ border-radius: 3px;+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);+}+kbd kbd {+ padding: 0;+ font-size: 100%;+ -webkit-box-shadow: none;+ box-shadow: none;+}+pre {+ display: block;+ padding: 9.5px;+ margin: 0 0 10px;+ font-size: 13px;+ line-height: 1.42857143;+ color: #333;+ word-break: break-all;+ word-wrap: break-word;+ background-color: #f5f5f5;+ border: 1px solid #ccc;+ border-radius: 4px;+}+pre code {+ padding: 0;+ font-size: inherit;+ color: inherit;+ white-space: pre-wrap;+ background-color: transparent;+ border-radius: 0;+}+.pre-scrollable {+ max-height: 340px;+ overflow-y: scroll;+}+.container {+ padding-right: 15px;+ padding-left: 15px;+ margin-right: auto;+ margin-left: auto;+}+@media (min-width: 768px) {+ .container {+ width: 750px;+ }+}+@media (min-width: 992px) {+ .container {+ width: 970px;+ }+}+@media (min-width: 1200px) {+ .container {+ width: 1170px;+ }+}+.container-fluid {+ padding-right: 15px;+ padding-left: 15px;+ margin-right: auto;+ margin-left: auto;+}+.row {+ margin-right: -15px;+ margin-left: -15px;+}+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {+ position: relative;+ min-height: 1px;+ padding-right: 15px;+ padding-left: 15px;+}+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {+ float: left;+}+.col-xs-12 {+ width: 100%;+}+.col-xs-11 {+ width: 91.66666667%;+}+.col-xs-10 {+ width: 83.33333333%;+}+.col-xs-9 {+ width: 75%;+}+.col-xs-8 {+ width: 66.66666667%;+}+.col-xs-7 {+ width: 58.33333333%;+}+.col-xs-6 {+ width: 50%;+}+.col-xs-5 {+ width: 41.66666667%;+}+.col-xs-4 {+ width: 33.33333333%;+}+.col-xs-3 {+ width: 25%;+}+.col-xs-2 {+ width: 16.66666667%;+}+.col-xs-1 {+ width: 8.33333333%;+}+.col-xs-pull-12 {+ right: 100%;+}+.col-xs-pull-11 {+ right: 91.66666667%;+}+.col-xs-pull-10 {+ right: 83.33333333%;+}+.col-xs-pull-9 {+ right: 75%;+}+.col-xs-pull-8 {+ right: 66.66666667%;+}+.col-xs-pull-7 {+ right: 58.33333333%;+}+.col-xs-pull-6 {+ right: 50%;+}+.col-xs-pull-5 {+ right: 41.66666667%;+}+.col-xs-pull-4 {+ right: 33.33333333%;+}+.col-xs-pull-3 {+ right: 25%;+}+.col-xs-pull-2 {+ right: 16.66666667%;+}+.col-xs-pull-1 {+ right: 8.33333333%;+}+.col-xs-pull-0 {+ right: auto;+}+.col-xs-push-12 {+ left: 100%;+}+.col-xs-push-11 {+ left: 91.66666667%;+}+.col-xs-push-10 {+ left: 83.33333333%;+}+.col-xs-push-9 {+ left: 75%;+}+.col-xs-push-8 {+ left: 66.66666667%;+}+.col-xs-push-7 {+ left: 58.33333333%;+}+.col-xs-push-6 {+ left: 50%;+}+.col-xs-push-5 {+ left: 41.66666667%;+}+.col-xs-push-4 {+ left: 33.33333333%;+}+.col-xs-push-3 {+ left: 25%;+}+.col-xs-push-2 {+ left: 16.66666667%;+}+.col-xs-push-1 {+ left: 8.33333333%;+}+.col-xs-push-0 {+ left: auto;+}+.col-xs-offset-12 {+ margin-left: 100%;+}+.col-xs-offset-11 {+ margin-left: 91.66666667%;+}+.col-xs-offset-10 {+ margin-left: 83.33333333%;+}+.col-xs-offset-9 {+ margin-left: 75%;+}+.col-xs-offset-8 {+ margin-left: 66.66666667%;+}+.col-xs-offset-7 {+ margin-left: 58.33333333%;+}+.col-xs-offset-6 {+ margin-left: 50%;+}+.col-xs-offset-5 {+ margin-left: 41.66666667%;+}+.col-xs-offset-4 {+ margin-left: 33.33333333%;+}+.col-xs-offset-3 {+ margin-left: 25%;+}+.col-xs-offset-2 {+ margin-left: 16.66666667%;+}+.col-xs-offset-1 {+ margin-left: 8.33333333%;+}+.col-xs-offset-0 {+ margin-left: 0;+}+@media (min-width: 768px) {+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {+ float: left;+ }+ .col-sm-12 {+ width: 100%;+ }+ .col-sm-11 {+ width: 91.66666667%;+ }+ .col-sm-10 {+ width: 83.33333333%;+ }+ .col-sm-9 {+ width: 75%;+ }+ .col-sm-8 {+ width: 66.66666667%;+ }+ .col-sm-7 {+ width: 58.33333333%;+ }+ .col-sm-6 {+ width: 50%;+ }+ .col-sm-5 {+ width: 41.66666667%;+ }+ .col-sm-4 {+ width: 33.33333333%;+ }+ .col-sm-3 {+ width: 25%;+ }+ .col-sm-2 {+ width: 16.66666667%;+ }+ .col-sm-1 {+ width: 8.33333333%;+ }+ .col-sm-pull-12 {+ right: 100%;+ }+ .col-sm-pull-11 {+ right: 91.66666667%;+ }+ .col-sm-pull-10 {+ right: 83.33333333%;+ }+ .col-sm-pull-9 {+ right: 75%;+ }+ .col-sm-pull-8 {+ right: 66.66666667%;+ }+ .col-sm-pull-7 {+ right: 58.33333333%;+ }+ .col-sm-pull-6 {+ right: 50%;+ }+ .col-sm-pull-5 {+ right: 41.66666667%;+ }+ .col-sm-pull-4 {+ right: 33.33333333%;+ }+ .col-sm-pull-3 {+ right: 25%;+ }+ .col-sm-pull-2 {+ right: 16.66666667%;+ }+ .col-sm-pull-1 {+ right: 8.33333333%;+ }+ .col-sm-pull-0 {+ right: auto;+ }+ .col-sm-push-12 {+ left: 100%;+ }+ .col-sm-push-11 {+ left: 91.66666667%;+ }+ .col-sm-push-10 {+ left: 83.33333333%;+ }+ .col-sm-push-9 {+ left: 75%;+ }+ .col-sm-push-8 {+ left: 66.66666667%;+ }+ .col-sm-push-7 {+ left: 58.33333333%;+ }+ .col-sm-push-6 {+ left: 50%;+ }+ .col-sm-push-5 {+ left: 41.66666667%;+ }+ .col-sm-push-4 {+ left: 33.33333333%;+ }+ .col-sm-push-3 {+ left: 25%;+ }+ .col-sm-push-2 {+ left: 16.66666667%;+ }+ .col-sm-push-1 {+ left: 8.33333333%;+ }+ .col-sm-push-0 {+ left: auto;+ }+ .col-sm-offset-12 {+ margin-left: 100%;+ }+ .col-sm-offset-11 {+ margin-left: 91.66666667%;+ }+ .col-sm-offset-10 {+ margin-left: 83.33333333%;+ }+ .col-sm-offset-9 {+ margin-left: 75%;+ }+ .col-sm-offset-8 {+ margin-left: 66.66666667%;+ }+ .col-sm-offset-7 {+ margin-left: 58.33333333%;+ }+ .col-sm-offset-6 {+ margin-left: 50%;+ }+ .col-sm-offset-5 {+ margin-left: 41.66666667%;+ }+ .col-sm-offset-4 {+ margin-left: 33.33333333%;+ }+ .col-sm-offset-3 {+ margin-left: 25%;+ }+ .col-sm-offset-2 {+ margin-left: 16.66666667%;+ }+ .col-sm-offset-1 {+ margin-left: 8.33333333%;+ }+ .col-sm-offset-0 {+ margin-left: 0;+ }+}+@media (min-width: 992px) {+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {+ float: left;+ }+ .col-md-12 {+ width: 100%;+ }+ .col-md-11 {+ width: 91.66666667%;+ }+ .col-md-10 {+ width: 83.33333333%;+ }+ .col-md-9 {+ width: 75%;+ }+ .col-md-8 {+ width: 66.66666667%;+ }+ .col-md-7 {+ width: 58.33333333%;+ }+ .col-md-6 {+ width: 50%;+ }+ .col-md-5 {+ width: 41.66666667%;+ }+ .col-md-4 {+ width: 33.33333333%;+ }+ .col-md-3 {+ width: 25%;+ }+ .col-md-2 {+ width: 16.66666667%;+ }+ .col-md-1 {+ width: 8.33333333%;+ }+ .col-md-pull-12 {+ right: 100%;+ }+ .col-md-pull-11 {+ right: 91.66666667%;+ }+ .col-md-pull-10 {+ right: 83.33333333%;+ }+ .col-md-pull-9 {+ right: 75%;+ }+ .col-md-pull-8 {+ right: 66.66666667%;+ }+ .col-md-pull-7 {+ right: 58.33333333%;+ }+ .col-md-pull-6 {+ right: 50%;+ }+ .col-md-pull-5 {+ right: 41.66666667%;+ }+ .col-md-pull-4 {+ right: 33.33333333%;+ }+ .col-md-pull-3 {+ right: 25%;+ }+ .col-md-pull-2 {+ right: 16.66666667%;+ }+ .col-md-pull-1 {+ right: 8.33333333%;+ }+ .col-md-pull-0 {+ right: auto;+ }+ .col-md-push-12 {+ left: 100%;+ }+ .col-md-push-11 {+ left: 91.66666667%;+ }+ .col-md-push-10 {+ left: 83.33333333%;+ }+ .col-md-push-9 {+ left: 75%;+ }+ .col-md-push-8 {+ left: 66.66666667%;+ }+ .col-md-push-7 {+ left: 58.33333333%;+ }+ .col-md-push-6 {+ left: 50%;+ }+ .col-md-push-5 {+ left: 41.66666667%;+ }+ .col-md-push-4 {+ left: 33.33333333%;+ }+ .col-md-push-3 {+ left: 25%;+ }+ .col-md-push-2 {+ left: 16.66666667%;+ }+ .col-md-push-1 {+ left: 8.33333333%;+ }+ .col-md-push-0 {+ left: auto;+ }+ .col-md-offset-12 {+ margin-left: 100%;+ }+ .col-md-offset-11 {+ margin-left: 91.66666667%;+ }+ .col-md-offset-10 {+ margin-left: 83.33333333%;+ }+ .col-md-offset-9 {+ margin-left: 75%;+ }+ .col-md-offset-8 {+ margin-left: 66.66666667%;+ }+ .col-md-offset-7 {+ margin-left: 58.33333333%;+ }+ .col-md-offset-6 {+ margin-left: 50%;+ }+ .col-md-offset-5 {+ margin-left: 41.66666667%;+ }+ .col-md-offset-4 {+ margin-left: 33.33333333%;+ }+ .col-md-offset-3 {+ margin-left: 25%;+ }+ .col-md-offset-2 {+ margin-left: 16.66666667%;+ }+ .col-md-offset-1 {+ margin-left: 8.33333333%;+ }+ .col-md-offset-0 {+ margin-left: 0;+ }+}+@media (min-width: 1200px) {+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {+ float: left;+ }+ .col-lg-12 {+ width: 100%;+ }+ .col-lg-11 {+ width: 91.66666667%;+ }+ .col-lg-10 {+ width: 83.33333333%;+ }+ .col-lg-9 {+ width: 75%;+ }+ .col-lg-8 {+ width: 66.66666667%;+ }+ .col-lg-7 {+ width: 58.33333333%;+ }+ .col-lg-6 {+ width: 50%;+ }+ .col-lg-5 {+ width: 41.66666667%;+ }+ .col-lg-4 {+ width: 33.33333333%;+ }+ .col-lg-3 {+ width: 25%;+ }+ .col-lg-2 {+ width: 16.66666667%;+ }+ .col-lg-1 {+ width: 8.33333333%;+ }+ .col-lg-pull-12 {+ right: 100%;+ }+ .col-lg-pull-11 {+ right: 91.66666667%;+ }+ .col-lg-pull-10 {+ right: 83.33333333%;+ }+ .col-lg-pull-9 {+ right: 75%;+ }+ .col-lg-pull-8 {+ right: 66.66666667%;+ }+ .col-lg-pull-7 {+ right: 58.33333333%;+ }+ .col-lg-pull-6 {+ right: 50%;+ }+ .col-lg-pull-5 {+ right: 41.66666667%;+ }+ .col-lg-pull-4 {+ right: 33.33333333%;+ }+ .col-lg-pull-3 {+ right: 25%;+ }+ .col-lg-pull-2 {+ right: 16.66666667%;+ }+ .col-lg-pull-1 {+ right: 8.33333333%;+ }+ .col-lg-pull-0 {+ right: auto;+ }+ .col-lg-push-12 {+ left: 100%;+ }+ .col-lg-push-11 {+ left: 91.66666667%;+ }+ .col-lg-push-10 {+ left: 83.33333333%;+ }+ .col-lg-push-9 {+ left: 75%;+ }+ .col-lg-push-8 {+ left: 66.66666667%;+ }+ .col-lg-push-7 {+ left: 58.33333333%;+ }+ .col-lg-push-6 {+ left: 50%;+ }+ .col-lg-push-5 {+ left: 41.66666667%;+ }+ .col-lg-push-4 {+ left: 33.33333333%;+ }+ .col-lg-push-3 {+ left: 25%;+ }+ .col-lg-push-2 {+ left: 16.66666667%;+ }+ .col-lg-push-1 {+ left: 8.33333333%;+ }+ .col-lg-push-0 {+ left: auto;+ }+ .col-lg-offset-12 {+ margin-left: 100%;+ }+ .col-lg-offset-11 {+ margin-left: 91.66666667%;+ }+ .col-lg-offset-10 {+ margin-left: 83.33333333%;+ }+ .col-lg-offset-9 {+ margin-left: 75%;+ }+ .col-lg-offset-8 {+ margin-left: 66.66666667%;+ }+ .col-lg-offset-7 {+ margin-left: 58.33333333%;+ }+ .col-lg-offset-6 {+ margin-left: 50%;+ }+ .col-lg-offset-5 {+ margin-left: 41.66666667%;+ }+ .col-lg-offset-4 {+ margin-left: 33.33333333%;+ }+ .col-lg-offset-3 {+ margin-left: 25%;+ }+ .col-lg-offset-2 {+ margin-left: 16.66666667%;+ }+ .col-lg-offset-1 {+ margin-left: 8.33333333%;+ }+ .col-lg-offset-0 {+ margin-left: 0;+ }+}+table {+ background-color: transparent;+}+th {+ text-align: left;+}+.table {+ width: 100%;+ max-width: 100%;+ margin-bottom: 20px;+}+.table > thead > tr > th,+.table > tbody > tr > th,+.table > tfoot > tr > th,+.table > thead > tr > td,+.table > tbody > tr > td,+.table > tfoot > tr > td {+ padding: 8px;+ line-height: 1.42857143;+ vertical-align: top;+ border-top: 1px solid #ddd;+}+.table > thead > tr > th {+ vertical-align: bottom;+ border-bottom: 2px solid #ddd;+}+.table > caption + thead > tr:first-child > th,+.table > colgroup + thead > tr:first-child > th,+.table > thead:first-child > tr:first-child > th,+.table > caption + thead > tr:first-child > td,+.table > colgroup + thead > tr:first-child > td,+.table > thead:first-child > tr:first-child > td {+ border-top: 0;+}+.table > tbody + tbody {+ border-top: 2px solid #ddd;+}+.table .table {+ background-color: #fff;+}+.table-condensed > thead > tr > th,+.table-condensed > tbody > tr > th,+.table-condensed > tfoot > tr > th,+.table-condensed > thead > tr > td,+.table-condensed > tbody > tr > td,+.table-condensed > tfoot > tr > td {+ padding: 5px;+}+.table-bordered {+ border: 1px solid #ddd;+}+.table-bordered > thead > tr > th,+.table-bordered > tbody > tr > th,+.table-bordered > tfoot > tr > th,+.table-bordered > thead > tr > td,+.table-bordered > tbody > tr > td,+.table-bordered > tfoot > tr > td {+ border: 1px solid #ddd;+}+.table-bordered > thead > tr > th,+.table-bordered > thead > tr > td {+ border-bottom-width: 2px;+}+.table-striped > tbody > tr:nth-child(odd) > td,+.table-striped > tbody > tr:nth-child(odd) > th {+ background-color: #f9f9f9;+}+.table-hover > tbody > tr:hover > td,+.table-hover > tbody > tr:hover > th {+ background-color: #f5f5f5;+}+table col[class*="col-"] {+ position: static;+ display: table-column;+ float: none;+}+table td[class*="col-"],+table th[class*="col-"] {+ position: static;+ display: table-cell;+ float: none;+}+.table > thead > tr > td.active,+.table > tbody > tr > td.active,+.table > tfoot > tr > td.active,+.table > thead > tr > th.active,+.table > tbody > tr > th.active,+.table > tfoot > tr > th.active,+.table > thead > tr.active > td,+.table > tbody > tr.active > td,+.table > tfoot > tr.active > td,+.table > thead > tr.active > th,+.table > tbody > tr.active > th,+.table > tfoot > tr.active > th {+ background-color: #f5f5f5;+}+.table-hover > tbody > tr > td.active:hover,+.table-hover > tbody > tr > th.active:hover,+.table-hover > tbody > tr.active:hover > td,+.table-hover > tbody > tr:hover > .active,+.table-hover > tbody > tr.active:hover > th {+ background-color: #e8e8e8;+}+.table > thead > tr > td.success,+.table > tbody > tr > td.success,+.table > tfoot > tr > td.success,+.table > thead > tr > th.success,+.table > tbody > tr > th.success,+.table > tfoot > tr > th.success,+.table > thead > tr.success > td,+.table > tbody > tr.success > td,+.table > tfoot > tr.success > td,+.table > thead > tr.success > th,+.table > tbody > tr.success > th,+.table > tfoot > tr.success > th {+ background-color: #dff0d8;+}+.table-hover > tbody > tr > td.success:hover,+.table-hover > tbody > tr > th.success:hover,+.table-hover > tbody > tr.success:hover > td,+.table-hover > tbody > tr:hover > .success,+.table-hover > tbody > tr.success:hover > th {+ background-color: #d0e9c6;+}+.table > thead > tr > td.info,+.table > tbody > tr > td.info,+.table > tfoot > tr > td.info,+.table > thead > tr > th.info,+.table > tbody > tr > th.info,+.table > tfoot > tr > th.info,+.table > thead > tr.info > td,+.table > tbody > tr.info > td,+.table > tfoot > tr.info > td,+.table > thead > tr.info > th,+.table > tbody > tr.info > th,+.table > tfoot > tr.info > th {+ background-color: #d9edf7;+}+.table-hover > tbody > tr > td.info:hover,+.table-hover > tbody > tr > th.info:hover,+.table-hover > tbody > tr.info:hover > td,+.table-hover > tbody > tr:hover > .info,+.table-hover > tbody > tr.info:hover > th {+ background-color: #c4e3f3;+}+.table > thead > tr > td.warning,+.table > tbody > tr > td.warning,+.table > tfoot > tr > td.warning,+.table > thead > tr > th.warning,+.table > tbody > tr > th.warning,+.table > tfoot > tr > th.warning,+.table > thead > tr.warning > td,+.table > tbody > tr.warning > td,+.table > tfoot > tr.warning > td,+.table > thead > tr.warning > th,+.table > tbody > tr.warning > th,+.table > tfoot > tr.warning > th {+ background-color: #fcf8e3;+}+.table-hover > tbody > tr > td.warning:hover,+.table-hover > tbody > tr > th.warning:hover,+.table-hover > tbody > tr.warning:hover > td,+.table-hover > tbody > tr:hover > .warning,+.table-hover > tbody > tr.warning:hover > th {+ background-color: #faf2cc;+}+.table > thead > tr > td.danger,+.table > tbody > tr > td.danger,+.table > tfoot > tr > td.danger,+.table > thead > tr > th.danger,+.table > tbody > tr > th.danger,+.table > tfoot > tr > th.danger,+.table > thead > tr.danger > td,+.table > tbody > tr.danger > td,+.table > tfoot > tr.danger > td,+.table > thead > tr.danger > th,+.table > tbody > tr.danger > th,+.table > tfoot > tr.danger > th {+ background-color: #f2dede;+}+.table-hover > tbody > tr > td.danger:hover,+.table-hover > tbody > tr > th.danger:hover,+.table-hover > tbody > tr.danger:hover > td,+.table-hover > tbody > tr:hover > .danger,+.table-hover > tbody > tr.danger:hover > th {+ background-color: #ebcccc;+}+@media screen and (max-width: 767px) {+ .table-responsive {+ width: 100%;+ margin-bottom: 15px;+ overflow-x: auto;+ overflow-y: hidden;+ -webkit-overflow-scrolling: touch;+ -ms-overflow-style: -ms-autohiding-scrollbar;+ border: 1px solid #ddd;+ }+ .table-responsive > .table {+ margin-bottom: 0;+ }+ .table-responsive > .table > thead > tr > th,+ .table-responsive > .table > tbody > tr > th,+ .table-responsive > .table > tfoot > tr > th,+ .table-responsive > .table > thead > tr > td,+ .table-responsive > .table > tbody > tr > td,+ .table-responsive > .table > tfoot > tr > td {+ white-space: nowrap;+ }+ .table-responsive > .table-bordered {+ border: 0;+ }+ .table-responsive > .table-bordered > thead > tr > th:first-child,+ .table-responsive > .table-bordered > tbody > tr > th:first-child,+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,+ .table-responsive > .table-bordered > thead > tr > td:first-child,+ .table-responsive > .table-bordered > tbody > tr > td:first-child,+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {+ border-left: 0;+ }+ .table-responsive > .table-bordered > thead > tr > th:last-child,+ .table-responsive > .table-bordered > tbody > tr > th:last-child,+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,+ .table-responsive > .table-bordered > thead > tr > td:last-child,+ .table-responsive > .table-bordered > tbody > tr > td:last-child,+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {+ border-right: 0;+ }+ .table-responsive > .table-bordered > tbody > tr:last-child > th,+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,+ .table-responsive > .table-bordered > tbody > tr:last-child > td,+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {+ border-bottom: 0;+ }+}+fieldset {+ min-width: 0;+ padding: 0;+ margin: 0;+ border: 0;+}+legend {+ display: block;+ width: 100%;+ padding: 0;+ margin-bottom: 20px;+ font-size: 21px;+ line-height: inherit;+ color: #333;+ border: 0;+ border-bottom: 1px solid #e5e5e5;+}+label {+ display: inline-block;+ max-width: 100%;+ margin-bottom: 5px;+ font-weight: bold;+}+input[type="search"] {+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ box-sizing: border-box;+}+input[type="radio"],+input[type="checkbox"] {+ margin: 4px 0 0;+ margin-top: 1px \9;+ line-height: normal;+}+input[type="file"] {+ display: block;+}+input[type="range"] {+ display: block;+ width: 100%;+}+select[multiple],+select[size] {+ height: auto;+}+input[type="file"]:focus,+input[type="radio"]:focus,+input[type="checkbox"]:focus {+ outline: thin dotted;+ outline: 5px auto -webkit-focus-ring-color;+ outline-offset: -2px;+}+output {+ display: block;+ padding-top: 7px;+ font-size: 14px;+ line-height: 1.42857143;+ color: #555;+}+.form-control {+ display: block;+ width: 100%;+ height: 34px;+ padding: 6px 12px;+ font-size: 14px;+ line-height: 1.42857143;+ color: #555;+ background-color: #fff;+ background-image: none;+ border: 1px solid #ccc;+ border-radius: 4px;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+ -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;+ -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;+}+.form-control:focus {+ border-color: #66afe9;+ outline: 0;+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);+}+.form-control::-moz-placeholder {+ color: #777;+ opacity: 1;+}+.form-control:-ms-input-placeholder {+ color: #777;+}+.form-control::-webkit-input-placeholder {+ color: #777;+}+.form-control[disabled],+.form-control[readonly],+fieldset[disabled] .form-control {+ cursor: not-allowed;+ background-color: #eee;+ opacity: 1;+}+textarea.form-control {+ height: auto;+}+input[type="search"] {+ -webkit-appearance: none;+}+input[type="date"],+input[type="time"],+input[type="datetime-local"],+input[type="month"] {+ line-height: 34px;+ line-height: 1.42857143 \0;+}+input[type="date"].input-sm,+input[type="time"].input-sm,+input[type="datetime-local"].input-sm,+input[type="month"].input-sm {+ line-height: 30px;+}+input[type="date"].input-lg,+input[type="time"].input-lg,+input[type="datetime-local"].input-lg,+input[type="month"].input-lg {+ line-height: 46px;+}+.form-group {+ margin-bottom: 15px;+}+.radio,+.checkbox {+ position: relative;+ display: block;+ min-height: 20px;+ margin-top: 10px;+ margin-bottom: 10px;+}+.radio label,+.checkbox label {+ padding-left: 20px;+ margin-bottom: 0;+ font-weight: normal;+ cursor: pointer;+}+.radio input[type="radio"],+.radio-inline input[type="radio"],+.checkbox input[type="checkbox"],+.checkbox-inline input[type="checkbox"] {+ position: absolute;+ margin-top: 4px \9;+ margin-left: -20px;+}+.radio + .radio,+.checkbox + .checkbox {+ margin-top: -5px;+}+.radio-inline,+.checkbox-inline {+ display: inline-block;+ padding-left: 20px;+ margin-bottom: 0;+ font-weight: normal;+ vertical-align: middle;+ cursor: pointer;+}+.radio-inline + .radio-inline,+.checkbox-inline + .checkbox-inline {+ margin-top: 0;+ margin-left: 10px;+}+input[type="radio"][disabled],+input[type="checkbox"][disabled],+input[type="radio"].disabled,+input[type="checkbox"].disabled,+fieldset[disabled] input[type="radio"],+fieldset[disabled] input[type="checkbox"] {+ cursor: not-allowed;+}+.radio-inline.disabled,+.checkbox-inline.disabled,+fieldset[disabled] .radio-inline,+fieldset[disabled] .checkbox-inline {+ cursor: not-allowed;+}+.radio.disabled label,+.checkbox.disabled label,+fieldset[disabled] .radio label,+fieldset[disabled] .checkbox label {+ cursor: not-allowed;+}+.form-control-static {+ padding-top: 7px;+ padding-bottom: 7px;+ margin-bottom: 0;+}+.form-control-static.input-lg,+.form-control-static.input-sm {+ padding-right: 0;+ padding-left: 0;+}+.input-sm,+.form-horizontal .form-group-sm .form-control {+ height: 30px;+ padding: 5px 10px;+ font-size: 12px;+ line-height: 1.5;+ border-radius: 3px;+}+select.input-sm {+ height: 30px;+ line-height: 30px;+}+textarea.input-sm,+select[multiple].input-sm {+ height: auto;+}+.input-lg,+.form-horizontal .form-group-lg .form-control {+ height: 46px;+ padding: 10px 16px;+ font-size: 18px;+ line-height: 1.33;+ border-radius: 6px;+}+select.input-lg {+ height: 46px;+ line-height: 46px;+}+textarea.input-lg,+select[multiple].input-lg {+ height: auto;+}+.has-feedback {+ position: relative;+}+.has-feedback .form-control {+ padding-right: 42.5px;+}+.form-control-feedback {+ position: absolute;+ top: 25px;+ right: 0;+ z-index: 2;+ display: block;+ width: 34px;+ height: 34px;+ line-height: 34px;+ text-align: center;+}+.input-lg + .form-control-feedback {+ width: 46px;+ height: 46px;+ line-height: 46px;+}+.input-sm + .form-control-feedback {+ width: 30px;+ height: 30px;+ line-height: 30px;+}+.has-success .help-block,+.has-success .control-label,+.has-success .radio,+.has-success .checkbox,+.has-success .radio-inline,+.has-success .checkbox-inline {+ color: #3c763d;+}+.has-success .form-control {+ border-color: #3c763d;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+}+.has-success .form-control:focus {+ border-color: #2b542c;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;+}+.has-success .input-group-addon {+ color: #3c763d;+ background-color: #dff0d8;+ border-color: #3c763d;+}+.has-success .form-control-feedback {+ color: #3c763d;+}+.has-warning .help-block,+.has-warning .control-label,+.has-warning .radio,+.has-warning .checkbox,+.has-warning .radio-inline,+.has-warning .checkbox-inline {+ color: #8a6d3b;+}+.has-warning .form-control {+ border-color: #8a6d3b;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+}+.has-warning .form-control:focus {+ border-color: #66512c;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;+}+.has-warning .input-group-addon {+ color: #8a6d3b;+ background-color: #fcf8e3;+ border-color: #8a6d3b;+}+.has-warning .form-control-feedback {+ color: #8a6d3b;+}+.has-error .help-block,+.has-error .control-label,+.has-error .radio,+.has-error .checkbox,+.has-error .radio-inline,+.has-error .checkbox-inline {+ color: #a94442;+}+.has-error .form-control {+ border-color: #a94442;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);+}+.has-error .form-control:focus {+ border-color: #843534;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;+}+.has-error .input-group-addon {+ color: #a94442;+ background-color: #f2dede;+ border-color: #a94442;+}+.has-error .form-control-feedback {+ color: #a94442;+}+.has-feedback label.sr-only ~ .form-control-feedback {+ top: 0;+}+.help-block {+ display: block;+ margin-top: 5px;+ margin-bottom: 10px;+ color: #737373;+}+@media (min-width: 768px) {+ .form-inline .form-group {+ display: inline-block;+ margin-bottom: 0;+ vertical-align: middle;+ }+ .form-inline .form-control {+ display: inline-block;+ width: auto;+ vertical-align: middle;+ }+ .form-inline .input-group {+ display: inline-table;+ vertical-align: middle;+ }+ .form-inline .input-group .input-group-addon,+ .form-inline .input-group .input-group-btn,+ .form-inline .input-group .form-control {+ width: auto;+ }+ .form-inline .input-group > .form-control {+ width: 100%;+ }+ .form-inline .control-label {+ margin-bottom: 0;+ vertical-align: middle;+ }+ .form-inline .radio,+ .form-inline .checkbox {+ display: inline-block;+ margin-top: 0;+ margin-bottom: 0;+ vertical-align: middle;+ }+ .form-inline .radio label,+ .form-inline .checkbox label {+ padding-left: 0;+ }+ .form-inline .radio input[type="radio"],+ .form-inline .checkbox input[type="checkbox"] {+ position: relative;+ margin-left: 0;+ }+ .form-inline .has-feedback .form-control-feedback {+ top: 0;+ }+}+.form-horizontal .radio,+.form-horizontal .checkbox,+.form-horizontal .radio-inline,+.form-horizontal .checkbox-inline {+ padding-top: 7px;+ margin-top: 0;+ margin-bottom: 0;+}+.form-horizontal .radio,+.form-horizontal .checkbox {+ min-height: 27px;+}+.form-horizontal .form-group {+ margin-right: -15px;+ margin-left: -15px;+}+@media (min-width: 768px) {+ .form-horizontal .control-label {+ padding-top: 7px;+ margin-bottom: 0;+ text-align: right;+ }+}+.form-horizontal .has-feedback .form-control-feedback {+ top: 0;+ right: 15px;+}+@media (min-width: 768px) {+ .form-horizontal .form-group-lg .control-label {+ padding-top: 14.3px;+ }+}+@media (min-width: 768px) {+ .form-horizontal .form-group-sm .control-label {+ padding-top: 6px;+ }+}+.btn {+ display: inline-block;+ padding: 6px 12px;+ margin-bottom: 0;+ font-size: 14px;+ font-weight: normal;+ line-height: 1.42857143;+ text-align: center;+ white-space: nowrap;+ vertical-align: middle;+ cursor: pointer;+ -webkit-user-select: none;+ -moz-user-select: none;+ -ms-user-select: none;+ user-select: none;+ background-image: none;+ border: 1px solid transparent;+ border-radius: 4px;+}+.btn:focus,+.btn:active:focus,+.btn.active:focus {+ outline: thin dotted;+ outline: 5px auto -webkit-focus-ring-color;+ outline-offset: -2px;+}+.btn:hover,+.btn:focus {+ color: #333;+ text-decoration: none;+}+.btn:active,+.btn.active {+ background-image: none;+ outline: 0;+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+}+.btn.disabled,+.btn[disabled],+fieldset[disabled] .btn {+ pointer-events: none;+ cursor: not-allowed;+ filter: alpha(opacity=65);+ -webkit-box-shadow: none;+ box-shadow: none;+ opacity: .65;+}+.btn-default {+ color: #333;+ background-color: #fff;+ border-color: #ccc;+}+.btn-default:hover,+.btn-default:focus,+.btn-default:active,+.btn-default.active,+.open > .dropdown-toggle.btn-default {+ color: #333;+ background-color: #e6e6e6;+ border-color: #adadad;+}+.btn-default:active,+.btn-default.active,+.open > .dropdown-toggle.btn-default {+ background-image: none;+}+.btn-default.disabled,+.btn-default[disabled],+fieldset[disabled] .btn-default,+.btn-default.disabled:hover,+.btn-default[disabled]:hover,+fieldset[disabled] .btn-default:hover,+.btn-default.disabled:focus,+.btn-default[disabled]:focus,+fieldset[disabled] .btn-default:focus,+.btn-default.disabled:active,+.btn-default[disabled]:active,+fieldset[disabled] .btn-default:active,+.btn-default.disabled.active,+.btn-default[disabled].active,+fieldset[disabled] .btn-default.active {+ background-color: #fff;+ border-color: #ccc;+}+.btn-default .badge {+ color: #fff;+ background-color: #333;+}+.btn-primary {+ color: #fff;+ background-color: #428bca;+ border-color: #357ebd;+}+.btn-primary:hover,+.btn-primary:focus,+.btn-primary:active,+.btn-primary.active,+.open > .dropdown-toggle.btn-primary {+ color: #fff;+ background-color: #3071a9;+ border-color: #285e8e;+}+.btn-primary:active,+.btn-primary.active,+.open > .dropdown-toggle.btn-primary {+ background-image: none;+}+.btn-primary.disabled,+.btn-primary[disabled],+fieldset[disabled] .btn-primary,+.btn-primary.disabled:hover,+.btn-primary[disabled]:hover,+fieldset[disabled] .btn-primary:hover,+.btn-primary.disabled:focus,+.btn-primary[disabled]:focus,+fieldset[disabled] .btn-primary:focus,+.btn-primary.disabled:active,+.btn-primary[disabled]:active,+fieldset[disabled] .btn-primary:active,+.btn-primary.disabled.active,+.btn-primary[disabled].active,+fieldset[disabled] .btn-primary.active {+ background-color: #428bca;+ border-color: #357ebd;+}+.btn-primary .badge {+ color: #428bca;+ background-color: #fff;+}+.btn-success {+ color: #fff;+ background-color: #5cb85c;+ border-color: #4cae4c;+}+.btn-success:hover,+.btn-success:focus,+.btn-success:active,+.btn-success.active,+.open > .dropdown-toggle.btn-success {+ color: #fff;+ background-color: #449d44;+ border-color: #398439;+}+.btn-success:active,+.btn-success.active,+.open > .dropdown-toggle.btn-success {+ background-image: none;+}+.btn-success.disabled,+.btn-success[disabled],+fieldset[disabled] .btn-success,+.btn-success.disabled:hover,+.btn-success[disabled]:hover,+fieldset[disabled] .btn-success:hover,+.btn-success.disabled:focus,+.btn-success[disabled]:focus,+fieldset[disabled] .btn-success:focus,+.btn-success.disabled:active,+.btn-success[disabled]:active,+fieldset[disabled] .btn-success:active,+.btn-success.disabled.active,+.btn-success[disabled].active,+fieldset[disabled] .btn-success.active {+ background-color: #5cb85c;+ border-color: #4cae4c;+}+.btn-success .badge {+ color: #5cb85c;+ background-color: #fff;+}+.btn-info {+ color: #fff;+ background-color: #5bc0de;+ border-color: #46b8da;+}+.btn-info:hover,+.btn-info:focus,+.btn-info:active,+.btn-info.active,+.open > .dropdown-toggle.btn-info {+ color: #fff;+ background-color: #31b0d5;+ border-color: #269abc;+}+.btn-info:active,+.btn-info.active,+.open > .dropdown-toggle.btn-info {+ background-image: none;+}+.btn-info.disabled,+.btn-info[disabled],+fieldset[disabled] .btn-info,+.btn-info.disabled:hover,+.btn-info[disabled]:hover,+fieldset[disabled] .btn-info:hover,+.btn-info.disabled:focus,+.btn-info[disabled]:focus,+fieldset[disabled] .btn-info:focus,+.btn-info.disabled:active,+.btn-info[disabled]:active,+fieldset[disabled] .btn-info:active,+.btn-info.disabled.active,+.btn-info[disabled].active,+fieldset[disabled] .btn-info.active {+ background-color: #5bc0de;+ border-color: #46b8da;+}+.btn-info .badge {+ color: #5bc0de;+ background-color: #fff;+}+.btn-warning {+ color: #fff;+ background-color: #f0ad4e;+ border-color: #eea236;+}+.btn-warning:hover,+.btn-warning:focus,+.btn-warning:active,+.btn-warning.active,+.open > .dropdown-toggle.btn-warning {+ color: #fff;+ background-color: #ec971f;+ border-color: #d58512;+}+.btn-warning:active,+.btn-warning.active,+.open > .dropdown-toggle.btn-warning {+ background-image: none;+}+.btn-warning.disabled,+.btn-warning[disabled],+fieldset[disabled] .btn-warning,+.btn-warning.disabled:hover,+.btn-warning[disabled]:hover,+fieldset[disabled] .btn-warning:hover,+.btn-warning.disabled:focus,+.btn-warning[disabled]:focus,+fieldset[disabled] .btn-warning:focus,+.btn-warning.disabled:active,+.btn-warning[disabled]:active,+fieldset[disabled] .btn-warning:active,+.btn-warning.disabled.active,+.btn-warning[disabled].active,+fieldset[disabled] .btn-warning.active {+ background-color: #f0ad4e;+ border-color: #eea236;+}+.btn-warning .badge {+ color: #f0ad4e;+ background-color: #fff;+}+.btn-danger {+ color: #fff;+ background-color: #d9534f;+ border-color: #d43f3a;+}+.btn-danger:hover,+.btn-danger:focus,+.btn-danger:active,+.btn-danger.active,+.open > .dropdown-toggle.btn-danger {+ color: #fff;+ background-color: #c9302c;+ border-color: #ac2925;+}+.btn-danger:active,+.btn-danger.active,+.open > .dropdown-toggle.btn-danger {+ background-image: none;+}+.btn-danger.disabled,+.btn-danger[disabled],+fieldset[disabled] .btn-danger,+.btn-danger.disabled:hover,+.btn-danger[disabled]:hover,+fieldset[disabled] .btn-danger:hover,+.btn-danger.disabled:focus,+.btn-danger[disabled]:focus,+fieldset[disabled] .btn-danger:focus,+.btn-danger.disabled:active,+.btn-danger[disabled]:active,+fieldset[disabled] .btn-danger:active,+.btn-danger.disabled.active,+.btn-danger[disabled].active,+fieldset[disabled] .btn-danger.active {+ background-color: #d9534f;+ border-color: #d43f3a;+}+.btn-danger .badge {+ color: #d9534f;+ background-color: #fff;+}+.btn-link {+ font-weight: normal;+ color: #428bca;+ cursor: pointer;+ border-radius: 0;+}+.btn-link,+.btn-link:active,+.btn-link[disabled],+fieldset[disabled] .btn-link {+ background-color: transparent;+ -webkit-box-shadow: none;+ box-shadow: none;+}+.btn-link,+.btn-link:hover,+.btn-link:focus,+.btn-link:active {+ border-color: transparent;+}+.btn-link:hover,+.btn-link:focus {+ color: #2a6496;+ text-decoration: underline;+ background-color: transparent;+}+.btn-link[disabled]:hover,+fieldset[disabled] .btn-link:hover,+.btn-link[disabled]:focus,+fieldset[disabled] .btn-link:focus {+ color: #777;+ text-decoration: none;+}+.btn-lg,+.btn-group-lg > .btn {+ padding: 10px 16px;+ font-size: 18px;+ line-height: 1.33;+ border-radius: 6px;+}+.btn-sm,+.btn-group-sm > .btn {+ padding: 5px 10px;+ font-size: 12px;+ line-height: 1.5;+ border-radius: 3px;+}+.btn-xs,+.btn-group-xs > .btn {+ padding: 1px 5px;+ font-size: 12px;+ line-height: 1.5;+ border-radius: 3px;+}+.btn-block {+ display: block;+ width: 100%;+}+.btn-block + .btn-block {+ margin-top: 5px;+}+input[type="submit"].btn-block,+input[type="reset"].btn-block,+input[type="button"].btn-block {+ width: 100%;+}+.fade {+ opacity: 0;+ -webkit-transition: opacity .15s linear;+ -o-transition: opacity .15s linear;+ transition: opacity .15s linear;+}+.fade.in {+ opacity: 1;+}+.collapse {+ display: none;+}+.collapse.in {+ display: block;+}+tr.collapse.in {+ display: table-row;+}+tbody.collapse.in {+ display: table-row-group;+}+.collapsing {+ position: relative;+ height: 0;+ overflow: hidden;+ -webkit-transition: height .35s ease;+ -o-transition: height .35s ease;+ transition: height .35s ease;+}+.caret {+ display: inline-block;+ width: 0;+ height: 0;+ margin-left: 2px;+ vertical-align: middle;+ border-top: 4px solid;+ border-right: 4px solid transparent;+ border-left: 4px solid transparent;+}+.dropdown {+ position: relative;+}+.dropdown-toggle:focus {+ outline: 0;+}+.dropdown-menu {+ position: absolute;+ top: 100%;+ left: 0;+ z-index: 1000;+ display: none;+ float: left;+ min-width: 160px;+ padding: 5px 0;+ margin: 2px 0 0;+ font-size: 14px;+ text-align: left;+ list-style: none;+ background-color: #fff;+ -webkit-background-clip: padding-box;+ background-clip: padding-box;+ border: 1px solid #ccc;+ border: 1px solid rgba(0, 0, 0, .15);+ border-radius: 4px;+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);+}+.dropdown-menu.pull-right {+ right: 0;+ left: auto;+}+.dropdown-menu .divider {+ height: 1px;+ margin: 9px 0;+ overflow: hidden;+ background-color: #e5e5e5;+}+.dropdown-menu > li > a {+ display: block;+ padding: 3px 20px;+ clear: both;+ font-weight: normal;+ line-height: 1.42857143;+ color: #333;+ white-space: nowrap;+}+.dropdown-menu > li > a:hover,+.dropdown-menu > li > a:focus {+ color: #262626;+ text-decoration: none;+ background-color: #f5f5f5;+}+.dropdown-menu > .active > a,+.dropdown-menu > .active > a:hover,+.dropdown-menu > .active > a:focus {+ color: #fff;+ text-decoration: none;+ background-color: #428bca;+ outline: 0;+}+.dropdown-menu > .disabled > a,+.dropdown-menu > .disabled > a:hover,+.dropdown-menu > .disabled > a:focus {+ color: #777;+}+.dropdown-menu > .disabled > a:hover,+.dropdown-menu > .disabled > a:focus {+ text-decoration: none;+ cursor: not-allowed;+ background-color: transparent;+ background-image: none;+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);+}+.open > .dropdown-menu {+ display: block;+}+.open > a {+ outline: 0;+}+.dropdown-menu-right {+ right: 0;+ left: auto;+}+.dropdown-menu-left {+ right: auto;+ left: 0;+}+.dropdown-header {+ display: block;+ padding: 3px 20px;+ font-size: 12px;+ line-height: 1.42857143;+ color: #777;+ white-space: nowrap;+}+.dropdown-backdrop {+ position: fixed;+ top: 0;+ right: 0;+ bottom: 0;+ left: 0;+ z-index: 990;+}+.pull-right > .dropdown-menu {+ right: 0;+ left: auto;+}+.dropup .caret,+.navbar-fixed-bottom .dropdown .caret {+ content: "";+ border-top: 0;+ border-bottom: 4px solid;+}+.dropup .dropdown-menu,+.navbar-fixed-bottom .dropdown .dropdown-menu {+ top: auto;+ bottom: 100%;+ margin-bottom: 1px;+}+@media (min-width: 768px) {+ .navbar-right .dropdown-menu {+ right: 0;+ left: auto;+ }+ .navbar-right .dropdown-menu-left {+ right: auto;+ left: 0;+ }+}+.btn-group,+.btn-group-vertical {+ position: relative;+ display: inline-block;+ vertical-align: middle;+}+.btn-group > .btn,+.btn-group-vertical > .btn {+ position: relative;+ float: left;+}+.btn-group > .btn:hover,+.btn-group-vertical > .btn:hover,+.btn-group > .btn:focus,+.btn-group-vertical > .btn:focus,+.btn-group > .btn:active,+.btn-group-vertical > .btn:active,+.btn-group > .btn.active,+.btn-group-vertical > .btn.active {+ z-index: 2;+}+.btn-group > .btn:focus,+.btn-group-vertical > .btn:focus {+ outline: 0;+}+.btn-group .btn + .btn,+.btn-group .btn + .btn-group,+.btn-group .btn-group + .btn,+.btn-group .btn-group + .btn-group {+ margin-left: -1px;+}+.btn-toolbar {+ margin-left: -5px;+}+.btn-toolbar .btn-group,+.btn-toolbar .input-group {+ float: left;+}+.btn-toolbar > .btn,+.btn-toolbar > .btn-group,+.btn-toolbar > .input-group {+ margin-left: 5px;+}+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {+ border-radius: 0;+}+.btn-group > .btn:first-child {+ margin-left: 0;+}+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {+ border-top-right-radius: 0;+ border-bottom-right-radius: 0;+}+.btn-group > .btn:last-child:not(:first-child),+.btn-group > .dropdown-toggle:not(:first-child) {+ border-top-left-radius: 0;+ border-bottom-left-radius: 0;+}+.btn-group > .btn-group {+ float: left;+}+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {+ border-radius: 0;+}+.btn-group > .btn-group:first-child > .btn:last-child,+.btn-group > .btn-group:first-child > .dropdown-toggle {+ border-top-right-radius: 0;+ border-bottom-right-radius: 0;+}+.btn-group > .btn-group:last-child > .btn:first-child {+ border-top-left-radius: 0;+ border-bottom-left-radius: 0;+}+.btn-group .dropdown-toggle:active,+.btn-group.open .dropdown-toggle {+ outline: 0;+}+.btn-group > .btn + .dropdown-toggle {+ padding-right: 8px;+ padding-left: 8px;+}+.btn-group > .btn-lg + .dropdown-toggle {+ padding-right: 12px;+ padding-left: 12px;+}+.btn-group.open .dropdown-toggle {+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);+}+.btn-group.open .dropdown-toggle.btn-link {+ -webkit-box-shadow: none;+ box-shadow: none;+}+.btn .caret {+ margin-left: 0;+}+.btn-lg .caret {+ border-width: 5px 5px 0;+ border-bottom-width: 0;+}+.dropup .btn-lg .caret {+ border-width: 0 5px 5px;+}+.btn-group-vertical > .btn,+.btn-group-vertical > .btn-group,+.btn-group-vertical > .btn-group > .btn {+ display: block;+ float: none;+ width: 100%;+ max-width: 100%;+}+.btn-group-vertical > .btn-group > .btn {+ float: none;+}+.btn-group-vertical > .btn + .btn,+.btn-group-vertical > .btn + .btn-group,+.btn-group-vertical > .btn-group + .btn,+.btn-group-vertical > .btn-group + .btn-group {+ margin-top: -1px;+ margin-left: 0;+}+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {+ border-radius: 0;+}+.btn-group-vertical > .btn:first-child:not(:last-child) {+ border-top-right-radius: 4px;+ border-bottom-right-radius: 0;+ border-bottom-left-radius: 0;+}+.btn-group-vertical > .btn:last-child:not(:first-child) {+ border-top-left-radius: 0;+ border-top-right-radius: 0;+ border-bottom-left-radius: 4px;+}+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {+ border-radius: 0;+}+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {+ border-bottom-right-radius: 0;+ border-bottom-left-radius: 0;+}+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {+ border-top-left-radius: 0;+ border-top-right-radius: 0;+}+.btn-group-justified {+ display: table;+ width: 100%;+ table-layout: fixed;+ border-collapse: separate;+}+.btn-group-justified > .btn,+.btn-group-justified > .btn-group {+ display: table-cell;+ float: none;+ width: 1%;+}+.btn-group-justified > .btn-group .btn {+ width: 100%;+}+.btn-group-justified > .btn-group .dropdown-menu {+ left: auto;+}+[data-toggle="buttons"] > .btn > input[type="radio"],+[data-toggle="buttons"] > .btn > input[type="checkbox"] {+ position: absolute;+ z-index: -1;+ filter: alpha(opacity=0);+ opacity: 0;+}+.input-group {+ position: relative;+ display: table;+ border-collapse: separate;+}+.input-group[class*="col-"] {+ float: none;+ padding-right: 0;+ padding-left: 0;+}+.input-group .form-control {+ position: relative;+ z-index: 2;+ float: left;+ width: 100%;+ margin-bottom: 0;+}+.input-group-lg > .form-control,+.input-group-lg > .input-group-addon,+.input-group-lg > .input-group-btn > .btn {+ height: 46px;+ padding: 10px 16px;+ font-size: 18px;+ line-height: 1.33;+ border-radius: 6px;+}+select.input-group-lg > .form-control,+select.input-group-lg > .input-group-addon,+select.input-group-lg > .input-group-btn > .btn {+ height: 46px;+ line-height: 46px;+}+textarea.input-group-lg > .form-control,+textarea.input-group-lg > .input-group-addon,+textarea.input-group-lg > .input-group-btn > .btn,+select[multiple].input-group-lg > .form-control,+select[multiple].input-group-lg > .input-group-addon,+select[multiple].input-group-lg > .input-group-btn > .btn {+ height: auto;+}+.input-group-sm > .form-control,+.input-group-sm > .input-group-addon,+.input-group-sm > .input-group-btn > .btn {+ height: 30px;+ padding: 5px 10px;+ font-size: 12px;+ line-height: 1.5;+ border-radius: 3px;+}+select.input-group-sm > .form-control,+select.input-group-sm > .input-group-addon,+select.input-group-sm > .input-group-btn > .btn {+ height: 30px;+ line-height: 30px;+}+textarea.input-group-sm > .form-control,+textarea.input-group-sm > .input-group-addon,+textarea.input-group-sm > .input-group-btn > .btn,+select[multiple].input-group-sm > .form-control,+select[multiple].input-group-sm > .input-group-addon,+select[multiple].input-group-sm > .input-group-btn > .btn {+ height: auto;+}+.input-group-addon,+.input-group-btn,+.input-group .form-control {+ display: table-cell;+}+.input-group-addon:not(:first-child):not(:last-child),+.input-group-btn:not(:first-child):not(:last-child),+.input-group .form-control:not(:first-child):not(:last-child) {+ border-radius: 0;+}+.input-group-addon,+.input-group-btn {+ width: 1%;+ white-space: nowrap;+ vertical-align: middle;+}+.input-group-addon {+ padding: 6px 12px;+ font-size: 14px;+ font-weight: normal;+ line-height: 1;+ color: #555;+ text-align: center;+ background-color: #eee;+ border: 1px solid #ccc;+ border-radius: 4px;+}+.input-group-addon.input-sm {+ padding: 5px 10px;+ font-size: 12px;+ border-radius: 3px;+}+.input-group-addon.input-lg {+ padding: 10px 16px;+ font-size: 18px;+ border-radius: 6px;+}+.input-group-addon input[type="radio"],+.input-group-addon input[type="checkbox"] {+ margin-top: 0;+}+.input-group .form-control:first-child,+.input-group-addon:first-child,+.input-group-btn:first-child > .btn,+.input-group-btn:first-child > .btn-group > .btn,+.input-group-btn:first-child > .dropdown-toggle,+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {+ border-top-right-radius: 0;+ border-bottom-right-radius: 0;+}+.input-group-addon:first-child {+ border-right: 0;+}+.input-group .form-control:last-child,+.input-group-addon:last-child,+.input-group-btn:last-child > .btn,+.input-group-btn:last-child > .btn-group > .btn,+.input-group-btn:last-child > .dropdown-toggle,+.input-group-btn:first-child > .btn:not(:first-child),+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {+ border-top-left-radius: 0;+ border-bottom-left-radius: 0;+}+.input-group-addon:last-child {+ border-left: 0;+}+.input-group-btn {+ position: relative;+ font-size: 0;+ white-space: nowrap;+}+.input-group-btn > .btn {+ position: relative;+}+.input-group-btn > .btn + .btn {+ margin-left: -1px;+}+.input-group-btn > .btn:hover,+.input-group-btn > .btn:focus,+.input-group-btn > .btn:active {+ z-index: 2;+}+.input-group-btn:first-child > .btn,+.input-group-btn:first-child > .btn-group {+ margin-right: -1px;+}+.input-group-btn:last-child > .btn,+.input-group-btn:last-child > .btn-group {+ margin-left: -1px;+}+.nav {+ padding-left: 0;+ margin-bottom: 0;+ list-style: none;+}+.nav > li {+ position: relative;+ display: block;+}+.nav > li > a {+ position: relative;+ display: block;+ padding: 10px 15px;+}+.nav > li > a:hover,+.nav > li > a:focus {+ text-decoration: none;+ background-color: #eee;+}+.nav > li.disabled > a {+ color: #777;+}+.nav > li.disabled > a:hover,+.nav > li.disabled > a:focus {+ color: #777;+ text-decoration: none;+ cursor: not-allowed;+ background-color: transparent;+}+.nav .open > a,+.nav .open > a:hover,+.nav .open > a:focus {+ background-color: #eee;+ border-color: #428bca;+}+.nav .nav-divider {+ height: 1px;+ margin: 9px 0;+ overflow: hidden;+ background-color: #e5e5e5;+}+.nav > li > a > img {+ max-width: none;+}+.nav-tabs {+ border-bottom: 1px solid #ddd;+}+.nav-tabs > li {+ float: left;+ margin-bottom: -1px;+}+.nav-tabs > li > a {+ margin-right: 2px;+ line-height: 1.42857143;+ border: 1px solid transparent;+ border-radius: 4px 4px 0 0;+}+.nav-tabs > li > a:hover {+ border-color: #eee #eee #ddd;+}+.nav-tabs > li.active > a,+.nav-tabs > li.active > a:hover,+.nav-tabs > li.active > a:focus {+ color: #555;+ cursor: default;+ background-color: #fff;+ border: 1px solid #ddd;+ border-bottom-color: transparent;+}+.nav-tabs.nav-justified {+ width: 100%;+ border-bottom: 0;+}+.nav-tabs.nav-justified > li {+ float: none;+}+.nav-tabs.nav-justified > li > a {+ margin-bottom: 5px;+ text-align: center;+}+.nav-tabs.nav-justified > .dropdown .dropdown-menu {+ top: auto;+ left: auto;+}+@media (min-width: 768px) {+ .nav-tabs.nav-justified > li {+ display: table-cell;+ width: 1%;+ }+ .nav-tabs.nav-justified > li > a {+ margin-bottom: 0;+ }+}+.nav-tabs.nav-justified > li > a {+ margin-right: 0;+ border-radius: 4px;+}+.nav-tabs.nav-justified > .active > a,+.nav-tabs.nav-justified > .active > a:hover,+.nav-tabs.nav-justified > .active > a:focus {+ border: 1px solid #ddd;+}+@media (min-width: 768px) {+ .nav-tabs.nav-justified > li > a {+ border-bottom: 1px solid #ddd;+ border-radius: 4px 4px 0 0;+ }+ .nav-tabs.nav-justified > .active > a,+ .nav-tabs.nav-justified > .active > a:hover,+ .nav-tabs.nav-justified > .active > a:focus {+ border-bottom-color: #fff;+ }+}+.nav-pills > li {+ float: left;+}+.nav-pills > li > a {+ border-radius: 4px;+}+.nav-pills > li + li {+ margin-left: 2px;+}+.nav-pills > li.active > a,+.nav-pills > li.active > a:hover,+.nav-pills > li.active > a:focus {+ color: #fff;+ background-color: #428bca;+}+.nav-stacked > li {+ float: none;+}+.nav-stacked > li + li {+ margin-top: 2px;+ margin-left: 0;+}+.nav-justified {+ width: 100%;+}+.nav-justified > li {+ float: none;+}+.nav-justified > li > a {+ margin-bottom: 5px;+ text-align: center;+}+.nav-justified > .dropdown .dropdown-menu {+ top: auto;+ left: auto;+}+@media (min-width: 768px) {+ .nav-justified > li {+ display: table-cell;+ width: 1%;+ }+ .nav-justified > li > a {+ margin-bottom: 0;+ }+}+.nav-tabs-justified {+ border-bottom: 0;+}+.nav-tabs-justified > li > a {+ margin-right: 0;+ border-radius: 4px;+}+.nav-tabs-justified > .active > a,+.nav-tabs-justified > .active > a:hover,+.nav-tabs-justified > .active > a:focus {+ border: 1px solid #ddd;+}+@media (min-width: 768px) {+ .nav-tabs-justified > li > a {+ border-bottom: 1px solid #ddd;+ border-radius: 4px 4px 0 0;+ }+ .nav-tabs-justified > .active > a,+ .nav-tabs-justified > .active > a:hover,+ .nav-tabs-justified > .active > a:focus {+ border-bottom-color: #fff;+ }+}+.tab-content > .tab-pane {+ display: none;+}+.tab-content > .active {+ display: block;+}+.nav-tabs .dropdown-menu {+ margin-top: -1px;+ border-top-left-radius: 0;+ border-top-right-radius: 0;+}+.navbar {+ position: relative;+ min-height: 50px;+ margin-bottom: 20px;+ border: 1px solid transparent;+}+@media (min-width: 768px) {+ .navbar {+ border-radius: 4px;+ }+}+@media (min-width: 768px) {+ .navbar-header {+ float: left;+ }+}+.navbar-collapse {+ padding-right: 15px;+ padding-left: 15px;+ overflow-x: visible;+ -webkit-overflow-scrolling: touch;+ border-top: 1px solid transparent;+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);+}+.navbar-collapse.in {+ overflow-y: auto;+}+@media (min-width: 768px) {+ .navbar-collapse {+ width: auto;+ border-top: 0;+ -webkit-box-shadow: none;+ box-shadow: none;+ }+ .navbar-collapse.collapse {+ display: block !important;+ height: auto !important;+ padding-bottom: 0;+ overflow: visible !important;+ }+ .navbar-collapse.in {+ overflow-y: visible;+ }+ .navbar-fixed-top .navbar-collapse,+ .navbar-static-top .navbar-collapse,+ .navbar-fixed-bottom .navbar-collapse {+ padding-right: 0;+ padding-left: 0;+ }+}+.navbar-fixed-top .navbar-collapse,+.navbar-fixed-bottom .navbar-collapse {+ max-height: 340px;+}+@media (max-width: 480px) and (orientation: landscape) {+ .navbar-fixed-top .navbar-collapse,+ .navbar-fixed-bottom .navbar-collapse {+ max-height: 200px;+ }+}+.container > .navbar-header,+.container-fluid > .navbar-header,+.container > .navbar-collapse,+.container-fluid > .navbar-collapse {+ margin-right: -15px;+ margin-left: -15px;+}+@media (min-width: 768px) {+ .container > .navbar-header,+ .container-fluid > .navbar-header,+ .container > .navbar-collapse,+ .container-fluid > .navbar-collapse {+ margin-right: 0;+ margin-left: 0;+ }+}+.navbar-static-top {+ z-index: 1000;+ border-width: 0 0 1px;+}+@media (min-width: 768px) {+ .navbar-static-top {+ border-radius: 0;+ }+}+.navbar-fixed-top,+.navbar-fixed-bottom {+ position: fixed;+ right: 0;+ left: 0;+ z-index: 1030;+ -webkit-transform: translate3d(0, 0, 0);+ -o-transform: translate3d(0, 0, 0);+ transform: translate3d(0, 0, 0);+}+@media (min-width: 768px) {+ .navbar-fixed-top,+ .navbar-fixed-bottom {+ border-radius: 0;+ }+}+.navbar-fixed-top {+ top: 0;+ border-width: 0 0 1px;+}+.navbar-fixed-bottom {+ bottom: 0;+ margin-bottom: 0;+ border-width: 1px 0 0;+}+.navbar-brand {+ float: left;+ height: 50px;+ padding: 15px 15px;+ font-size: 18px;+ line-height: 20px;+}+.navbar-brand:hover,+.navbar-brand:focus {+ text-decoration: none;+}+@media (min-width: 768px) {+ .navbar > .container .navbar-brand,+ .navbar > .container-fluid .navbar-brand {+ margin-left: -15px;+ }+}+.navbar-toggle {+ position: relative;+ float: right;+ padding: 9px 10px;+ margin-top: 8px;+ margin-right: 15px;+ margin-bottom: 8px;+ background-color: transparent;+ background-image: none;+ border: 1px solid transparent;+ border-radius: 4px;+}+.navbar-toggle:focus {+ outline: 0;+}+.navbar-toggle .icon-bar {+ display: block;+ width: 22px;+ height: 2px;+ border-radius: 1px;+}+.navbar-toggle .icon-bar + .icon-bar {+ margin-top: 4px;+}+@media (min-width: 768px) {+ .navbar-toggle {+ display: none;+ }+}+.navbar-nav {+ margin: 7.5px -15px;+}+.navbar-nav > li > a {+ padding-top: 10px;+ padding-bottom: 10px;+ line-height: 20px;+}+@media (max-width: 767px) {+ .navbar-nav .open .dropdown-menu {+ position: static;+ float: none;+ width: auto;+ margin-top: 0;+ background-color: transparent;+ border: 0;+ -webkit-box-shadow: none;+ box-shadow: none;+ }+ .navbar-nav .open .dropdown-menu > li > a,+ .navbar-nav .open .dropdown-menu .dropdown-header {+ padding: 5px 15px 5px 25px;+ }+ .navbar-nav .open .dropdown-menu > li > a {+ line-height: 20px;+ }+ .navbar-nav .open .dropdown-menu > li > a:hover,+ .navbar-nav .open .dropdown-menu > li > a:focus {+ background-image: none;+ }+}+@media (min-width: 768px) {+ .navbar-nav {+ float: left;+ margin: 0;+ }+ .navbar-nav > li {+ float: left;+ }+ .navbar-nav > li > a {+ padding-top: 15px;+ padding-bottom: 15px;+ }+ .navbar-nav.navbar-right:last-child {+ margin-right: -15px;+ }+}+@media (min-width: 768px) {+ .navbar-left {+ float: left !important;+ }+ .navbar-right {+ float: right !important;+ }+}+.navbar-form {+ padding: 10px 15px;+ margin-top: 8px;+ margin-right: -15px;+ margin-bottom: 8px;+ margin-left: -15px;+ border-top: 1px solid transparent;+ border-bottom: 1px solid transparent;+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);+}+@media (min-width: 768px) {+ .navbar-form .form-group {+ display: inline-block;+ margin-bottom: 0;+ vertical-align: middle;+ }+ .navbar-form .form-control {+ display: inline-block;+ width: auto;+ vertical-align: middle;+ }+ .navbar-form .input-group {+ display: inline-table;+ vertical-align: middle;+ }+ .navbar-form .input-group .input-group-addon,+ .navbar-form .input-group .input-group-btn,+ .navbar-form .input-group .form-control {+ width: auto;+ }+ .navbar-form .input-group > .form-control {+ width: 100%;+ }+ .navbar-form .control-label {+ margin-bottom: 0;+ vertical-align: middle;+ }+ .navbar-form .radio,+ .navbar-form .checkbox {+ display: inline-block;+ margin-top: 0;+ margin-bottom: 0;+ vertical-align: middle;+ }+ .navbar-form .radio label,+ .navbar-form .checkbox label {+ padding-left: 0;+ }+ .navbar-form .radio input[type="radio"],+ .navbar-form .checkbox input[type="checkbox"] {+ position: relative;+ margin-left: 0;+ }+ .navbar-form .has-feedback .form-control-feedback {+ top: 0;+ }+}+@media (max-width: 767px) {+ .navbar-form .form-group {+ margin-bottom: 5px;+ }+}+@media (min-width: 768px) {+ .navbar-form {+ width: auto;+ padding-top: 0;+ padding-bottom: 0;+ margin-right: 0;+ margin-left: 0;+ border: 0;+ -webkit-box-shadow: none;+ box-shadow: none;+ }+ .navbar-form.navbar-right:last-child {+ margin-right: -15px;+ }+}+.navbar-nav > li > .dropdown-menu {+ margin-top: 0;+ border-top-left-radius: 0;+ border-top-right-radius: 0;+}+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {+ border-bottom-right-radius: 0;+ border-bottom-left-radius: 0;+}+.navbar-btn {+ margin-top: 8px;+ margin-bottom: 8px;+}+.navbar-btn.btn-sm {+ margin-top: 10px;+ margin-bottom: 10px;+}+.navbar-btn.btn-xs {+ margin-top: 14px;+ margin-bottom: 14px;+}+.navbar-text {+ margin-top: 15px;+ margin-bottom: 15px;+}+@media (min-width: 768px) {+ .navbar-text {+ float: left;+ margin-right: 15px;+ margin-left: 15px;+ }+ .navbar-text.navbar-right:last-child {+ margin-right: 0;+ }+}+.navbar-default {+ background-color: #f8f8f8;+ border-color: #e7e7e7;+}+.navbar-default .navbar-brand {+ color: #777;+}+.navbar-default .navbar-brand:hover,+.navbar-default .navbar-brand:focus {+ color: #5e5e5e;+ background-color: transparent;+}+.navbar-default .navbar-text {+ color: #777;+}+.navbar-default .navbar-nav > li > a {+ color: #777;+}+.navbar-default .navbar-nav > li > a:hover,+.navbar-default .navbar-nav > li > a:focus {+ color: #333;+ background-color: transparent;+}+.navbar-default .navbar-nav > .active > a,+.navbar-default .navbar-nav > .active > a:hover,+.navbar-default .navbar-nav > .active > a:focus {+ color: #555;+ background-color: #e7e7e7;+}+.navbar-default .navbar-nav > .disabled > a,+.navbar-default .navbar-nav > .disabled > a:hover,+.navbar-default .navbar-nav > .disabled > a:focus {+ color: #ccc;+ background-color: transparent;+}+.navbar-default .navbar-toggle {+ border-color: #ddd;+}+.navbar-default .navbar-toggle:hover,+.navbar-default .navbar-toggle:focus {+ background-color: #ddd;+}+.navbar-default .navbar-toggle .icon-bar {+ background-color: #888;+}+.navbar-default .navbar-collapse,+.navbar-default .navbar-form {+ border-color: #e7e7e7;+}+.navbar-default .navbar-nav > .open > a,+.navbar-default .navbar-nav > .open > a:hover,+.navbar-default .navbar-nav > .open > a:focus {+ color: #555;+ background-color: #e7e7e7;+}+@media (max-width: 767px) {+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {+ color: #777;+ }+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {+ color: #333;+ background-color: transparent;+ }+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {+ color: #555;+ background-color: #e7e7e7;+ }+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {+ color: #ccc;+ background-color: transparent;+ }+}+.navbar-default .navbar-link {+ color: #777;+}+.navbar-default .navbar-link:hover {+ color: #333;+}+.navbar-default .btn-link {+ color: #777;+}+.navbar-default .btn-link:hover,+.navbar-default .btn-link:focus {+ color: #333;+}+.navbar-default .btn-link[disabled]:hover,+fieldset[disabled] .navbar-default .btn-link:hover,+.navbar-default .btn-link[disabled]:focus,+fieldset[disabled] .navbar-default .btn-link:focus {+ color: #ccc;+}+.navbar-inverse {+ background-color: #222;+ border-color: #080808;+}+.navbar-inverse .navbar-brand {+ color: #777;+}+.navbar-inverse .navbar-brand:hover,+.navbar-inverse .navbar-brand:focus {+ color: #fff;+ background-color: transparent;+}+.navbar-inverse .navbar-text {+ color: #777;+}+.navbar-inverse .navbar-nav > li > a {+ color: #777;+}+.navbar-inverse .navbar-nav > li > a:hover,+.navbar-inverse .navbar-nav > li > a:focus {+ color: #fff;+ background-color: transparent;+}+.navbar-inverse .navbar-nav > .active > a,+.navbar-inverse .navbar-nav > .active > a:hover,+.navbar-inverse .navbar-nav > .active > a:focus {+ color: #fff;+ background-color: #080808;+}+.navbar-inverse .navbar-nav > .disabled > a,+.navbar-inverse .navbar-nav > .disabled > a:hover,+.navbar-inverse .navbar-nav > .disabled > a:focus {+ color: #444;+ background-color: transparent;+}+.navbar-inverse .navbar-toggle {+ border-color: #333;+}+.navbar-inverse .navbar-toggle:hover,+.navbar-inverse .navbar-toggle:focus {+ background-color: #333;+}+.navbar-inverse .navbar-toggle .icon-bar {+ background-color: #fff;+}+.navbar-inverse .navbar-collapse,+.navbar-inverse .navbar-form {+ border-color: #101010;+}+.navbar-inverse .navbar-nav > .open > a,+.navbar-inverse .navbar-nav > .open > a:hover,+.navbar-inverse .navbar-nav > .open > a:focus {+ color: #fff;+ background-color: #080808;+}+@media (max-width: 767px) {+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {+ border-color: #080808;+ }+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {+ background-color: #080808;+ }+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {+ color: #777;+ }+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {+ color: #fff;+ background-color: transparent;+ }+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {+ color: #fff;+ background-color: #080808;+ }+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {+ color: #444;+ background-color: transparent;+ }+}+.navbar-inverse .navbar-link {+ color: #777;+}+.navbar-inverse .navbar-link:hover {+ color: #fff;+}+.navbar-inverse .btn-link {+ color: #777;+}+.navbar-inverse .btn-link:hover,+.navbar-inverse .btn-link:focus {+ color: #fff;+}+.navbar-inverse .btn-link[disabled]:hover,+fieldset[disabled] .navbar-inverse .btn-link:hover,+.navbar-inverse .btn-link[disabled]:focus,+fieldset[disabled] .navbar-inverse .btn-link:focus {+ color: #444;+}+.breadcrumb {+ padding: 8px 15px;+ margin-bottom: 20px;+ list-style: none;+ background-color: #f5f5f5;+ border-radius: 4px;+}+.breadcrumb > li {+ display: inline-block;+}+.breadcrumb > li + li:before {+ padding: 0 5px;+ color: #ccc;+ content: "/\00a0";+}+.breadcrumb > .active {+ color: #777;+}+.pagination {+ display: inline-block;+ padding-left: 0;+ margin: 20px 0;+ border-radius: 4px;+}+.pagination > li {+ display: inline;+}+.pagination > li > a,+.pagination > li > span {+ position: relative;+ float: left;+ padding: 6px 12px;+ margin-left: -1px;+ line-height: 1.42857143;+ color: #428bca;+ text-decoration: none;+ background-color: #fff;+ border: 1px solid #ddd;+}+.pagination > li:first-child > a,+.pagination > li:first-child > span {+ margin-left: 0;+ border-top-left-radius: 4px;+ border-bottom-left-radius: 4px;+}+.pagination > li:last-child > a,+.pagination > li:last-child > span {+ border-top-right-radius: 4px;+ border-bottom-right-radius: 4px;+}+.pagination > li > a:hover,+.pagination > li > span:hover,+.pagination > li > a:focus,+.pagination > li > span:focus {+ color: #2a6496;+ background-color: #eee;+ border-color: #ddd;+}+.pagination > .active > a,+.pagination > .active > span,+.pagination > .active > a:hover,+.pagination > .active > span:hover,+.pagination > .active > a:focus,+.pagination > .active > span:focus {+ z-index: 2;+ color: #fff;+ cursor: default;+ background-color: #428bca;+ border-color: #428bca;+}+.pagination > .disabled > span,+.pagination > .disabled > span:hover,+.pagination > .disabled > span:focus,+.pagination > .disabled > a,+.pagination > .disabled > a:hover,+.pagination > .disabled > a:focus {+ color: #777;+ cursor: not-allowed;+ background-color: #fff;+ border-color: #ddd;+}+.pagination-lg > li > a,+.pagination-lg > li > span {+ padding: 10px 16px;+ font-size: 18px;+}+.pagination-lg > li:first-child > a,+.pagination-lg > li:first-child > span {+ border-top-left-radius: 6px;+ border-bottom-left-radius: 6px;+}+.pagination-lg > li:last-child > a,+.pagination-lg > li:last-child > span {+ border-top-right-radius: 6px;+ border-bottom-right-radius: 6px;+}+.pagination-sm > li > a,+.pagination-sm > li > span {+ padding: 5px 10px;+ font-size: 12px;+}+.pagination-sm > li:first-child > a,+.pagination-sm > li:first-child > span {+ border-top-left-radius: 3px;+ border-bottom-left-radius: 3px;+}+.pagination-sm > li:last-child > a,+.pagination-sm > li:last-child > span {+ border-top-right-radius: 3px;+ border-bottom-right-radius: 3px;+}+.pager {+ padding-left: 0;+ margin: 20px 0;+ text-align: center;+ list-style: none;+}+.pager li {+ display: inline;+}+.pager li > a,+.pager li > span {+ display: inline-block;+ padding: 5px 14px;+ background-color: #fff;+ border: 1px solid #ddd;+ border-radius: 15px;+}+.pager li > a:hover,+.pager li > a:focus {+ text-decoration: none;+ background-color: #eee;+}+.pager .next > a,+.pager .next > span {+ float: right;+}+.pager .previous > a,+.pager .previous > span {+ float: left;+}+.pager .disabled > a,+.pager .disabled > a:hover,+.pager .disabled > a:focus,+.pager .disabled > span {+ color: #777;+ cursor: not-allowed;+ background-color: #fff;+}+.label {+ display: inline;+ padding: .2em .6em .3em;+ font-size: 75%;+ font-weight: bold;+ line-height: 1;+ color: #fff;+ text-align: center;+ white-space: nowrap;+ vertical-align: baseline;+ border-radius: .25em;+}+a.label:hover,+a.label:focus {+ color: #fff;+ text-decoration: none;+ cursor: pointer;+}+.label:empty {+ display: none;+}+.btn .label {+ position: relative;+ top: -1px;+}+.label-default {+ background-color: #777;+}+.label-default[href]:hover,+.label-default[href]:focus {+ background-color: #5e5e5e;+}+.label-primary {+ background-color: #428bca;+}+.label-primary[href]:hover,+.label-primary[href]:focus {+ background-color: #3071a9;+}+.label-success {+ background-color: #5cb85c;+}+.label-success[href]:hover,+.label-success[href]:focus {+ background-color: #449d44;+}+.label-info {+ background-color: #5bc0de;+}+.label-info[href]:hover,+.label-info[href]:focus {+ background-color: #31b0d5;+}+.label-warning {+ background-color: #f0ad4e;+}+.label-warning[href]:hover,+.label-warning[href]:focus {+ background-color: #ec971f;+}+.label-danger {+ background-color: #d9534f;+}+.label-danger[href]:hover,+.label-danger[href]:focus {+ background-color: #c9302c;+}+.badge {+ display: inline-block;+ min-width: 10px;+ padding: 3px 7px;+ font-size: 12px;+ font-weight: bold;+ line-height: 1;+ color: #fff;+ text-align: center;+ white-space: nowrap;+ vertical-align: baseline;+ background-color: #777;+ border-radius: 10px;+}+.badge:empty {+ display: none;+}+.btn .badge {+ position: relative;+ top: -1px;+}+.btn-xs .badge {+ top: 0;+ padding: 1px 5px;+}+a.badge:hover,+a.badge:focus {+ color: #fff;+ text-decoration: none;+ cursor: pointer;+}+a.list-group-item.active > .badge,+.nav-pills > .active > a > .badge {+ color: #428bca;+ background-color: #fff;+}+.nav-pills > li > a > .badge {+ margin-left: 3px;+}+.jumbotron {+ padding: 30px;+ margin-bottom: 30px;+ color: inherit;+ background-color: #eee;+}+.jumbotron h1,+.jumbotron .h1 {+ color: inherit;+}+.jumbotron p {+ margin-bottom: 15px;+ font-size: 21px;+ font-weight: 200;+}+.jumbotron > hr {+ border-top-color: #d5d5d5;+}+.container .jumbotron {+ border-radius: 6px;+}+.jumbotron .container {+ max-width: 100%;+}+@media screen and (min-width: 768px) {+ .jumbotron {+ padding-top: 48px;+ padding-bottom: 48px;+ }+ .container .jumbotron {+ padding-right: 60px;+ padding-left: 60px;+ }+ .jumbotron h1,+ .jumbotron .h1 {+ font-size: 63px;+ }+}+.thumbnail {+ display: block;+ padding: 4px;+ margin-bottom: 20px;+ line-height: 1.42857143;+ background-color: #fff;+ border: 1px solid #ddd;+ border-radius: 4px;+ -webkit-transition: all .2s ease-in-out;+ -o-transition: all .2s ease-in-out;+ transition: all .2s ease-in-out;+}+.thumbnail > img,+.thumbnail a > img {+ margin-right: auto;+ margin-left: auto;+}+a.thumbnail:hover,+a.thumbnail:focus,+a.thumbnail.active {+ border-color: #428bca;+}+.thumbnail .caption {+ padding: 9px;+ color: #333;+}+.alert {+ padding: 15px;+ margin-bottom: 20px;+ border: 1px solid transparent;+ border-radius: 4px;+}+.alert h4 {+ margin-top: 0;+ color: inherit;+}+.alert .alert-link {+ font-weight: bold;+}+.alert > p,+.alert > ul {+ margin-bottom: 0;+}+.alert > p + p {+ margin-top: 5px;+}+.alert-dismissable,+.alert-dismissible {+ padding-right: 35px;+}+.alert-dismissable .close,+.alert-dismissible .close {+ position: relative;+ top: -2px;+ right: -21px;+ color: inherit;+}+.alert-success {+ color: #3c763d;+ background-color: #dff0d8;+ border-color: #d6e9c6;+}+.alert-success hr {+ border-top-color: #c9e2b3;+}+.alert-success .alert-link {+ color: #2b542c;+}+.alert-info {+ color: #31708f;+ background-color: #d9edf7;+ border-color: #bce8f1;+}+.alert-info hr {+ border-top-color: #a6e1ec;+}+.alert-info .alert-link {+ color: #245269;+}+.alert-warning {+ color: #8a6d3b;+ background-color: #fcf8e3;+ border-color: #faebcc;+}+.alert-warning hr {+ border-top-color: #f7e1b5;+}+.alert-warning .alert-link {+ color: #66512c;+}+.alert-danger {+ color: #a94442;+ background-color: #f2dede;+ border-color: #ebccd1;+}+.alert-danger hr {+ border-top-color: #e4b9c0;+}+.alert-danger .alert-link {+ color: #843534;+}+@-webkit-keyframes progress-bar-stripes {+ from {+ background-position: 40px 0;+ }+ to {+ background-position: 0 0;+ }+}+@-o-keyframes progress-bar-stripes {+ from {+ background-position: 40px 0;+ }+ to {+ background-position: 0 0;+ }+}+@keyframes progress-bar-stripes {+ from {+ background-position: 40px 0;+ }+ to {+ background-position: 0 0;+ }+}+.progress {+ height: 20px;+ margin-bottom: 20px;+ overflow: hidden;+ background-color: #f5f5f5;+ border-radius: 4px;+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);+}+.progress-bar {+ float: left;+ width: 0;+ height: 100%;+ font-size: 12px;+ line-height: 20px;+ color: #fff;+ text-align: center;+ background-color: #428bca;+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);+ -webkit-transition: width .6s ease;+ -o-transition: width .6s ease;+ transition: width .6s ease;+}+.progress-striped .progress-bar,+.progress-bar-striped {+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ -webkit-background-size: 40px 40px;+ background-size: 40px 40px;+}+.progress.active .progress-bar,+.progress-bar.active {+ -webkit-animation: progress-bar-stripes 2s linear infinite;+ -o-animation: progress-bar-stripes 2s linear infinite;+ animation: progress-bar-stripes 2s linear infinite;+}+.progress-bar[aria-valuenow="1"],+.progress-bar[aria-valuenow="2"] {+ min-width: 30px;+}+.progress-bar[aria-valuenow="0"] {+ min-width: 30px;+ color: #777;+ background-color: transparent;+ background-image: none;+ -webkit-box-shadow: none;+ box-shadow: none;+}+.progress-bar-success {+ background-color: #5cb85c;+}+.progress-striped .progress-bar-success {+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+}+.progress-bar-info {+ background-color: #5bc0de;+}+.progress-striped .progress-bar-info {+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+}+.progress-bar-warning {+ background-color: #f0ad4e;+}+.progress-striped .progress-bar-warning {+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+}+.progress-bar-danger {+ background-color: #d9534f;+}+.progress-striped .progress-bar-danger {+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);+}+.media,+.media-body {+ overflow: hidden;+ zoom: 1;+}+.media,+.media .media {+ margin-top: 15px;+}+.media:first-child {+ margin-top: 0;+}+.media-object {+ display: block;+}+.media-heading {+ margin: 0 0 5px;+}+.media > .pull-left {+ margin-right: 10px;+}+.media > .pull-right {+ margin-left: 10px;+}+.media-list {+ padding-left: 0;+ list-style: none;+}+.list-group {+ padding-left: 0;+ margin-bottom: 20px;+}+.list-group-item {+ position: relative;+ display: block;+ padding: 10px 15px;+ margin-bottom: -1px;+ background-color: #fff;+ border: 1px solid #ddd;+}+.list-group-item:first-child {+ border-top-left-radius: 4px;+ border-top-right-radius: 4px;+}+.list-group-item:last-child {+ margin-bottom: 0;+ border-bottom-right-radius: 4px;+ border-bottom-left-radius: 4px;+}+.list-group-item > .badge {+ float: right;+}+.list-group-item > .badge + .badge {+ margin-right: 5px;+}+a.list-group-item {+ color: #555;+}+a.list-group-item .list-group-item-heading {+ color: #333;+}+a.list-group-item:hover,+a.list-group-item:focus {+ color: #555;+ text-decoration: none;+ background-color: #f5f5f5;+}+.list-group-item.disabled,+.list-group-item.disabled:hover,+.list-group-item.disabled:focus {+ color: #777;+ background-color: #eee;+}+.list-group-item.disabled .list-group-item-heading,+.list-group-item.disabled:hover .list-group-item-heading,+.list-group-item.disabled:focus .list-group-item-heading {+ color: inherit;+}+.list-group-item.disabled .list-group-item-text,+.list-group-item.disabled:hover .list-group-item-text,+.list-group-item.disabled:focus .list-group-item-text {+ color: #777;+}+.list-group-item.active,+.list-group-item.active:hover,+.list-group-item.active:focus {+ z-index: 2;+ color: #fff;+ background-color: #428bca;+ border-color: #428bca;+}+.list-group-item.active .list-group-item-heading,+.list-group-item.active:hover .list-group-item-heading,+.list-group-item.active:focus .list-group-item-heading,+.list-group-item.active .list-group-item-heading > small,+.list-group-item.active:hover .list-group-item-heading > small,+.list-group-item.active:focus .list-group-item-heading > small,+.list-group-item.active .list-group-item-heading > .small,+.list-group-item.active:hover .list-group-item-heading > .small,+.list-group-item.active:focus .list-group-item-heading > .small {+ color: inherit;+}+.list-group-item.active .list-group-item-text,+.list-group-item.active:hover .list-group-item-text,+.list-group-item.active:focus .list-group-item-text {+ color: #e1edf7;+}+.list-group-item-success {+ color: #3c763d;+ background-color: #dff0d8;+}+a.list-group-item-success {+ color: #3c763d;+}+a.list-group-item-success .list-group-item-heading {+ color: inherit;+}+a.list-group-item-success:hover,+a.list-group-item-success:focus {+ color: #3c763d;+ background-color: #d0e9c6;+}+a.list-group-item-success.active,+a.list-group-item-success.active:hover,+a.list-group-item-success.active:focus {+ color: #fff;+ background-color: #3c763d;+ border-color: #3c763d;+}+.list-group-item-info {+ color: #31708f;+ background-color: #d9edf7;+}+a.list-group-item-info {+ color: #31708f;+}+a.list-group-item-info .list-group-item-heading {+ color: inherit;+}+a.list-group-item-info:hover,+a.list-group-item-info:focus {+ color: #31708f;+ background-color: #c4e3f3;+}+a.list-group-item-info.active,+a.list-group-item-info.active:hover,+a.list-group-item-info.active:focus {+ color: #fff;+ background-color: #31708f;+ border-color: #31708f;+}+.list-group-item-warning {+ color: #8a6d3b;+ background-color: #fcf8e3;+}+a.list-group-item-warning {+ color: #8a6d3b;+}+a.list-group-item-warning .list-group-item-heading {+ color: inherit;+}+a.list-group-item-warning:hover,+a.list-group-item-warning:focus {+ color: #8a6d3b;+ background-color: #faf2cc;+}+a.list-group-item-warning.active,+a.list-group-item-warning.active:hover,+a.list-group-item-warning.active:focus {+ color: #fff;+ background-color: #8a6d3b;+ border-color: #8a6d3b;+}+.list-group-item-danger {+ color: #a94442;+ background-color: #f2dede;+}+a.list-group-item-danger {+ color: #a94442;+}+a.list-group-item-danger .list-group-item-heading {+ color: inherit;+}+a.list-group-item-danger:hover,+a.list-group-item-danger:focus {+ color: #a94442;+ background-color: #ebcccc;+}+a.list-group-item-danger.active,+a.list-group-item-danger.active:hover,+a.list-group-item-danger.active:focus {+ color: #fff;+ background-color: #a94442;+ border-color: #a94442;+}+.list-group-item-heading {+ margin-top: 0;+ margin-bottom: 5px;+}+.list-group-item-text {+ margin-bottom: 0;+ line-height: 1.3;+}+.panel {+ margin-bottom: 20px;+ background-color: #fff;+ border: 1px solid transparent;+ border-radius: 4px;+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05);+}+.panel-body {+ padding: 15px;+}+.panel-heading {+ padding: 10px 15px;+ border-bottom: 1px solid transparent;+ border-top-left-radius: 3px;+ border-top-right-radius: 3px;+}+.panel-heading > .dropdown .dropdown-toggle {+ color: inherit;+}+.panel-title {+ margin-top: 0;+ margin-bottom: 0;+ font-size: 16px;+ color: inherit;+}+.panel-title > a {+ color: inherit;+}+.panel-footer {+ padding: 10px 15px;+ background-color: #f5f5f5;+ border-top: 1px solid #ddd;+ border-bottom-right-radius: 3px;+ border-bottom-left-radius: 3px;+}+.panel > .list-group {+ margin-bottom: 0;+}+.panel > .list-group .list-group-item {+ border-width: 1px 0;+ border-radius: 0;+}+.panel > .list-group:first-child .list-group-item:first-child {+ border-top: 0;+ border-top-left-radius: 3px;+ border-top-right-radius: 3px;+}+.panel > .list-group:last-child .list-group-item:last-child {+ border-bottom: 0;+ border-bottom-right-radius: 3px;+ border-bottom-left-radius: 3px;+}+.panel-heading + .list-group .list-group-item:first-child {+ border-top-width: 0;+}+.list-group + .panel-footer {+ border-top-width: 0;+}+.panel > .table,+.panel > .table-responsive > .table,+.panel > .panel-collapse > .table {+ margin-bottom: 0;+}+.panel > .table:first-child,+.panel > .table-responsive:first-child > .table:first-child {+ border-top-left-radius: 3px;+ border-top-right-radius: 3px;+}+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {+ border-top-left-radius: 3px;+}+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {+ border-top-right-radius: 3px;+}+.panel > .table:last-child,+.panel > .table-responsive:last-child > .table:last-child {+ border-bottom-right-radius: 3px;+ border-bottom-left-radius: 3px;+}+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {+ border-bottom-left-radius: 3px;+}+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {+ border-bottom-right-radius: 3px;+}+.panel > .panel-body + .table,+.panel > .panel-body + .table-responsive {+ border-top: 1px solid #ddd;+}+.panel > .table > tbody:first-child > tr:first-child th,+.panel > .table > tbody:first-child > tr:first-child td {+ border-top: 0;+}+.panel > .table-bordered,+.panel > .table-responsive > .table-bordered {+ border: 0;+}+.panel > .table-bordered > thead > tr > th:first-child,+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,+.panel > .table-bordered > tbody > tr > th:first-child,+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,+.panel > .table-bordered > tfoot > tr > th:first-child,+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,+.panel > .table-bordered > thead > tr > td:first-child,+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,+.panel > .table-bordered > tbody > tr > td:first-child,+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,+.panel > .table-bordered > tfoot > tr > td:first-child,+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {+ border-left: 0;+}+.panel > .table-bordered > thead > tr > th:last-child,+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,+.panel > .table-bordered > tbody > tr > th:last-child,+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,+.panel > .table-bordered > tfoot > tr > th:last-child,+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,+.panel > .table-bordered > thead > tr > td:last-child,+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,+.panel > .table-bordered > tbody > tr > td:last-child,+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,+.panel > .table-bordered > tfoot > tr > td:last-child,+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {+ border-right: 0;+}+.panel > .table-bordered > thead > tr:first-child > td,+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,+.panel > .table-bordered > tbody > tr:first-child > td,+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,+.panel > .table-bordered > thead > tr:first-child > th,+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,+.panel > .table-bordered > tbody > tr:first-child > th,+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {+ border-bottom: 0;+}+.panel > .table-bordered > tbody > tr:last-child > td,+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,+.panel > .table-bordered > tfoot > tr:last-child > td,+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,+.panel > .table-bordered > tbody > tr:last-child > th,+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,+.panel > .table-bordered > tfoot > tr:last-child > th,+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {+ border-bottom: 0;+}+.panel > .table-responsive {+ margin-bottom: 0;+ border: 0;+}+.panel-group {+ margin-bottom: 20px;+}+.panel-group .panel {+ margin-bottom: 0;+ border-radius: 4px;+}+.panel-group .panel + .panel {+ margin-top: 5px;+}+.panel-group .panel-heading {+ border-bottom: 0;+}+.panel-group .panel-heading + .panel-collapse > .panel-body {+ border-top: 1px solid #ddd;+}+.panel-group .panel-footer {+ border-top: 0;+}+.panel-group .panel-footer + .panel-collapse .panel-body {+ border-bottom: 1px solid #ddd;+}+.panel-default {+ border-color: #ddd;+}+.panel-default > .panel-heading {+ color: #333;+ background-color: #f5f5f5;+ border-color: #ddd;+}+.panel-default > .panel-heading + .panel-collapse > .panel-body {+ border-top-color: #ddd;+}+.panel-default > .panel-heading .badge {+ color: #f5f5f5;+ background-color: #333;+}+.panel-default > .panel-footer + .panel-collapse > .panel-body {+ border-bottom-color: #ddd;+}+.panel-primary {+ border-color: #428bca;+}+.panel-primary > .panel-heading {+ color: #fff;+ background-color: #428bca;+ border-color: #428bca;+}+.panel-primary > .panel-heading + .panel-collapse > .panel-body {+ border-top-color: #428bca;+}+.panel-primary > .panel-heading .badge {+ color: #428bca;+ background-color: #fff;+}+.panel-primary > .panel-footer + .panel-collapse > .panel-body {+ border-bottom-color: #428bca;+}+.panel-success {+ border-color: #d6e9c6;+}+.panel-success > .panel-heading {+ color: #3c763d;+ background-color: #dff0d8;+ border-color: #d6e9c6;+}+.panel-success > .panel-heading + .panel-collapse > .panel-body {+ border-top-color: #d6e9c6;+}+.panel-success > .panel-heading .badge {+ color: #dff0d8;+ background-color: #3c763d;+}+.panel-success > .panel-footer + .panel-collapse > .panel-body {+ border-bottom-color: #d6e9c6;+}+.panel-info {+ border-color: #bce8f1;+}+.panel-info > .panel-heading {+ color: #31708f;+ background-color: #d9edf7;+ border-color: #bce8f1;+}+.panel-info > .panel-heading + .panel-collapse > .panel-body {+ border-top-color: #bce8f1;+}+.panel-info > .panel-heading .badge {+ color: #d9edf7;+ background-color: #31708f;+}+.panel-info > .panel-footer + .panel-collapse > .panel-body {+ border-bottom-color: #bce8f1;+}+.panel-warning {+ border-color: #faebcc;+}+.panel-warning > .panel-heading {+ color: #8a6d3b;+ background-color: #fcf8e3;+ border-color: #faebcc;+}+.panel-warning > .panel-heading + .panel-collapse > .panel-body {+ border-top-color: #faebcc;+}+.panel-warning > .panel-heading .badge {+ color: #fcf8e3;+ background-color: #8a6d3b;+}+.panel-warning > .panel-footer + .panel-collapse > .panel-body {+ border-bottom-color: #faebcc;+}+.panel-danger {+ border-color: #ebccd1;+}+.panel-danger > .panel-heading {+ color: #a94442;+ background-color: #f2dede;+ border-color: #ebccd1;+}+.panel-danger > .panel-heading + .panel-collapse > .panel-body {+ border-top-color: #ebccd1;+}+.panel-danger > .panel-heading .badge {+ color: #f2dede;+ background-color: #a94442;+}+.panel-danger > .panel-footer + .panel-collapse > .panel-body {+ border-bottom-color: #ebccd1;+}+.embed-responsive {+ position: relative;+ display: block;+ height: 0;+ padding: 0;+ overflow: hidden;+}+.embed-responsive .embed-responsive-item,+.embed-responsive iframe,+.embed-responsive embed,+.embed-responsive object {+ position: absolute;+ top: 0;+ bottom: 0;+ left: 0;+ width: 100%;+ height: 100%;+ border: 0;+}+.embed-responsive.embed-responsive-16by9 {+ padding-bottom: 56.25%;+}+.embed-responsive.embed-responsive-4by3 {+ padding-bottom: 75%;+}+.well {+ min-height: 20px;+ padding: 19px;+ margin-bottom: 20px;+ background-color: #f5f5f5;+ border: 1px solid #e3e3e3;+ border-radius: 4px;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);+}+.well blockquote {+ border-color: #ddd;+ border-color: rgba(0, 0, 0, .15);+}+.well-lg {+ padding: 24px;+ border-radius: 6px;+}+.well-sm {+ padding: 9px;+ border-radius: 3px;+}+.close {+ float: right;+ font-size: 21px;+ font-weight: bold;+ line-height: 1;+ color: #000;+ text-shadow: 0 1px 0 #fff;+ filter: alpha(opacity=20);+ opacity: .2;+}+.close:hover,+.close:focus {+ color: #000;+ text-decoration: none;+ cursor: pointer;+ filter: alpha(opacity=50);+ opacity: .5;+}+button.close {+ -webkit-appearance: none;+ padding: 0;+ cursor: pointer;+ background: transparent;+ border: 0;+}+.modal-open {+ overflow: hidden;+}+.modal {+ position: fixed;+ top: 0;+ right: 0;+ bottom: 0;+ left: 0;+ z-index: 1050;+ display: none;+ overflow: hidden;+ -webkit-overflow-scrolling: touch;+ outline: 0;+}+.modal.fade .modal-dialog {+ -webkit-transition: -webkit-transform .3s ease-out;+ -o-transition: -o-transform .3s ease-out;+ transition: transform .3s ease-out;+ -webkit-transform: translate3d(0, -25%, 0);+ -o-transform: translate3d(0, -25%, 0);+ transform: translate3d(0, -25%, 0);+}+.modal.in .modal-dialog {+ -webkit-transform: translate3d(0, 0, 0);+ -o-transform: translate3d(0, 0, 0);+ transform: translate3d(0, 0, 0);+}+.modal-open .modal {+ overflow-x: hidden;+ overflow-y: auto;+}+.modal-dialog {+ position: relative;+ width: auto;+ margin: 10px;+}+.modal-content {+ position: relative;+ background-color: #fff;+ -webkit-background-clip: padding-box;+ background-clip: padding-box;+ border: 1px solid #999;+ border: 1px solid rgba(0, 0, 0, .2);+ border-radius: 6px;+ outline: 0;+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);+}+.modal-backdrop {+ position: fixed;+ top: 0;+ right: 0;+ bottom: 0;+ left: 0;+ z-index: 1040;+ background-color: #000;+}+.modal-backdrop.fade {+ filter: alpha(opacity=0);+ opacity: 0;+}+.modal-backdrop.in {+ filter: alpha(opacity=50);+ opacity: .5;+}+.modal-header {+ min-height: 16.42857143px;+ padding: 15px;+ border-bottom: 1px solid #e5e5e5;+}+.modal-header .close {+ margin-top: -2px;+}+.modal-title {+ margin: 0;+ line-height: 1.42857143;+}+.modal-body {+ position: relative;+ padding: 15px;+}+.modal-footer {+ padding: 15px;+ text-align: right;+ border-top: 1px solid #e5e5e5;+}+.modal-footer .btn + .btn {+ margin-bottom: 0;+ margin-left: 5px;+}+.modal-footer .btn-group .btn + .btn {+ margin-left: -1px;+}+.modal-footer .btn-block + .btn-block {+ margin-left: 0;+}+.modal-scrollbar-measure {+ position: absolute;+ top: -9999px;+ width: 50px;+ height: 50px;+ overflow: scroll;+}+@media (min-width: 768px) {+ .modal-dialog {+ width: 600px;+ margin: 30px auto;+ }+ .modal-content {+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5);+ }+ .modal-sm {+ width: 300px;+ }+}+@media (min-width: 992px) {+ .modal-lg {+ width: 900px;+ }+}+.tooltip {+ position: absolute;+ z-index: 1070;+ display: block;+ font-size: 12px;+ line-height: 1.4;+ visibility: visible;+ filter: alpha(opacity=0);+ opacity: 0;+}+.tooltip.in {+ filter: alpha(opacity=90);+ opacity: .9;+}+.tooltip.top {+ padding: 5px 0;+ margin-top: -3px;+}+.tooltip.right {+ padding: 0 5px;+ margin-left: 3px;+}+.tooltip.bottom {+ padding: 5px 0;+ margin-top: 3px;+}+.tooltip.left {+ padding: 0 5px;+ margin-left: -3px;+}+.tooltip-inner {+ max-width: 200px;+ padding: 3px 8px;+ color: #fff;+ text-align: center;+ text-decoration: none;+ background-color: #000;+ border-radius: 4px;+}+.tooltip-arrow {+ position: absolute;+ width: 0;+ height: 0;+ border-color: transparent;+ border-style: solid;+}+.tooltip.top .tooltip-arrow {+ bottom: 0;+ left: 50%;+ margin-left: -5px;+ border-width: 5px 5px 0;+ border-top-color: #000;+}+.tooltip.top-left .tooltip-arrow {+ bottom: 0;+ left: 5px;+ border-width: 5px 5px 0;+ border-top-color: #000;+}+.tooltip.top-right .tooltip-arrow {+ right: 5px;+ bottom: 0;+ border-width: 5px 5px 0;+ border-top-color: #000;+}+.tooltip.right .tooltip-arrow {+ top: 50%;+ left: 0;+ margin-top: -5px;+ border-width: 5px 5px 5px 0;+ border-right-color: #000;+}+.tooltip.left .tooltip-arrow {+ top: 50%;+ right: 0;+ margin-top: -5px;+ border-width: 5px 0 5px 5px;+ border-left-color: #000;+}+.tooltip.bottom .tooltip-arrow {+ top: 0;+ left: 50%;+ margin-left: -5px;+ border-width: 0 5px 5px;+ border-bottom-color: #000;+}+.tooltip.bottom-left .tooltip-arrow {+ top: 0;+ left: 5px;+ border-width: 0 5px 5px;+ border-bottom-color: #000;+}+.tooltip.bottom-right .tooltip-arrow {+ top: 0;+ right: 5px;+ border-width: 0 5px 5px;+ border-bottom-color: #000;+}+.popover {+ position: absolute;+ top: 0;+ left: 0;+ z-index: 1060;+ display: none;+ max-width: 276px;+ padding: 1px;+ text-align: left;+ white-space: normal;+ background-color: #fff;+ -webkit-background-clip: padding-box;+ background-clip: padding-box;+ border: 1px solid #ccc;+ border: 1px solid rgba(0, 0, 0, .2);+ border-radius: 6px;+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);+}+.popover.top {+ margin-top: -10px;+}+.popover.right {+ margin-left: 10px;+}+.popover.bottom {+ margin-top: 10px;+}+.popover.left {+ margin-left: -10px;+}+.popover-title {+ padding: 8px 14px;+ margin: 0;+ font-size: 14px;+ font-weight: normal;+ line-height: 18px;+ background-color: #f7f7f7;+ border-bottom: 1px solid #ebebeb;+ border-radius: 5px 5px 0 0;+}+.popover-content {+ padding: 9px 14px;+}+.popover > .arrow,+.popover > .arrow:after {+ position: absolute;+ display: block;+ width: 0;+ height: 0;+ border-color: transparent;+ border-style: solid;+}+.popover > .arrow {+ border-width: 11px;+}+.popover > .arrow:after {+ content: "";+ border-width: 10px;+}+.popover.top > .arrow {+ bottom: -11px;+ left: 50%;+ margin-left: -11px;+ border-top-color: #999;+ border-top-color: rgba(0, 0, 0, .25);+ border-bottom-width: 0;+}+.popover.top > .arrow:after {+ bottom: 1px;+ margin-left: -10px;+ content: " ";+ border-top-color: #fff;+ border-bottom-width: 0;+}+.popover.right > .arrow {+ top: 50%;+ left: -11px;+ margin-top: -11px;+ border-right-color: #999;+ border-right-color: rgba(0, 0, 0, .25);+ border-left-width: 0;+}+.popover.right > .arrow:after {+ bottom: -10px;+ left: 1px;+ content: " ";+ border-right-color: #fff;+ border-left-width: 0;+}+.popover.bottom > .arrow {+ top: -11px;+ left: 50%;+ margin-left: -11px;+ border-top-width: 0;+ border-bottom-color: #999;+ border-bottom-color: rgba(0, 0, 0, .25);+}+.popover.bottom > .arrow:after {+ top: 1px;+ margin-left: -10px;+ content: " ";+ border-top-width: 0;+ border-bottom-color: #fff;+}+.popover.left > .arrow {+ top: 50%;+ right: -11px;+ margin-top: -11px;+ border-right-width: 0;+ border-left-color: #999;+ border-left-color: rgba(0, 0, 0, .25);+}+.popover.left > .arrow:after {+ right: 1px;+ bottom: -10px;+ content: " ";+ border-right-width: 0;+ border-left-color: #fff;+}+.carousel {+ position: relative;+}+.carousel-inner {+ position: relative;+ width: 100%;+ overflow: hidden;+}+.carousel-inner > .item {+ position: relative;+ display: none;+ -webkit-transition: .6s ease-in-out left;+ -o-transition: .6s ease-in-out left;+ transition: .6s ease-in-out left;+}+.carousel-inner > .item > img,+.carousel-inner > .item > a > img {+ line-height: 1;+}+.carousel-inner > .active,+.carousel-inner > .next,+.carousel-inner > .prev {+ display: block;+}+.carousel-inner > .active {+ left: 0;+}+.carousel-inner > .next,+.carousel-inner > .prev {+ position: absolute;+ top: 0;+ width: 100%;+}+.carousel-inner > .next {+ left: 100%;+}+.carousel-inner > .prev {+ left: -100%;+}+.carousel-inner > .next.left,+.carousel-inner > .prev.right {+ left: 0;+}+.carousel-inner > .active.left {+ left: -100%;+}+.carousel-inner > .active.right {+ left: 100%;+}+.carousel-control {+ position: absolute;+ top: 0;+ bottom: 0;+ left: 0;+ width: 15%;+ font-size: 20px;+ color: #fff;+ text-align: center;+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);+ filter: alpha(opacity=50);+ opacity: .5;+}+.carousel-control.left {+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);+ background-repeat: repeat-x;+}+.carousel-control.right {+ right: 0;+ left: auto;+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);+ background-repeat: repeat-x;+}+.carousel-control:hover,+.carousel-control:focus {+ color: #fff;+ text-decoration: none;+ filter: alpha(opacity=90);+ outline: 0;+ opacity: .9;+}+.carousel-control .icon-prev,+.carousel-control .icon-next,+.carousel-control .glyphicon-chevron-left,+.carousel-control .glyphicon-chevron-right {+ position: absolute;+ top: 50%;+ z-index: 5;+ display: inline-block;+}+.carousel-control .icon-prev,+.carousel-control .glyphicon-chevron-left {+ left: 50%;+ margin-left: -10px;+}+.carousel-control .icon-next,+.carousel-control .glyphicon-chevron-right {+ right: 50%;+ margin-right: -10px;+}+.carousel-control .icon-prev,+.carousel-control .icon-next {+ width: 20px;+ height: 20px;+ margin-top: -10px;+ font-family: serif;+}+.carousel-control .icon-prev:before {+ content: '\2039';+}+.carousel-control .icon-next:before {+ content: '\203a';+}+.carousel-indicators {+ position: absolute;+ bottom: 10px;+ left: 50%;+ z-index: 15;+ width: 60%;+ padding-left: 0;+ margin-left: -30%;+ text-align: center;+ list-style: none;+}+.carousel-indicators li {+ display: inline-block;+ width: 10px;+ height: 10px;+ margin: 1px;+ text-indent: -999px;+ cursor: pointer;+ background-color: #000 \9;+ background-color: rgba(0, 0, 0, 0);+ border: 1px solid #fff;+ border-radius: 10px;+}+.carousel-indicators .active {+ width: 12px;+ height: 12px;+ margin: 0;+ background-color: #fff;+}+.carousel-caption {+ position: absolute;+ right: 15%;+ bottom: 20px;+ left: 15%;+ z-index: 10;+ padding-top: 20px;+ padding-bottom: 20px;+ color: #fff;+ text-align: center;+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);+}+.carousel-caption .btn {+ text-shadow: none;+}+@media screen and (min-width: 768px) {+ .carousel-control .glyphicon-chevron-left,+ .carousel-control .glyphicon-chevron-right,+ .carousel-control .icon-prev,+ .carousel-control .icon-next {+ width: 30px;+ height: 30px;+ margin-top: -15px;+ font-size: 30px;+ }+ .carousel-control .glyphicon-chevron-left,+ .carousel-control .icon-prev {+ margin-left: -15px;+ }+ .carousel-control .glyphicon-chevron-right,+ .carousel-control .icon-next {+ margin-right: -15px;+ }+ .carousel-caption {+ right: 20%;+ left: 20%;+ padding-bottom: 30px;+ }+ .carousel-indicators {+ bottom: 20px;+ }+}+.clearfix:before,+.clearfix:after,+.dl-horizontal dd:before,+.dl-horizontal dd:after,+.container:before,+.container:after,+.container-fluid:before,+.container-fluid:after,+.row:before,+.row:after,+.form-horizontal .form-group:before,+.form-horizontal .form-group:after,+.btn-toolbar:before,+.btn-toolbar:after,+.btn-group-vertical > .btn-group:before,+.btn-group-vertical > .btn-group:after,+.nav:before,+.nav:after,+.navbar:before,+.navbar:after,+.navbar-header:before,+.navbar-header:after,+.navbar-collapse:before,+.navbar-collapse:after,+.pager:before,+.pager:after,+.panel-body:before,+.panel-body:after,+.modal-footer:before,+.modal-footer:after {+ display: table;+ content: " ";+}+.clearfix:after,+.dl-horizontal dd:after,+.container:after,+.container-fluid:after,+.row:after,+.form-horizontal .form-group:after,+.btn-toolbar:after,+.btn-group-vertical > .btn-group:after,+.nav:after,+.navbar:after,+.navbar-header:after,+.navbar-collapse:after,+.pager:after,+.panel-body:after,+.modal-footer:after {+ clear: both;+}+.center-block {+ display: block;+ margin-right: auto;+ margin-left: auto;+}+.pull-right {+ float: right !important;+}+.pull-left {+ float: left !important;+}+.hide {+ display: none !important;+}+.show {+ display: block !important;+}+.invisible {+ visibility: hidden;+}+.text-hide {+ font: 0/0 a;+ color: transparent;+ text-shadow: none;+ background-color: transparent;+ border: 0;+}+.hidden {+ display: none !important;+ visibility: hidden !important;+}+.affix {+ position: fixed;+ -webkit-transform: translate3d(0, 0, 0);+ -o-transform: translate3d(0, 0, 0);+ transform: translate3d(0, 0, 0);+}+@-ms-viewport {+ width: device-width;+}+.visible-xs,+.visible-sm,+.visible-md,+.visible-lg {+ display: none !important;+}+.visible-xs-block,+.visible-xs-inline,+.visible-xs-inline-block,+.visible-sm-block,+.visible-sm-inline,+.visible-sm-inline-block,+.visible-md-block,+.visible-md-inline,+.visible-md-inline-block,+.visible-lg-block,+.visible-lg-inline,+.visible-lg-inline-block {+ display: none !important;+}+@media (max-width: 767px) {+ .visible-xs {+ display: block !important;+ }+ table.visible-xs {+ display: table;+ }+ tr.visible-xs {+ display: table-row !important;+ }+ th.visible-xs,+ td.visible-xs {+ display: table-cell !important;+ }+}+@media (max-width: 767px) {+ .visible-xs-block {+ display: block !important;+ }+}+@media (max-width: 767px) {+ .visible-xs-inline {+ display: inline !important;+ }+}+@media (max-width: 767px) {+ .visible-xs-inline-block {+ display: inline-block !important;+ }+}+@media (min-width: 768px) and (max-width: 991px) {+ .visible-sm {+ display: block !important;+ }+ table.visible-sm {+ display: table;+ }+ tr.visible-sm {+ display: table-row !important;+ }+ th.visible-sm,+ td.visible-sm {+ display: table-cell !important;+ }+}+@media (min-width: 768px) and (max-width: 991px) {+ .visible-sm-block {+ display: block !important;+ }+}+@media (min-width: 768px) and (max-width: 991px) {+ .visible-sm-inline {+ display: inline !important;+ }+}+@media (min-width: 768px) and (max-width: 991px) {+ .visible-sm-inline-block {+ display: inline-block !important;+ }+}+@media (min-width: 992px) and (max-width: 1199px) {+ .visible-md {+ display: block !important;+ }+ table.visible-md {+ display: table;+ }+ tr.visible-md {+ display: table-row !important;+ }+ th.visible-md,+ td.visible-md {+ display: table-cell !important;+ }+}+@media (min-width: 992px) and (max-width: 1199px) {+ .visible-md-block {+ display: block !important;+ }+}+@media (min-width: 992px) and (max-width: 1199px) {+ .visible-md-inline {+ display: inline !important;+ }+}+@media (min-width: 992px) and (max-width: 1199px) {+ .visible-md-inline-block {+ display: inline-block !important;+ }+}+@media (min-width: 1200px) {+ .visible-lg {+ display: block !important;+ }+ table.visible-lg {+ display: table;+ }+ tr.visible-lg {+ display: table-row !important;+ }+ th.visible-lg,+ td.visible-lg {+ display: table-cell !important;+ }+}+@media (min-width: 1200px) {+ .visible-lg-block {+ display: block !important;+ }+}+@media (min-width: 1200px) {+ .visible-lg-inline {+ display: inline !important;+ }+}+@media (min-width: 1200px) {+ .visible-lg-inline-block {+ display: inline-block !important;+ }+}+@media (max-width: 767px) {+ .hidden-xs {+ display: none !important;+ }+}+@media (min-width: 768px) and (max-width: 991px) {+ .hidden-sm {+ display: none !important;+ }+}+@media (min-width: 992px) and (max-width: 1199px) {+ .hidden-md {+ display: none !important;+ }+}+@media (min-width: 1200px) {+ .hidden-lg {+ display: none !important;+ }+}+.visible-print {+ display: none !important;+}+@media print {+ .visible-print {+ display: block !important;+ }+ table.visible-print {+ display: table;+ }+ tr.visible-print {+ display: table-row !important;+ }+ th.visible-print,+ td.visible-print {+ display: table-cell !important;+ }+}+.visible-print-block {+ display: none !important;+}+@media print {+ .visible-print-block {+ display: block !important;+ }+}+.visible-print-inline {+ display: none !important;+}+@media print {+ .visible-print-inline {+ display: inline !important;+ }+}+.visible-print-inline-block {+ display: none !important;+}+@media print {+ .visible-print-inline-block {+ display: inline-block !important;+ }+}+@media print {+ .hidden-print {+ display: none !important;+ }+}+/*# sourceMappingURL=bootstrap.css.map */
@@ -0,0 +1,1 @@+{"version":3,"file":"bootstrap.css","sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA,6DAA4D;ACQ5D;EACE,yBAAA;EACA,4BAAA;EACA,gCAAA;EDND;ACaD;EACE,WAAA;EDXD;ACuBD;;;;;;;;;;;;EAYE,gBAAA;EDrBD;AC6BD;;;;EAIE,uBAAA;EACA,0BAAA;ED3BD;ACmCD;EACE,eAAA;EACA,WAAA;EDjCD;ACyCD;;EAEE,eAAA;EDvCD;ACiDD;EACE,yBAAA;ED/CD;ACsDD;;EAEE,YAAA;EDpDD;AC8DD;EACE,2BAAA;ED5DD;ACmED;;EAEE,mBAAA;EDjED;ACwED;EACE,oBAAA;EDtED;AC8ED;EACE,gBAAA;EACA,kBAAA;ED5ED;ACmFD;EACE,kBAAA;EACA,aAAA;EDjFD;ACwFD;EACE,gBAAA;EDtFD;AC6FD;;EAEE,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,0BAAA;ED3FD;AC8FD;EACE,aAAA;ED5FD;AC+FD;EACE,iBAAA;ED7FD;ACuGD;EACE,WAAA;EDrGD;AC4GD;EACE,kBAAA;ED1GD;ACoHD;EACE,kBAAA;EDlHD;ACyHD;EACE,8BAAA;EACA,iCAAA;EAAA,yBAAA;EACA,WAAA;EDvHD;AC8HD;EACE,gBAAA;ED5HD;ACmID;;;;EAIE,mCAAA;EACA,gBAAA;EDjID;ACmJD;;;;;EAKE,gBAAA;EACA,eAAA;EACA,WAAA;EDjJD;ACwJD;EACE,mBAAA;EDtJD;ACgKD;;EAEE,sBAAA;ED9JD;ACyKD;;;;EAIE,4BAAA;EACA,iBAAA;EDvKD;AC8KD;;EAEE,iBAAA;ED5KD;ACmLD;;EAEE,WAAA;EACA,YAAA;EDjLD;ACyLD;EACE,qBAAA;EDvLD;ACkMD;;EAEE,gCAAA;EAAA,6BAAA;EAAA,wBAAA;EACA,YAAA;EDhMD;ACyMD;;EAEE,cAAA;EDvMD;ACgND;EACE,+BAAA;EACA,8BAAA;EACA,iCAAA;EACA,yBAAA;ED9MD;ACuND;;EAEE,0BAAA;EDrND;AC4ND;EACE,2BAAA;EACA,eAAA;EACA,gCAAA;ED1ND;ACkOD;EACE,WAAA;EACA,YAAA;EDhOD;ACuOD;EACE,gBAAA;EDrOD;AC6OD;EACE,mBAAA;ED3OD;ACqPD;EACE,2BAAA;EACA,mBAAA;EDnPD;ACsPD;;EAEE,YAAA;EDpPD;AE9ED;EA9FE;IACE,8BAAA;IACA,wBAAA;IACA,oCAAA;IACA,qCAAA;IAAA,6BAAA;IF+KD;EE5KD;;IAEE,4BAAA;IF8KD;EE3KD;IACE,8BAAA;IF6KD;EE1KD;IACE,+BAAA;IF4KD;EExKD;;IAEE,aAAA;IF0KD;EEvKD;;IAEE,wBAAA;IACA,0BAAA;IFyKD;EEtKD;IACE,6BAAA;IFwKD;EErKD;;IAEE,0BAAA;IFuKD;EEpKD;IACE,4BAAA;IFsKD;EEnKD;;;IAGE,YAAA;IACA,WAAA;IFqKD;EElKD;;IAEE,yBAAA;IFoKD;EE/JD;IACE,6BAAA;IFiKD;EE7JD;IACE,eAAA;IF+JD;EE7JD;;IAGI,mCAAA;IF8JH;EE3JD;;IAGI,mCAAA;IF4JH;EEzJD;IACE,wBAAA;IF2JD;EExJD;IACE,sCAAA;IF0JD;EExJD;;IAGI,mCAAA;IFyJH;EACF;AGhPD;EACE,qCAAA;EACA,uDAAA;EACA,6TAAA;EHkPD;AG3OD;EACE,oBAAA;EACA,UAAA;EACA,uBAAA;EACA,qCAAA;EACA,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,qCAAA;EACA,oCAAA;EH6OD;AGzOmC;EAAW,gBAAA;EH4O9C;AG3OmC;EAAW,gBAAA;EH8O9C;AG7OmC;EAAW,kBAAA;EHgP9C;AG/OmC;EAAW,kBAAA;EHkP9C;AGjPmC;EAAW,kBAAA;EHoP9C;AGnPmC;EAAW,kBAAA;EHsP9C;AGrPmC;EAAW,kBAAA;EHwP9C;AGvPmC;EAAW,kBAAA;EH0P9C;AGzPmC;EAAW,kBAAA;EH4P9C;AG3PmC;EAAW,kBAAA;EH8P9C;AG7PmC;EAAW,kBAAA;EHgQ9C;AG/PmC;EAAW,kBAAA;EHkQ9C;AGjQmC;EAAW,kBAAA;EHoQ9C;AGnQmC;EAAW,kBAAA;EHsQ9C;AGrQmC;EAAW,kBAAA;EHwQ9C;AGvQmC;EAAW,kBAAA;EH0Q9C;AGzQmC;EAAW,kBAAA;EH4Q9C;AG3QmC;EAAW,kBAAA;EH8Q9C;AG7QmC;EAAW,kBAAA;EHgR9C;AG/QmC;EAAW,kBAAA;EHkR9C;AGjRmC;EAAW,kBAAA;EHoR9C;AGnRmC;EAAW,kBAAA;EHsR9C;AGrRmC;EAAW,kBAAA;EHwR9C;AGvRmC;EAAW,kBAAA;EH0R9C;AGzRmC;EAAW,kBAAA;EH4R9C;AG3RmC;EAAW,kBAAA;EH8R9C;AG7RmC;EAAW,kBAAA;EHgS9C;AG/RmC;EAAW,kBAAA;EHkS9C;AGjSmC;EAAW,kBAAA;EHoS9C;AGnSmC;EAAW,kBAAA;EHsS9C;AGrSmC;EAAW,kBAAA;EHwS9C;AGvSmC;EAAW,kBAAA;EH0S9C;AGzSmC;EAAW,kBAAA;EH4S9C;AG3SmC;EAAW,kBAAA;EH8S9C;AG7SmC;EAAW,kBAAA;EHgT9C;AG/SmC;EAAW,kBAAA;EHkT9C;AGjTmC;EAAW,kBAAA;EHoT9C;AGnTmC;EAAW,kBAAA;EHsT9C;AGrTmC;EAAW,kBAAA;EHwT9C;AGvTmC;EAAW,kBAAA;EH0T9C;AGzTmC;EAAW,kBAAA;EH4T9C;AG3TmC;EAAW,kBAAA;EH8T9C;AG7TmC;EAAW,kBAAA;EHgU9C;AG/TmC;EAAW,kBAAA;EHkU9C;AGjUmC;EAAW,kBAAA;EHoU9C;AGnUmC;EAAW,kBAAA;EHsU9C;AGrUmC;EAAW,kBAAA;EHwU9C;AGvUmC;EAAW,kBAAA;EH0U9C;AGzUmC;EAAW,kBAAA;EH4U9C;AG3UmC;EAAW,kBAAA;EH8U9C;AG7UmC;EAAW,kBAAA;EHgV9C;AG/UmC;EAAW,kBAAA;EHkV9C;AGjVmC;EAAW,kBAAA;EHoV9C;AGnVmC;EAAW,kBAAA;EHsV9C;AGrVmC;EAAW,kBAAA;EHwV9C;AGvVmC;EAAW,kBAAA;EH0V9C;AGzVmC;EAAW,kBAAA;EH4V9C;AG3VmC;EAAW,kBAAA;EH8V9C;AG7VmC;EAAW,kBAAA;EHgW9C;AG/VmC;EAAW,kBAAA;EHkW9C;AGjWmC;EAAW,kBAAA;EHoW9C;AGnWmC;EAAW,kBAAA;EHsW9C;AGrWmC;EAAW,kBAAA;EHwW9C;AGvWmC;EAAW,kBAAA;EH0W9C;AGzWmC;EAAW,kBAAA;EH4W9C;AG3WmC;EAAW,kBAAA;EH8W9C;AG7WmC;EAAW,kBAAA;EHgX9C;AG/WmC;EAAW,kBAAA;EHkX9C;AGjXmC;EAAW,kBAAA;EHoX9C;AGnXmC;EAAW,kBAAA;EHsX9C;AGrXmC;EAAW,kBAAA;EHwX9C;AGvXmC;EAAW,kBAAA;EH0X9C;AGzXmC;EAAW,kBAAA;EH4X9C;AG3XmC;EAAW,kBAAA;EH8X9C;AG7XmC;EAAW,kBAAA;EHgY9C;AG/XmC;EAAW,kBAAA;EHkY9C;AGjYmC;EAAW,kBAAA;EHoY9C;AGnYmC;EAAW,kBAAA;EHsY9C;AGrYmC;EAAW,kBAAA;EHwY9C;AGvYmC;EAAW,kBAAA;EH0Y9C;AGzYmC;EAAW,kBAAA;EH4Y9C;AG3YmC;EAAW,kBAAA;EH8Y9C;AG7YmC;EAAW,kBAAA;EHgZ9C;AG/YmC;EAAW,kBAAA;EHkZ9C;AGjZmC;EAAW,kBAAA;EHoZ9C;AGnZmC;EAAW,kBAAA;EHsZ9C;AGrZmC;EAAW,kBAAA;EHwZ9C;AGvZmC;EAAW,kBAAA;EH0Z9C;AGzZmC;EAAW,kBAAA;EH4Z9C;AG3ZmC;EAAW,kBAAA;EH8Z9C;AG7ZmC;EAAW,kBAAA;EHga9C;AG/ZmC;EAAW,kBAAA;EHka9C;AGjamC;EAAW,kBAAA;EHoa9C;AGnamC;EAAW,kBAAA;EHsa9C;AGramC;EAAW,kBAAA;EHwa9C;AGvamC;EAAW,kBAAA;EH0a9C;AGzamC;EAAW,kBAAA;EH4a9C;AG3amC;EAAW,kBAAA;EH8a9C;AG7amC;EAAW,kBAAA;EHgb9C;AG/amC;EAAW,kBAAA;EHkb9C;AGjbmC;EAAW,kBAAA;EHob9C;AGnbmC;EAAW,kBAAA;EHsb9C;AGrbmC;EAAW,kBAAA;EHwb9C;AGvbmC;EAAW,kBAAA;EH0b9C;AGzbmC;EAAW,kBAAA;EH4b9C;AG3bmC;EAAW,kBAAA;EH8b9C;AG7bmC;EAAW,kBAAA;EHgc9C;AG/bmC;EAAW,kBAAA;EHkc9C;AGjcmC;EAAW,kBAAA;EHoc9C;AGncmC;EAAW,kBAAA;EHsc9C;AGrcmC;EAAW,kBAAA;EHwc9C;AGvcmC;EAAW,kBAAA;EH0c9C;AGzcmC;EAAW,kBAAA;EH4c9C;AG3cmC;EAAW,kBAAA;EH8c9C;AG7cmC;EAAW,kBAAA;EHgd9C;AG/cmC;EAAW,kBAAA;EHkd9C;AGjdmC;EAAW,kBAAA;EHod9C;AGndmC;EAAW,kBAAA;EHsd9C;AGrdmC;EAAW,kBAAA;EHwd9C;AGvdmC;EAAW,kBAAA;EH0d9C;AGzdmC;EAAW,kBAAA;EH4d9C;AG3dmC;EAAW,kBAAA;EH8d9C;AG7dmC;EAAW,kBAAA;EHge9C;AG/dmC;EAAW,kBAAA;EHke9C;AGjemC;EAAW,kBAAA;EHoe9C;AGnemC;EAAW,kBAAA;EHse9C;AGremC;EAAW,kBAAA;EHwe9C;AGvemC;EAAW,kBAAA;EH0e9C;AGzemC;EAAW,kBAAA;EH4e9C;AG3emC;EAAW,kBAAA;EH8e9C;AG7emC;EAAW,kBAAA;EHgf9C;AG/emC;EAAW,kBAAA;EHkf9C;AGjfmC;EAAW,kBAAA;EHof9C;AGnfmC;EAAW,kBAAA;EHsf9C;AGrfmC;EAAW,kBAAA;EHwf9C;AGvfmC;EAAW,kBAAA;EH0f9C;AGzfmC;EAAW,kBAAA;EH4f9C;AG3fmC;EAAW,kBAAA;EH8f9C;AG7fmC;EAAW,kBAAA;EHggB9C;AG/fmC;EAAW,kBAAA;EHkgB9C;AGjgBmC;EAAW,kBAAA;EHogB9C;AGngBmC;EAAW,kBAAA;EHsgB9C;AGrgBmC;EAAW,kBAAA;EHwgB9C;AGvgBmC;EAAW,kBAAA;EH0gB9C;AGzgBmC;EAAW,kBAAA;EH4gB9C;AG3gBmC;EAAW,kBAAA;EH8gB9C;AG7gBmC;EAAW,kBAAA;EHghB9C;AG/gBmC;EAAW,kBAAA;EHkhB9C;AGjhBmC;EAAW,kBAAA;EHohB9C;AGnhBmC;EAAW,kBAAA;EHshB9C;AGrhBmC;EAAW,kBAAA;EHwhB9C;AGvhBmC;EAAW,kBAAA;EH0hB9C;AGzhBmC;EAAW,kBAAA;EH4hB9C;AG3hBmC;EAAW,kBAAA;EH8hB9C;AG7hBmC;EAAW,kBAAA;EHgiB9C;AG/hBmC;EAAW,kBAAA;EHkiB9C;AGjiBmC;EAAW,kBAAA;EHoiB9C;AGniBmC;EAAW,kBAAA;EHsiB9C;AGriBmC;EAAW,kBAAA;EHwiB9C;AGviBmC;EAAW,kBAAA;EH0iB9C;AGziBmC;EAAW,kBAAA;EH4iB9C;AG3iBmC;EAAW,kBAAA;EH8iB9C;AG7iBmC;EAAW,kBAAA;EHgjB9C;AG/iBmC;EAAW,kBAAA;EHkjB9C;AGjjBmC;EAAW,kBAAA;EHojB9C;AGnjBmC;EAAW,kBAAA;EHsjB9C;AGrjBmC;EAAW,kBAAA;EHwjB9C;AGvjBmC;EAAW,kBAAA;EH0jB9C;AGzjBmC;EAAW,kBAAA;EH4jB9C;AG3jBmC;EAAW,kBAAA;EH8jB9C;AG7jBmC;EAAW,kBAAA;EHgkB9C;AG/jBmC;EAAW,kBAAA;EHkkB9C;AGjkBmC;EAAW,kBAAA;EHokB9C;AGnkBmC;EAAW,kBAAA;EHskB9C;AGrkBmC;EAAW,kBAAA;EHwkB9C;AGvkBmC;EAAW,kBAAA;EH0kB9C;AGzkBmC;EAAW,kBAAA;EH4kB9C;AG3kBmC;EAAW,kBAAA;EH8kB9C;AG7kBmC;EAAW,kBAAA;EHglB9C;AG/kBmC;EAAW,kBAAA;EHklB9C;AGjlBmC;EAAW,kBAAA;EHolB9C;AGnlBmC;EAAW,kBAAA;EHslB9C;AGrlBmC;EAAW,kBAAA;EHwlB9C;AGvlBmC;EAAW,kBAAA;EH0lB9C;AGzlBmC;EAAW,kBAAA;EH4lB9C;AG3lBmC;EAAW,kBAAA;EH8lB9C;AG7lBmC;EAAW,kBAAA;EHgmB9C;AG/lBmC;EAAW,kBAAA;EHkmB9C;AGjmBmC;EAAW,kBAAA;EHomB9C;AGnmBmC;EAAW,kBAAA;EHsmB9C;AGrmBmC;EAAW,kBAAA;EHwmB9C;AGvmBmC;EAAW,kBAAA;EH0mB9C;AGzmBmC;EAAW,kBAAA;EH4mB9C;AG3mBmC;EAAW,kBAAA;EH8mB9C;AG7mBmC;EAAW,kBAAA;EHgnB9C;AG/mBmC;EAAW,kBAAA;EHknB9C;AGjnBmC;EAAW,kBAAA;EHonB9C;AGnnBmC;EAAW,kBAAA;EHsnB9C;AGrnBmC;EAAW,kBAAA;EHwnB9C;AGvnBmC;EAAW,kBAAA;EH0nB9C;AIx1BD;ECgEE,gCAAA;EACG,6BAAA;EACK,wBAAA;EL2xBT;AI11BD;;EC6DE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELiyBT;AIx1BD;EACE,iBAAA;EACA,+CAAA;EJ01BD;AIv1BD;EACE,6DAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EJy1BD;AIr1BD;;;;EAIE,sBAAA;EACA,oBAAA;EACA,sBAAA;EJu1BD;AIj1BD;EACE,gBAAA;EACA,uBAAA;EJm1BD;AIj1BC;;EAEE,gBAAA;EACA,4BAAA;EJm1BH;AIh1BC;EErDA,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENu4BD;AI10BD;EACE,WAAA;EJ40BD;AIt0BD;EACE,wBAAA;EJw0BD;AIp0BD;;;;;EGvEE,gBAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EPk5BD;AIz0BD;EACE,oBAAA;EJ20BD;AIr0BD;EACE,cAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EC0FA,0CAAA;EACK,qCAAA;EACG,kCAAA;EEpLR,uBAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EPm6BD;AIt0BD;EACE,oBAAA;EJw0BD;AIl0BD;EACE,kBAAA;EACA,qBAAA;EACA,WAAA;EACA,+BAAA;EJo0BD;AI5zBD;EACE,oBAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EJ8zBD;AItzBC;;EAEE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA;EJwzBH;AQn8BD;;;;;;;;;;;;EAEE,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;ER+8BD;AQp9BD;;;;;;;;;;;;;;;;;;;;;;;;EASI,qBAAA;EACA,gBAAA;EACA,gBAAA;ERq+BH;AQj+BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERs+BD;AQ1+BD;;;;;;;;;;;;EAQI,gBAAA;ERg/BH;AQ7+BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERk/BD;AQt/BD;;;;;;;;;;;;EAQI,gBAAA;ER4/BH;AQx/BD;;EAAU,iBAAA;ER4/BT;AQ3/BD;;EAAU,iBAAA;ER+/BT;AQ9/BD;;EAAU,iBAAA;ERkgCT;AQjgCD;;EAAU,iBAAA;ERqgCT;AQpgCD;;EAAU,iBAAA;ERwgCT;AQvgCD;;EAAU,iBAAA;ER2gCT;AQrgCD;EACE,kBAAA;ERugCD;AQpgCD;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ERsgCD;AQjgCD;EAAA;IAFI,iBAAA;IRugCD;EACF;AQ//BD;;EAEE,gBAAA;ERigCD;AQ7/BD;EACE,oBAAA;ER+/BD;AQ5/BD;;EAEE,2BAAA;EACA,eAAA;ER8/BD;AQ1/BD;EAAuB,kBAAA;ER6/BtB;AQ5/BD;EAAuB,mBAAA;ER+/BtB;AQ9/BD;EAAuB,oBAAA;ERigCtB;AQhgCD;EAAuB,qBAAA;ERmgCtB;AQlgCD;EAAuB,qBAAA;ERqgCtB;AQlgCD;EAAuB,2BAAA;ERqgCtB;AQpgCD;EAAuB,2BAAA;ERugCtB;AQtgCD;EAAuB,4BAAA;ERygCtB;AQtgCD;EACE,gBAAA;ERwgCD;AQtgCD;EC1GE,gBAAA;ETmnCD;ASlnCC;EACE,gBAAA;ETonCH;AQzgCD;EC7GE,gBAAA;ETynCD;ASxnCC;EACE,gBAAA;ET0nCH;AQ5gCD;EChHE,gBAAA;ET+nCD;AS9nCC;EACE,gBAAA;ETgoCH;AQ/gCD;ECnHE,gBAAA;ETqoCD;ASpoCC;EACE,gBAAA;ETsoCH;AQlhCD;ECtHE,gBAAA;ET2oCD;AS1oCC;EACE,gBAAA;ET4oCH;AQjhCD;EAGE,aAAA;EEhIA,2BAAA;EVkpCD;AUjpCC;EACE,2BAAA;EVmpCH;AQlhCD;EEnIE,2BAAA;EVwpCD;AUvpCC;EACE,2BAAA;EVypCH;AQrhCD;EEtIE,2BAAA;EV8pCD;AU7pCC;EACE,2BAAA;EV+pCH;AQxhCD;EEzIE,2BAAA;EVoqCD;AUnqCC;EACE,2BAAA;EVqqCH;AQ3hCD;EE5IE,2BAAA;EV0qCD;AUzqCC;EACE,2BAAA;EV2qCH;AQzhCD;EACE,qBAAA;EACA,qBAAA;EACA,kCAAA;ER2hCD;AQnhCD;;EAEE,eAAA;EACA,qBAAA;ERqhCD;AQxhCD;;;;EAMI,kBAAA;ERwhCH;AQjhCD;EACE,iBAAA;EACA,kBAAA;ERmhCD;AQ/gCD;EALE,iBAAA;EACA,kBAAA;EAMA,mBAAA;ERkhCD;AQphCD;EAKI,uBAAA;EACA,mBAAA;EACA,oBAAA;ERkhCH;AQ7gCD;EACE,eAAA;EACA,qBAAA;ER+gCD;AQ7gCD;;EAEE,yBAAA;ER+gCD;AQ7gCD;EACE,mBAAA;ER+gCD;AQ7gCD;EACE,gBAAA;ER+gCD;AQt/BD;EAAA;IAVM,aAAA;IACA,cAAA;IACA,aAAA;IACA,mBAAA;IG3NJ,kBAAA;IACA,yBAAA;IACA,qBAAA;IXguCC;EQhgCH;IAHM,oBAAA;IRsgCH;EACF;AQ7/BD;;EAGE,cAAA;EACA,mCAAA;ER8/BD;AQ5/BD;EACE,gBAAA;EACA,2BAAA;ER8/BD;AQ1/BD;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,gCAAA;ER4/BD;AQv/BG;;;EACE,kBAAA;ER2/BL;AQrgCD;;;EAmBI,gBAAA;EACA,gBAAA;EACA,yBAAA;EACA,gBAAA;ERu/BH;AQr/BG;;;EACE,wBAAA;ERy/BL;AQj/BD;;EAEE,qBAAA;EACA,iBAAA;EACA,iCAAA;EACA,gBAAA;EACA,mBAAA;ERm/BD;AQ7+BG;;;;;;EAAW,aAAA;ERq/Bd;AQp/BG;;;;;;EACE,wBAAA;ER2/BL;AQr/BD;;EAEE,aAAA;ERu/BD;AQn/BD;EACE,qBAAA;EACA,oBAAA;EACA,yBAAA;ERq/BD;AYtyCD;;;;EAIE,gEAAA;EZwyCD;AYpyCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EZsyCD;AYlyCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EACA,wDAAA;EAAA,gDAAA;EZoyCD;AY1yCD;EASI,YAAA;EACA,iBAAA;EACA,0BAAA;EAAA,kBAAA;EZoyCH;AY/xCD;EACE,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EZiyCD;AY5yCD;EAeI,YAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,kBAAA;EZgyCH;AY3xCD;EACE,mBAAA;EACA,oBAAA;EZ6xCD;Aat1CD;ECHE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Ed41CD;Aat1CC;EAAA;IAFE,cAAA;Ib41CD;EACF;Aax1CC;EAAA;IAFE,cAAA;Ib81CD;EACF;Aa11CD;EAAA;IAFI,eAAA;Ibg2CD;EACF;Aav1CD;ECvBE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Edi3CD;Aap1CD;ECvBE,oBAAA;EACA,qBAAA;Ed82CD;Ae92CG;EACE,oBAAA;EAEA,iBAAA;EAEA,oBAAA;EACA,qBAAA;Ef82CL;Ae91CG;EACE,aAAA;Efg2CL;Aez1CC;EACE,aAAA;Ef21CH;Ae51CC;EACE,qBAAA;Ef81CH;Ae/1CC;EACE,qBAAA;Efi2CH;Ael2CC;EACE,YAAA;Efo2CH;Aer2CC;EACE,qBAAA;Efu2CH;Aex2CC;EACE,qBAAA;Ef02CH;Ae32CC;EACE,YAAA;Ef62CH;Ae92CC;EACE,qBAAA;Efg3CH;Aej3CC;EACE,qBAAA;Efm3CH;Aep3CC;EACE,YAAA;Efs3CH;Aev3CC;EACE,qBAAA;Efy3CH;Ae13CC;EACE,oBAAA;Ef43CH;Ae92CC;EACE,aAAA;Efg3CH;Aej3CC;EACE,qBAAA;Efm3CH;Aep3CC;EACE,qBAAA;Efs3CH;Aev3CC;EACE,YAAA;Efy3CH;Ae13CC;EACE,qBAAA;Ef43CH;Ae73CC;EACE,qBAAA;Ef+3CH;Aeh4CC;EACE,YAAA;Efk4CH;Aen4CC;EACE,qBAAA;Efq4CH;Aet4CC;EACE,qBAAA;Efw4CH;Aez4CC;EACE,YAAA;Ef24CH;Ae54CC;EACE,qBAAA;Ef84CH;Ae/4CC;EACE,oBAAA;Efi5CH;Ae74CC;EACE,aAAA;Ef+4CH;Ae/5CC;EACE,YAAA;Efi6CH;Ael6CC;EACE,oBAAA;Efo6CH;Aer6CC;EACE,oBAAA;Efu6CH;Aex6CC;EACE,WAAA;Ef06CH;Ae36CC;EACE,oBAAA;Ef66CH;Ae96CC;EACE,oBAAA;Efg7CH;Aej7CC;EACE,WAAA;Efm7CH;Aep7CC;EACE,oBAAA;Efs7CH;Aev7CC;EACE,oBAAA;Efy7CH;Ae17CC;EACE,WAAA;Ef47CH;Ae77CC;EACE,oBAAA;Ef+7CH;Aeh8CC;EACE,mBAAA;Efk8CH;Ae97CC;EACE,YAAA;Efg8CH;Ael7CC;EACE,mBAAA;Efo7CH;Aer7CC;EACE,2BAAA;Efu7CH;Aex7CC;EACE,2BAAA;Ef07CH;Ae37CC;EACE,kBAAA;Ef67CH;Ae97CC;EACE,2BAAA;Efg8CH;Aej8CC;EACE,2BAAA;Efm8CH;Aep8CC;EACE,kBAAA;Efs8CH;Aev8CC;EACE,2BAAA;Efy8CH;Ae18CC;EACE,2BAAA;Ef48CH;Ae78CC;EACE,kBAAA;Ef+8CH;Aeh9CC;EACE,2BAAA;Efk9CH;Aen9CC;EACE,0BAAA;Efq9CH;Aet9CC;EACE,iBAAA;Efw9CH;Aa59CD;EE9BI;IACE,aAAA;If6/CH;Eet/CD;IACE,aAAA;Ifw/CD;Eez/CD;IACE,qBAAA;If2/CD;Ee5/CD;IACE,qBAAA;If8/CD;Ee//CD;IACE,YAAA;IfigDD;EelgDD;IACE,qBAAA;IfogDD;EergDD;IACE,qBAAA;IfugDD;EexgDD;IACE,YAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,YAAA;IfmhDD;EephDD;IACE,qBAAA;IfshDD;EevhDD;IACE,oBAAA;IfyhDD;Ee3gDD;IACE,aAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,qBAAA;IfmhDD;EephDD;IACE,YAAA;IfshDD;EevhDD;IACE,qBAAA;IfyhDD;Ee1hDD;IACE,qBAAA;If4hDD;Ee7hDD;IACE,YAAA;If+hDD;EehiDD;IACE,qBAAA;IfkiDD;EeniDD;IACE,qBAAA;IfqiDD;EetiDD;IACE,YAAA;IfwiDD;EeziDD;IACE,qBAAA;If2iDD;Ee5iDD;IACE,oBAAA;If8iDD;Ee1iDD;IACE,aAAA;If4iDD;Ee5jDD;IACE,YAAA;If8jDD;Ee/jDD;IACE,oBAAA;IfikDD;EelkDD;IACE,oBAAA;IfokDD;EerkDD;IACE,WAAA;IfukDD;EexkDD;IACE,oBAAA;If0kDD;Ee3kDD;IACE,oBAAA;If6kDD;Ee9kDD;IACE,WAAA;IfglDD;EejlDD;IACE,oBAAA;IfmlDD;EeplDD;IACE,oBAAA;IfslDD;EevlDD;IACE,WAAA;IfylDD;Ee1lDD;IACE,oBAAA;If4lDD;Ee7lDD;IACE,mBAAA;If+lDD;Ee3lDD;IACE,YAAA;If6lDD;Ee/kDD;IACE,mBAAA;IfilDD;EellDD;IACE,2BAAA;IfolDD;EerlDD;IACE,2BAAA;IfulDD;EexlDD;IACE,kBAAA;If0lDD;Ee3lDD;IACE,2BAAA;If6lDD;Ee9lDD;IACE,2BAAA;IfgmDD;EejmDD;IACE,kBAAA;IfmmDD;EepmDD;IACE,2BAAA;IfsmDD;EevmDD;IACE,2BAAA;IfymDD;Ee1mDD;IACE,kBAAA;If4mDD;Ee7mDD;IACE,2BAAA;If+mDD;EehnDD;IACE,0BAAA;IfknDD;EennDD;IACE,iBAAA;IfqnDD;EACF;AajnDD;EEvCI;IACE,aAAA;If2pDH;EeppDD;IACE,aAAA;IfspDD;EevpDD;IACE,qBAAA;IfypDD;Ee1pDD;IACE,qBAAA;If4pDD;Ee7pDD;IACE,YAAA;If+pDD;EehqDD;IACE,qBAAA;IfkqDD;EenqDD;IACE,qBAAA;IfqqDD;EetqDD;IACE,YAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,YAAA;IfirDD;EelrDD;IACE,qBAAA;IforDD;EerrDD;IACE,oBAAA;IfurDD;EezqDD;IACE,aAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,qBAAA;IfirDD;EelrDD;IACE,YAAA;IforDD;EerrDD;IACE,qBAAA;IfurDD;EexrDD;IACE,qBAAA;If0rDD;Ee3rDD;IACE,YAAA;If6rDD;Ee9rDD;IACE,qBAAA;IfgsDD;EejsDD;IACE,qBAAA;IfmsDD;EepsDD;IACE,YAAA;IfssDD;EevsDD;IACE,qBAAA;IfysDD;Ee1sDD;IACE,oBAAA;If4sDD;EexsDD;IACE,aAAA;If0sDD;Ee1tDD;IACE,YAAA;If4tDD;Ee7tDD;IACE,oBAAA;If+tDD;EehuDD;IACE,oBAAA;IfkuDD;EenuDD;IACE,WAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EezuDD;IACE,oBAAA;If2uDD;Ee5uDD;IACE,WAAA;If8uDD;Ee/uDD;IACE,oBAAA;IfivDD;EelvDD;IACE,oBAAA;IfovDD;EervDD;IACE,WAAA;IfuvDD;EexvDD;IACE,oBAAA;If0vDD;Ee3vDD;IACE,mBAAA;If6vDD;EezvDD;IACE,YAAA;If2vDD;Ee7uDD;IACE,mBAAA;If+uDD;EehvDD;IACE,2BAAA;IfkvDD;EenvDD;IACE,2BAAA;IfqvDD;EetvDD;IACE,kBAAA;IfwvDD;EezvDD;IACE,2BAAA;If2vDD;Ee5vDD;IACE,2BAAA;If8vDD;Ee/vDD;IACE,kBAAA;IfiwDD;EelwDD;IACE,2BAAA;IfowDD;EerwDD;IACE,2BAAA;IfuwDD;EexwDD;IACE,kBAAA;If0wDD;Ee3wDD;IACE,2BAAA;If6wDD;Ee9wDD;IACE,0BAAA;IfgxDD;EejxDD;IACE,iBAAA;IfmxDD;EACF;AaxwDD;EE9CI;IACE,aAAA;IfyzDH;EelzDD;IACE,aAAA;IfozDD;EerzDD;IACE,qBAAA;IfuzDD;EexzDD;IACE,qBAAA;If0zDD;Ee3zDD;IACE,YAAA;If6zDD;Ee9zDD;IACE,qBAAA;Ifg0DD;Eej0DD;IACE,qBAAA;Ifm0DD;Eep0DD;IACE,YAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,YAAA;If+0DD;Eeh1DD;IACE,qBAAA;Ifk1DD;Een1DD;IACE,oBAAA;Ifq1DD;Eev0DD;IACE,aAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,qBAAA;If+0DD;Eeh1DD;IACE,YAAA;Ifk1DD;Een1DD;IACE,qBAAA;Ifq1DD;Eet1DD;IACE,qBAAA;Ifw1DD;Eez1DD;IACE,YAAA;If21DD;Ee51DD;IACE,qBAAA;If81DD;Ee/1DD;IACE,qBAAA;Ifi2DD;Eel2DD;IACE,YAAA;Ifo2DD;Eer2DD;IACE,qBAAA;Ifu2DD;Eex2DD;IACE,oBAAA;If02DD;Eet2DD;IACE,aAAA;Ifw2DD;Eex3DD;IACE,YAAA;If03DD;Ee33DD;IACE,oBAAA;If63DD;Ee93DD;IACE,oBAAA;Ifg4DD;Eej4DD;IACE,WAAA;Ifm4DD;Eep4DD;IACE,oBAAA;Ifs4DD;Eev4DD;IACE,oBAAA;Ify4DD;Ee14DD;IACE,WAAA;If44DD;Ee74DD;IACE,oBAAA;If+4DD;Eeh5DD;IACE,oBAAA;Ifk5DD;Een5DD;IACE,WAAA;Ifq5DD;Eet5DD;IACE,oBAAA;Ifw5DD;Eez5DD;IACE,mBAAA;If25DD;Eev5DD;IACE,YAAA;Ify5DD;Ee34DD;IACE,mBAAA;If64DD;Ee94DD;IACE,2BAAA;Ifg5DD;Eej5DD;IACE,2BAAA;Ifm5DD;Eep5DD;IACE,kBAAA;Ifs5DD;Eev5DD;IACE,2BAAA;Ify5DD;Ee15DD;IACE,2BAAA;If45DD;Ee75DD;IACE,kBAAA;If+5DD;Eeh6DD;IACE,2BAAA;Ifk6DD;Een6DD;IACE,2BAAA;Ifq6DD;Eet6DD;IACE,kBAAA;Ifw6DD;Eez6DD;IACE,2BAAA;If26DD;Ee56DD;IACE,0BAAA;If86DD;Ee/6DD;IACE,iBAAA;Ifi7DD;EACF;AgBr/DD;EACE,+BAAA;EhBu/DD;AgBr/DD;EACE,kBAAA;EhBu/DD;AgBj/DD;EACE,aAAA;EACA,iBAAA;EACA,qBAAA;EhBm/DD;AgBt/DD;;;;;;EAWQ,cAAA;EACA,yBAAA;EACA,qBAAA;EACA,+BAAA;EhBm/DP;AgBjgED;EAoBI,wBAAA;EACA,kCAAA;EhBg/DH;AgBrgED;;;;;;EA8BQ,eAAA;EhB++DP;AgB7gED;EAoCI,+BAAA;EhB4+DH;AgBhhED;EAyCI,2BAAA;EhB0+DH;AgBn+DD;;;;;;EAOQ,cAAA;EhBo+DP;AgBz9DD;EACE,2BAAA;EhB29DD;AgB59DD;;;;;;EAQQ,2BAAA;EhB49DP;AgBp+DD;;EAeM,0BAAA;EhBy9DL;AgB/8DD;;EAIM,2BAAA;EhB+8DL;AgBr8DD;;EAIM,2BAAA;EhBq8DL;AgB37DD;EACE,kBAAA;EACA,aAAA;EACA,uBAAA;EhB67DD;AgBx7DG;;EACE,kBAAA;EACA,aAAA;EACA,qBAAA;EhB27DL;AiBvkEC;;;;;;;;;;;;EAOI,2BAAA;EjB8kEL;AiBxkEC;;;;;EAMI,2BAAA;EjBykEL;AiB5lEC;;;;;;;;;;;;EAOI,2BAAA;EjBmmEL;AiB7lEC;;;;;EAMI,2BAAA;EjB8lEL;AiBjnEC;;;;;;;;;;;;EAOI,2BAAA;EjBwnEL;AiBlnEC;;;;;EAMI,2BAAA;EjBmnEL;AiBtoEC;;;;;;;;;;;;EAOI,2BAAA;EjB6oEL;AiBvoEC;;;;;EAMI,2BAAA;EjBwoEL;AiB3pEC;;;;;;;;;;;;EAOI,2BAAA;EjBkqEL;AiB5pEC;;;;;EAMI,2BAAA;EjB6pEL;AgB78DD;EAAA;IA5DI,aAAA;IACA,qBAAA;IACA,oBAAA;IACA,kBAAA;IACA,8CAAA;IACA,2BAAA;IACA,mCAAA;IhB6gED;EgBv9DH;IAlDM,kBAAA;IhB4gEH;EgB19DH;;;;;;IAzCY,qBAAA;IhB2gET;EgBl+DH;IAjCM,WAAA;IhBsgEH;EgBr+DH;;;;;;IAxBY,gBAAA;IhBqgET;EgB7+DH;;;;;;IApBY,iBAAA;IhBygET;EgBr/DH;;;;IAPY,kBAAA;IhBkgET;EACF;AkB3tED;EACE,YAAA;EACA,WAAA;EACA,WAAA;EAIA,cAAA;ElB0tED;AkBvtED;EACE,gBAAA;EACA,aAAA;EACA,YAAA;EACA,qBAAA;EACA,iBAAA;EACA,sBAAA;EACA,gBAAA;EACA,WAAA;EACA,kCAAA;ElBytED;AkBttED;EACE,uBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;ElBwtED;AkB7sED;Eb4BE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELorET;AkB7sED;;EAEE,iBAAA;EACA,oBAAA;EACA,qBAAA;ElB+sED;AkB3sED;EACE,gBAAA;ElB6sED;AkBzsED;EACE,gBAAA;EACA,aAAA;ElB2sED;AkBvsED;;EAEE,cAAA;ElBysED;AkBrsED;;;EZxEE,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENixED;AkBrsED;EACE,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;ElBusED;AkB7qED;EACE,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EACA,wBAAA;EACA,2BAAA;EACA,oBAAA;EbzDA,0DAAA;EACQ,kDAAA;EAsHR,wFAAA;EACK,2EAAA;EACG,wEAAA;ELonET;AmB7vEC;EACE,uBAAA;EACA,YAAA;EdcF,wFAAA;EACQ,gFAAA;ELkvET;AKltEC;EAAgC,gBAAA;EACA,YAAA;ELqtEjC;AKptEC;EAAgC,gBAAA;ELutEjC;AKttEC;EAAgC,gBAAA;ELytEjC;AkBrrEC;;;EAGE,qBAAA;EACA,2BAAA;EACA,YAAA;ElBurEH;AkBnrEC;EACE,cAAA;ElBqrEH;AkBzqED;EACE,0BAAA;ElB2qED;AkB/pED;;;;EAIE,mBAAA;EAEA,4BAAA;ElBgqED;AkB9pEC;;;;EACE,mBAAA;ElBmqEH;AkBjqEC;;;;EACE,mBAAA;ElBsqEH;AkB5pED;EACE,qBAAA;ElB8pED;AkBtpED;;EAEE,oBAAA;EACA,gBAAA;EACA,kBAAA;EACA,kBAAA;EACA,qBAAA;ElBwpED;AkB9pED;;EASI,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,iBAAA;ElBypEH;AkBtpED;;;;EAIE,oBAAA;EACA,oBAAA;EACA,oBAAA;ElBwpED;AkBrpED;;EAEE,kBAAA;ElBupED;AkBnpED;;EAEE,uBAAA;EACA,oBAAA;EACA,kBAAA;EACA,wBAAA;EACA,qBAAA;EACA,iBAAA;ElBqpED;AkBnpED;;EAEE,eAAA;EACA,mBAAA;ElBqpED;AkB5oEC;;;;;;EAGE,qBAAA;ElBipEH;AkB3oEC;;;;EAEE,qBAAA;ElB+oEH;AkBzoEC;;;;EAGI,qBAAA;ElB4oEL;AkBjoED;EAEE,kBAAA;EACA,qBAAA;EAEA,kBAAA;ElBioED;AkB/nEC;;EAEE,iBAAA;EACA,kBAAA;ElBioEH;AkBvnED;;ECnPE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnB82ED;AmB52EC;EACE,cAAA;EACA,mBAAA;EnB82EH;AmB32EC;;EAEE,cAAA;EnB62EH;AkBnoED;;ECvPE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;EnB83ED;AmB53EC;EACE,cAAA;EACA,mBAAA;EnB83EH;AmB33EC;;EAEE,cAAA;EnB63EH;AkB1oED;EAEE,oBAAA;ElB2oED;AkB7oED;EAMI,uBAAA;ElB0oEH;AkBtoED;EACE,oBAAA;EACA,WAAA;EACA,UAAA;EACA,YAAA;EACA,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;ElBwoED;AkBtoED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElBwoED;AkBtoED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElBwoED;AkBpoED;;;;;;ECrVI,gBAAA;EnBi+EH;AkB5oED;ECjVI,uBAAA;EdmDF,0DAAA;EACQ,kDAAA;EL86ET;AmBh+EG;EACE,uBAAA;EdgDJ,2EAAA;EACQ,mEAAA;ELm7ET;AkBtpED;ECvUI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBg+EH;AkB3pED;ECjUI,gBAAA;EnB+9EH;AkB3pED;;;;;;ECxVI,gBAAA;EnB2/EH;AkBnqED;ECpVI,uBAAA;EdmDF,0DAAA;EACQ,kDAAA;ELw8ET;AmB1/EG;EACE,uBAAA;EdgDJ,2EAAA;EACQ,mEAAA;EL68ET;AkB7qED;EC1UI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnB0/EH;AkBlrED;ECpUI,gBAAA;EnBy/EH;AkBlrED;;;;;;EC3VI,gBAAA;EnBqhFH;AkB1rED;ECvVI,uBAAA;EdmDF,0DAAA;EACQ,kDAAA;ELk+ET;AmBphFG;EACE,uBAAA;EdgDJ,2EAAA;EACQ,mEAAA;ELu+ET;AkBpsED;EC7UI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBohFH;AkBzsED;ECvUI,gBAAA;EnBmhFH;AkBtsED;EACE,QAAA;ElBwsED;AkB/rED;EACE,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;ElBisED;AkB9mED;EAAA;IA7DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlB+qEH;EkBpnEH;IAtDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlB6qEH;EkBznEH;IAhDM,uBAAA;IACA,wBAAA;IlB4qEH;EkB7nEH;;;IA1CQ,aAAA;IlB4qEL;EkBloEH;IApCM,aAAA;IlByqEH;EkBroEH;IAhCM,kBAAA;IACA,wBAAA;IlBwqEH;EkBzoEH;;IAvBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBoqEH;EkBhpEH;;IAjBQ,iBAAA;IlBqqEL;EkBppEH;;IAZM,oBAAA;IACA,gBAAA;IlBoqEH;EkBzpEH;IAHM,QAAA;IlB+pEH;EACF;AkBrpED;;;;EASI,eAAA;EACA,kBAAA;EACA,kBAAA;ElBkpEH;AkB7pED;;EAiBI,kBAAA;ElBgpEH;AkBjqED;EJxcE,oBAAA;EACA,qBAAA;Ed4mFD;AkBloEC;EAAA;IANI,mBAAA;IACA,kBAAA;IACA,kBAAA;IlB4oEH;EACF;AkB5qED;EAwCI,QAAA;EACA,aAAA;ElBuoEH;AkB1nEG;EAAA;IAHI,qBAAA;IlBioEL;EACF;AkBrnEG;EAAA;IAHI,kBAAA;IlB4nEL;EACF;AoBzoFD;EACE,uBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,wBAAA;EACA,iBAAA;EACA,wBAAA;EACA,+BAAA;EACA,qBAAA;EC4BA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,oBAAA;EhB2KA,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;ELs8ET;AoB5oFG;;;EdpBF,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENoqFD;AoB9oFC;;EAEE,gBAAA;EACA,uBAAA;EpBgpFH;AoB7oFC;;EAEE,YAAA;EACA,wBAAA;Ef8BF,0DAAA;EACQ,kDAAA;ELknFT;AoB7oFC;;;EAGE,qBAAA;EACA,sBAAA;EE3CF,eAAA;EAGA,2BAAA;EjB8DA,0BAAA;EACQ,kBAAA;EL4nFT;AoBzoFD;EClDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB8rFD;AqB5rFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB8rFP;AqB5rFC;;;EAGE,wBAAA;ErB8rFH;AqBzrFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBqsFT;AoB9qFD;EClBI,gBAAA;EACA,2BAAA;ErBmsFH;AoB/qFD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBuuFD;AqBruFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBuuFP;AqBruFC;;;EAGE,wBAAA;ErBuuFH;AqBluFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErB8uFT;AoBptFD;ECrBI,gBAAA;EACA,2BAAA;ErB4uFH;AoBptFD;ECzDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBgxFD;AqB9wFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBgxFP;AqB9wFC;;;EAGE,wBAAA;ErBgxFH;AqB3wFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBuxFT;AoBzvFD;ECzBI,gBAAA;EACA,2BAAA;ErBqxFH;AoBzvFD;EC7DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErByzFD;AqBvzFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErByzFP;AqBvzFC;;;EAGE,wBAAA;ErByzFH;AqBpzFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBg0FT;AoB9xFD;EC7BI,gBAAA;EACA,2BAAA;ErB8zFH;AoB9xFD;ECjEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBk2FD;AqBh2FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBk2FP;AqBh2FC;;;EAGE,wBAAA;ErBk2FH;AqB71FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBy2FT;AoBn0FD;ECjCI,gBAAA;EACA,2BAAA;ErBu2FH;AoBn0FD;ECrEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB24FD;AqBz4FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB24FP;AqBz4FC;;;EAGE,wBAAA;ErB24FH;AqBt4FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBk5FT;AoBx2FD;ECrCI,gBAAA;EACA,2BAAA;ErBg5FH;AoBn2FD;EACE,gBAAA;EACA,qBAAA;EACA,iBAAA;EACA,kBAAA;EpBq2FD;AoBn2FC;;;;EAIE,+BAAA;Ef1BF,0BAAA;EACQ,kBAAA;ELg4FT;AoBp2FC;;;;EAIE,2BAAA;EpBs2FH;AoBp2FC;;EAEE,gBAAA;EACA,4BAAA;EACA,+BAAA;EpBs2FH;AoBl2FG;;;;EAEE,gBAAA;EACA,uBAAA;EpBs2FL;AoB71FD;;EC9EE,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;ErB+6FD;AoBh2FD;;EClFE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErBs7FD;AoBn2FD;;ECtFE,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErB67FD;AoBl2FD;EACE,gBAAA;EACA,aAAA;EpBo2FD;AoBh2FD;EACE,iBAAA;EpBk2FD;AoB31FC;;;EACE,aAAA;EpB+1FH;AuBh/FD;EACE,YAAA;ElBiLA,0CAAA;EACK,qCAAA;EACG,kCAAA;ELk0FT;AuBn/FC;EACE,YAAA;EvBq/FH;AuBj/FD;EACE,eAAA;EvBm/FD;AuBj/FC;EAAY,gBAAA;EvBo/Fb;AuBn/FC;EAAY,oBAAA;EvBs/Fb;AuBr/FC;EAAY,0BAAA;EvBw/Fb;AuBr/FD;EACE,oBAAA;EACA,WAAA;EACA,kBAAA;ElB+JA,uCAAA;EACK,kCAAA;EACG,+BAAA;ELy1FT;AwBhhGD;EACE,uBAAA;EACA,UAAA;EACA,WAAA;EACA,kBAAA;EACA,wBAAA;EACA,uBAAA;EACA,qCAAA;EACA,oCAAA;ExBkhGD;AwB9gGD;EACE,oBAAA;ExBghGD;AwB5gGD;EACE,YAAA;ExB8gGD;AwB1gGD;EACE,oBAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,2BAAA;EACA,2BAAA;EACA,uCAAA;EACA,oBAAA;EnBwBA,qDAAA;EACQ,6CAAA;EmBvBR,sCAAA;EAAA,8BAAA;ExB6gGD;AwBxgGC;EACE,UAAA;EACA,YAAA;ExB0gGH;AwBniGD;ECvBE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzB6jGD;AwBziGD;EAmCI,gBAAA;EACA,mBAAA;EACA,aAAA;EACA,qBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBygGH;AwBngGC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;ExBqgGH;AwB//FC;;;EAGE,gBAAA;EACA,uBAAA;EACA,YAAA;EACA,2BAAA;ExBigGH;AwBx/FC;;;EAGE,gBAAA;ExB0/FH;AwBr/FC;;EAEE,uBAAA;EACA,+BAAA;EACA,wBAAA;EE1GF,qEAAA;EF4GE,qBAAA;ExBu/FH;AwBl/FD;EAGI,gBAAA;ExBk/FH;AwBr/FD;EAQI,YAAA;ExBg/FH;AwBx+FD;EACE,YAAA;EACA,UAAA;ExB0+FD;AwBl+FD;EACE,SAAA;EACA,aAAA;ExBo+FD;AwBh+FD;EACE,gBAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBk+FD;AwB99FD;EACE,iBAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,QAAA;EACA,cAAA;ExBg+FD;AwB59FD;EACE,UAAA;EACA,YAAA;ExB89FD;AwBt9FD;;EAII,eAAA;EACA,0BAAA;EACA,aAAA;ExBs9FH;AwB59FD;;EAUI,WAAA;EACA,cAAA;EACA,oBAAA;ExBs9FH;AwBh8FD;EAZE;IAnEA,YAAA;IACA,UAAA;IxBmhGC;EwBj9FD;IAzDA,SAAA;IACA,aAAA;IxB6gGC;EACF;A2B5pGD;;EAEE,oBAAA;EACA,uBAAA;EACA,wBAAA;E3B8pGD;A2BlqGD;;EAMI,oBAAA;EACA,aAAA;E3BgqGH;A2B9pGG;;;;;;;;EAIE,YAAA;E3BoqGL;A2BlqGG;;EAEE,YAAA;E3BoqGL;A2B9pGD;;;;EAKI,mBAAA;E3B+pGH;A2B1pGD;EACE,mBAAA;E3B4pGD;A2B7pGD;;EAMI,aAAA;E3B2pGH;A2BjqGD;;;EAWI,kBAAA;E3B2pGH;A2BvpGD;EACE,kBAAA;E3BypGD;A2BrpGD;EACE,gBAAA;E3BupGD;A2BtpGC;ECrDA,+BAAA;EACG,4BAAA;E5B8sGJ;A2BrpGD;;EClDE,8BAAA;EACG,2BAAA;E5B2sGJ;A2BppGD;EACE,aAAA;E3BspGD;A2BppGD;EACE,kBAAA;E3BspGD;A2BppGD;;ECtEE,+BAAA;EACG,4BAAA;E5B8tGJ;A2BnpGD;ECpEE,8BAAA;EACG,2BAAA;E5B0tGJ;A2BlpGD;;EAEE,YAAA;E3BopGD;A2BnoGD;EACE,mBAAA;EACA,oBAAA;E3BqoGD;A2BnoGD;EACE,oBAAA;EACA,qBAAA;E3BqoGD;A2BhoGD;EtBlDE,0DAAA;EACQ,kDAAA;ELqrGT;A2BhoGC;EtBtDA,0BAAA;EACQ,kBAAA;ELyrGT;A2B7nGD;EACE,gBAAA;E3B+nGD;A2B5nGD;EACE,yBAAA;EACA,wBAAA;E3B8nGD;A2B3nGD;EACE,yBAAA;E3B6nGD;A2BtnGD;;;EAII,gBAAA;EACA,aAAA;EACA,aAAA;EACA,iBAAA;E3BunGH;A2B9nGD;EAcM,aAAA;E3BmnGL;A2BjoGD;;;;EAsBI,kBAAA;EACA,gBAAA;E3BinGH;A2B5mGC;EACE,kBAAA;E3B8mGH;A2B5mGC;EACE,8BAAA;ECvKF,+BAAA;EACC,8BAAA;E5BsxGF;A2B7mGC;EACE,gCAAA;ECnLF,4BAAA;EACC,2BAAA;E5BmyGF;A2B7mGD;EACE,kBAAA;E3B+mGD;A2B7mGD;;EClLE,+BAAA;EACC,8BAAA;E5BmyGF;A2B5mGD;EChME,4BAAA;EACC,2BAAA;E5B+yGF;A2BvmGD;EACE,gBAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;E3BymGD;A2B7mGD;;EAOI,aAAA;EACA,qBAAA;EACA,WAAA;E3B0mGH;A2BnnGD;EAYI,aAAA;E3B0mGH;A2BtnGD;EAgBI,YAAA;E3BymGH;A2B3lGD;;EAEE,oBAAA;EACA,aAAA;EL1OA,YAAA;EAGA,0BAAA;EtBs0GD;A6Bt0GD;EACE,oBAAA;EACA,gBAAA;EACA,2BAAA;E7Bw0GD;A6Br0GC;EACE,aAAA;EACA,iBAAA;EACA,kBAAA;E7Bu0GH;A6Bh1GD;EAeI,oBAAA;EACA,YAAA;EAKA,aAAA;EAEA,aAAA;EACA,kBAAA;E7B+zGH;A6BtzGD;;;EV0BE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;EnBiyGD;AmB/xGC;;;EACE,cAAA;EACA,mBAAA;EnBmyGH;AmBhyGC;;;;;;EAEE,cAAA;EnBsyGH;A6Bx0GD;;;EVqBE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBwzGD;AmBtzGC;;;EACE,cAAA;EACA,mBAAA;EnB0zGH;AmBvzGC;;;;;;EAEE,cAAA;EnB6zGH;A6Bt1GD;;;EAGE,qBAAA;E7Bw1GD;A6Bt1GC;;;EACE,kBAAA;E7B01GH;A6Bt1GD;;EAEE,WAAA;EACA,qBAAA;EACA,wBAAA;E7Bw1GD;A6Bn1GD;EACE,mBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;E7Bq1GD;A6Bl1GC;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;E7Bo1GH;A6Bl1GC;EACE,oBAAA;EACA,iBAAA;EACA,oBAAA;E7Bo1GH;A6Bx2GD;;EA0BI,eAAA;E7Bk1GH;A6B70GD;;;;;;;EDhGE,+BAAA;EACG,4BAAA;E5Bs7GJ;A6B90GD;EACE,iBAAA;E7Bg1GD;A6B90GD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;E5B27GJ;A6B/0GD;EACE,gBAAA;E7Bi1GD;A6B50GD;EACE,oBAAA;EAGA,cAAA;EACA,qBAAA;E7B40GD;A6Bj1GD;EAUI,oBAAA;E7B00GH;A6Bp1GD;EAYM,mBAAA;E7B20GL;A6Bx0GG;;;EAGE,YAAA;E7B00GL;A6Br0GC;;EAGI,oBAAA;E7Bs0GL;A6Bn0GC;;EAGI,mBAAA;E7Bo0GL;A8B99GD;EACE,kBAAA;EACA,iBAAA;EACA,kBAAA;E9Bg+GD;A8Bn+GD;EAOI,oBAAA;EACA,gBAAA;E9B+9GH;A8Bv+GD;EAWM,oBAAA;EACA,gBAAA;EACA,oBAAA;E9B+9GL;A8B99GK;;EAEE,uBAAA;EACA,2BAAA;E9Bg+GP;A8B39GG;EACE,gBAAA;E9B69GL;A8B39GK;;EAEE,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,qBAAA;E9B69GP;A8Bt9GG;;;EAGE,2BAAA;EACA,uBAAA;E9Bw9GL;A8BjgHD;ELHE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzBugHD;A8BvgHD;EA0DI,iBAAA;E9Bg9GH;A8Bv8GD;EACE,kCAAA;E9By8GD;A8B18GD;EAGI,aAAA;EAEA,qBAAA;E9By8GH;A8B98GD;EASM,mBAAA;EACA,yBAAA;EACA,+BAAA;EACA,4BAAA;E9Bw8GL;A8Bv8GK;EACE,uCAAA;E9By8GP;A8Bn8GK;;;EAGE,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,kCAAA;EACA,iBAAA;E9Bq8GP;A8Bh8GC;EAqDA,aAAA;EA8BA,kBAAA;E9Bi3GD;A8Bp8GC;EAwDE,aAAA;E9B+4GH;A8Bv8GC;EA0DI,oBAAA;EACA,oBAAA;E9Bg5GL;A8B38GC;EAgEE,WAAA;EACA,YAAA;E9B84GH;A8Bl4GD;EAAA;IAPM,qBAAA;IACA,WAAA;I9B64GH;E8Bv4GH;IAJQ,kBAAA;I9B84GL;EACF;A8Bx9GC;EAuFE,iBAAA;EACA,oBAAA;E9Bo4GH;A8B59GC;;;EA8FE,2BAAA;E9Bm4GH;A8Br3GD;EAAA;IATM,kCAAA;IACA,4BAAA;I9Bk4GH;E8B13GH;;;IAHM,8BAAA;I9Bk4GH;EACF;A8Bn+GD;EAEI,aAAA;E9Bo+GH;A8Bt+GD;EAMM,oBAAA;E9Bm+GL;A8Bz+GD;EASM,kBAAA;E9Bm+GL;A8B99GK;;;EAGE,gBAAA;EACA,2BAAA;E9Bg+GP;A8Bx9GD;EAEI,aAAA;E9By9GH;A8B39GD;EAIM,iBAAA;EACA,gBAAA;E9B09GL;A8B98GD;EACE,aAAA;E9Bg9GD;A8Bj9GD;EAII,aAAA;E9Bg9GH;A8Bp9GD;EAMM,oBAAA;EACA,oBAAA;E9Bi9GL;A8Bx9GD;EAYI,WAAA;EACA,YAAA;E9B+8GH;A8Bn8GD;EAAA;IAPM,qBAAA;IACA,WAAA;I9B88GH;E8Bx8GH;IAJQ,kBAAA;I9B+8GL;EACF;A8Bv8GD;EACE,kBAAA;E9By8GD;A8B18GD;EAKI,iBAAA;EACA,oBAAA;E9Bw8GH;A8B98GD;;;EAYI,2BAAA;E9Bu8GH;A8Bz7GD;EAAA;IATM,kCAAA;IACA,4BAAA;I9Bs8GH;E8B97GH;;;IAHM,8BAAA;I9Bs8GH;EACF;A8B77GD;EAEI,eAAA;E9B87GH;A8Bh8GD;EAKI,gBAAA;E9B87GH;A8Br7GD;EAEE,kBAAA;EF3OA,4BAAA;EACC,2BAAA;E5BkqHF;A+B5pHD;EACE,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,+BAAA;E/B8pHD;A+BtpHD;EAAA;IAFI,oBAAA;I/B4pHD;EACF;A+B7oHD;EAAA;IAFI,aAAA;I/BmpHD;EACF;A+BroHD;EACE,qBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,4DAAA;EAAA,oDAAA;EAEA,mCAAA;E/BsoHD;A+BpoHC;EACE,kBAAA;E/BsoHH;A+B1mHD;EAAA;IAxBI,aAAA;IACA,eAAA;IACA,0BAAA;IAAA,kBAAA;I/BsoHD;E+BpoHC;IACE,2BAAA;IACA,yBAAA;IACA,mBAAA;IACA,8BAAA;I/BsoHH;E+BnoHC;IACE,qBAAA;I/BqoHH;E+BhoHC;;;IAGE,iBAAA;IACA,kBAAA;I/BkoHH;EACF;A+B9nHD;;EAGI,mBAAA;E/B+nHH;A+B1nHC;EAAA;;IAFI,mBAAA;I/BioHH;EACF;A+BxnHD;;;;EAII,qBAAA;EACA,oBAAA;E/B0nHH;A+BpnHC;EAAA;;;;IAHI,iBAAA;IACA,gBAAA;I/B8nHH;EACF;A+BlnHD;EACE,eAAA;EACA,uBAAA;E/BonHD;A+B/mHD;EAAA;IAFI,kBAAA;I/BqnHD;EACF;A+BjnHD;;EAEE,iBAAA;EACA,UAAA;EACA,SAAA;EACA,eAAA;E1BGA,yCAAA;EACQ,oCAAA;EAAA,iCAAA;ELinHT;A+B9mHD;EAAA;;IAFI,kBAAA;I/BqnHD;EACF;A+BnnHD;EACE,QAAA;EACA,uBAAA;E/BqnHD;A+BnnHD;EACE,WAAA;EACA,kBAAA;EACA,uBAAA;E/BqnHD;A+B/mHD;EACE,aAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,cAAA;E/BinHD;A+B/mHC;;EAEE,uBAAA;E/BinHH;A+BxmHD;EALI;;IAEE,oBAAA;I/BgnHH;EACF;A+BtmHD;EACE,oBAAA;EACA,cAAA;EACA,oBAAA;EACA,mBAAA;EC3LA,iBAAA;EACA,oBAAA;ED4LA,+BAAA;EACA,wBAAA;EACA,+BAAA;EACA,oBAAA;E/BymHD;A+BrmHC;EACE,YAAA;E/BumHH;A+BrnHD;EAmBI,gBAAA;EACA,aAAA;EACA,aAAA;EACA,oBAAA;E/BqmHH;A+B3nHD;EAyBI,iBAAA;E/BqmHH;A+B/lHD;EAAA;IAFI,eAAA;I/BqmHD;EACF;A+B5lHD;EACE,qBAAA;E/B8lHD;A+B/lHD;EAII,mBAAA;EACA,sBAAA;EACA,mBAAA;E/B8lHH;A+BnkHC;EAAA;IArBI,kBAAA;IACA,aAAA;IACA,aAAA;IACA,eAAA;IACA,+BAAA;IACA,WAAA;IACA,0BAAA;IAAA,kBAAA;I/B4lHH;E+B7kHD;;IAZM,4BAAA;I/B6lHL;E+BjlHD;IATM,mBAAA;I/B6lHL;E+B5lHK;;IAEE,wBAAA;I/B8lHP;EACF;A+BxkHD;EAAA;IAfI,aAAA;IACA,WAAA;I/B2lHD;E+B7kHH;IAXM,aAAA;I/B2lHH;E+BhlHH;IATQ,mBAAA;IACA,sBAAA;I/B4lHL;E+BxlHC;IACE,qBAAA;I/B0lHH;EACF;A+BzkHD;EALE;IE9QA,wBAAA;IjCg2HC;E+BjlHD;IElRA,yBAAA;IjCs2HC;EACF;A+B5kHD;EACE,oBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,sCAAA;E1B3OA,8FAAA;EACQ,sFAAA;E2B/DR,iBAAA;EACA,oBAAA;EhC03HD;AkBl7GD;EAAA;IA7DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlBm/GH;EkBx7GH;IAtDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlBi/GH;EkB77GH;IAhDM,uBAAA;IACA,wBAAA;IlBg/GH;EkBj8GH;;;IA1CQ,aAAA;IlBg/GL;EkBt8GH;IApCM,aAAA;IlB6+GH;EkBz8GH;IAhCM,kBAAA;IACA,wBAAA;IlB4+GH;EkB78GH;;IAvBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBw+GH;EkBp9GH;;IAjBQ,iBAAA;IlBy+GL;EkBx9GH;;IAZM,oBAAA;IACA,gBAAA;IlBw+GH;EkB79GH;IAHM,QAAA;IlBm+GH;EACF;A+BtnHC;EAAA;IAFI,oBAAA;I/B4nHH;EACF;A+BvmHD;EAAA;IAbI,aAAA;IACA,WAAA;IACA,gBAAA;IACA,iBAAA;IACA,gBAAA;IACA,mBAAA;I1BlQF,0BAAA;IACQ,kBAAA;IL23HP;E+BtnHC;IACE,qBAAA;I/BwnHH;EACF;A+BhnHD;EACE,eAAA;EHlVA,4BAAA;EACC,2BAAA;E5Bq8HF;A+BhnHD;EH9UE,+BAAA;EACC,8BAAA;E5Bi8HF;A+B3mHD;EC5VE,iBAAA;EACA,oBAAA;EhC08HD;A+B5mHC;EC/VA,kBAAA;EACA,qBAAA;EhC88HD;A+B7mHC;EClWA,kBAAA;EACA,qBAAA;EhCk9HD;A+BvmHD;EC5WE,kBAAA;EACA,qBAAA;EhCs9HD;A+B9lHD;EAAA;IATI,aAAA;IACA,mBAAA;IACA,oBAAA;I/B2mHD;E+BxmHC;IACE,iBAAA;I/B0mHH;EACF;A+BlmHD;EACE,2BAAA;EACA,uBAAA;E/BomHD;A+BtmHD;EAKI,gBAAA;E/BomHH;A+BnmHG;;EAEE,gBAAA;EACA,+BAAA;E/BqmHL;A+B9mHD;EAcI,gBAAA;E/BmmHH;A+BjnHD;EAmBM,gBAAA;E/BimHL;A+B/lHK;;EAEE,gBAAA;EACA,+BAAA;E/BimHP;A+B7lHK;;;EAGE,gBAAA;EACA,2BAAA;E/B+lHP;A+B3lHK;;;EAGE,gBAAA;EACA,+BAAA;E/B6lHP;A+BroHD;EA8CI,uBAAA;E/B0lHH;A+BzlHG;;EAEE,2BAAA;E/B2lHL;A+B5oHD;EAoDM,2BAAA;E/B2lHL;A+B/oHD;;EA0DI,uBAAA;E/BylHH;A+BllHK;;;EAGE,2BAAA;EACA,gBAAA;E/BolHP;A+BnjHC;EAAA;IAzBQ,gBAAA;I/BglHP;E+B/kHO;;IAEE,gBAAA;IACA,+BAAA;I/BilHT;E+B7kHO;;;IAGE,gBAAA;IACA,2BAAA;I/B+kHT;E+B3kHO;;;IAGE,gBAAA;IACA,+BAAA;I/B6kHT;EACF;A+B/qHD;EA8GI,gBAAA;E/BokHH;A+BnkHG;EACE,gBAAA;E/BqkHL;A+BrrHD;EAqHI,gBAAA;E/BmkHH;A+BlkHG;;EAEE,gBAAA;E/BokHL;A+BhkHK;;;;EAEE,gBAAA;E/BokHP;A+B5jHD;EACE,2BAAA;EACA,uBAAA;E/B8jHD;A+BhkHD;EAKI,gBAAA;E/B8jHH;A+B7jHG;;EAEE,gBAAA;EACA,+BAAA;E/B+jHL;A+BxkHD;EAcI,gBAAA;E/B6jHH;A+B3kHD;EAmBM,gBAAA;E/B2jHL;A+BzjHK;;EAEE,gBAAA;EACA,+BAAA;E/B2jHP;A+BvjHK;;;EAGE,gBAAA;EACA,2BAAA;E/ByjHP;A+BrjHK;;;EAGE,gBAAA;EACA,+BAAA;E/BujHP;A+B/lHD;EA+CI,uBAAA;E/BmjHH;A+BljHG;;EAEE,2BAAA;E/BojHL;A+BtmHD;EAqDM,2BAAA;E/BojHL;A+BzmHD;;EA2DI,uBAAA;E/BkjHH;A+B5iHK;;;EAGE,2BAAA;EACA,gBAAA;E/B8iHP;A+BvgHC;EAAA;IA/BQ,uBAAA;I/B0iHP;E+B3gHD;IA5BQ,2BAAA;I/B0iHP;E+B9gHD;IAzBQ,gBAAA;I/B0iHP;E+BziHO;;IAEE,gBAAA;IACA,+BAAA;I/B2iHT;E+BviHO;;;IAGE,gBAAA;IACA,2BAAA;I/ByiHT;E+BriHO;;;IAGE,gBAAA;IACA,+BAAA;I/BuiHT;EACF;A+B/oHD;EA+GI,gBAAA;E/BmiHH;A+BliHG;EACE,gBAAA;E/BoiHL;A+BrpHD;EAsHI,gBAAA;E/BkiHH;A+BjiHG;;EAEE,gBAAA;E/BmiHL;A+B/hHK;;;;EAEE,gBAAA;E/BmiHP;AkCxqID;EACE,mBAAA;EACA,qBAAA;EACA,kBAAA;EACA,2BAAA;EACA,oBAAA;ElC0qID;AkC/qID;EAQI,uBAAA;ElC0qIH;AkClrID;EAWM,mBAAA;EACA,gBAAA;EACA,gBAAA;ElC0qIL;AkCvrID;EAkBI,gBAAA;ElCwqIH;AmC5rID;EACE,uBAAA;EACA,iBAAA;EACA,gBAAA;EACA,oBAAA;EnC8rID;AmClsID;EAOI,iBAAA;EnC8rIH;AmCrsID;;EAUM,oBAAA;EACA,aAAA;EACA,mBAAA;EACA,yBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,mBAAA;EnC+rIL;AmC7rIG;;EAGI,gBAAA;EPXN,gCAAA;EACG,6BAAA;E5B0sIJ;AmC5rIG;;EPvBF,iCAAA;EACG,8BAAA;E5ButIJ;AmCvrIG;;;;EAEE,gBAAA;EACA,2BAAA;EACA,uBAAA;EnC2rIL;AmCrrIG;;;;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,iBAAA;EnC0rIL;AmChvID;;;;;;EAiEM,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,qBAAA;EnCurIL;AmC9qID;;EC1EM,oBAAA;EACA,iBAAA;EpC4vIL;AoC1vIG;;ERMF,gCAAA;EACG,6BAAA;E5BwvIJ;AoCzvIG;;ERRF,iCAAA;EACG,8BAAA;E5BqwIJ;AmCxrID;;EC/EM,mBAAA;EACA,iBAAA;EpC2wIL;AoCzwIG;;ERMF,gCAAA;EACG,6BAAA;E5BuwIJ;AoCxwIG;;ERRF,iCAAA;EACG,8BAAA;E5BoxIJ;AqCvxID;EACE,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oBAAA;ErCyxID;AqC7xID;EAOI,iBAAA;ErCyxIH;AqChyID;;EAUM,uBAAA;EACA,mBAAA;EACA,2BAAA;EACA,2BAAA;EACA,qBAAA;ErC0xIL;AqCxyID;;EAmBM,uBAAA;EACA,2BAAA;ErCyxIL;AqC7yID;;EA2BM,cAAA;ErCsxIL;AqCjzID;;EAkCM,aAAA;ErCmxIL;AqCrzID;;;;EA2CM,gBAAA;EACA,2BAAA;EACA,qBAAA;ErCgxIL;AsC9zID;EACE,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,qBAAA;EACA,0BAAA;EACA,sBAAA;EtCg0ID;AsC5zIG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EtC8zIL;AsCzzIC;EACE,eAAA;EtC2zIH;AsCvzIC;EACE,oBAAA;EACA,WAAA;EtCyzIH;AsClzID;ECtCE,2BAAA;EvC21ID;AuCx1IG;;EAEE,2BAAA;EvC01IL;AsCrzID;EC1CE,2BAAA;EvCk2ID;AuC/1IG;;EAEE,2BAAA;EvCi2IL;AsCxzID;EC9CE,2BAAA;EvCy2ID;AuCt2IG;;EAEE,2BAAA;EvCw2IL;AsC3zID;EClDE,2BAAA;EvCg3ID;AuC72IG;;EAEE,2BAAA;EvC+2IL;AsC9zID;ECtDE,2BAAA;EvCu3ID;AuCp3IG;;EAEE,2BAAA;EvCs3IL;AsCj0ID;EC1DE,2BAAA;EvC83ID;AuC33IG;;EAEE,2BAAA;EvC63IL;AwC/3ID;EACE,uBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,0BAAA;EACA,qBAAA;EACA,oBAAA;EACA,2BAAA;EACA,qBAAA;ExCi4ID;AwC93IC;EACE,eAAA;ExCg4IH;AwC53IC;EACE,oBAAA;EACA,WAAA;ExC83IH;AwC53IC;EACE,QAAA;EACA,kBAAA;ExC83IH;AwCz3IG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;ExC23IL;AwCt3IC;;EAEE,gBAAA;EACA,2BAAA;ExCw3IH;AwCt3IC;EACE,kBAAA;ExCw3IH;AyCv6ID;EACE,eAAA;EACA,qBAAA;EACA,gBAAA;EACA,2BAAA;EzCy6ID;AyC76ID;;EAQI,gBAAA;EzCy6IH;AyCj7ID;EAWI,qBAAA;EACA,iBAAA;EACA,kBAAA;EzCy6IH;AyCt7ID;EAiBI,2BAAA;EzCw6IH;AyCr6IC;EACE,oBAAA;EzCu6IH;AyC57ID;EAyBI,iBAAA;EzCs6IH;AyCr5ID;EAAA;IAbI,mBAAA;IACA,sBAAA;IzCs6ID;EyCp6IC;IACE,oBAAA;IACA,qBAAA;IzCs6IH;EyC95IH;;IAHM,iBAAA;IzCq6IH;EACF;A0C58ID;EACE,gBAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;ErC8KA,0CAAA;EACK,qCAAA;EACG,kCAAA;ELiyIT;A0Cx9ID;;EAaI,mBAAA;EACA,oBAAA;E1C+8IH;A0C38IC;;;EAGE,uBAAA;E1C68IH;A0Cl+ID;EA0BI,cAAA;EACA,gBAAA;E1C28IH;A2Cp+ID;EACE,eAAA;EACA,qBAAA;EACA,+BAAA;EACA,oBAAA;E3Cs+ID;A2C1+ID;EAQI,eAAA;EAEA,gBAAA;E3Co+IH;A2C9+ID;EAcI,mBAAA;E3Cm+IH;A2Cj/ID;;EAoBI,kBAAA;E3Ci+IH;A2Cr/ID;EAuBI,iBAAA;E3Ci+IH;A2Cz9ID;;EAEE,qBAAA;E3C29ID;A2C79ID;;EAMI,oBAAA;EACA,WAAA;EACA,cAAA;EACA,gBAAA;E3C29IH;A2Cn9ID;ECrDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C2gJD;A2Cx9ID;EChDI,2BAAA;E5C2gJH;A2C39ID;EC7CI,gBAAA;E5C2gJH;A2C39ID;ECxDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5CshJD;A2Ch+ID;ECnDI,2BAAA;E5CshJH;A2Cn+ID;EChDI,gBAAA;E5CshJH;A2Cn+ID;EC3DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5CiiJD;A2Cx+ID;ECtDI,2BAAA;E5CiiJH;A2C3+ID;ECnDI,gBAAA;E5CiiJH;A2C3+ID;EC9DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C4iJD;A2Ch/ID;ECzDI,2BAAA;E5C4iJH;A2Cn/ID;ECtDI,gBAAA;E5C4iJH;A6C9iJD;EACE;IAAQ,6BAAA;I7CijJP;E6ChjJD;IAAQ,0BAAA;I7CmjJP;EACF;A6ChjJD;EACE;IAAQ,6BAAA;I7CmjJP;E6CljJD;IAAQ,0BAAA;I7CqjJP;EACF;A6CxjJD;EACE;IAAQ,6BAAA;I7CmjJP;E6CljJD;IAAQ,0BAAA;I7CqjJP;EACF;A6C7iJD;EACE,kBAAA;EACA,cAAA;EACA,qBAAA;EACA,2BAAA;EACA,oBAAA;ExCqCA,wDAAA;EACQ,gDAAA;EL2gJT;A6C5iJD;EACE,aAAA;EACA,WAAA;EACA,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;ExCwBA,wDAAA;EACQ,gDAAA;EAsHR,qCAAA;EACK,gCAAA;EACG,6BAAA;ELk6IT;A6CziJD;;ECAI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDCF,oCAAA;EAAA,4BAAA;E7C6iJD;A6CtiJD;;ExC7CE,4DAAA;EACK,uDAAA;EACG,oDAAA;ELulJT;A6CriJC;;EAEE,iBAAA;E7CuiJH;A6CpiJC;EACE,gBAAA;EACA,iBAAA;EACA,+BAAA;EACA,wBAAA;EACA,0BAAA;EAAA,kBAAA;E7CsiJH;A6C7hJD;EEvFE,2BAAA;E/CunJD;A+CpnJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9CukJH;A6CjiJD;EE3FE,2BAAA;E/C+nJD;A+C5nJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9C+kJH;A6CriJD;EE/FE,2BAAA;E/CuoJD;A+CpoJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9CulJH;A6CziJD;EEnGE,2BAAA;E/C+oJD;A+C5oJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9C+lJH;AgD9oJD;;EAEE,kBAAA;EACA,SAAA;EhDgpJD;AgD5oJD;;EAEE,kBAAA;EhD8oJD;AgD5oJD;EACE,eAAA;EhD8oJD;AgD1oJD;EACE,gBAAA;EhD4oJD;AgDxoJD;EACE,iBAAA;EhD0oJD;AgDnoJD;EAEI,oBAAA;EhDooJH;AgDtoJD;EAKI,mBAAA;EhDooJH;AgD3nJD;EACE,iBAAA;EACA,kBAAA;EhD6nJD;AiD1qJD;EAEE,qBAAA;EACA,iBAAA;EjD2qJD;AiDnqJD;EACE,oBAAA;EACA,gBAAA;EACA,oBAAA;EAEA,qBAAA;EACA,2BAAA;EACA,2BAAA;EjDoqJD;AiDjqJC;ErB3BA,8BAAA;EACC,6BAAA;E5B+rJF;AiDlqJC;EACE,kBAAA;ErBvBF,iCAAA;EACC,gCAAA;E5B4rJF;AiDprJD;EAoBI,cAAA;EjDmqJH;AiDvrJD;EAuBI,mBAAA;EjDmqJH;AiDzpJD;EACE,gBAAA;EjD2pJD;AiD5pJD;EAII,gBAAA;EjD2pJH;AiDvpJC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;EjDypJH;AiDnpJC;;;EAGE,2BAAA;EACA,gBAAA;EjDqpJH;AiDzpJC;;;EAQI,gBAAA;EjDspJL;AiD9pJC;;;EAWI,gBAAA;EjDwpJL;AiDnpJC;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EjDqpJH;AiD3pJC;;;;;;;;;EAYI,gBAAA;EjD0pJL;AiDtqJC;;;EAeI,gBAAA;EjD4pJL;AkD/vJC;EACE,gBAAA;EACA,2BAAA;ElDiwJH;AkD/vJG;EACE,gBAAA;ElDiwJL;AkDlwJG;EAII,gBAAA;ElDiwJP;AkD9vJK;;EAEE,gBAAA;EACA,2BAAA;ElDgwJP;AkD9vJK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDgwJP;AkDrxJC;EACE,gBAAA;EACA,2BAAA;ElDuxJH;AkDrxJG;EACE,gBAAA;ElDuxJL;AkDxxJG;EAII,gBAAA;ElDuxJP;AkDpxJK;;EAEE,gBAAA;EACA,2BAAA;ElDsxJP;AkDpxJK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDsxJP;AkD3yJC;EACE,gBAAA;EACA,2BAAA;ElD6yJH;AkD3yJG;EACE,gBAAA;ElD6yJL;AkD9yJG;EAII,gBAAA;ElD6yJP;AkD1yJK;;EAEE,gBAAA;EACA,2BAAA;ElD4yJP;AkD1yJK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElD4yJP;AkDj0JC;EACE,gBAAA;EACA,2BAAA;ElDm0JH;AkDj0JG;EACE,gBAAA;ElDm0JL;AkDp0JG;EAII,gBAAA;ElDm0JP;AkDh0JK;;EAEE,gBAAA;EACA,2BAAA;ElDk0JP;AkDh0JK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDk0JP;AiD/tJD;EACE,eAAA;EACA,oBAAA;EjDiuJD;AiD/tJD;EACE,kBAAA;EACA,kBAAA;EjDiuJD;AmD51JD;EACE,qBAAA;EACA,2BAAA;EACA,+BAAA;EACA,oBAAA;E9C0DA,mDAAA;EACQ,2CAAA;ELqyJT;AmD31JD;EACE,eAAA;EnD61JD;AmDx1JD;EACE,oBAAA;EACA,sCAAA;EvBpBA,8BAAA;EACC,6BAAA;E5B+2JF;AmD91JD;EAMI,gBAAA;EnD21JH;AmDt1JD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EnDw1JD;AmD51JD;EAOI,gBAAA;EnDw1JH;AmDn1JD;EACE,oBAAA;EACA,2BAAA;EACA,+BAAA;EvBpCA,iCAAA;EACC,gCAAA;E5B03JF;AmD70JD;EAEI,kBAAA;EnD80JH;AmDh1JD;EAKM,qBAAA;EACA,kBAAA;EnD80JL;AmD10JG;EAEI,eAAA;EvBlEN,8BAAA;EACC,6BAAA;E5B84JF;AmDx0JG;EAEI,kBAAA;EvBjEN,iCAAA;EACC,gCAAA;E5B24JF;AmDp0JD;EAEI,qBAAA;EnDq0JH;AmDl0JD;EACE,qBAAA;EnDo0JD;AmD5zJD;;;EAII,kBAAA;EnD6zJH;AmDj0JD;;EvB9FE,8BAAA;EACC,6BAAA;E5Bm6JF;AmDt0JD;;;;;;;;EAgBU,6BAAA;EnDg0JT;AmDh1JD;;;;;;;;EAoBU,8BAAA;EnDs0JT;AmD11JD;;EvBtFE,iCAAA;EACC,gCAAA;E5Bo7JF;AmD/1JD;;;;;;;;EAmCU,gCAAA;EnDs0JT;AmDz2JD;;;;;;;;EAuCU,iCAAA;EnD40JT;AmDn3JD;;EA8CI,+BAAA;EnDy0JH;AmDv3JD;;EAkDI,eAAA;EnDy0JH;AmD33JD;;EAsDI,WAAA;EnDy0JH;AmD/3JD;;;;;;;;;;;;EA6DU,gBAAA;EnDg1JT;AmD74JD;;;;;;;;;;;;EAiEU,iBAAA;EnD01JT;AmD35JD;;;;;;;;EA0EU,kBAAA;EnD21JT;AmDr6JD;;;;;;;;EAmFU,kBAAA;EnD41JT;AmD/6JD;EAyFI,WAAA;EACA,kBAAA;EnDy1JH;AmD/0JD;EACE,qBAAA;EnDi1JD;AmDl1JD;EAKI,kBAAA;EACA,oBAAA;EnDg1JH;AmDt1JD;EAQM,iBAAA;EnDi1JL;AmDz1JD;EAaI,kBAAA;EnD+0JH;AmD51JD;EAeM,+BAAA;EnDg1JL;AmD/1JD;EAmBI,eAAA;EnD+0JH;AmDl2JD;EAqBM,kCAAA;EnDg1JL;AmDz0JD;EC9NE,uBAAA;EpD0iKD;AoDxiKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD0iKH;AoD7iKC;EAMI,2BAAA;EpD0iKL;AoDhjKC;EASI,gBAAA;EACA,2BAAA;EpD0iKL;AoDviKC;EAEI,8BAAA;EpDwiKL;AmDx1JD;ECjOE,uBAAA;EpD4jKD;AoD1jKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD4jKH;AoD/jKC;EAMI,2BAAA;EpD4jKL;AoDlkKC;EASI,gBAAA;EACA,2BAAA;EpD4jKL;AoDzjKC;EAEI,8BAAA;EpD0jKL;AmDv2JD;ECpOE,uBAAA;EpD8kKD;AoD5kKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD8kKH;AoDjlKC;EAMI,2BAAA;EpD8kKL;AoDplKC;EASI,gBAAA;EACA,2BAAA;EpD8kKL;AoD3kKC;EAEI,8BAAA;EpD4kKL;AmDt3JD;ECvOE,uBAAA;EpDgmKD;AoD9lKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDgmKH;AoDnmKC;EAMI,2BAAA;EpDgmKL;AoDtmKC;EASI,gBAAA;EACA,2BAAA;EpDgmKL;AoD7lKC;EAEI,8BAAA;EpD8lKL;AmDr4JD;EC1OE,uBAAA;EpDknKD;AoDhnKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDknKH;AoDrnKC;EAMI,2BAAA;EpDknKL;AoDxnKC;EASI,gBAAA;EACA,2BAAA;EpDknKL;AoD/mKC;EAEI,8BAAA;EpDgnKL;AmDp5JD;EC7OE,uBAAA;EpDooKD;AoDloKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDooKH;AoDvoKC;EAMI,2BAAA;EpDooKL;AoD1oKC;EASI,gBAAA;EACA,2BAAA;EpDooKL;AoDjoKC;EAEI,8BAAA;EpDkoKL;AqDlpKD;EACE,oBAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;ErDopKD;AqDzpKD;;;;EAWI,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,cAAA;EACA,aAAA;EACA,WAAA;ErDopKH;AqDhpKC;EACE,wBAAA;ErDkpKH;AqD9oKC;EACE,qBAAA;ErDgpKH;AsDzqKD;EACE,kBAAA;EACA,eAAA;EACA,qBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EjDwDA,yDAAA;EACQ,iDAAA;ELonKT;AsDnrKD;EASI,oBAAA;EACA,mCAAA;EtD6qKH;AsDxqKD;EACE,eAAA;EACA,oBAAA;EtD0qKD;AsDxqKD;EACE,cAAA;EACA,oBAAA;EtD0qKD;AuDhsKD;EACE,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,8BAAA;EjCRA,cAAA;EAGA,2BAAA;EtBysKD;AuDjsKC;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EjCfF,cAAA;EAGA,2BAAA;EtBitKD;AuD9rKC;EACE,YAAA;EACA,iBAAA;EACA,yBAAA;EACA,WAAA;EACA,0BAAA;EvDgsKH;AwDptKD;EACE,kBAAA;ExDstKD;AwDltKD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,mCAAA;EAIA,YAAA;ExDitKD;AwD9sKC;EnDkHA,4CAAA;EACQ,uCAAA;EAAA,oCAAA;EA8DR,qDAAA;EAEK,2CAAA;EACG,qCAAA;ELkiKT;AwDltKC;EnD8GA,yCAAA;EACQ,oCAAA;EAAA,iCAAA;ELumKT;AwDptKD;EACE,oBAAA;EACA,kBAAA;ExDstKD;AwDltKD;EACE,oBAAA;EACA,aAAA;EACA,cAAA;ExDotKD;AwDhtKD;EACE,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;EnDaA,kDAAA;EACQ,0CAAA;EmDZR,sCAAA;EAAA,8BAAA;EAEA,YAAA;ExDktKD;AwD9sKD;EACE,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,2BAAA;ExDgtKD;AwD9sKC;ElCrEA,YAAA;EAGA,0BAAA;EtBoxKD;AwDjtKC;ElCtEA,cAAA;EAGA,2BAAA;EtBwxKD;AwDhtKD;EACE,eAAA;EACA,kCAAA;EACA,2BAAA;ExDktKD;AwD/sKD;EACE,kBAAA;ExDitKD;AwD7sKD;EACE,WAAA;EACA,yBAAA;ExD+sKD;AwD1sKD;EACE,oBAAA;EACA,eAAA;ExD4sKD;AwDxsKD;EACE,eAAA;EACA,mBAAA;EACA,+BAAA;ExD0sKD;AwD7sKD;EAQI,kBAAA;EACA,kBAAA;ExDwsKH;AwDjtKD;EAaI,mBAAA;ExDusKH;AwDptKD;EAiBI,gBAAA;ExDssKH;AwDjsKD;EACE,oBAAA;EACA,cAAA;EACA,aAAA;EACA,cAAA;EACA,kBAAA;ExDmsKD;AwDjrKD;EAZE;IACE,cAAA;IACA,mBAAA;IxDgsKD;EwD9rKD;InDvEA,mDAAA;IACQ,2CAAA;ILwwKP;EwD7rKD;IAAY,cAAA;IxDgsKX;EACF;AwD3rKD;EAFE;IAAY,cAAA;IxDisKX;EACF;AyDh1KD;EACE,oBAAA;EACA,eAAA;EACA,gBAAA;EACA,qBAAA;EACA,iBAAA;EACA,kBAAA;EnCTA,YAAA;EAGA,0BAAA;EtB01KD;AyDj1KC;EnCZA,cAAA;EAGA,2BAAA;EtB81KD;AyDp1KC;EAAW,kBAAA;EAAmB,gBAAA;EzDw1K/B;AyDv1KC;EAAW,kBAAA;EAAmB,gBAAA;EzD21K/B;AyD11KC;EAAW,iBAAA;EAAmB,gBAAA;EzD81K/B;AyD71KC;EAAW,mBAAA;EAAmB,gBAAA;EzDi2K/B;AyD71KD;EACE,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,uBAAA;EACA,2BAAA;EACA,oBAAA;EzD+1KD;AyD31KD;EACE,oBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;EzD61KD;AyD11KC;EACE,WAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,2BAAA;EzD41KH;AyD11KC;EACE,WAAA;EACA,WAAA;EACA,yBAAA;EACA,2BAAA;EzD41KH;AyD11KC;EACE,WAAA;EACA,YAAA;EACA,yBAAA;EACA,2BAAA;EzD41KH;AyD11KC;EACE,UAAA;EACA,SAAA;EACA,kBAAA;EACA,6BAAA;EACA,6BAAA;EzD41KH;AyD11KC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,6BAAA;EACA,4BAAA;EzD41KH;AyD11KC;EACE,QAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,8BAAA;EzD41KH;AyD11KC;EACE,QAAA;EACA,WAAA;EACA,yBAAA;EACA,8BAAA;EzD41KH;AyD11KC;EACE,QAAA;EACA,YAAA;EACA,yBAAA;EACA,8BAAA;EzD41KH;A0Dn7KD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;EACA,cAAA;EACA,kBAAA;EACA,2BAAA;EACA,sCAAA;EAAA,8BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;ErDkDA,mDAAA;EACQ,2CAAA;EqD/CR,qBAAA;E1Do7KD;A0Dj7KC;EAAY,mBAAA;E1Do7Kb;A0Dn7KC;EAAY,mBAAA;E1Ds7Kb;A0Dr7KC;EAAY,kBAAA;E1Dw7Kb;A0Dv7KC;EAAY,oBAAA;E1D07Kb;A0Dv7KD;EACE,WAAA;EACA,mBAAA;EACA,iBAAA;EACA,qBAAA;EACA,mBAAA;EACA,2BAAA;EACA,kCAAA;EACA,4BAAA;E1Dy7KD;A0Dt7KD;EACE,mBAAA;E1Dw7KD;A0Dh7KC;;EAEE,oBAAA;EACA,gBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;E1Dk7KH;A0D/6KD;EACE,oBAAA;E1Di7KD;A0D/6KD;EACE,oBAAA;EACA,aAAA;E1Di7KD;A0D76KC;EACE,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;EACA,uCAAA;EACA,eAAA;E1D+6KH;A0D96KG;EACE,cAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;E1Dg7KL;A0D76KC;EACE,UAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,6BAAA;EACA,yCAAA;E1D+6KH;A0D96KG;EACE,cAAA;EACA,WAAA;EACA,eAAA;EACA,sBAAA;EACA,6BAAA;E1Dg7KL;A0D76KC;EACE,WAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;EACA,0CAAA;EACA,YAAA;E1D+6KH;A0D96KG;EACE,cAAA;EACA,UAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;E1Dg7KL;A0D56KC;EACE,UAAA;EACA,cAAA;EACA,mBAAA;EACA,uBAAA;EACA,4BAAA;EACA,wCAAA;E1D86KH;A0D76KG;EACE,cAAA;EACA,YAAA;EACA,uBAAA;EACA,4BAAA;EACA,eAAA;E1D+6KL;A2DziLD;EACE,oBAAA;E3D2iLD;A2DxiLD;EACE,oBAAA;EACA,kBAAA;EACA,aAAA;E3D0iLD;A2D7iLD;EAMI,eAAA;EACA,oBAAA;EtD0KF,2CAAA;EACK,sCAAA;EACG,mCAAA;ELi4KT;A2DpjLD;;EAcM,gBAAA;E3D0iLL;A2DxjLD;;;EAqBI,gBAAA;E3DwiLH;A2D7jLD;EAyBI,SAAA;E3DuiLH;A2DhkLD;;EA8BI,oBAAA;EACA,QAAA;EACA,aAAA;E3DsiLH;A2DtkLD;EAoCI,YAAA;E3DqiLH;A2DzkLD;EAuCI,aAAA;E3DqiLH;A2D5kLD;;EA2CI,SAAA;E3DqiLH;A2DhlLD;EA+CI,aAAA;E3DoiLH;A2DnlLD;EAkDI,YAAA;E3DoiLH;A2D5hLD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;ErCtEA,cAAA;EAGA,2BAAA;EqCqEA,iBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3D+hLD;A2D1hLC;Eb1EE,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9CumLH;A2D9hLC;EACE,YAAA;EACA,UAAA;Eb/EA,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9CgnLH;A2DhiLC;;EAEE,YAAA;EACA,gBAAA;EACA,uBAAA;ErC9FF,cAAA;EAGA,2BAAA;EtB+nLD;A2DjkLD;;;;EAsCI,oBAAA;EACA,UAAA;EACA,YAAA;EACA,uBAAA;E3DiiLH;A2D1kLD;;EA6CI,WAAA;EACA,oBAAA;E3DiiLH;A2D/kLD;;EAkDI,YAAA;EACA,qBAAA;E3DiiLH;A2DplLD;;EAuDI,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;E3DiiLH;A2D5hLG;EACE,kBAAA;E3D8hLL;A2D1hLG;EACE,kBAAA;E3D4hLL;A2DlhLD;EACE,oBAAA;EACA,cAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;E3DohLD;A2D7hLD;EAYI,uBAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;EACA,qBAAA;EACA,iBAAA;EAUA,2BAAA;EACA,oCAAA;E3D2gLH;A2DziLD;EAiCI,WAAA;EACA,aAAA;EACA,cAAA;EACA,2BAAA;E3D2gLH;A2DpgLD;EACE,oBAAA;EACA,WAAA;EACA,YAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3DsgLD;A2DrgLC;EACE,mBAAA;E3DugLH;A2D99KD;EAhCE;;;;IAKI,aAAA;IACA,cAAA;IACA,mBAAA;IACA,iBAAA;I3DggLH;E2DxgLD;;IAYI,oBAAA;I3DggLH;E2D5gLD;;IAgBI,qBAAA;I3DggLH;E2D3/KD;IACE,WAAA;IACA,YAAA;IACA,sBAAA;I3D6/KD;E2Dz/KD;IACE,cAAA;I3D2/KD;EACF;A4D/tLC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,cAAA;EACA,gBAAA;E5D6vLH;A4D3vLC;;;;;;;;;;;;;;;EACE,aAAA;E5D2wLH;AiCnxLD;E4BRE,gBAAA;EACA,mBAAA;EACA,oBAAA;E7D8xLD;AiCrxLD;EACE,yBAAA;EjCuxLD;AiCrxLD;EACE,wBAAA;EjCuxLD;AiC/wLD;EACE,0BAAA;EjCixLD;AiC/wLD;EACE,2BAAA;EjCixLD;AiC/wLD;EACE,oBAAA;EjCixLD;AiC/wLD;E6BzBE,aAAA;EACA,oBAAA;EACA,mBAAA;EACA,+BAAA;EACA,WAAA;E9D2yLD;AiC7wLD;EACE,0BAAA;EACA,+BAAA;EjC+wLD;AiCxwLD;EACE,iBAAA;E5B2FA,yCAAA;EACQ,oCAAA;EAAA,iCAAA;ELgrLT;A+D9yLD;EACE,qBAAA;E/DgzLD;A+D1yLD;;;;ECdE,0BAAA;EhE8zLD;A+DzyLD;;;;;;;;;;;;EAYE,0BAAA;E/D2yLD;A+DpyLD;EAAA;IChDE,2BAAA;IhEw1LC;EgEv1LD;IAAU,gBAAA;IhE01LT;EgEz1LD;IAAU,+BAAA;IhE41LT;EgE31LD;;IACU,gCAAA;IhE81LT;EACF;A+D9yLD;EAAA;IAFI,2BAAA;I/DozLD;EACF;A+D9yLD;EAAA;IAFI,4BAAA;I/DozLD;EACF;A+D9yLD;EAAA;IAFI,kCAAA;I/DozLD;EACF;A+D7yLD;EAAA;ICrEE,2BAAA;IhEs3LC;EgEr3LD;IAAU,gBAAA;IhEw3LT;EgEv3LD;IAAU,+BAAA;IhE03LT;EgEz3LD;;IACU,gCAAA;IhE43LT;EACF;A+DvzLD;EAAA;IAFI,2BAAA;I/D6zLD;EACF;A+DvzLD;EAAA;IAFI,4BAAA;I/D6zLD;EACF;A+DvzLD;EAAA;IAFI,kCAAA;I/D6zLD;EACF;A+DtzLD;EAAA;IC1FE,2BAAA;IhEo5LC;EgEn5LD;IAAU,gBAAA;IhEs5LT;EgEr5LD;IAAU,+BAAA;IhEw5LT;EgEv5LD;;IACU,gCAAA;IhE05LT;EACF;A+Dh0LD;EAAA;IAFI,2BAAA;I/Ds0LD;EACF;A+Dh0LD;EAAA;IAFI,4BAAA;I/Ds0LD;EACF;A+Dh0LD;EAAA;IAFI,kCAAA;I/Ds0LD;EACF;A+D/zLD;EAAA;IC/GE,2BAAA;IhEk7LC;EgEj7LD;IAAU,gBAAA;IhEo7LT;EgEn7LD;IAAU,+BAAA;IhEs7LT;EgEr7LD;;IACU,gCAAA;IhEw7LT;EACF;A+Dz0LD;EAAA;IAFI,2BAAA;I/D+0LD;EACF;A+Dz0LD;EAAA;IAFI,4BAAA;I/D+0LD;EACF;A+Dz0LD;EAAA;IAFI,kCAAA;I/D+0LD;EACF;A+Dx0LD;EAAA;IC5HE,0BAAA;IhEw8LC;EACF;A+Dx0LD;EAAA;ICjIE,0BAAA;IhE68LC;EACF;A+Dx0LD;EAAA;ICtIE,0BAAA;IhEk9LC;EACF;A+Dx0LD;EAAA;IC3IE,0BAAA;IhEu9LC;EACF;A+Dr0LD;ECnJE,0BAAA;EhE29LD;A+Dl0LD;EAAA;ICjKE,2BAAA;IhEu+LC;EgEt+LD;IAAU,gBAAA;IhEy+LT;EgEx+LD;IAAU,+BAAA;IhE2+LT;EgE1+LD;;IACU,gCAAA;IhE6+LT;EACF;A+Dh1LD;EACE,0BAAA;E/Dk1LD;A+D70LD;EAAA;IAFI,2BAAA;I/Dm1LD;EACF;A+Dj1LD;EACE,0BAAA;E/Dm1LD;A+D90LD;EAAA;IAFI,4BAAA;I/Do1LD;EACF;A+Dl1LD;EACE,0BAAA;E/Do1LD;A+D/0LD;EAAA;IAFI,kCAAA;I/Dq1LD;EACF;A+D90LD;EAAA;ICpLE,0BAAA;IhEsgMC;EACF","sourcesContent":[null,"/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n * {\n text-shadow: none !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links for images, or javascript/internal links\n a[href^=\"javascript:\"]:after,\n a[href^=\"#\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .table {\n td,\n th {\n background-color: #fff !important;\n }\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n width: 100% \\9; // Force IE10 and below to size SVG images correctly\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\n// Undo browser default styling\ncite {\n font-style: normal;\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n content: \"\";\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-child(odd) {\n > td,\n > th {\n background-color: @table-bg-accent;\n }\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n > td,\n > th {\n background-color: @table-bg-hover;\n }\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n overflow-x: auto;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n -webkit-overflow-scrolling: touch;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n cursor: not-allowed;\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned.\n// As a workaround, we set a pixel line-height that matches the\n// given height of the input. Since this fucks up everything else, we have to\n// appropriately reset it for Internet Explorer and the size variations.\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n line-height: @input-height-base;\n // IE8+ misaligns the text within date inputs, so we reset\n line-height: @line-height-base ~\"\\0\";\n\n &.input-sm {\n line-height: @input-height-small;\n }\n &.input-lg {\n line-height: @input-height-large;\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n min-height: @line-height-computed; // clear the floating input if there is no label text\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: not-allowed;\n }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n &.disabled,\n fieldset[disabled] & {\n cursor: not-allowed;\n }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: not-allowed;\n }\n }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n\n &.input-lg,\n &.input-sm {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n}\n.input-lg + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Reposition feedback icon if label is hidden with \"screenreader only\" state\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match (which also avoids\n // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n top: 0;\n right: (@grid-gutter-width / 2);\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n }\n }\n .form-control {\n &:extend(.input-lg);\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n }\n }\n .form-control {\n &:extend(.input-sm);\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: not-allowed;\n pointer-events: none; // Future-proof disabling of clicks\n .opacity(.65);\n .box-shadow(none);\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n cursor: pointer;\n border-radius: 0;\n\n &,\n &:active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition(height .35s ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base solid;\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: not-allowed;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base solid;\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 1px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n &:focus {\n // Remove focus outline when dropdown JS adds it after closing the menu\n outline: 0;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `opacity`. We cannot\n// use `display: none;` or `visibility: hidden;` as that also hides the popover.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 for more.\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n position: absolute;\n z-index: -1;\n .opacity(0);\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n .translate3d(0, 0, 0);\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n\n &.navbar-right:last-child {\n margin-right: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n\n // Outdent the form if last child to line up with content down the page\n &.navbar-right:last-child {\n margin-right: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n\n // Outdent the form if last child to line up with content down the page\n &.navbar-right:last-child {\n margin-right: 0;\n }\n }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n .translate3d(0, 0, 0);\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: not-allowed;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: not-allowed;\n }\n }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n \n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n .btn-xs & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n a.list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: (@font-size-base * 4.5);\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n// Account for lower percentages\n.progress-bar {\n &[aria-valuenow=\"1\"],\n &[aria-valuenow=\"2\"] {\n min-width: 30px;\n }\n\n &[aria-valuenow=\"0\"] {\n color: @gray-light;\n min-width: 30px;\n background-color: transparent;\n background-image: none;\n box-shadow: none;\n }\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n > .pull-left {\n margin-right: 10px;\n }\n > .pull-right {\n margin-left: 10px;\n }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n + .panel-collapse > .panel-body {\n border-top: 1px solid @panel-inner-border;\n }\n }\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n\n // Modifier class for 16:9 aspect ratio\n &.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n }\n\n // Modifier class for 4:3 aspect ratio\n &.embed-responsive-4by3 {\n padding-bottom: 75%;\n }\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate3d(0, -25%, 0);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate3d(0, 0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n visibility: visible;\n font-size: @font-size-small;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n text-align: left; // Reset given new insertion method\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 18px;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: -15px;\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: -15px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]}
@@ -0,0 +1,5 @@+/*!+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
@@ -1,1427 +0,0 @@-// Copyright 2006 Google Inc.-//-// Licensed under the Apache License, Version 2.0 (the "License");-// you may not use this file except in compliance with the License.-// You may obtain a copy of the License at-//-// http://www.apache.org/licenses/LICENSE-2.0-//-// Unless required by applicable law or agreed to in writing, software-// distributed under the License is distributed on an "AS IS" BASIS,-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-// See the License for the specific language governing permissions and-// limitations under the License.---// Known Issues:-//-// * Patterns only support repeat.-// * Radial gradient are not implemented. The VML version of these look very-// different from the canvas one.-// * Clipping paths are not implemented.-// * Coordsize. The width and height attribute have higher priority than the-// width and height style values which isn't correct.-// * Painting mode isn't implemented.-// * Canvas width/height should is using content-box by default. IE in-// Quirks mode will draw the canvas using border-box. Either change your-// doctype to HTML5-// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)-// or use Box Sizing Behavior from WebFX-// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)-// * Non uniform scaling does not correctly scale strokes.-// * Filling very large shapes (above 5000 points) is buggy.-// * Optimize. There is always room for speed improvements.--// Only add this code if we do not already have a canvas implementation-if (!document.createElement('canvas').getContext) {--(function() {-- // alias some functions to make (compiled) code shorter- var m = Math;- var mr = m.round;- var ms = m.sin;- var mc = m.cos;- var abs = m.abs;- var sqrt = m.sqrt;-- // this is used for sub pixel precision- var Z = 10;- var Z2 = Z / 2;-- /**- * This funtion is assigned to the <canvas> elements as element.getContext().- * @this {HTMLElement}- * @return {CanvasRenderingContext2D_}- */- function getContext() {- return this.context_ ||- (this.context_ = new CanvasRenderingContext2D_(this));- }-- var slice = Array.prototype.slice;-- /**- * Binds a function to an object. The returned function will always use the- * passed in {@code obj} as {@code this}.- *- * Example:- *- * g = bind(f, obj, a, b)- * g(c, d) // will do f.call(obj, a, b, c, d)- *- * @param {Function} f The function to bind the object to- * @param {Object} obj The object that should act as this when the function- * is called- * @param {*} var_args Rest arguments that will be used as the initial- * arguments when the function is called- * @return {Function} A new function that has bound this- */- function bind(f, obj, var_args) {- var a = slice.call(arguments, 2);- return function() {- return f.apply(obj, a.concat(slice.call(arguments)));- };- }-- function encodeHtmlAttribute(s) {- return String(s).replace(/&/g, '&').replace(/"/g, '"');- }-- function addNamespacesAndStylesheet(doc) {- // create xmlns- if (!doc.namespaces['g_vml_']) {- doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml',- '#default#VML');-- }- if (!doc.namespaces['g_o_']) {- doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office',- '#default#VML');- }-- // Setup default CSS. Only add one style sheet per document- if (!doc.styleSheets['ex_canvas_']) {- var ss = doc.createStyleSheet();- ss.owningElement.id = 'ex_canvas_';- ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +- // default size is 300x150 in Gecko and Opera- 'text-align:left;width:300px;height:150px}';- }- }-- // Add namespaces and stylesheet at startup.- addNamespacesAndStylesheet(document);-- var G_vmlCanvasManager_ = {- init: function(opt_doc) {- if (/MSIE/.test(navigator.userAgent) && !window.opera) {- var doc = opt_doc || document;- // Create a dummy element so that IE will allow canvas elements to be- // recognized.- doc.createElement('canvas');- doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));- }- },-- init_: function(doc) {- // find all canvas elements- var els = doc.getElementsByTagName('canvas');- for (var i = 0; i < els.length; i++) {- this.initElement(els[i]);- }- },-- /**- * Public initializes a canvas element so that it can be used as canvas- * element from now on. This is called automatically before the page is- * loaded but if you are creating elements using createElement you need to- * make sure this is called on the element.- * @param {HTMLElement} el The canvas element to initialize.- * @return {HTMLElement} the element that was created.- */- initElement: function(el) {- if (!el.getContext) {- el.getContext = getContext;-- // Add namespaces and stylesheet to document of the element.- addNamespacesAndStylesheet(el.ownerDocument);-- // Remove fallback content. There is no way to hide text nodes so we- // just remove all childNodes. We could hide all elements and remove- // text nodes but who really cares about the fallback content.- el.innerHTML = '';-- // do not use inline function because that will leak memory- el.attachEvent('onpropertychange', onPropertyChange);- el.attachEvent('onresize', onResize);-- var attrs = el.attributes;- if (attrs.width && attrs.width.specified) {- // TODO: use runtimeStyle and coordsize- // el.getContext().setWidth_(attrs.width.nodeValue);- el.style.width = attrs.width.nodeValue + 'px';- } else {- el.width = el.clientWidth;- }- if (attrs.height && attrs.height.specified) {- // TODO: use runtimeStyle and coordsize- // el.getContext().setHeight_(attrs.height.nodeValue);- el.style.height = attrs.height.nodeValue + 'px';- } else {- el.height = el.clientHeight;- }- //el.getContext().setCoordsize_()- }- return el;- }- };-- function onPropertyChange(e) {- var el = e.srcElement;-- switch (e.propertyName) {- case 'width':- el.getContext().clearRect();- el.style.width = el.attributes.width.nodeValue + 'px';- // In IE8 this does not trigger onresize.- el.firstChild.style.width = el.clientWidth + 'px';- break;- case 'height':- el.getContext().clearRect();- el.style.height = el.attributes.height.nodeValue + 'px';- el.firstChild.style.height = el.clientHeight + 'px';- break;- }- }-- function onResize(e) {- var el = e.srcElement;- if (el.firstChild) {- el.firstChild.style.width = el.clientWidth + 'px';- el.firstChild.style.height = el.clientHeight + 'px';- }- }-- G_vmlCanvasManager_.init();-- // precompute "00" to "FF"- var decToHex = [];- for (var i = 0; i < 16; i++) {- for (var j = 0; j < 16; j++) {- decToHex[i * 16 + j] = i.toString(16) + j.toString(16);- }- }-- function createMatrixIdentity() {- return [- [1, 0, 0],- [0, 1, 0],- [0, 0, 1]- ];- }-- function matrixMultiply(m1, m2) {- var result = createMatrixIdentity();-- for (var x = 0; x < 3; x++) {- for (var y = 0; y < 3; y++) {- var sum = 0;-- for (var z = 0; z < 3; z++) {- sum += m1[x][z] * m2[z][y];- }-- result[x][y] = sum;- }- }- return result;- }-- function copyState(o1, o2) {- o2.fillStyle = o1.fillStyle;- o2.lineCap = o1.lineCap;- o2.lineJoin = o1.lineJoin;- o2.lineWidth = o1.lineWidth;- o2.miterLimit = o1.miterLimit;- o2.shadowBlur = o1.shadowBlur;- o2.shadowColor = o1.shadowColor;- o2.shadowOffsetX = o1.shadowOffsetX;- o2.shadowOffsetY = o1.shadowOffsetY;- o2.strokeStyle = o1.strokeStyle;- o2.globalAlpha = o1.globalAlpha;- o2.font = o1.font;- o2.textAlign = o1.textAlign;- o2.textBaseline = o1.textBaseline;- o2.arcScaleX_ = o1.arcScaleX_;- o2.arcScaleY_ = o1.arcScaleY_;- o2.lineScale_ = o1.lineScale_;- }-- var colorData = {- aliceblue: '#F0F8FF',- antiquewhite: '#FAEBD7',- aquamarine: '#7FFFD4',- azure: '#F0FFFF',- beige: '#F5F5DC',- bisque: '#FFE4C4',- black: '#000000',- blanchedalmond: '#FFEBCD',- blueviolet: '#8A2BE2',- brown: '#A52A2A',- burlywood: '#DEB887',- cadetblue: '#5F9EA0',- chartreuse: '#7FFF00',- chocolate: '#D2691E',- coral: '#FF7F50',- cornflowerblue: '#6495ED',- cornsilk: '#FFF8DC',- crimson: '#DC143C',- cyan: '#00FFFF',- darkblue: '#00008B',- darkcyan: '#008B8B',- darkgoldenrod: '#B8860B',- darkgray: '#A9A9A9',- darkgreen: '#006400',- darkgrey: '#A9A9A9',- darkkhaki: '#BDB76B',- darkmagenta: '#8B008B',- darkolivegreen: '#556B2F',- darkorange: '#FF8C00',- darkorchid: '#9932CC',- darkred: '#8B0000',- darksalmon: '#E9967A',- darkseagreen: '#8FBC8F',- darkslateblue: '#483D8B',- darkslategray: '#2F4F4F',- darkslategrey: '#2F4F4F',- darkturquoise: '#00CED1',- darkviolet: '#9400D3',- deeppink: '#FF1493',- deepskyblue: '#00BFFF',- dimgray: '#696969',- dimgrey: '#696969',- dodgerblue: '#1E90FF',- firebrick: '#B22222',- floralwhite: '#FFFAF0',- forestgreen: '#228B22',- gainsboro: '#DCDCDC',- ghostwhite: '#F8F8FF',- gold: '#FFD700',- goldenrod: '#DAA520',- grey: '#808080',- greenyellow: '#ADFF2F',- honeydew: '#F0FFF0',- hotpink: '#FF69B4',- indianred: '#CD5C5C',- indigo: '#4B0082',- ivory: '#FFFFF0',- khaki: '#F0E68C',- lavender: '#E6E6FA',- lavenderblush: '#FFF0F5',- lawngreen: '#7CFC00',- lemonchiffon: '#FFFACD',- lightblue: '#ADD8E6',- lightcoral: '#F08080',- lightcyan: '#E0FFFF',- lightgoldenrodyellow: '#FAFAD2',- lightgreen: '#90EE90',- lightgrey: '#D3D3D3',- lightpink: '#FFB6C1',- lightsalmon: '#FFA07A',- lightseagreen: '#20B2AA',- lightskyblue: '#87CEFA',- lightslategray: '#778899',- lightslategrey: '#778899',- lightsteelblue: '#B0C4DE',- lightyellow: '#FFFFE0',- limegreen: '#32CD32',- linen: '#FAF0E6',- magenta: '#FF00FF',- mediumaquamarine: '#66CDAA',- mediumblue: '#0000CD',- mediumorchid: '#BA55D3',- mediumpurple: '#9370DB',- mediumseagreen: '#3CB371',- mediumslateblue: '#7B68EE',- mediumspringgreen: '#00FA9A',- mediumturquoise: '#48D1CC',- mediumvioletred: '#C71585',- midnightblue: '#191970',- mintcream: '#F5FFFA',- mistyrose: '#FFE4E1',- moccasin: '#FFE4B5',- navajowhite: '#FFDEAD',- oldlace: '#FDF5E6',- olivedrab: '#6B8E23',- orange: '#FFA500',- orangered: '#FF4500',- orchid: '#DA70D6',- palegoldenrod: '#EEE8AA',- palegreen: '#98FB98',- paleturquoise: '#AFEEEE',- palevioletred: '#DB7093',- papayawhip: '#FFEFD5',- peachpuff: '#FFDAB9',- peru: '#CD853F',- pink: '#FFC0CB',- plum: '#DDA0DD',- powderblue: '#B0E0E6',- rosybrown: '#BC8F8F',- royalblue: '#4169E1',- saddlebrown: '#8B4513',- salmon: '#FA8072',- sandybrown: '#F4A460',- seagreen: '#2E8B57',- seashell: '#FFF5EE',- sienna: '#A0522D',- skyblue: '#87CEEB',- slateblue: '#6A5ACD',- slategray: '#708090',- slategrey: '#708090',- snow: '#FFFAFA',- springgreen: '#00FF7F',- steelblue: '#4682B4',- tan: '#D2B48C',- thistle: '#D8BFD8',- tomato: '#FF6347',- turquoise: '#40E0D0',- violet: '#EE82EE',- wheat: '#F5DEB3',- whitesmoke: '#F5F5F5',- yellowgreen: '#9ACD32'- };--- function getRgbHslContent(styleString) {- var start = styleString.indexOf('(', 3);- var end = styleString.indexOf(')', start + 1);- var parts = styleString.substring(start + 1, end).split(',');- // add alpha if needed- if (parts.length == 4 && styleString.substr(3, 1) == 'a') {- alpha = Number(parts[3]);- } else {- parts[3] = 1;- }- return parts;- }-- function percent(s) {- return parseFloat(s) / 100;- }-- function clamp(v, min, max) {- return Math.min(max, Math.max(min, v));- }-- function hslToRgb(parts){- var r, g, b;- h = parseFloat(parts[0]) / 360 % 360;- if (h < 0)- h++;- s = clamp(percent(parts[1]), 0, 1);- l = clamp(percent(parts[2]), 0, 1);- if (s == 0) {- r = g = b = l; // achromatic- } else {- var q = l < 0.5 ? l * (1 + s) : l + s - l * s;- var p = 2 * l - q;- r = hueToRgb(p, q, h + 1 / 3);- g = hueToRgb(p, q, h);- b = hueToRgb(p, q, h - 1 / 3);- }-- return '#' + decToHex[Math.floor(r * 255)] +- decToHex[Math.floor(g * 255)] +- decToHex[Math.floor(b * 255)];- }-- function hueToRgb(m1, m2, h) {- if (h < 0)- h++;- if (h > 1)- h--;-- if (6 * h < 1)- return m1 + (m2 - m1) * 6 * h;- else if (2 * h < 1)- return m2;- else if (3 * h < 2)- return m1 + (m2 - m1) * (2 / 3 - h) * 6;- else- return m1;- }-- function processStyle(styleString) {- var str, alpha = 1;-- styleString = String(styleString);- if (styleString.charAt(0) == '#') {- str = styleString;- } else if (/^rgb/.test(styleString)) {- var parts = getRgbHslContent(styleString);- var str = '#', n;- for (var i = 0; i < 3; i++) {- if (parts[i].indexOf('%') != -1) {- n = Math.floor(percent(parts[i]) * 255);- } else {- n = Number(parts[i]);- }- str += decToHex[clamp(n, 0, 255)];- }- alpha = parts[3];- } else if (/^hsl/.test(styleString)) {- var parts = getRgbHslContent(styleString);- str = hslToRgb(parts);- alpha = parts[3];- } else {- str = colorData[styleString] || styleString;- }- return {color: str, alpha: alpha};- }-- var DEFAULT_STYLE = {- style: 'normal',- variant: 'normal',- weight: 'normal',- size: 10,- family: 'sans-serif'- };-- // Internal text style cache- var fontStyleCache = {};-- function processFontStyle(styleString) {- if (fontStyleCache[styleString]) {- return fontStyleCache[styleString];- }-- var el = document.createElement('div');- var style = el.style;- try {- style.font = styleString;- } catch (ex) {- // Ignore failures to set to invalid font.- }-- return fontStyleCache[styleString] = {- style: style.fontStyle || DEFAULT_STYLE.style,- variant: style.fontVariant || DEFAULT_STYLE.variant,- weight: style.fontWeight || DEFAULT_STYLE.weight,- size: style.fontSize || DEFAULT_STYLE.size,- family: style.fontFamily || DEFAULT_STYLE.family- };- }-- function getComputedStyle(style, element) {- var computedStyle = {};-- for (var p in style) {- computedStyle[p] = style[p];- }-- // Compute the size- var canvasFontSize = parseFloat(element.currentStyle.fontSize),- fontSize = parseFloat(style.size);-- if (typeof style.size == 'number') {- computedStyle.size = style.size;- } else if (style.size.indexOf('px') != -1) {- computedStyle.size = fontSize;- } else if (style.size.indexOf('em') != -1) {- computedStyle.size = canvasFontSize * fontSize;- } else if(style.size.indexOf('%') != -1) {- computedStyle.size = (canvasFontSize / 100) * fontSize;- } else if (style.size.indexOf('pt') != -1) {- computedStyle.size = fontSize / .75;- } else {- computedStyle.size = canvasFontSize;- }-- // Different scaling between normal text and VML text. This was found using- // trial and error to get the same size as non VML text.- computedStyle.size *= 0.981;-- return computedStyle;- }-- function buildStyle(style) {- return style.style + ' ' + style.variant + ' ' + style.weight + ' ' +- style.size + 'px ' + style.family;- }-- function processLineCap(lineCap) {- switch (lineCap) {- case 'butt':- return 'flat';- case 'round':- return 'round';- case 'square':- default:- return 'square';- }- }-- /**- * This class implements CanvasRenderingContext2D interface as described by- * the WHATWG.- * @param {HTMLElement} surfaceElement The element that the 2D context should- * be associated with- */- function CanvasRenderingContext2D_(surfaceElement) {- this.m_ = createMatrixIdentity();-- this.mStack_ = [];- this.aStack_ = [];- this.currentPath_ = [];-- // Canvas context properties- this.strokeStyle = '#000';- this.fillStyle = '#000';-- this.lineWidth = 1;- this.lineJoin = 'miter';- this.lineCap = 'butt';- this.miterLimit = Z * 1;- this.globalAlpha = 1;- this.font = '10px sans-serif';- this.textAlign = 'left';- this.textBaseline = 'alphabetic';- this.canvas = surfaceElement;-- var el = surfaceElement.ownerDocument.createElement('div');- el.style.width = surfaceElement.clientWidth + 'px';- el.style.height = surfaceElement.clientHeight + 'px';- el.style.overflow = 'hidden';- el.style.position = 'absolute';- surfaceElement.appendChild(el);-- this.element_ = el;- this.arcScaleX_ = 1;- this.arcScaleY_ = 1;- this.lineScale_ = 1;- }-- var contextPrototype = CanvasRenderingContext2D_.prototype;- contextPrototype.clearRect = function() {- if (this.textMeasureEl_) {- this.textMeasureEl_.removeNode(true);- this.textMeasureEl_ = null;- }- this.element_.innerHTML = '';- };-- contextPrototype.beginPath = function() {- // TODO: Branch current matrix so that save/restore has no effect- // as per safari docs.- this.currentPath_ = [];- };-- contextPrototype.moveTo = function(aX, aY) {- var p = this.getCoords_(aX, aY);- this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});- this.currentX_ = p.x;- this.currentY_ = p.y;- };-- contextPrototype.lineTo = function(aX, aY) {- var p = this.getCoords_(aX, aY);- this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});-- this.currentX_ = p.x;- this.currentY_ = p.y;- };-- contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,- aCP2x, aCP2y,- aX, aY) {- var p = this.getCoords_(aX, aY);- var cp1 = this.getCoords_(aCP1x, aCP1y);- var cp2 = this.getCoords_(aCP2x, aCP2y);- bezierCurveTo(this, cp1, cp2, p);- };-- // Helper function that takes the already fixed cordinates.- function bezierCurveTo(self, cp1, cp2, p) {- self.currentPath_.push({- type: 'bezierCurveTo',- cp1x: cp1.x,- cp1y: cp1.y,- cp2x: cp2.x,- cp2y: cp2.y,- x: p.x,- y: p.y- });- self.currentX_ = p.x;- self.currentY_ = p.y;- }-- contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {- // the following is lifted almost directly from- // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes-- var cp = this.getCoords_(aCPx, aCPy);- var p = this.getCoords_(aX, aY);-- var cp1 = {- x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),- y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)- };- var cp2 = {- x: cp1.x + (p.x - this.currentX_) / 3.0,- y: cp1.y + (p.y - this.currentY_) / 3.0- };-- bezierCurveTo(this, cp1, cp2, p);- };-- contextPrototype.arc = function(aX, aY, aRadius,- aStartAngle, aEndAngle, aClockwise) {- aRadius *= Z;- var arcType = aClockwise ? 'at' : 'wa';-- var xStart = aX + mc(aStartAngle) * aRadius - Z2;- var yStart = aY + ms(aStartAngle) * aRadius - Z2;-- var xEnd = aX + mc(aEndAngle) * aRadius - Z2;- var yEnd = aY + ms(aEndAngle) * aRadius - Z2;-- // IE won't render arches drawn counter clockwise if xStart == xEnd.- if (xStart == xEnd && !aClockwise) {- xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something- // that can be represented in binary- }-- var p = this.getCoords_(aX, aY);- var pStart = this.getCoords_(xStart, yStart);- var pEnd = this.getCoords_(xEnd, yEnd);-- this.currentPath_.push({type: arcType,- x: p.x,- y: p.y,- radius: aRadius,- xStart: pStart.x,- yStart: pStart.y,- xEnd: pEnd.x,- yEnd: pEnd.y});-- };-- contextPrototype.rect = function(aX, aY, aWidth, aHeight) {- this.moveTo(aX, aY);- this.lineTo(aX + aWidth, aY);- this.lineTo(aX + aWidth, aY + aHeight);- this.lineTo(aX, aY + aHeight);- this.closePath();- };-- contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {- var oldPath = this.currentPath_;- this.beginPath();-- this.moveTo(aX, aY);- this.lineTo(aX + aWidth, aY);- this.lineTo(aX + aWidth, aY + aHeight);- this.lineTo(aX, aY + aHeight);- this.closePath();- this.stroke();-- this.currentPath_ = oldPath;- };-- contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {- var oldPath = this.currentPath_;- this.beginPath();-- this.moveTo(aX, aY);- this.lineTo(aX + aWidth, aY);- this.lineTo(aX + aWidth, aY + aHeight);- this.lineTo(aX, aY + aHeight);- this.closePath();- this.fill();-- this.currentPath_ = oldPath;- };-- contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {- var gradient = new CanvasGradient_('gradient');- gradient.x0_ = aX0;- gradient.y0_ = aY0;- gradient.x1_ = aX1;- gradient.y1_ = aY1;- return gradient;- };-- contextPrototype.createRadialGradient = function(aX0, aY0, aR0,- aX1, aY1, aR1) {- var gradient = new CanvasGradient_('gradientradial');- gradient.x0_ = aX0;- gradient.y0_ = aY0;- gradient.r0_ = aR0;- gradient.x1_ = aX1;- gradient.y1_ = aY1;- gradient.r1_ = aR1;- return gradient;- };-- contextPrototype.drawImage = function(image, var_args) {- var dx, dy, dw, dh, sx, sy, sw, sh;-- // to find the original width we overide the width and height- var oldRuntimeWidth = image.runtimeStyle.width;- var oldRuntimeHeight = image.runtimeStyle.height;- image.runtimeStyle.width = 'auto';- image.runtimeStyle.height = 'auto';-- // get the original size- var w = image.width;- var h = image.height;-- // and remove overides- image.runtimeStyle.width = oldRuntimeWidth;- image.runtimeStyle.height = oldRuntimeHeight;-- if (arguments.length == 3) {- dx = arguments[1];- dy = arguments[2];- sx = sy = 0;- sw = dw = w;- sh = dh = h;- } else if (arguments.length == 5) {- dx = arguments[1];- dy = arguments[2];- dw = arguments[3];- dh = arguments[4];- sx = sy = 0;- sw = w;- sh = h;- } else if (arguments.length == 9) {- sx = arguments[1];- sy = arguments[2];- sw = arguments[3];- sh = arguments[4];- dx = arguments[5];- dy = arguments[6];- dw = arguments[7];- dh = arguments[8];- } else {- throw Error('Invalid number of arguments');- }-- var d = this.getCoords_(dx, dy);-- var w2 = sw / 2;- var h2 = sh / 2;-- var vmlStr = [];-- var W = 10;- var H = 10;-- // For some reason that I've now forgotten, using divs didn't work- vmlStr.push(' <g_vml_:group',- ' coordsize="', Z * W, ',', Z * H, '"',- ' coordorigin="0,0"' ,- ' style="width:', W, 'px;height:', H, 'px;position:absolute;');-- // If filters are necessary (rotation exists), create them- // filters are bog-slow, so only create them if abbsolutely necessary- // The following check doesn't account for skews (which don't exist- // in the canvas spec (yet) anyway.-- if (this.m_[0][0] != 1 || this.m_[0][1] ||- this.m_[1][1] != 1 || this.m_[1][0]) {- var filter = [];-- // Note the 12/21 reversal- filter.push('M11=', this.m_[0][0], ',',- 'M12=', this.m_[1][0], ',',- 'M21=', this.m_[0][1], ',',- 'M22=', this.m_[1][1], ',',- 'Dx=', mr(d.x / Z), ',',- 'Dy=', mr(d.y / Z), '');-- // Bounding box calculation (need to minimize displayed area so that- // filters don't waste time on unused pixels.- var max = d;- var c2 = this.getCoords_(dx + dw, dy);- var c3 = this.getCoords_(dx, dy + dh);- var c4 = this.getCoords_(dx + dw, dy + dh);-- max.x = m.max(max.x, c2.x, c3.x, c4.x);- max.y = m.max(max.y, c2.y, c3.y, c4.y);-- vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),- 'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',- filter.join(''), ", sizingmethod='clip');");-- } else {- vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');- }-- vmlStr.push(' ">' ,- '<g_vml_:image src="', image.src, '"',- ' style="width:', Z * dw, 'px;',- ' height:', Z * dh, 'px"',- ' cropleft="', sx / w, '"',- ' croptop="', sy / h, '"',- ' cropright="', (w - sx - sw) / w, '"',- ' cropbottom="', (h - sy - sh) / h, '"',- ' />',- '</g_vml_:group>');-- this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));- };-- contextPrototype.stroke = function(aFill) {- var W = 10;- var H = 10;- // Divide the shape into chunks if it's too long because IE has a limit- // somewhere for how long a VML shape can be. This simple division does- // not work with fills, only strokes, unfortunately.- var chunkSize = 5000;-- var min = {x: null, y: null};- var max = {x: null, y: null};-- for (var j = 0; j < this.currentPath_.length; j += chunkSize) {- var lineStr = [];- var lineOpen = false;-- lineStr.push('<g_vml_:shape',- ' filled="', !!aFill, '"',- ' style="position:absolute;width:', W, 'px;height:', H, 'px;"',- ' coordorigin="0,0"',- ' coordsize="', Z * W, ',', Z * H, '"',- ' stroked="', !aFill, '"',- ' path="');-- var newSeq = false;-- for (var i = j; i < Math.min(j + chunkSize, this.currentPath_.length); i++) {- if (i % chunkSize == 0 && i > 0) { // move into position for next chunk- lineStr.push(' m ', mr(this.currentPath_[i-1].x), ',', mr(this.currentPath_[i-1].y));- }-- var p = this.currentPath_[i];- var c;-- switch (p.type) {- case 'moveTo':- c = p;- lineStr.push(' m ', mr(p.x), ',', mr(p.y));- break;- case 'lineTo':- lineStr.push(' l ', mr(p.x), ',', mr(p.y));- break;- case 'close':- lineStr.push(' x ');- p = null;- break;- case 'bezierCurveTo':- lineStr.push(' c ',- mr(p.cp1x), ',', mr(p.cp1y), ',',- mr(p.cp2x), ',', mr(p.cp2y), ',',- mr(p.x), ',', mr(p.y));- break;- case 'at':- case 'wa':- lineStr.push(' ', p.type, ' ',- mr(p.x - this.arcScaleX_ * p.radius), ',',- mr(p.y - this.arcScaleY_ * p.radius), ' ',- mr(p.x + this.arcScaleX_ * p.radius), ',',- mr(p.y + this.arcScaleY_ * p.radius), ' ',- mr(p.xStart), ',', mr(p.yStart), ' ',- mr(p.xEnd), ',', mr(p.yEnd));- break;- }- - - // TODO: Following is broken for curves due to- // move to proper paths.- - // Figure out dimensions so we can do gradient fills- // properly- if (p) {- if (min.x == null || p.x < min.x) {- min.x = p.x;- }- if (max.x == null || p.x > max.x) {- max.x = p.x;- }- if (min.y == null || p.y < min.y) {- min.y = p.y;- }- if (max.y == null || p.y > max.y) {- max.y = p.y;- }- }- }- lineStr.push(' ">');- - if (!aFill) {- appendStroke(this, lineStr);- } else {- appendFill(this, lineStr, min, max);- }- - lineStr.push('</g_vml_:shape>');- - this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));- }- };-- function appendStroke(ctx, lineStr) {- var a = processStyle(ctx.strokeStyle);- var color = a.color;- var opacity = a.alpha * ctx.globalAlpha;- var lineWidth = ctx.lineScale_ * ctx.lineWidth;-- // VML cannot correctly render a line if the width is less than 1px.- // In that case, we dilute the color to make the line look thinner.- if (lineWidth < 1) {- opacity *= lineWidth;- }-- lineStr.push(- '<g_vml_:stroke',- ' opacity="', opacity, '"',- ' joinstyle="', ctx.lineJoin, '"',- ' miterlimit="', ctx.miterLimit, '"',- ' endcap="', processLineCap(ctx.lineCap), '"',- ' weight="', lineWidth, 'px"',- ' color="', color, '" />'- );- }-- function appendFill(ctx, lineStr, min, max) {- var fillStyle = ctx.fillStyle;- var arcScaleX = ctx.arcScaleX_;- var arcScaleY = ctx.arcScaleY_;- var width = max.x - min.x;- var height = max.y - min.y;- if (fillStyle instanceof CanvasGradient_) {- // TODO: Gradients transformed with the transformation matrix.- var angle = 0;- var focus = {x: 0, y: 0};-- // additional offset- var shift = 0;- // scale factor for offset- var expansion = 1;-- if (fillStyle.type_ == 'gradient') {- var x0 = fillStyle.x0_ / arcScaleX;- var y0 = fillStyle.y0_ / arcScaleY;- var x1 = fillStyle.x1_ / arcScaleX;- var y1 = fillStyle.y1_ / arcScaleY;- var p0 = ctx.getCoords_(x0, y0);- var p1 = ctx.getCoords_(x1, y1);- var dx = p1.x - p0.x;- var dy = p1.y - p0.y;- angle = Math.atan2(dx, dy) * 180 / Math.PI;-- // The angle should be a non-negative number.- if (angle < 0) {- angle += 360;- }-- // Very small angles produce an unexpected result because they are- // converted to a scientific notation string.- if (angle < 1e-6) {- angle = 0;- }- } else {- var p0 = ctx.getCoords_(fillStyle.x0_, fillStyle.y0_);- focus = {- x: (p0.x - min.x) / width,- y: (p0.y - min.y) / height- };-- width /= arcScaleX * Z;- height /= arcScaleY * Z;- var dimension = m.max(width, height);- shift = 2 * fillStyle.r0_ / dimension;- expansion = 2 * fillStyle.r1_ / dimension - shift;- }-- // We need to sort the color stops in ascending order by offset,- // otherwise IE won't interpret it correctly.- var stops = fillStyle.colors_;- stops.sort(function(cs1, cs2) {- return cs1.offset - cs2.offset;- });-- var length = stops.length;- var color1 = stops[0].color;- var color2 = stops[length - 1].color;- var opacity1 = stops[0].alpha * ctx.globalAlpha;- var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;-- var colors = [];- for (var i = 0; i < length; i++) {- var stop = stops[i];- colors.push(stop.offset * expansion + shift + ' ' + stop.color);- }-- // When colors attribute is used, the meanings of opacity and o:opacity2- // are reversed.- lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"',- ' method="none" focus="100%"',- ' color="', color1, '"',- ' color2="', color2, '"',- ' colors="', colors.join(','), '"',- ' opacity="', opacity2, '"',- ' g_o_:opacity2="', opacity1, '"',- ' angle="', angle, '"',- ' focusposition="', focus.x, ',', focus.y, '" />');- } else if (fillStyle instanceof CanvasPattern_) {- if (width && height) {- var deltaLeft = -min.x;- var deltaTop = -min.y;- lineStr.push('<g_vml_:fill',- ' position="',- deltaLeft / width * arcScaleX * arcScaleX, ',',- deltaTop / height * arcScaleY * arcScaleY, '"',- ' type="tile"',- // TODO: Figure out the correct size to fit the scale.- //' size="', w, 'px ', h, 'px"',- ' src="', fillStyle.src_, '" />');- }- } else {- var a = processStyle(ctx.fillStyle);- var color = a.color;- var opacity = a.alpha * ctx.globalAlpha;- lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity,- '" />');- }- }-- contextPrototype.fill = function() {- this.stroke(true);- };-- contextPrototype.closePath = function() {- this.currentPath_.push({type: 'close'});- };-- /**- * @private- */- contextPrototype.getCoords_ = function(aX, aY) {- var m = this.m_;- return {- x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,- y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2- };- };-- contextPrototype.save = function() {- var o = {};- copyState(this, o);- this.aStack_.push(o);- this.mStack_.push(this.m_);- this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);- };-- contextPrototype.restore = function() {- if (this.aStack_.length) {- copyState(this.aStack_.pop(), this);- this.m_ = this.mStack_.pop();- }- };-- function matrixIsFinite(m) {- return isFinite(m[0][0]) && isFinite(m[0][1]) &&- isFinite(m[1][0]) && isFinite(m[1][1]) &&- isFinite(m[2][0]) && isFinite(m[2][1]);- }-- function setM(ctx, m, updateLineScale) {- if (!matrixIsFinite(m)) {- return;- }- ctx.m_ = m;-- if (updateLineScale) {- // Get the line scale.- // Determinant of this.m_ means how much the area is enlarged by the- // transformation. So its square root can be used as a scale factor- // for width.- var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];- ctx.lineScale_ = sqrt(abs(det));- }- }-- contextPrototype.translate = function(aX, aY) {- var m1 = [- [1, 0, 0],- [0, 1, 0],- [aX, aY, 1]- ];-- setM(this, matrixMultiply(m1, this.m_), false);- };-- contextPrototype.rotate = function(aRot) {- var c = mc(aRot);- var s = ms(aRot);-- var m1 = [- [c, s, 0],- [-s, c, 0],- [0, 0, 1]- ];-- setM(this, matrixMultiply(m1, this.m_), false);- };-- contextPrototype.scale = function(aX, aY) {- this.arcScaleX_ *= aX;- this.arcScaleY_ *= aY;- var m1 = [- [aX, 0, 0],- [0, aY, 0],- [0, 0, 1]- ];-- setM(this, matrixMultiply(m1, this.m_), true);- };-- contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {- var m1 = [- [m11, m12, 0],- [m21, m22, 0],- [dx, dy, 1]- ];-- setM(this, matrixMultiply(m1, this.m_), true);- };-- contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {- var m = [- [m11, m12, 0],- [m21, m22, 0],- [dx, dy, 1]- ];-- setM(this, m, true);- };-- /**- * The text drawing function.- * The maxWidth argument isn't taken in account, since no browser supports- * it yet.- */- contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {- var m = this.m_,- delta = 1000,- left = 0,- right = delta,- offset = {x: 0, y: 0},- lineStr = [];-- var fontStyle = getComputedStyle(processFontStyle(this.font),- this.element_);-- var fontStyleString = buildStyle(fontStyle);-- var elementStyle = this.element_.currentStyle;- var textAlign = this.textAlign.toLowerCase();- switch (textAlign) {- case 'left':- case 'center':- case 'right':- break;- case 'end':- textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';- break;- case 'start':- textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';- break;- default:- textAlign = 'left';- }-- // 1.75 is an arbitrary number, as there is no info about the text baseline- switch (this.textBaseline) {- case 'hanging':- case 'top':- offset.y = fontStyle.size / 1.75;- break;- case 'middle':- break;- default:- case null:- case 'alphabetic':- case 'ideographic':- case 'bottom':- offset.y = -fontStyle.size / 2.25;- break;- }-- switch(textAlign) {- case 'right':- left = delta;- right = 0.05;- break;- case 'center':- left = right = delta / 2;- break;- }-- var d = this.getCoords_(x + offset.x, y + offset.y);-- lineStr.push('<g_vml_:line from="', -left ,' 0" to="', right ,' 0.05" ',- ' coordsize="100 100" coordorigin="0 0"',- ' filled="', !stroke, '" stroked="', !!stroke,- '" style="position:absolute;width:1px;height:1px;">');-- if (stroke) {- appendStroke(this, lineStr);- } else {- // TODO: Fix the min and max params.- appendFill(this, lineStr, {x: -left, y: 0},- {x: right, y: fontStyle.size});- }-- var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' +- m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';-- var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);-- lineStr.push('<g_vml_:skew on="t" matrix="', skewM ,'" ',- ' offset="', skewOffset, '" origin="', left ,' 0" />',- '<g_vml_:path textpathok="true" />',- '<g_vml_:textpath on="true" string="',- encodeHtmlAttribute(text),- '" style="v-text-align:', textAlign,- ';font:', encodeHtmlAttribute(fontStyleString),- '" /></g_vml_:line>');-- this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));- };-- contextPrototype.fillText = function(text, x, y, maxWidth) {- this.drawText_(text, x, y, maxWidth, false);- };-- contextPrototype.strokeText = function(text, x, y, maxWidth) {- this.drawText_(text, x, y, maxWidth, true);- };-- contextPrototype.measureText = function(text) {- if (!this.textMeasureEl_) {- var s = '<span style="position:absolute;' +- 'top:-20000px;left:0;padding:0;margin:0;border:none;' +- 'white-space:pre;"></span>';- this.element_.insertAdjacentHTML('beforeEnd', s);- this.textMeasureEl_ = this.element_.lastChild;- }- var doc = this.element_.ownerDocument;- this.textMeasureEl_.innerHTML = '';- this.textMeasureEl_.style.font = this.font;- // Don't use innerHTML or innerText because they allow markup/whitespace.- this.textMeasureEl_.appendChild(doc.createTextNode(text));- return {width: this.textMeasureEl_.offsetWidth};- };-- /******** STUBS ********/- contextPrototype.clip = function() {- // TODO: Implement- };-- contextPrototype.arcTo = function() {- // TODO: Implement- };-- contextPrototype.createPattern = function(image, repetition) {- return new CanvasPattern_(image, repetition);- };-- // Gradient / Pattern Stubs- function CanvasGradient_(aType) {- this.type_ = aType;- this.x0_ = 0;- this.y0_ = 0;- this.r0_ = 0;- this.x1_ = 0;- this.y1_ = 0;- this.r1_ = 0;- this.colors_ = [];- }-- CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {- aColor = processStyle(aColor);- this.colors_.push({offset: aOffset,- color: aColor.color,- alpha: aColor.alpha});- };-- function CanvasPattern_(image, repetition) {- assertImageIsValid(image);- switch (repetition) {- case 'repeat':- case null:- case '':- this.repetition_ = 'repeat';- break- case 'repeat-x':- case 'repeat-y':- case 'no-repeat':- this.repetition_ = repetition;- break;- default:- throwException('SYNTAX_ERR');- }-- this.src_ = image.src;- this.width_ = image.width;- this.height_ = image.height;- }-- function throwException(s) {- throw new DOMException_(s);- }-- function assertImageIsValid(img) {- if (!img || img.nodeType != 1 || img.tagName != 'IMG') {- throwException('TYPE_MISMATCH_ERR');- }- if (img.readyState != 'complete') {- throwException('INVALID_STATE_ERR');- }- }-- function DOMException_(s) {- this.code = this[s];- this.message = s +': DOM Exception ' + this.code;- }- var p = DOMException_.prototype = new Error;- p.INDEX_SIZE_ERR = 1;- p.DOMSTRING_SIZE_ERR = 2;- p.HIERARCHY_REQUEST_ERR = 3;- p.WRONG_DOCUMENT_ERR = 4;- p.INVALID_CHARACTER_ERR = 5;- p.NO_DATA_ALLOWED_ERR = 6;- p.NO_MODIFICATION_ALLOWED_ERR = 7;- p.NOT_FOUND_ERR = 8;- p.NOT_SUPPORTED_ERR = 9;- p.INUSE_ATTRIBUTE_ERR = 10;- p.INVALID_STATE_ERR = 11;- p.SYNTAX_ERR = 12;- p.INVALID_MODIFICATION_ERR = 13;- p.NAMESPACE_ERR = 14;- p.INVALID_ACCESS_ERR = 15;- p.VALIDATION_ERR = 16;- p.TYPE_MISMATCH_ERR = 17;-- // set up externs- G_vmlCanvasManager = G_vmlCanvasManager_;- CanvasRenderingContext2D = CanvasRenderingContext2D_;- CanvasGradient = CanvasGradient_;- CanvasPattern = CanvasPattern_;- DOMException = DOMException_;-})();--} // if
@@ -1,1 +0,0 @@-if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&").replace(/"/g,""")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};
binary file changed (1150 → absent bytes)
binary file changed (absent → 20335 bytes)
@@ -0,0 +1,229 @@+<?xml version="1.0" standalone="no"?>+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >+<svg xmlns="http://www.w3.org/2000/svg">+<metadata></metadata>+<defs>+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >+<font-face units-per-em="1200" ascent="960" descent="-240" />+<missing-glyph horiz-adv-x="500" />+<glyph />+<glyph />+<glyph unicode="
" />+<glyph unicode=" " />+<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />+<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />+<glyph unicode=" " />+<glyph unicode=" " horiz-adv-x="652" />+<glyph unicode=" " horiz-adv-x="1304" />+<glyph unicode=" " horiz-adv-x="652" />+<glyph unicode=" " horiz-adv-x="1304" />+<glyph unicode=" " horiz-adv-x="434" />+<glyph unicode=" " horiz-adv-x="326" />+<glyph unicode=" " horiz-adv-x="217" />+<glyph unicode=" " horiz-adv-x="217" />+<glyph unicode=" " horiz-adv-x="163" />+<glyph unicode=" " horiz-adv-x="260" />+<glyph unicode=" " horiz-adv-x="72" />+<glyph unicode=" " horiz-adv-x="260" />+<glyph unicode=" " horiz-adv-x="326" />+<glyph unicode="€" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />+<glyph unicode="−" d="M200 400h900v300h-900v-300z" />+<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />+<glyph unicode="☁" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />+<glyph unicode="✉" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />+<glyph unicode="✏" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />+<glyph unicode="" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />+<glyph unicode="" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />+<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />+<glyph unicode="" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />+<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />+<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />+<glyph unicode="" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />+<glyph unicode="" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />+<glyph unicode="" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />+<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />+<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />+<glyph unicode="" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />+<glyph unicode="" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />+<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />+<glyph unicode="" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />+<glyph unicode="" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />+<glyph unicode="" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />+<glyph unicode="" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />+<glyph unicode="" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />+<glyph unicode="" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />+<glyph unicode="" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />+<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />+<glyph unicode="" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />+<glyph unicode="" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />+<glyph unicode="" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />+<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />+<glyph unicode="" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />+<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />+<glyph unicode="" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />+<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />+<glyph unicode="" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />+<glyph unicode="" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />+<glyph unicode="" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />+<glyph unicode="" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />+<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />+<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />+<glyph unicode="" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />+<glyph unicode="" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />+<glyph unicode="" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />+<glyph unicode="" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />+<glyph unicode="" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />+<glyph unicode="" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />+<glyph unicode="" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />+<glyph unicode="" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />+<glyph unicode="" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />+<glyph unicode="" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />+<glyph unicode="" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />+<glyph unicode="" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />+<glyph unicode="" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />+<glyph unicode="" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />+<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />+<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />+<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />+<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />+<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />+<glyph unicode="" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />+<glyph unicode="" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />+<glyph unicode="" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />+<glyph unicode="" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />+<glyph unicode="" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />+<glyph unicode="" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />+<glyph unicode="" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />+<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />+<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />+<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />+<glyph unicode="" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />+<glyph unicode="" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />+<glyph unicode="" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />+<glyph unicode="" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />+<glyph unicode="" d="M200 0l900 550l-900 550v-1100z" />+<glyph unicode="" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />+<glyph unicode="" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />+<glyph unicode="" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />+<glyph unicode="" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />+<glyph unicode="" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />+<glyph unicode="" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />+<glyph unicode="" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />+<glyph unicode="" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />+<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />+<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />+<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />+<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />+<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />+<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />+<glyph unicode="" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />+<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />+<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />+<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />+<glyph unicode="" d="M0 547l600 453v-300h600v-300h-600v-301z" />+<glyph unicode="" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />+<glyph unicode="" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />+<glyph unicode="" d="M104 600h296v600h300v-600h298l-449 -600z" />+<glyph unicode="" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />+<glyph unicode="" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />+<glyph unicode="" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />+<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />+<glyph unicode="" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />+<glyph unicode="" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />+<glyph unicode="" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />+<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />+<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />+<glyph unicode="" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />+<glyph unicode="" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />+<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />+<glyph unicode="" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />+<glyph unicode="" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />+<glyph unicode="" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />+<glyph unicode="" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />+<glyph unicode="" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />+<glyph unicode="" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />+<glyph unicode="" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />+<glyph unicode="" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />+<glyph unicode="" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />+<glyph unicode="" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />+<glyph unicode="" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />+<glyph unicode="" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />+<glyph unicode="" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />+<glyph unicode="" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />+<glyph unicode="" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />+<glyph unicode="" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />+<glyph unicode="" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />+<glyph unicode="" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />+<glyph unicode="" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />+<glyph unicode="" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />+<glyph unicode="" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />+<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />+<glyph unicode="" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />+<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />+<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />+<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />+<glyph unicode="" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />+<glyph unicode="" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />+<glyph unicode="" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />+<glyph unicode="" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />+<glyph unicode="" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />+<glyph unicode="" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />+<glyph unicode="" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />+<glyph unicode="" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />+<glyph unicode="" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />+<glyph unicode="" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />+<glyph unicode="" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />+<glyph unicode="" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />+<glyph unicode="" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />+<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />+<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />+<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />+<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />+<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />+<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />+<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />+<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />+<glyph unicode="" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />+<glyph unicode="" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />+<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />+<glyph unicode="" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />+<glyph unicode="" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />+<glyph unicode="" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />+<glyph unicode="" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />+<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />+<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />+<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />+<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />+<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />+<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />+<glyph unicode="" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />+<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />+<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />+<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />+<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />+<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />+<glyph unicode="" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />+<glyph unicode="" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />+<glyph unicode="" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />+<glyph unicode="" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />+<glyph unicode="" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />+<glyph unicode="" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />+<glyph unicode="" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />+<glyph unicode="" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />+<glyph unicode="" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />+<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />+<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />+<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />+<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />+<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />+<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />+<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />+<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />+<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />+<glyph unicode="" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />+<glyph unicode="" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />+<glyph unicode="" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />+<glyph unicode="" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />+<glyph unicode="" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />+</font>+</defs></svg>
binary file changed (absent → 41280 bytes)
binary file changed (absent → 23320 bytes)
@@ -0,0 +1,262 @@+/* hledger web ui styles */++/*------------------------------------------------------------------------------------------*/+/* 1. colours */++/* green */+body { background-color:white; color:black; }+.registerreport .odd { background-color:#ded; }+/* .transactionsreport .odd { background-color:#eee; } */+.filtering { background-color:#e0e0e0; }+a:link, a:visited { color:#00e; }+/* a:link:hover, a:visited:hover { color:red; } */+/* #main { border-color:#e0e0e0; } see below */+/* .journalreport td { border-color:thin solid #e0e0e0; } see below */++/* white */+/* body { background-color:#fff; } */+/* .registerreport .odd { background-color:#eee; } */+/* .filtering { background-color:#ddd; } */+/* #main { border-color:#eee; } see below */+/* .journalreport td { border-color:thin solid #eee; } see below */++#message { color:red; background-color:#fee; }+/* #addform input.textinput, #addform .dhx_combo_input, .dhx_combo_list { /\*background-color:#eee;*\/ } */+#editform textarea { background-color:#eee; }+.negative { color:#800; }+.help { }++#sidebar .hoverlinks { visibility:hidden; }+/* #sidebar .mouseover { background-color:rgba(208,208,208,0.5); } */+#sidebar .mouseover .hoverlinks { visibility:visible; }++#sidebar .balancereport .hoverlinks { margin-left:0em; font-weight:normal; /*font-size:smaller;*/ display:inline-block; text-align:right; }+#sidebar .balancereport .hoverlinks a { margin-left:0.5em; }+/* #sidebar .notinacct, .notinacct :link, .notinacct :visited { color:#888; } */+#sidebar .notinacct .negative { color:#b77; }+#sidebar .balancereport .inacct { font-weight:bold; }+/* #sidebar .balancereport .inacct { background-color:#e0e0e0; } */+#sidebar .balancereport .numpostings { padding-left:1em; color:#aaa; }+#sidebar .current { font-weight:bold; }++/*------------------------------------------------------------------------------------------*/+/* 2. font families & sizes */+/* overspecified for cross-browser robustness */+body { font-size:16px; }+/*+body { font-family:helvetica,arial,sans-serif; }+pre { font-family:courier,"courier new",monospace; }+.dhx_combo_input, .dhx_combo_list { font-size:small; }+#editform textarea { font-family:courier,"courier new",monospace; font-size:small; }+.nav2 { font-size:small; }+#searchform { font-size:small; }+.topleftlink { font-size:small; }+.toprightlink { font-size:small; }+#journaldesc { font-size:small; }+.togglelink { font-size:smaller; white-space:nowrap }+.help { font-size:smaller; }+.form { font-size:small; }+.transactionsreport { font-size:small; }+.entriesreport { font-size:small; }+.balancereport { font-size:small; }+.registerreport { font-size:small; }+.showall { font-size:small; }+*/+/* #addformlink { font-size:small; } */+/* #editformlink { font-size:small; } */+/*+#contenttitle { font-size:1.2em; }+*/++/*------------------------------------------------------------------------------------------*/+/* 3. layout */++body { margin:0; }+++#topbar { padding:2px; }+.topleftlink { float:left; margin-right:1em; padding:2px; }+.toprightlink { float:right; margin-left:1em; padding:2px; }+#topbar h1 { display:inline-block; vertical-align:top; margin:0; }+#journalinfo { vertical-align:middle; margin:0; }+/* #topbar { padding:4px; border-bottom:2px solid #ddd; } */++#message { margin:0.5em;}+.help { font-style: italic; }+.helprow td { padding-bottom:8px; }++#outermain { overflow:auto; }+#main { overflow:auto; padding-left:1em; }++#sidebar {+ float:left;+ padding-right:1em; + border-right:thin solid #e0e0e0;+ margin-bottom:5em;+}+/* #sidebar.affix { */+/* position: fixed; */+/* top: 20px; */+/* } */++.balancereport .item { border-top:thin solid #e0e0e0; }++#navlinks { margin-bottom:1em; }+.navlink { }+.navlinkcurrent { font-weight:bold; }+.form { margin:0em; }++#searchformdiv { margin:0 0 1em 0; }+#searchform { margin:0; }+#searchform span { padding:4px; }+#stopfilterlink { font-weight:bold; }+.filtering { font-weight:bold; }++#main .journal { }+#main .register { }+.current { font-weight:bold; }+.date { padding-left:0em; }+.description { padding-left:1em; white-space:normal; }+.account { padding-left:1em; white-space:normal; }+.amount { padding-left:1em; white-space:nowrap; }+.balance { padding-left:1em; padding-right:0.3em; white-space:nowrap; }+.amount, .balance { width:2em; } /* minimise width */+.positive { }++/* table.transactionsreport { border-spacing: 0; } */+/* .transactionsreport td { } */+/* .transactionsreport pre { margin-top:0; } */++/* table.entriesreport { border-spacing: 0; } */+/* .entriesreport td { } */+/* .entriesreport pre { margin-top:0; } */++.balancereport { border-spacing:0; }+.balancereport tr { vertical-align:bottom; border-spacing:0; }+.balancereport .title { white-space:nowrap; }+.balancereport .item { }+/* .balancereport .depth0 { padding-top:1em; } */+.balancereport td { padding:0; }+.totalrule td { border-top:thin solid black; }+.balancereport .account { white-space:nowrap; }++.hidden { display:none; }+table.registerreport { border-spacing:0; }+table.registerreport tr { vertical-align:top; }+table.registerreport td { padding-bottom:0.2em; }+table.registerreport .date { white-space:nowrap; }+table.registerreport tr.posting { font-size:smaller; }+table.registerreport tr.posting .account { padding-left:1.5em; }+table.registerreport tr.posting .amount { padding-right:0.5em; }+tr.firstposting td { }+/* tr.newday td { border-top: 1px solid #797; } */+/* tr.newday .date { font-weight:bold; } */+/* tr.newmonth td { border-top: 2px solid #464; } */+/* tr.newyear td { border-top: 3px solid black; } */+#accountsheading { white-space:nowrap; }+++#addform {+ /* margin:0 0 2em; */+ /* padding:.5em 0; */+ /* border-top:thin solid #e0e0e0; */+ /* border-bottom:thin solid #e0e0e0; */+}+#addform tr {+ vertical-align:top;+}+/* #addform input.textinput, #addform .dhx_combo_input, .dhx_combo_list { padding:4px; } */+/* #addform table { } */+/* #addform #addbuttonrow { text-align:right; } */+/* #editform { width:95%; } */+#editform textarea { width:100%; padding:4px; }+/* #searchform table { border-spacing:0; padding-left:0em; } */++::-moz-placeholder {+ font-style:italic;+}+:-moz-placeholder {+ font-style:italic;+}+::-webkit-input-placeholder {+ font-style:italic;+}+ :-ms-input-placeholder {+ font-style:italic;+}++/*------------------------------------------------------------------------------------------*/+/* 4. typeahead styles */++/*+.typeahead,+.tt-query,+.tt-hint {+ width: 396px;+ height: 30px;+ padding: 8px 12px;+ font-size: 24px;+ line-height: 30px;+ border: 2px solid #ccc;+ -webkit-border-radius: 8px;+ -moz-border-radius: 8px;+ border-radius: 8px;+ outline: none;+}++.typeahead {+ background-color: #fff;+}++.typeahead:focus {+ border: 2px solid #0097cf;+}++.tt-query {+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);+}++*/+.tt-hint {+ color: #bbb;+}++.tt-dropdown-menu {+ padding: 8px 0;+ background-color: #fff;+ border: 1px solid #ccc;+ border: 1px solid rgba(0, 0, 0, 0.2);+ -webkit-border-radius: 8px;+ -moz-border-radius: 8px;+ border-radius: 8px;+ -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);+ -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);+ box-shadow: 0 5px 10px rgba(0,0,0,.2);+ overflow:auto;+ max-height:300px;+}++.tt-suggestions {+}++.tt-suggestion {+ padding: 3px 20px;+ font-size: 18px;+ line-height: 24px;+}++.tt-suggestion.tt-cursor {+ color: #fff;+ background-color: #0097cf;++}++.tt-suggestion p {+ margin: 0;+}++.twitter-typeahead {+ width:100%;+}
@@ -1,177 +1,326 @@-/* hledger web ui javascripts */-/* depends on jquery, other support libs, and additional js inserted inline */+/* hledger web ui javascript */ +//----------------------------------------------------------------------+// STARTUP+ $(document).ready(function() { - /* show/hide things based on request parameters */- if ($.url.param('add')) addformToggle();- else if ($.url.param('edit')) editformToggle();- if ($.url.param('accounts')=='0') $('#accounts').hide();+ // show add form if ?add=1+ if ($.url.param('add')) { addformShow(); } - /* set up sidebar account mouse-over handlers */- $('.balancereport td a').mouseenter(function(){ $(this).parent().addClass('mouseover'); });- $('.balancereport td').mouseleave(function(){ $(this).removeClass('mouseover'); });+ // sidebar account hover handlers+ $('#sidebar td a').mouseenter(function(){ $(this).parent().addClass('mouseover'); });+ $('#sidebar td').mouseleave(function(){ $(this).removeClass('mouseover'); }); - /* set up various show/hide toggles */- $('#search-help-link').click(function() { $('#search-help').slideToggle('fast'); event.preventDefault(); });- $('#accounts-toggle-link').click(function() { $('#accounts').slideToggle('fast'); event.preventDefault(); });- $('#all-postings-toggle-link').click(function() { $('.posting').toggle(); event.preventDefault(); });- $('.postings-toggle-link').click(function() { $(this).parent().parent().nextUntil(':not(.posting)').toggle(); event.preventDefault(); });+ // keyboard shortcuts+ // 'body' seems to hold focus better than document in FF+ $('body').bind('keydown', 'h', function(){ $('#helpmodal').modal('toggle'); return false; });+ $('body').bind('keydown', 'shift+/', function(){ $('#helpmodal').modal('toggle'); return false; });+ $('body').bind('keydown', 'j', function(){ location.href = '/journal'; return false; });+ $('body').bind('keydown', 's', function(){ sidebarToggle(); return false; });+ $('body').bind('keydown', 'a', function(){ addformShow(); return false; });+ $('body').bind('keydown', 'n', function(){ addformShow(); return false; });+ $('body').bind('keydown', 'f', function(){ $('#searchform input').focus(); return false; });+ $('body, #addform input, #addform select').bind('keydown', 'ctrl+shift+=', addformAddPosting);+ $('body, #addform input, #addform select').bind('keydown', 'ctrl+=', addformAddPosting);+ $('body, #addform input, #addform select').bind('keydown', 'ctrl+-', addformDeletePosting);+ $('#addform tr.posting:last > td:first input').bind('keydown', 'tab', addformAddPostingWithTab); }); -function searchformToggle() {- var a = document.getElementById('addform');- var e = document.getElementById('editform');- var f = document.getElementById('searchform');- var i = document.getElementById('importform');- var c = document.getElementById('maincontent');- var alink = document.getElementById('addformlink');- var elink = document.getElementById('editformlink');- var flink = document.getElementById('searchformlink');- var ilink = document.getElementById('importformlink');- var tlink = document.getElementById('transactionslink');+//----------------------------------------------------------------------+// REGISTER CHART - if (f.style.display == 'none') {- flink.style['font-weight'] = 'bold';- f.style.display = 'block';- } else {- flink.style['font-weight'] = 'normal';- f.style.display = 'none';- }- return false;+function registerChart($container, series) {+ // https://github.com/flot/flot/blob/master/API.md+ return $container.plot(+ series,+ { /* general chart options */+ // series: {+ // },+ // yaxis: {+ // /* ticks: 6, */+ // },+ xaxis: {+ mode: "time",+ timeformat: "%Y/%m/%d"+ /* ticks: 6, */+ },+ grid: {+ markings:+ function (axes) {+ var now = Date.now();+ var markings = [+ // {+ // xaxis: { to: now }, // past+ // yaxis: { from: 0, to: 0 }, // =0+ // color: '#d88',+ // lineWidth:1+ // },+ {+ xaxis: { to: now }, // past+ yaxis: { to: 0 }, // <0+ color: '#ffdddd',+ },++ // {+ // xaxis: { from: now, to: now }, // now+ // color: '#bbb',+ // },++ {+ xaxis: { from: now }, // future+ yaxis: { from: 0 }, // >0+ // color: '#dddddd',+ color: '#e0e0e0',+ },+ {+ xaxis: { from: now }, // future+ yaxis: { to: 0 }, // <0+ // color: '#ddbbbb',+ color: '#e8c8c8',+ },+ {+ // xaxis: { from: now }, // future+ yaxis: { from: 0, to: 0 }, // =0+ color: '#bb0000',+ lineWidth:1+ },+ ];+ // console.log(markings);+ return markings;+ },+ hoverable: true,+ autoHighlight: true,+ clickable: true,+ },+ /* https://github.com/krzysu/flot.tooltip */+ tooltip: true,+ tooltipOpts: {+ xDateFormat: "%Y/%m/%d",+ content:+ function(label, x, y, flotitem) {+ var data = flotitem.series.data[flotitem.dataIndex];+ return data[3]+" balance on %x after "+data[2]+" posted by transaction:<pre>"+data[4]+"</pre>";+ },+ onHover: function(flotitem, $tooltipel) {+ $tooltipel.css('border-color',flotitem.series.color);+ },+ },+ }+ ).data("plot"); } -function addformToggle(ev) {- var a = document.getElementById('addform');- var e = document.getElementById('editform');- var f = document.getElementById('searchform');- var i = document.getElementById('importform');- var c = document.getElementById('maincontent');- var alink = document.getElementById('addformlink');- var elink = document.getElementById('editformlink');- var flink = document.getElementById('searchformlink');- var ilink = document.getElementById('importformlink');- var tlink = document.getElementById('transactionslink');+function registerChartClick(ev, pos, item) {+ if (item) {+ var date = $.plot.dateGenerator(item.datapoint[0], {});+ var dateid = $.plot.formatDate(date, '%Y-%m-%d');+ $target = $('#'+dateid);+ if ($target.length)+ $('html, body').animate({+ scrollTop: $target.offset().top+ }, 1000);+ }+} - if (a.style.display == 'none') {- if (alink) alink.style['font-weight'] = 'bold';- if (elink) elink.style['font-weight'] = 'normal';- if (ilink) ilink.style['font-weight'] = 'normal';- if (tlink) tlink.style['font-weight'] = 'normal';- if (a) a.style.display = 'block';- if (e) e.style.display = 'none';- if (i) i.style.display = 'none';- if (c) c.style.display = 'none';- } else {- if (alink) alink.style['font-weight'] = 'normal';- if (elink) elink.style['font-weight'] = 'normal';- if (ilink) ilink.style['font-weight'] = 'normal';- if (tlink) tlink.style['font-weight'] = 'bold';- if (a) a.style.display = 'none';- if (e) e.style.display = 'none';- if (i) i.style.display = 'none';- if (c) c.style.display = 'block';- }- return false;+//----------------------------------------------------------------------+// ADD FORM++function addformShow() {+ addformReset();+ $('#addmodal')+ .on('shown.bs.modal', function (e) {+ addformFocus();+ })+ .modal('show'); } -function editformToggle(ev) {- var a = document.getElementById('addform');- var e = document.getElementById('editform');- var ej = document.getElementById('journalselect');- var f = document.getElementById('searchform');- var i = document.getElementById('importform');- var c = document.getElementById('maincontent');- var alink = document.getElementById('addformlink');- var elink = document.getElementById('editformlink');- var flink = document.getElementById('searchformlink');- var ilink = document.getElementById('importformlink');- var tlink = document.getElementById('transactionslink');+// Make sure the add form is empty and clean for display.+function addformReset() {+ if ($('form#addform').length > 0) {+ $('form#addform')[0].reset();+ $('input#date').val('today');+ // reset typehead state (though not fetched completions)+ $('.typeahead').typeahead('val', '');+ $('.tt-dropdown-menu').hide();+ }+} - if (e.style.display == 'none') {- if (alink) alink.style['font-weight'] = 'normal';- if (elink) elink.style['font-weight'] = 'bold';- if (ilink) ilink.style['font-weight'] = 'normal';- if (tlink) tlink.style['font-weight'] = 'normal';- if (a) a.style.display = 'none';- if (i) i.style.display = 'none';- if (c) c.style.display = 'none';- if (e) e.style.display = 'block';- editformJournalSelect(ev);- } else {- if (alink) alink.style['font-weight'] = 'normal';- if (elink) elink.style['font-weight'] = 'normal';- if (ilink) ilink.style['font-weight'] = 'normal';- if (tlink) tlink.style['font-weight'] = 'bold';- if (a) a.style.display = 'none';- if (e) e.style.display = 'none';- if (i) i.style.display = 'none';- if (c) c.style.display = 'block';- }- return false;+// Focus the first add form field.+function addformFocus() {+ focus($('#addform input#date')); } -// Get the current event's target in a robust way.-// http://www.quirksmode.org/js/events_properties.html-function getTarget(ev) {- var targ;- if (!ev) var ev = window.event;- if (ev.target) targ = ev.target;- else if (ev.srcElement) targ = ev.srcElement;- if (targ.nodeType == 3) targ = targ.parentNode;- return targ;+// Focus a jquery-wrapped element, working around http://stackoverflow.com/a/7046837.+function focus($el) {+ setTimeout(function (){+ $el.focus();+ }, 0); } -function editformJournalSelect(ev) {- var textareas = $('textarea', $('form#editform'));- for (i=0; i<textareas.length; i++) {- textareas[i].style.display = 'none';- textareas[i].disabled = true;- }- var targ = getTarget(ev);- if (targ.value) {- var journalid = targ.value+'_textarea';- var textarea = document.getElementById(journalid);- }- else {- var textarea = textareas[0];- }- textarea.style.display = 'block';- textarea.disabled = false;- return true;+// Insert another posting row in the add form.+function addformAddPosting() {+ // do nothing if it's not currently visible+ if (!$('#addform').is(':visible')) return;+ // save a copy of last row+ var lastrow = $('#addform tr.posting:last').clone();++ // replace the submit button with an amount field, clear and renumber it, add the keybindings+ $('#addform tr.posting:last > td:last')+ .html( $('#addform tr.posting:first > td:last').html() );+ var num = $('#addform tr.posting').length;+ $('#addform tr.posting:last > td:last input:last') // input:last here and elsewhere is to avoid autocomplete's extra input+ .val('')+ .prop('id','amount'+num)+ .prop('name','amount'+num)+ .prop('placeholder','Amount '+num)+ .bind('keydown', 'ctrl+shift+=', addformAddPosting)+ .bind('keydown', 'ctrl+=', addformAddPosting)+ .bind('keydown', 'ctrl+-', addformDeletePosting);++ // set up the new last row's account field.+ // First typehead, it's hard to enable on new DOM elements+ var $acctinput = lastrow.find('.account-input:last');+ // XXX nothing works+ // $acctinput.typeahead('destroy'); //,'NoCached');+ // lastrow.on("DOMNodeInserted", function () {+ // //$(this).find(".typeahead").typeahead();+ // console.log('DOMNodeInserted');+ // // infinite loop+ // console.log($(this).find('.typeahead'));+ // //enableTypeahead($(this).find('.typeahead'), accountsSuggester);+ // });+ // setTimeout(function (){+ // $('#addform tr.posting:last input.account-input').typeahead('destroy');+ // enableTypeahead($('#addform tr.posting:last input.account-input:last'), accountsSuggester);+ // }, 1000);++ // insert the new last row+ $('#addform > table > tbody').append(lastrow);++ // clear and renumber the field, add keybindings+ $acctinput+ .val('')+ .prop('id','account'+(num+1))+ .prop('name','account'+(num+1))+ .prop('placeholder','Account '+(num+1));+ //lastrow.find('input') // not :last this time+ $acctinput+ .bind('keydown', 'ctrl+shift+=', addformAddPosting)+ .bind('keydown', 'ctrl+=', addformAddPosting)+ .bind('keydown', 'ctrl+-', addformDeletePosting)+ .bind('keydown', 'tab', addformAddPostingWithTab); } -function importformToggle(ev) {- var a = document.getElementById('addform');- var e = document.getElementById('editform');- var f = document.getElementById('searchform');- var i = document.getElementById('importform');- var c = document.getElementById('maincontent');- var alink = document.getElementById('addformlink');- var elink = document.getElementById('editformlink');- var flink = document.getElementById('searchformlink');- var ilink = document.getElementById('importformlink');- var tlink = document.getElementById('transactionslink');+// Insert another posting row by tabbing within the last field, also advancing the focus.+function addformAddPostingWithTab(ev) {+ // do nothing if called from a non-last row (don't know how to remove keybindings)+ if ($(ev.target).is('#addform input.account-input:last')) {+ addformAddPosting();+ focus($('#addform input.amount-input:last')); // help FF+ return false;+ }+ else+ return true;+} - if (i.style.display == 'none') {- if (alink) alink.style['font-weight'] = 'normal';- if (elink) elink.style['font-weight'] = 'normal';- if (ilink) ilink.style['font-weight'] = 'bold';- if (tlink) tlink.style['font-weight'] = 'normal';- if (a) a.style.display = 'none';- if (e) e.style.display = 'none';- if (i) i.style.display = 'block';- if (c) c.style.display = 'none';- } else {- if (alink) alink.style['font-weight'] = 'normal';- if (elink) elink.style['font-weight'] = 'normal';- if (ilink) ilink.style['font-weight'] = 'normal';- if (tlink) tlink.style['font-weight'] = 'bold';- if (a) a.style.display = 'none';- if (e) e.style.display = 'none';- if (i) i.style.display = 'none';- if (c) c.style.display = 'block';- }- return false;+// Remove the add form's last posting row, if empty, keeping at least two.+function addformDeletePosting() {+ var num = $('#addform tr.posting').length;+ if (num <= 2+ || $('#addform tr.posting:last > td:first input:last').val() != ''+ ) return;+ // copy submit button+ var btn = $('#addform tr.posting:last > td:last').html();+ // remember if the last row's field or button had focus+ var focuslost =+ $('#addform tr.posting:last > td:first input:last').is(':focus')+ || $('#addform tr.posting:last button').is(':focus');+ // delete last row+ $('#addform tr.posting:last').remove();+ // remember if the last amount field had focus+ focuslost = focuslost || + $('#addform tr.posting:last > td:last input:last').is(':focus');+ // replace new last row's amount field with the button+ $('#addform tr.posting:last > td:last').html(btn);+ // if deleted row had focus, focus the new last row+ if (focuslost) $('#addform tr.posting:last > td:first input:last').focus(); }++//----------------------------------------------------------------------+// SIDEBAR++function sidebarToggle() {+ //console.log('sidebarToggle');+ var visible = $('#sidebar').is(':visible');+ //console.log('sidebar visibility was',visible);+ // if opening sidebar, start an ajax fetch of its content+ if (!visible) {+ //console.log('getting sidebar content');+ $.get("sidebar"+ ,null+ ,function(data) {+ //console.log( "success" );+ $("#sidebar-body" ).html(data);+ })+ .done(function() {+ //console.log( "success 2" );+ })+ .fail(function() {+ //console.log( "error" );+ });+ }+ // localStorage.setItem('sidebarVisible', !visible);+ // set a cookie to communicate the new sidebar state to the server+ $.cookie('showsidebar', visible ? '0' : '1');+ // horizontally slide the sidebar in or out+ // how to make it smooth, without delayed content pop-in ?+ //$('#sidebar').animate({'width': 'toggle'});+ //$('#sidebar').animate({'width': visible ? 'hide' : '+=20m'});+ //$('#sidebar-spacer').width(200);+ $('#sidebar').animate({'width': visible ? 'hide' : 'show'});+}++//----------------------------------------------------------------------+// MISC++function enableTypeahead($el, suggester) {+ return $el.typeahead(+ {+ highlight: true+ },+ {+ source: suggester.ttAdapter()+ }+ );+}++// function journalSelect(ev) {+// var textareas = $('textarea', $('form#editform'));+// for (i=0; i<textareas.length; i++) {+// textareas[i].style.display = 'none';+// textareas[i].disabled = true;+// }+// var targ = getTarget(ev);+// if (targ.value) {+// var journalid = targ.value+'_textarea';+// var textarea = document.getElementById(journalid);+// }+// else {+// var textarea = textareas[0];+// }+// textarea.style.display = 'block';+// textarea.disabled = false;+// return true;+// }++// // Get the current event's target in a robust way.+// // http://www.quirksmode.org/js/events_properties.html+// function getTarget(ev) {+// var targ;+// if (!ev) var ev = window.event;+// if (ev.target) targ = ev.target;+// else if (ev.srcElement) targ = ev.srcElement;+// if (targ.nodeType == 3) targ = targ.parentNode;+// return targ;+// }
binary file changed (8777 → absent bytes)
binary file changed (13826 → absent bytes)
@@ -1,2599 +0,0 @@-/*! Javascript plotting library for jQuery, v. 0.7.- *- * Released under the MIT license by IOLA, December 2007.- *- */--// first an inline dependency, jquery.colorhelpers.js, we inline it here-// for convenience--/* Plugin for jQuery for working with colors.- * - * Version 1.1.- * - * Inspiration from jQuery color animation plugin by John Resig.- *- * Released under the MIT license by Ole Laursen, October 2009.- *- * Examples:- *- * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()- * var c = $.color.extract($("#mydiv"), 'background-color');- * console.log(c.r, c.g, c.b, c.a);- * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"- *- * Note that .scale() and .add() return the same modified object- * instead of making a new one.- *- * V. 1.1: Fix error handling so e.g. parsing an empty string does- * produce a color rather than just crashing.- */ -(function(B){B.color={};B.color.make=function(F,E,C,D){var G={};G.r=F||0;G.g=E||0;G.b=C||0;G.a=D!=null?D:1;G.add=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]+=I}return G.normalize()};G.scale=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]*=I}return G.normalize()};G.toString=function(){if(G.a>=1){return"rgb("+[G.r,G.g,G.b].join(",")+")"}else{return"rgba("+[G.r,G.g,G.b,G.a].join(",")+")"}};G.normalize=function(){function H(J,K,I){return K<J?J:(K>I?I:K)}G.r=H(0,parseInt(G.r),255);G.g=H(0,parseInt(G.g),255);G.b=H(0,parseInt(G.b),255);G.a=H(0,G.a,1);return G};G.clone=function(){return B.color.make(G.r,G.b,G.g,G.a)};return G.normalize()};B.color.extract=function(D,C){var E;do{E=D.css(C).toLowerCase();if(E!=""&&E!="transparent"){break}D=D.parent()}while(!B.nodeName(D.get(0),"body"));if(E=="rgba(0, 0, 0, 0)"){E="transparent"}return B.color.parse(E)};B.color.parse=function(F){var E,C=B.color.make;if(E=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10))}if(E=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10),parseFloat(E[4]))}if(E=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55)}if(E=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55,parseFloat(E[4]))}if(E=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(F)){return C(parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16))}if(E=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(F)){return C(parseInt(E[1]+E[1],16),parseInt(E[2]+E[2],16),parseInt(E[3]+E[3],16))}var D=B.trim(F).toLowerCase();if(D=="transparent"){return C(255,255,255,0)}else{E=A[D]||[0,0,0];return C(E[0],E[1],E[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);--// the actual Flot code-(function($) {- function Plot(placeholder, data_, options_, plugins) {- // data is on the form:- // [ series1, series2 ... ]- // where series is either just the data as [ [x1, y1], [x2, y2], ... ]- // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... }- - var series = [],- options = {- // the color theme used for graphs- colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],- legend: {- show: true,- noColumns: 1, // number of colums in legend table- labelFormatter: null, // fn: string -> string- labelBoxBorderColor: "#ccc", // border color for the little label boxes- container: null, // container (as jQuery object) to put legend in, null means default on top of graph- position: "ne", // position of default legend container within plot- margin: 5, // distance from grid edge to default legend container within plot- backgroundColor: null, // null means auto-detect- backgroundOpacity: 0.85 // set to 0 to avoid background- },- xaxis: {- show: null, // null = auto-detect, true = always, false = never- position: "bottom", // or "top"- mode: null, // null or "time"- color: null, // base color, labels, ticks- tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)"- transform: null, // null or f: number -> number to transform axis- inverseTransform: null, // if transform is set, this should be the inverse function- min: null, // min. value to show, null means set automatically- max: null, // max. value to show, null means set automatically- autoscaleMargin: null, // margin in % to add if auto-setting min/max- ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks- tickFormatter: null, // fn: number -> string- labelWidth: null, // size of tick labels in pixels- labelHeight: null,- reserveSpace: null, // whether to reserve space even if axis isn't shown- tickLength: null, // size in pixels of ticks, or "full" for whole line- alignTicksWithAxis: null, // axis number or null for no sync- - // mode specific options- tickDecimals: null, // no. of decimals, null means auto- tickSize: null, // number or [number, "unit"]- minTickSize: null, // number or [number, "unit"]- monthNames: null, // list of names of months- timeformat: null, // format string to use- twelveHourClock: false // 12 or 24 time in time mode- },- yaxis: {- autoscaleMargin: 0.02,- position: "left" // or "right"- },- xaxes: [],- yaxes: [],- series: {- points: {- show: false,- radius: 3,- lineWidth: 2, // in pixels- fill: true,- fillColor: "#ffffff",- symbol: "circle" // or callback- },- lines: {- // we don't put in show: false so we can see- // whether lines were actively disabled - lineWidth: 2, // in pixels- fill: false,- fillColor: null,- steps: false- },- bars: {- show: false,- lineWidth: 2, // in pixels- barWidth: 1, // in units of the x axis- fill: true,- fillColor: null,- align: "left", // or "center" - horizontal: false- },- shadowSize: 3- },- grid: {- show: true,- aboveData: false,- color: "#545454", // primary color used for outline and labels- backgroundColor: null, // null for transparent, else color- borderColor: null, // set if different from the grid color- tickColor: null, // color for the ticks, e.g. "rgba(0,0,0,0.15)"- labelMargin: 5, // in pixels- axisMargin: 8, // in pixels- borderWidth: 2, // in pixels- minBorderMargin: null, // in pixels, null means taken from points radius- markings: null, // array of ranges or fn: axes -> array of ranges- markingsColor: "#f4f4f4",- markingsLineWidth: 2,- // interactive stuff- clickable: false,- hoverable: false,- autoHighlight: true, // highlight in case mouse is near- mouseActiveRadius: 10 // how far the mouse can be away to activate an item- },- hooks: {}- },- canvas = null, // the canvas for the plot itself- overlay = null, // canvas for interactive stuff on top of plot- eventHolder = null, // jQuery object that events should be bound to- ctx = null, octx = null,- xaxes = [], yaxes = [],- plotOffset = { left: 0, right: 0, top: 0, bottom: 0},- canvasWidth = 0, canvasHeight = 0,- plotWidth = 0, plotHeight = 0,- hooks = {- processOptions: [],- processRawData: [],- processDatapoints: [],- drawSeries: [],- draw: [],- bindEvents: [],- drawOverlay: [],- shutdown: []- },- plot = this;-- // public functions- plot.setData = setData;- plot.setupGrid = setupGrid;- plot.draw = draw;- plot.getPlaceholder = function() { return placeholder; };- plot.getCanvas = function() { return canvas; };- plot.getPlotOffset = function() { return plotOffset; };- plot.width = function () { return plotWidth; };- plot.height = function () { return plotHeight; };- plot.offset = function () {- var o = eventHolder.offset();- o.left += plotOffset.left;- o.top += plotOffset.top;- return o;- };- plot.getData = function () { return series; };- plot.getAxes = function () {- var res = {}, i;- $.each(xaxes.concat(yaxes), function (_, axis) {- if (axis)- res[axis.direction + (axis.n != 1 ? axis.n : "") + "axis"] = axis;- });- return res;- };- plot.getXAxes = function () { return xaxes; };- plot.getYAxes = function () { return yaxes; };- plot.c2p = canvasToAxisCoords;- plot.p2c = axisToCanvasCoords;- plot.getOptions = function () { return options; };- plot.highlight = highlight;- plot.unhighlight = unhighlight;- plot.triggerRedrawOverlay = triggerRedrawOverlay;- plot.pointOffset = function(point) {- return {- left: parseInt(xaxes[axisNumber(point, "x") - 1].p2c(+point.x) + plotOffset.left),- top: parseInt(yaxes[axisNumber(point, "y") - 1].p2c(+point.y) + plotOffset.top)- };- };- plot.shutdown = shutdown;- plot.resize = function () {- getCanvasDimensions();- resizeCanvas(canvas);- resizeCanvas(overlay);- };-- // public attributes- plot.hooks = hooks;- - // initialize- initPlugins(plot);- parseOptions(options_);- setupCanvases();- setData(data_);- setupGrid();- draw();- bindEvents();--- function executeHooks(hook, args) {- args = [plot].concat(args);- for (var i = 0; i < hook.length; ++i)- hook[i].apply(this, args);- }-- function initPlugins() {- for (var i = 0; i < plugins.length; ++i) {- var p = plugins[i];- p.init(plot);- if (p.options)- $.extend(true, options, p.options);- }- }- - function parseOptions(opts) {- var i;- - $.extend(true, options, opts);- - if (options.xaxis.color == null)- options.xaxis.color = options.grid.color;- if (options.yaxis.color == null)- options.yaxis.color = options.grid.color;- - if (options.xaxis.tickColor == null) // backwards-compatibility- options.xaxis.tickColor = options.grid.tickColor;- if (options.yaxis.tickColor == null) // backwards-compatibility- options.yaxis.tickColor = options.grid.tickColor;-- if (options.grid.borderColor == null)- options.grid.borderColor = options.grid.color;- if (options.grid.tickColor == null)- options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();- - // fill in defaults in axes, copy at least always the- // first as the rest of the code assumes it'll be there- for (i = 0; i < Math.max(1, options.xaxes.length); ++i)- options.xaxes[i] = $.extend(true, {}, options.xaxis, options.xaxes[i]);- for (i = 0; i < Math.max(1, options.yaxes.length); ++i)- options.yaxes[i] = $.extend(true, {}, options.yaxis, options.yaxes[i]);-- // backwards compatibility, to be removed in future- if (options.xaxis.noTicks && options.xaxis.ticks == null)- options.xaxis.ticks = options.xaxis.noTicks;- if (options.yaxis.noTicks && options.yaxis.ticks == null)- options.yaxis.ticks = options.yaxis.noTicks;- if (options.x2axis) {- options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);- options.xaxes[1].position = "top";- }- if (options.y2axis) {- options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);- options.yaxes[1].position = "right";- }- if (options.grid.coloredAreas)- options.grid.markings = options.grid.coloredAreas;- if (options.grid.coloredAreasColor)- options.grid.markingsColor = options.grid.coloredAreasColor;- if (options.lines)- $.extend(true, options.series.lines, options.lines);- if (options.points)- $.extend(true, options.series.points, options.points);- if (options.bars)- $.extend(true, options.series.bars, options.bars);- if (options.shadowSize != null)- options.series.shadowSize = options.shadowSize;-- // save options on axes for future reference- for (i = 0; i < options.xaxes.length; ++i)- getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];- for (i = 0; i < options.yaxes.length; ++i)- getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];-- // add hooks from options- for (var n in hooks)- if (options.hooks[n] && options.hooks[n].length)- hooks[n] = hooks[n].concat(options.hooks[n]);-- executeHooks(hooks.processOptions, [options]);- }-- function setData(d) {- series = parseData(d);- fillInSeriesOptions();- processData();- }- - function parseData(d) {- var res = [];- for (var i = 0; i < d.length; ++i) {- var s = $.extend(true, {}, options.series);-- if (d[i].data != null) {- s.data = d[i].data; // move the data instead of deep-copy- delete d[i].data;-- $.extend(true, s, d[i]);-- d[i].data = s.data;- }- else- s.data = d[i];- res.push(s);- }-- return res;- }- - function axisNumber(obj, coord) {- var a = obj[coord + "axis"];- if (typeof a == "object") // if we got a real axis, extract number- a = a.n;- if (typeof a != "number")- a = 1; // default to first axis- return a;- }-- function allAxes() {- // return flat array without annoying null entries- return $.grep(xaxes.concat(yaxes), function (a) { return a; });- }- - function canvasToAxisCoords(pos) {- // return an object with x/y corresponding to all used axes - var res = {}, i, axis;- for (i = 0; i < xaxes.length; ++i) {- axis = xaxes[i];- if (axis && axis.used)- res["x" + axis.n] = axis.c2p(pos.left);- }-- for (i = 0; i < yaxes.length; ++i) {- axis = yaxes[i];- if (axis && axis.used)- res["y" + axis.n] = axis.c2p(pos.top);- }- - if (res.x1 !== undefined)- res.x = res.x1;- if (res.y1 !== undefined)- res.y = res.y1;-- return res;- }- - function axisToCanvasCoords(pos) {- // get canvas coords from the first pair of x/y found in pos- var res = {}, i, axis, key;-- for (i = 0; i < xaxes.length; ++i) {- axis = xaxes[i];- if (axis && axis.used) {- key = "x" + axis.n;- if (pos[key] == null && axis.n == 1)- key = "x";-- if (pos[key] != null) {- res.left = axis.p2c(pos[key]);- break;- }- }- }- - for (i = 0; i < yaxes.length; ++i) {- axis = yaxes[i];- if (axis && axis.used) {- key = "y" + axis.n;- if (pos[key] == null && axis.n == 1)- key = "y";-- if (pos[key] != null) {- res.top = axis.p2c(pos[key]);- break;- }- }- }- - return res;- }- - function getOrCreateAxis(axes, number) {- if (!axes[number - 1])- axes[number - 1] = {- n: number, // save the number for future reference- direction: axes == xaxes ? "x" : "y",- options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)- };- - return axes[number - 1];- }-- function fillInSeriesOptions() {- var i;- - // collect what we already got of colors- var neededColors = series.length,- usedColors = [],- assignedColors = [];- for (i = 0; i < series.length; ++i) {- var sc = series[i].color;- if (sc != null) {- --neededColors;- if (typeof sc == "number")- assignedColors.push(sc);- else- usedColors.push($.color.parse(series[i].color));- }- }- - // we might need to generate more colors if higher indices- // are assigned- for (i = 0; i < assignedColors.length; ++i) {- neededColors = Math.max(neededColors, assignedColors[i] + 1);- }-- // produce colors as needed- var colors = [], variation = 0;- i = 0;- while (colors.length < neededColors) {- var c;- if (options.colors.length == i) // check degenerate case- c = $.color.make(100, 100, 100);- else- c = $.color.parse(options.colors[i]);-- // vary color if needed- var sign = variation % 2 == 1 ? -1 : 1;- c.scale('rgb', 1 + sign * Math.ceil(variation / 2) * 0.2)-- // FIXME: if we're getting to close to something else,- // we should probably skip this one- colors.push(c);- - ++i;- if (i >= options.colors.length) {- i = 0;- ++variation;- }- }-- // fill in the options- var colori = 0, s;- for (i = 0; i < series.length; ++i) {- s = series[i];- - // assign colors- if (s.color == null) {- s.color = colors[colori].toString();- ++colori;- }- else if (typeof s.color == "number")- s.color = colors[s.color].toString();-- // turn on lines automatically in case nothing is set- if (s.lines.show == null) {- var v, show = true;- for (v in s)- if (s[v] && s[v].show) {- show = false;- break;- }- if (show)- s.lines.show = true;- }-- // setup axes- s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, "x"));- s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, "y"));- }- }- - function processData() {- var topSentry = Number.POSITIVE_INFINITY,- bottomSentry = Number.NEGATIVE_INFINITY,- fakeInfinity = Number.MAX_VALUE,- i, j, k, m, length,- s, points, ps, x, y, axis, val, f, p;-- function updateAxis(axis, min, max) {- if (min < axis.datamin && min != -fakeInfinity)- axis.datamin = min;- if (max > axis.datamax && max != fakeInfinity)- axis.datamax = max;- }-- $.each(allAxes(), function (_, axis) {- // init axis- axis.datamin = topSentry;- axis.datamax = bottomSentry;- axis.used = false;- });- - for (i = 0; i < series.length; ++i) {- s = series[i];- s.datapoints = { points: [] };- - executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);- }- - // first pass: clean and copy data- for (i = 0; i < series.length; ++i) {- s = series[i];-- var data = s.data, format = s.datapoints.format;-- if (!format) {- format = [];- // find out how to copy- format.push({ x: true, number: true, required: true });- format.push({ y: true, number: true, required: true });-- if (s.bars.show || (s.lines.show && s.lines.fill)) {- format.push({ y: true, number: true, required: false, defaultValue: 0 });- if (s.bars.horizontal) {- delete format[format.length - 1].y;- format[format.length - 1].x = true;- }- }- - s.datapoints.format = format;- }-- if (s.datapoints.pointsize != null)- continue; // already filled in-- s.datapoints.pointsize = format.length;- - ps = s.datapoints.pointsize;- points = s.datapoints.points;-- insertSteps = s.lines.show && s.lines.steps;- s.xaxis.used = s.yaxis.used = true;- - for (j = k = 0; j < data.length; ++j, k += ps) {- p = data[j];-- var nullify = p == null;- if (!nullify) {- for (m = 0; m < ps; ++m) {- val = p[m];- f = format[m];-- if (f) {- if (f.number && val != null) {- val = +val; // convert to number- if (isNaN(val))- val = null;- else if (val == Infinity)- val = fakeInfinity;- else if (val == -Infinity)- val = -fakeInfinity;- }-- if (val == null) {- if (f.required)- nullify = true;- - if (f.defaultValue != null)- val = f.defaultValue;- }- }- - points[k + m] = val;- }- }- - if (nullify) {- for (m = 0; m < ps; ++m) {- val = points[k + m];- if (val != null) {- f = format[m];- // extract min/max info- if (f.x)- updateAxis(s.xaxis, val, val);- if (f.y)- updateAxis(s.yaxis, val, val);- }- points[k + m] = null;- }- }- else {- // a little bit of line specific stuff that- // perhaps shouldn't be here, but lacking- // better means...- if (insertSteps && k > 0- && points[k - ps] != null- && points[k - ps] != points[k]- && points[k - ps + 1] != points[k + 1]) {- // copy the point to make room for a middle point- for (m = 0; m < ps; ++m)- points[k + ps + m] = points[k + m];-- // middle point has same y- points[k + 1] = points[k - ps + 1];-- // we've added a point, better reflect that- k += ps;- }- }- }- }-- // give the hooks a chance to run- for (i = 0; i < series.length; ++i) {- s = series[i];- - executeHooks(hooks.processDatapoints, [ s, s.datapoints]);- }-- // second pass: find datamax/datamin for auto-scaling- for (i = 0; i < series.length; ++i) {- s = series[i];- points = s.datapoints.points,- ps = s.datapoints.pointsize;-- var xmin = topSentry, ymin = topSentry,- xmax = bottomSentry, ymax = bottomSentry;- - for (j = 0; j < points.length; j += ps) {- if (points[j] == null)- continue;-- for (m = 0; m < ps; ++m) {- val = points[j + m];- f = format[m];- if (!f || val == fakeInfinity || val == -fakeInfinity)- continue;- - if (f.x) {- if (val < xmin)- xmin = val;- if (val > xmax)- xmax = val;- }- if (f.y) {- if (val < ymin)- ymin = val;- if (val > ymax)- ymax = val;- }- }- }- - if (s.bars.show) {- // make sure we got room for the bar on the dancing floor- var delta = s.bars.align == "left" ? 0 : -s.bars.barWidth/2;- if (s.bars.horizontal) {- ymin += delta;- ymax += delta + s.bars.barWidth;- }- else {- xmin += delta;- xmax += delta + s.bars.barWidth;- }- }- - updateAxis(s.xaxis, xmin, xmax);- updateAxis(s.yaxis, ymin, ymax);- }-- $.each(allAxes(), function (_, axis) {- if (axis.datamin == topSentry)- axis.datamin = null;- if (axis.datamax == bottomSentry)- axis.datamax = null;- });- }-- function makeCanvas(skipPositioning, cls) {- var c = document.createElement('canvas');- c.className = cls;- c.width = canvasWidth;- c.height = canvasHeight;- - if (!skipPositioning)- $(c).css({ position: 'absolute', left: 0, top: 0 });- - $(c).appendTo(placeholder);- - if (!c.getContext) // excanvas hack- c = window.G_vmlCanvasManager.initElement(c);-- // used for resetting in case we get replotted- c.getContext("2d").save();- - return c;- }-- function getCanvasDimensions() {- canvasWidth = placeholder.width();- canvasHeight = placeholder.height();- - if (canvasWidth <= 0 || canvasHeight <= 0)- throw "Invalid dimensions for plot, width = " + canvasWidth + ", height = " + canvasHeight;- }-- function resizeCanvas(c) {- // resizing should reset the state (excanvas seems to be- // buggy though)- if (c.width != canvasWidth)- c.width = canvasWidth;-- if (c.height != canvasHeight)- c.height = canvasHeight;-- // so try to get back to the initial state (even if it's- // gone now, this should be safe according to the spec)- var cctx = c.getContext("2d");- cctx.restore();-- // and save again- cctx.save();- }- - function setupCanvases() {- var reused,- existingCanvas = placeholder.children("canvas.base"),- existingOverlay = placeholder.children("canvas.overlay");-- if (existingCanvas.length == 0 || existingOverlay == 0) {- // init everything- - placeholder.html(""); // make sure placeholder is clear- - placeholder.css({ padding: 0 }); // padding messes up the positioning- - if (placeholder.css("position") == 'static')- placeholder.css("position", "relative"); // for positioning labels and overlay-- getCanvasDimensions();- - canvas = makeCanvas(true, "base");- overlay = makeCanvas(false, "overlay"); // overlay canvas for interactive features-- reused = false;- }- else {- // reuse existing elements-- canvas = existingCanvas.get(0);- overlay = existingOverlay.get(0);-- reused = true;- }-- ctx = canvas.getContext("2d");- octx = overlay.getContext("2d");-- // we include the canvas in the event holder too, because IE 7- // sometimes has trouble with the stacking order- eventHolder = $([overlay, canvas]);-- if (reused) {- // run shutdown in the old plot object- placeholder.data("plot").shutdown();-- // reset reused canvases- plot.resize();- - // make sure overlay pixels are cleared (canvas is cleared when we redraw)- octx.clearRect(0, 0, canvasWidth, canvasHeight);- - // then whack any remaining obvious garbage left- eventHolder.unbind();- placeholder.children().not([canvas, overlay]).remove();- }-- // save in case we get replotted- placeholder.data("plot", plot);- }-- function bindEvents() {- // bind events- if (options.grid.hoverable) {- eventHolder.mousemove(onMouseMove);- eventHolder.mouseleave(onMouseLeave);- }-- if (options.grid.clickable)- eventHolder.click(onClick);-- executeHooks(hooks.bindEvents, [eventHolder]);- }-- function shutdown() {- if (redrawTimeout)- clearTimeout(redrawTimeout);- - eventHolder.unbind("mousemove", onMouseMove);- eventHolder.unbind("mouseleave", onMouseLeave);- eventHolder.unbind("click", onClick);- - executeHooks(hooks.shutdown, [eventHolder]);- }-- function setTransformationHelpers(axis) {- // set helper functions on the axis, assumes plot area- // has been computed already- - function identity(x) { return x; }- - var s, m, t = axis.options.transform || identity,- it = axis.options.inverseTransform;- - // precompute how much the axis is scaling a point- // in canvas space- if (axis.direction == "x") {- s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));- m = Math.min(t(axis.max), t(axis.min));- }- else {- s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));- s = -s;- m = Math.max(t(axis.max), t(axis.min));- }-- // data point to canvas coordinate- if (t == identity) // slight optimization- axis.p2c = function (p) { return (p - m) * s; };- else- axis.p2c = function (p) { return (t(p) - m) * s; };- // canvas coordinate to data point- if (!it)- axis.c2p = function (c) { return m + c / s; };- else- axis.c2p = function (c) { return it(m + c / s); };- }-- function measureTickLabels(axis) {- var opts = axis.options, i, ticks = axis.ticks || [], labels = [],- l, w = opts.labelWidth, h = opts.labelHeight, dummyDiv;-- function makeDummyDiv(labels, width) {- return $('<div style="position:absolute;top:-10000px;' + width + 'font-size:smaller">' +- '<div class="' + axis.direction + 'Axis ' + axis.direction + axis.n + 'Axis">'- + labels.join("") + '</div></div>')- .appendTo(placeholder);- }- - if (axis.direction == "x") {- // to avoid measuring the widths of the labels (it's slow), we- // construct fixed-size boxes and put the labels inside- // them, we don't need the exact figures and the- // fixed-size box content is easy to center- if (w == null)- w = Math.floor(canvasWidth / (ticks.length > 0 ? ticks.length : 1));-- // measure x label heights- if (h == null) {- labels = [];- for (i = 0; i < ticks.length; ++i) {- l = ticks[i].label;- if (l)- labels.push('<div class="tickLabel" style="float:left;width:' + w + 'px">' + l + '</div>');- }-- if (labels.length > 0) {- // stick them all in the same div and measure- // collective height- labels.push('<div style="clear:left"></div>');- dummyDiv = makeDummyDiv(labels, "width:10000px;");- h = dummyDiv.height();- dummyDiv.remove();- }- }- }- else if (w == null || h == null) {- // calculate y label dimensions- for (i = 0; i < ticks.length; ++i) {- l = ticks[i].label;- if (l)- labels.push('<div class="tickLabel">' + l + '</div>');- }- - if (labels.length > 0) {- dummyDiv = makeDummyDiv(labels, "");- if (w == null)- w = dummyDiv.children().width();- if (h == null)- h = dummyDiv.find("div.tickLabel").height();- dummyDiv.remove();- }- }-- if (w == null)- w = 0;- if (h == null)- h = 0;-- axis.labelWidth = w;- axis.labelHeight = h;- }-- function allocateAxisBoxFirstPhase(axis) {- // find the bounding box of the axis by looking at label- // widths/heights and ticks, make room by diminishing the- // plotOffset-- var lw = axis.labelWidth,- lh = axis.labelHeight,- pos = axis.options.position,- tickLength = axis.options.tickLength,- axismargin = options.grid.axisMargin,- padding = options.grid.labelMargin,- all = axis.direction == "x" ? xaxes : yaxes,- index;-- // determine axis margin- var samePosition = $.grep(all, function (a) {- return a && a.options.position == pos && a.reserveSpace;- });- if ($.inArray(axis, samePosition) == samePosition.length - 1)- axismargin = 0; // outermost-- // determine tick length - if we're innermost, we can use "full"- if (tickLength == null)- tickLength = "full";-- var sameDirection = $.grep(all, function (a) {- return a && a.reserveSpace;- });-- var innermost = $.inArray(axis, sameDirection) == 0;- if (!innermost && tickLength == "full")- tickLength = 5;- - if (!isNaN(+tickLength))- padding += +tickLength;-- // compute box- if (axis.direction == "x") {- lh += padding;- - if (pos == "bottom") {- plotOffset.bottom += lh + axismargin;- axis.box = { top: canvasHeight - plotOffset.bottom, height: lh };- }- else {- axis.box = { top: plotOffset.top + axismargin, height: lh };- plotOffset.top += lh + axismargin;- }- }- else {- lw += padding;- - if (pos == "left") {- axis.box = { left: plotOffset.left + axismargin, width: lw };- plotOffset.left += lw + axismargin;- }- else {- plotOffset.right += lw + axismargin;- axis.box = { left: canvasWidth - plotOffset.right, width: lw };- }- }-- // save for future reference- axis.position = pos;- axis.tickLength = tickLength;- axis.box.padding = padding;- axis.innermost = innermost;- }-- function allocateAxisBoxSecondPhase(axis) {- // set remaining bounding box coordinates- if (axis.direction == "x") {- axis.box.left = plotOffset.left;- axis.box.width = plotWidth;- }- else {- axis.box.top = plotOffset.top;- axis.box.height = plotHeight;- }- }- - function setupGrid() {- var i, axes = allAxes();-- // first calculate the plot and axis box dimensions-- $.each(axes, function (_, axis) {- axis.show = axis.options.show;- if (axis.show == null)- axis.show = axis.used; // by default an axis is visible if it's got data- - axis.reserveSpace = axis.show || axis.options.reserveSpace;-- setRange(axis);- });-- allocatedAxes = $.grep(axes, function (axis) { return axis.reserveSpace; });-- plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = 0;- if (options.grid.show) {- $.each(allocatedAxes, function (_, axis) {- // make the ticks- setupTickGeneration(axis);- setTicks(axis);- snapRangeToTicks(axis, axis.ticks);-- // find labelWidth/Height for axis- measureTickLabels(axis);- });-- // with all dimensions in house, we can compute the- // axis boxes, start from the outside (reverse order)- for (i = allocatedAxes.length - 1; i >= 0; --i)- allocateAxisBoxFirstPhase(allocatedAxes[i]);-- // make sure we've got enough space for things that- // might stick out- var minMargin = options.grid.minBorderMargin;- if (minMargin == null) {- minMargin = 0;- for (i = 0; i < series.length; ++i)- minMargin = Math.max(minMargin, series[i].points.radius + series[i].points.lineWidth/2);- }- - for (var a in plotOffset) {- plotOffset[a] += options.grid.borderWidth;- plotOffset[a] = Math.max(minMargin, plotOffset[a]);- }- }- - plotWidth = canvasWidth - plotOffset.left - plotOffset.right;- plotHeight = canvasHeight - plotOffset.bottom - plotOffset.top;-- // now we got the proper plotWidth/Height, we can compute the scaling- $.each(axes, function (_, axis) {- setTransformationHelpers(axis);- });-- if (options.grid.show) {- $.each(allocatedAxes, function (_, axis) {- allocateAxisBoxSecondPhase(axis);- });-- insertAxisLabels();- }- - insertLegend();- }- - function setRange(axis) {- var opts = axis.options,- min = +(opts.min != null ? opts.min : axis.datamin),- max = +(opts.max != null ? opts.max : axis.datamax),- delta = max - min;-- if (delta == 0.0) {- // degenerate case- var widen = max == 0 ? 1 : 0.01;-- if (opts.min == null)- min -= widen;- // always widen max if we couldn't widen min to ensure we- // don't fall into min == max which doesn't work- if (opts.max == null || opts.min != null)- max += widen;- }- else {- // consider autoscaling- var margin = opts.autoscaleMargin;- if (margin != null) {- if (opts.min == null) {- min -= delta * margin;- // make sure we don't go below zero if all values- // are positive- if (min < 0 && axis.datamin != null && axis.datamin >= 0)- min = 0;- }- if (opts.max == null) {- max += delta * margin;- if (max > 0 && axis.datamax != null && axis.datamax <= 0)- max = 0;- }- }- }- axis.min = min;- axis.max = max;- }-- function setupTickGeneration(axis) {- var opts = axis.options;- - // estimate number of ticks- var noTicks;- if (typeof opts.ticks == "number" && opts.ticks > 0)- noTicks = opts.ticks;- else- // heuristic based on the model a*sqrt(x) fitted to- // some data points that seemed reasonable- noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? canvasWidth : canvasHeight);-- var delta = (axis.max - axis.min) / noTicks,- size, generator, unit, formatter, i, magn, norm;-- if (opts.mode == "time") {- // pretty handling of time- - // map of app. size of time units in milliseconds- var timeUnitSize = {- "second": 1000,- "minute": 60 * 1000,- "hour": 60 * 60 * 1000,- "day": 24 * 60 * 60 * 1000,- "month": 30 * 24 * 60 * 60 * 1000,- "year": 365.2425 * 24 * 60 * 60 * 1000- };--- // the allowed tick sizes, after 1 year we use- // an integer algorithm- var spec = [- [1, "second"], [2, "second"], [5, "second"], [10, "second"],- [30, "second"], - [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],- [30, "minute"], - [1, "hour"], [2, "hour"], [4, "hour"],- [8, "hour"], [12, "hour"],- [1, "day"], [2, "day"], [3, "day"],- [0.25, "month"], [0.5, "month"], [1, "month"],- [2, "month"], [3, "month"], [6, "month"],- [1, "year"]- ];-- var minSize = 0;- if (opts.minTickSize != null) {- if (typeof opts.tickSize == "number")- minSize = opts.tickSize;- else- minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];- }-- for (var i = 0; i < spec.length - 1; ++i)- if (delta < (spec[i][0] * timeUnitSize[spec[i][1]]- + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2- && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize)- break;- size = spec[i][0];- unit = spec[i][1];- - // special-case the possibility of several years- if (unit == "year") {- magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10));- norm = (delta / timeUnitSize.year) / magn;- if (norm < 1.5)- size = 1;- else if (norm < 3)- size = 2;- else if (norm < 7.5)- size = 5;- else- size = 10;-- size *= magn;- }-- axis.tickSize = opts.tickSize || [size, unit];- - generator = function(axis) {- var ticks = [],- tickSize = axis.tickSize[0], unit = axis.tickSize[1],- d = new Date(axis.min);- - var step = tickSize * timeUnitSize[unit];-- if (unit == "second")- d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize));- if (unit == "minute")- d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize));- if (unit == "hour")- d.setUTCHours(floorInBase(d.getUTCHours(), tickSize));- if (unit == "month")- d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize));- if (unit == "year")- d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize));- - // reset smaller components- d.setUTCMilliseconds(0);- if (step >= timeUnitSize.minute)- d.setUTCSeconds(0);- if (step >= timeUnitSize.hour)- d.setUTCMinutes(0);- if (step >= timeUnitSize.day)- d.setUTCHours(0);- if (step >= timeUnitSize.day * 4)- d.setUTCDate(1);- if (step >= timeUnitSize.year)- d.setUTCMonth(0);--- var carry = 0, v = Number.NaN, prev;- do {- prev = v;- v = d.getTime();- ticks.push(v);- if (unit == "month") {- if (tickSize < 1) {- // a bit complicated - we'll divide the month- // up but we need to take care of fractions- // so we don't end up in the middle of a day- d.setUTCDate(1);- var start = d.getTime();- d.setUTCMonth(d.getUTCMonth() + 1);- var end = d.getTime();- d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);- carry = d.getUTCHours();- d.setUTCHours(0);- }- else- d.setUTCMonth(d.getUTCMonth() + tickSize);- }- else if (unit == "year") {- d.setUTCFullYear(d.getUTCFullYear() + tickSize);- }- else- d.setTime(v + step);- } while (v < axis.max && v != prev);-- return ticks;- };-- formatter = function (v, axis) {- var d = new Date(v);-- // first check global format- if (opts.timeformat != null)- return $.plot.formatDate(d, opts.timeformat, opts.monthNames);- - var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];- var span = axis.max - axis.min;- var suffix = (opts.twelveHourClock) ? " %p" : "";- - if (t < timeUnitSize.minute)- fmt = "%h:%M:%S" + suffix;- else if (t < timeUnitSize.day) {- if (span < 2 * timeUnitSize.day)- fmt = "%h:%M" + suffix;- else- fmt = "%b %d %h:%M" + suffix;- }- else if (t < timeUnitSize.month)- fmt = "%b %d";- else if (t < timeUnitSize.year) {- if (span < timeUnitSize.year)- fmt = "%b";- else- fmt = "%b %y";- }- else- fmt = "%y";- - return $.plot.formatDate(d, fmt, opts.monthNames);- };- }- else {- // pretty rounding of base-10 numbers- var maxDec = opts.tickDecimals;- var dec = -Math.floor(Math.log(delta) / Math.LN10);- if (maxDec != null && dec > maxDec)- dec = maxDec;-- magn = Math.pow(10, -dec);- norm = delta / magn; // norm is between 1.0 and 10.0- - if (norm < 1.5)- size = 1;- else if (norm < 3) {- size = 2;- // special case for 2.5, requires an extra decimal- if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {- size = 2.5;- ++dec;- }- }- else if (norm < 7.5)- size = 5;- else- size = 10;-- size *= magn;- - if (opts.minTickSize != null && size < opts.minTickSize)- size = opts.minTickSize;-- axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);- axis.tickSize = opts.tickSize || size;-- generator = function (axis) {- var ticks = [];-- // spew out all possible ticks- var start = floorInBase(axis.min, axis.tickSize),- i = 0, v = Number.NaN, prev;- do {- prev = v;- v = start + i * axis.tickSize;- ticks.push(v);- ++i;- } while (v < axis.max && v != prev);- return ticks;- };-- formatter = function (v, axis) {- return v.toFixed(axis.tickDecimals);- };- }-- if (opts.alignTicksWithAxis != null) {- var otherAxis = (axis.direction == "x" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];- if (otherAxis && otherAxis.used && otherAxis != axis) {- // consider snapping min/max to outermost nice ticks- var niceTicks = generator(axis);- if (niceTicks.length > 0) {- if (opts.min == null)- axis.min = Math.min(axis.min, niceTicks[0]);- if (opts.max == null && niceTicks.length > 1)- axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);- }- - generator = function (axis) {- // copy ticks, scaled to this axis- var ticks = [], v, i;- for (i = 0; i < otherAxis.ticks.length; ++i) {- v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);- v = axis.min + v * (axis.max - axis.min);- ticks.push(v);- }- return ticks;- };- - // we might need an extra decimal since forced- // ticks don't necessarily fit naturally- if (axis.mode != "time" && opts.tickDecimals == null) {- var extraDec = Math.max(0, -Math.floor(Math.log(delta) / Math.LN10) + 1),- ts = generator(axis);-- // only proceed if the tick interval rounded- // with an extra decimal doesn't give us a- // zero at end- if (!(ts.length > 1 && /\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))- axis.tickDecimals = extraDec;- }- }- }-- axis.tickGenerator = generator;- if ($.isFunction(opts.tickFormatter))- axis.tickFormatter = function (v, axis) { return "" + opts.tickFormatter(v, axis); };- else- axis.tickFormatter = formatter;- }- - function setTicks(axis) {- var oticks = axis.options.ticks, ticks = [];- if (oticks == null || (typeof oticks == "number" && oticks > 0))- ticks = axis.tickGenerator(axis);- else if (oticks) {- if ($.isFunction(oticks))- // generate the ticks- ticks = oticks({ min: axis.min, max: axis.max });- else- ticks = oticks;- }-- // clean up/labelify the supplied ticks, copy them over- var i, v;- axis.ticks = [];- for (i = 0; i < ticks.length; ++i) {- var label = null;- var t = ticks[i];- if (typeof t == "object") {- v = +t[0];- if (t.length > 1)- label = t[1];- }- else- v = +t;- if (label == null)- label = axis.tickFormatter(v, axis);- if (!isNaN(v))- axis.ticks.push({ v: v, label: label });- }- }-- function snapRangeToTicks(axis, ticks) {- if (axis.options.autoscaleMargin && ticks.length > 0) {- // snap to ticks- if (axis.options.min == null)- axis.min = Math.min(axis.min, ticks[0].v);- if (axis.options.max == null && ticks.length > 1)- axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);- }- }- - function draw() {- ctx.clearRect(0, 0, canvasWidth, canvasHeight);-- var grid = options.grid;-- // draw background, if any- if (grid.show && grid.backgroundColor)- drawBackground();- - if (grid.show && !grid.aboveData)- drawGrid();-- for (var i = 0; i < series.length; ++i) {- executeHooks(hooks.drawSeries, [ctx, series[i]]);- drawSeries(series[i]);- }-- executeHooks(hooks.draw, [ctx]);- - if (grid.show && grid.aboveData)- drawGrid();- }-- function extractRange(ranges, coord) {- var axis, from, to, key, axes = allAxes();-- for (i = 0; i < axes.length; ++i) {- axis = axes[i];- if (axis.direction == coord) {- key = coord + axis.n + "axis";- if (!ranges[key] && axis.n == 1)- key = coord + "axis"; // support x1axis as xaxis- if (ranges[key]) {- from = ranges[key].from;- to = ranges[key].to;- break;- }- }- }-- // backwards-compat stuff - to be removed in future- if (!ranges[key]) {- axis = coord == "x" ? xaxes[0] : yaxes[0];- from = ranges[coord + "1"];- to = ranges[coord + "2"];- }-- // auto-reverse as an added bonus- if (from != null && to != null && from > to) {- var tmp = from;- from = to;- to = tmp;- }- - return { from: from, to: to, axis: axis };- }- - function drawBackground() {- ctx.save();- ctx.translate(plotOffset.left, plotOffset.top);-- ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)");- ctx.fillRect(0, 0, plotWidth, plotHeight);- ctx.restore();- }-- function drawGrid() {- var i;- - ctx.save();- ctx.translate(plotOffset.left, plotOffset.top);-- // draw markings- var markings = options.grid.markings;- if (markings) {- if ($.isFunction(markings)) {- var axes = plot.getAxes();- // xmin etc. is backwards compatibility, to be- // removed in the future- axes.xmin = axes.xaxis.min;- axes.xmax = axes.xaxis.max;- axes.ymin = axes.yaxis.min;- axes.ymax = axes.yaxis.max;- - markings = markings(axes);- }-- for (i = 0; i < markings.length; ++i) {- var m = markings[i],- xrange = extractRange(m, "x"),- yrange = extractRange(m, "y");-- // fill in missing- if (xrange.from == null)- xrange.from = xrange.axis.min;- if (xrange.to == null)- xrange.to = xrange.axis.max;- if (yrange.from == null)- yrange.from = yrange.axis.min;- if (yrange.to == null)- yrange.to = yrange.axis.max;-- // clip- if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||- yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)- continue;-- xrange.from = Math.max(xrange.from, xrange.axis.min);- xrange.to = Math.min(xrange.to, xrange.axis.max);- yrange.from = Math.max(yrange.from, yrange.axis.min);- yrange.to = Math.min(yrange.to, yrange.axis.max);-- if (xrange.from == xrange.to && yrange.from == yrange.to)- continue;-- // then draw- xrange.from = xrange.axis.p2c(xrange.from);- xrange.to = xrange.axis.p2c(xrange.to);- yrange.from = yrange.axis.p2c(yrange.from);- yrange.to = yrange.axis.p2c(yrange.to);- - if (xrange.from == xrange.to || yrange.from == yrange.to) {- // draw line- ctx.beginPath();- ctx.strokeStyle = m.color || options.grid.markingsColor;- ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;- ctx.moveTo(xrange.from, yrange.from);- ctx.lineTo(xrange.to, yrange.to);- ctx.stroke();- }- else {- // fill area- ctx.fillStyle = m.color || options.grid.markingsColor;- ctx.fillRect(xrange.from, yrange.to,- xrange.to - xrange.from,- yrange.from - yrange.to);- }- }- }- - // draw the ticks- var axes = allAxes(), bw = options.grid.borderWidth;-- for (var j = 0; j < axes.length; ++j) {- var axis = axes[j], box = axis.box,- t = axis.tickLength, x, y, xoff, yoff;- if (!axis.show || axis.ticks.length == 0)- continue- - ctx.strokeStyle = axis.options.tickColor || $.color.parse(axis.options.color).scale('a', 0.22).toString();- ctx.lineWidth = 1;-- // find the edges- if (axis.direction == "x") {- x = 0;- if (t == "full")- y = (axis.position == "top" ? 0 : plotHeight);- else- y = box.top - plotOffset.top + (axis.position == "top" ? box.height : 0);- }- else {- y = 0;- if (t == "full")- x = (axis.position == "left" ? 0 : plotWidth);- else- x = box.left - plotOffset.left + (axis.position == "left" ? box.width : 0);- }- - // draw tick bar- if (!axis.innermost) {- ctx.beginPath();- xoff = yoff = 0;- if (axis.direction == "x")- xoff = plotWidth;- else- yoff = plotHeight;- - if (ctx.lineWidth == 1) {- x = Math.floor(x) + 0.5;- y = Math.floor(y) + 0.5;- }-- ctx.moveTo(x, y);- ctx.lineTo(x + xoff, y + yoff);- ctx.stroke();- }-- // draw ticks- ctx.beginPath();- for (i = 0; i < axis.ticks.length; ++i) {- var v = axis.ticks[i].v;- - xoff = yoff = 0;-- if (v < axis.min || v > axis.max- // skip those lying on the axes if we got a border- || (t == "full" && bw > 0- && (v == axis.min || v == axis.max)))- continue;-- if (axis.direction == "x") {- x = axis.p2c(v);- yoff = t == "full" ? -plotHeight : t;- - if (axis.position == "top")- yoff = -yoff;- }- else {- y = axis.p2c(v);- xoff = t == "full" ? -plotWidth : t;- - if (axis.position == "left")- xoff = -xoff;- }-- if (ctx.lineWidth == 1) {- if (axis.direction == "x")- x = Math.floor(x) + 0.5;- else- y = Math.floor(y) + 0.5;- }-- ctx.moveTo(x, y);- ctx.lineTo(x + xoff, y + yoff);- }- - ctx.stroke();- }- - - // draw border- if (bw) {- ctx.lineWidth = bw;- ctx.strokeStyle = options.grid.borderColor;- ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);- }-- ctx.restore();- }-- function insertAxisLabels() {- placeholder.find(".tickLabels").remove();- - var html = ['<div class="tickLabels" style="font-size:smaller">'];-- var axes = allAxes();- for (var j = 0; j < axes.length; ++j) {- var axis = axes[j], box = axis.box;- if (!axis.show)- continue;- //debug: html.push('<div style="position:absolute;opacity:0.10;background-color:red;left:' + box.left + 'px;top:' + box.top + 'px;width:' + box.width + 'px;height:' + box.height + 'px"></div>')- html.push('<div class="' + axis.direction + 'Axis ' + axis.direction + axis.n + 'Axis" style="color:' + axis.options.color + '">');- for (var i = 0; i < axis.ticks.length; ++i) {- var tick = axis.ticks[i];- if (!tick.label || tick.v < axis.min || tick.v > axis.max)- continue;-- var pos = {}, align;- - if (axis.direction == "x") {- align = "center";- pos.left = Math.round(plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2);- if (axis.position == "bottom")- pos.top = box.top + box.padding;- else- pos.bottom = canvasHeight - (box.top + box.height - box.padding);- }- else {- pos.top = Math.round(plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2);- if (axis.position == "left") {- pos.right = canvasWidth - (box.left + box.width - box.padding)- align = "right";- }- else {- pos.left = box.left + box.padding;- align = "left";- }- }-- pos.width = axis.labelWidth;-- var style = ["position:absolute", "text-align:" + align ];- for (var a in pos)- style.push(a + ":" + pos[a] + "px")- - html.push('<div class="tickLabel" style="' + style.join(';') + '">' + tick.label + '</div>');- }- html.push('</div>');- }-- html.push('</div>');-- placeholder.append(html.join(""));- }-- function drawSeries(series) {- if (series.lines.show)- drawSeriesLines(series);- if (series.bars.show)- drawSeriesBars(series);- if (series.points.show)- drawSeriesPoints(series);- }- - function drawSeriesLines(series) {- function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {- var points = datapoints.points,- ps = datapoints.pointsize,- prevx = null, prevy = null;- - ctx.beginPath();- for (var i = ps; i < points.length; i += ps) {- var x1 = points[i - ps], y1 = points[i - ps + 1],- x2 = points[i], y2 = points[i + 1];- - if (x1 == null || x2 == null)- continue;-- // clip with ymin- if (y1 <= y2 && y1 < axisy.min) {- if (y2 < axisy.min)- continue; // line segment is outside- // compute new intersection point- x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;- y1 = axisy.min;- }- else if (y2 <= y1 && y2 < axisy.min) {- if (y1 < axisy.min)- continue;- x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;- y2 = axisy.min;- }-- // clip with ymax- if (y1 >= y2 && y1 > axisy.max) {- if (y2 > axisy.max)- continue;- x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;- y1 = axisy.max;- }- else if (y2 >= y1 && y2 > axisy.max) {- if (y1 > axisy.max)- continue;- x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;- y2 = axisy.max;- }-- // clip with xmin- if (x1 <= x2 && x1 < axisx.min) {- if (x2 < axisx.min)- continue;- y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;- x1 = axisx.min;- }- else if (x2 <= x1 && x2 < axisx.min) {- if (x1 < axisx.min)- continue;- y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;- x2 = axisx.min;- }-- // clip with xmax- if (x1 >= x2 && x1 > axisx.max) {- if (x2 > axisx.max)- continue;- y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;- x1 = axisx.max;- }- else if (x2 >= x1 && x2 > axisx.max) {- if (x1 > axisx.max)- continue;- y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;- x2 = axisx.max;- }-- if (x1 != prevx || y1 != prevy)- ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);- - prevx = x2;- prevy = y2;- ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);- }- ctx.stroke();- }-- function plotLineArea(datapoints, axisx, axisy) {- var points = datapoints.points,- ps = datapoints.pointsize,- bottom = Math.min(Math.max(0, axisy.min), axisy.max),- i = 0, top, areaOpen = false,- ypos = 1, segmentStart = 0, segmentEnd = 0;-- // we process each segment in two turns, first forward- // direction to sketch out top, then once we hit the- // end we go backwards to sketch the bottom- while (true) {- if (ps > 0 && i > points.length + ps)- break;-- i += ps; // ps is negative if going backwards-- var x1 = points[i - ps],- y1 = points[i - ps + ypos],- x2 = points[i], y2 = points[i + ypos];-- if (areaOpen) {- if (ps > 0 && x1 != null && x2 == null) {- // at turning point- segmentEnd = i;- ps = -ps;- ypos = 2;- continue;- }-- if (ps < 0 && i == segmentStart + ps) {- // done with the reverse sweep- ctx.fill();- areaOpen = false;- ps = -ps;- ypos = 1;- i = segmentStart = segmentEnd + ps;- continue;- }- }-- if (x1 == null || x2 == null)- continue;-- // clip x values- - // clip with xmin- if (x1 <= x2 && x1 < axisx.min) {- if (x2 < axisx.min)- continue;- y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;- x1 = axisx.min;- }- else if (x2 <= x1 && x2 < axisx.min) {- if (x1 < axisx.min)- continue;- y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;- x2 = axisx.min;- }-- // clip with xmax- if (x1 >= x2 && x1 > axisx.max) {- if (x2 > axisx.max)- continue;- y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;- x1 = axisx.max;- }- else if (x2 >= x1 && x2 > axisx.max) {- if (x1 > axisx.max)- continue;- y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;- x2 = axisx.max;- }-- if (!areaOpen) {- // open area- ctx.beginPath();- ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));- areaOpen = true;- }- - // now first check the case where both is outside- if (y1 >= axisy.max && y2 >= axisy.max) {- ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));- ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));- continue;- }- else if (y1 <= axisy.min && y2 <= axisy.min) {- ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));- ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));- continue;- }- - // else it's a bit more complicated, there might- // be a flat maxed out rectangle first, then a- // triangular cutout or reverse; to find these- // keep track of the current x values- var x1old = x1, x2old = x2;-- // clip the y values, without shortcutting, we- // go through all cases in turn- - // clip with ymin- if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {- x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;- y1 = axisy.min;- }- else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {- x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;- y2 = axisy.min;- }-- // clip with ymax- if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {- x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;- y1 = axisy.max;- }- else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {- x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;- y2 = axisy.max;- }-- // if the x value was changed we got a rectangle- // to fill- if (x1 != x1old) {- ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));- // it goes to (x1, y1), but we fill that below- }- - // fill triangular section, this sometimes result- // in redundant points if (x1, y1) hasn't changed- // from previous line to, but we just ignore that- ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));- ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));-- // fill the other rectangle if it's there- if (x2 != x2old) {- ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));- ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));- }- }- }-- ctx.save();- ctx.translate(plotOffset.left, plotOffset.top);- ctx.lineJoin = "round";-- var lw = series.lines.lineWidth,- sw = series.shadowSize;- // FIXME: consider another form of shadow when filling is turned on- if (lw > 0 && sw > 0) {- // draw shadow as a thick and thin line with transparency- ctx.lineWidth = sw;- ctx.strokeStyle = "rgba(0,0,0,0.1)";- // position shadow at angle from the mid of line- var angle = Math.PI/18;- plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);- ctx.lineWidth = sw/2;- plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);- }-- ctx.lineWidth = lw;- ctx.strokeStyle = series.color;- var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);- if (fillStyle) {- ctx.fillStyle = fillStyle;- plotLineArea(series.datapoints, series.xaxis, series.yaxis);- }-- if (lw > 0)- plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);- ctx.restore();- }-- function drawSeriesPoints(series) {- function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {- var points = datapoints.points, ps = datapoints.pointsize;-- for (var i = 0; i < points.length; i += ps) {- var x = points[i], y = points[i + 1];- if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)- continue;- - ctx.beginPath();- x = axisx.p2c(x);- y = axisy.p2c(y) + offset;- if (symbol == "circle")- ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);- else- symbol(ctx, x, y, radius, shadow);- ctx.closePath();- - if (fillStyle) {- ctx.fillStyle = fillStyle;- ctx.fill();- }- ctx.stroke();- }- }- - ctx.save();- ctx.translate(plotOffset.left, plotOffset.top);-- var lw = series.points.lineWidth,- sw = series.shadowSize,- radius = series.points.radius,- symbol = series.points.symbol;- if (lw > 0 && sw > 0) {- // draw shadow in two steps- var w = sw / 2;- ctx.lineWidth = w;- ctx.strokeStyle = "rgba(0,0,0,0.1)";- plotPoints(series.datapoints, radius, null, w + w/2, true,- series.xaxis, series.yaxis, symbol);-- ctx.strokeStyle = "rgba(0,0,0,0.2)";- plotPoints(series.datapoints, radius, null, w/2, true,- series.xaxis, series.yaxis, symbol);- }-- ctx.lineWidth = lw;- ctx.strokeStyle = series.color;- plotPoints(series.datapoints, radius,- getFillStyle(series.points, series.color), 0, false,- series.xaxis, series.yaxis, symbol);- ctx.restore();- }-- function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {- var left, right, bottom, top,- drawLeft, drawRight, drawTop, drawBottom,- tmp;-- // in horizontal mode, we start the bar from the left- // instead of from the bottom so it appears to be- // horizontal rather than vertical- if (horizontal) {- drawBottom = drawRight = drawTop = true;- drawLeft = false;- left = b;- right = x;- top = y + barLeft;- bottom = y + barRight;-- // account for negative bars- if (right < left) {- tmp = right;- right = left;- left = tmp;- drawLeft = true;- drawRight = false;- }- }- else {- drawLeft = drawRight = drawTop = true;- drawBottom = false;- left = x + barLeft;- right = x + barRight;- bottom = b;- top = y;-- // account for negative bars- if (top < bottom) {- tmp = top;- top = bottom;- bottom = tmp;- drawBottom = true;- drawTop = false;- }- }- - // clip- if (right < axisx.min || left > axisx.max ||- top < axisy.min || bottom > axisy.max)- return;- - if (left < axisx.min) {- left = axisx.min;- drawLeft = false;- }-- if (right > axisx.max) {- right = axisx.max;- drawRight = false;- }-- if (bottom < axisy.min) {- bottom = axisy.min;- drawBottom = false;- }- - if (top > axisy.max) {- top = axisy.max;- drawTop = false;- }-- left = axisx.p2c(left);- bottom = axisy.p2c(bottom);- right = axisx.p2c(right);- top = axisy.p2c(top);- - // fill the bar- if (fillStyleCallback) {- c.beginPath();- c.moveTo(left, bottom);- c.lineTo(left, top);- c.lineTo(right, top);- c.lineTo(right, bottom);- c.fillStyle = fillStyleCallback(bottom, top);- c.fill();- }-- // draw outline- if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {- c.beginPath();-- // FIXME: inline moveTo is buggy with excanvas- c.moveTo(left, bottom + offset);- if (drawLeft)- c.lineTo(left, top + offset);- else- c.moveTo(left, top + offset);- if (drawTop)- c.lineTo(right, top + offset);- else- c.moveTo(right, top + offset);- if (drawRight)- c.lineTo(right, bottom + offset);- else- c.moveTo(right, bottom + offset);- if (drawBottom)- c.lineTo(left, bottom + offset);- else- c.moveTo(left, bottom + offset);- c.stroke();- }- }- - function drawSeriesBars(series) {- function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) {- var points = datapoints.points, ps = datapoints.pointsize;- - for (var i = 0; i < points.length; i += ps) {- if (points[i] == null)- continue;- drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);- }- }-- ctx.save();- ctx.translate(plotOffset.left, plotOffset.top);-- // FIXME: figure out a way to add shadows (for instance along the right edge)- ctx.lineWidth = series.bars.lineWidth;- ctx.strokeStyle = series.color;- var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;- var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;- plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis);- ctx.restore();- }-- function getFillStyle(filloptions, seriesColor, bottom, top) {- var fill = filloptions.fill;- if (!fill)- return null;-- if (filloptions.fillColor)- return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);- - var c = $.color.parse(seriesColor);- c.a = typeof fill == "number" ? fill : 0.4;- c.normalize();- return c.toString();- }- - function insertLegend() {- placeholder.find(".legend").remove();-- if (!options.legend.show)- return;- - var fragments = [], rowStarted = false,- lf = options.legend.labelFormatter, s, label;- for (var i = 0; i < series.length; ++i) {- s = series[i];- label = s.label;- if (!label)- continue;- - if (i % options.legend.noColumns == 0) {- if (rowStarted)- fragments.push('</tr>');- fragments.push('<tr>');- rowStarted = true;- }-- if (lf)- label = lf(label, s);- - fragments.push(- '<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + s.color + ';overflow:hidden"></div></div></td>' +- '<td class="legendLabel">' + label + '</td>');- }- if (rowStarted)- fragments.push('</tr>');- - if (fragments.length == 0)- return;-- var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join("") + '</table>';- if (options.legend.container != null)- $(options.legend.container).html(table);- else {- var pos = "",- p = options.legend.position,- m = options.legend.margin;- if (m[0] == null)- m = [m, m];- if (p.charAt(0) == "n")- pos += 'top:' + (m[1] + plotOffset.top) + 'px;';- else if (p.charAt(0) == "s")- pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';- if (p.charAt(1) == "e")- pos += 'right:' + (m[0] + plotOffset.right) + 'px;';- else if (p.charAt(1) == "w")- pos += 'left:' + (m[0] + plotOffset.left) + 'px;';- var legend = $('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>').appendTo(placeholder);- if (options.legend.backgroundOpacity != 0.0) {- // put in the transparent background- // separately to avoid blended labels and- // label boxes- var c = options.legend.backgroundColor;- if (c == null) {- c = options.grid.backgroundColor;- if (c && typeof c == "string")- c = $.color.parse(c);- else- c = $.color.extract(legend, 'background-color');- c.a = 1;- c = c.toString();- }- var div = legend.children();- $('<div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);- }- }- }--- // interactive features- - var highlights = [],- redrawTimeout = null;- - // returns the data item the mouse is over, or null if none is found- function findNearbyItem(mouseX, mouseY, seriesFilter) {- var maxDistance = options.grid.mouseActiveRadius,- smallestDistance = maxDistance * maxDistance + 1,- item = null, foundPoint = false, i, j;-- for (i = series.length - 1; i >= 0; --i) {- if (!seriesFilter(series[i]))- continue;- - var s = series[i],- axisx = s.xaxis,- axisy = s.yaxis,- points = s.datapoints.points,- ps = s.datapoints.pointsize,- mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster- my = axisy.c2p(mouseY),- maxx = maxDistance / axisx.scale,- maxy = maxDistance / axisy.scale;-- // with inverse transforms, we can't use the maxx/maxy- // optimization, sadly- if (axisx.options.inverseTransform)- maxx = Number.MAX_VALUE;- if (axisy.options.inverseTransform)- maxy = Number.MAX_VALUE;- - if (s.lines.show || s.points.show) {- for (j = 0; j < points.length; j += ps) {- var x = points[j], y = points[j + 1];- if (x == null)- continue;- - // For points and lines, the cursor must be within a- // certain distance to the data point- if (x - mx > maxx || x - mx < -maxx ||- y - my > maxy || y - my < -maxy)- continue;-- // We have to calculate distances in pixels, not in- // data units, because the scales of the axes may be different- var dx = Math.abs(axisx.p2c(x) - mouseX),- dy = Math.abs(axisy.p2c(y) - mouseY),- dist = dx * dx + dy * dy; // we save the sqrt-- // use <= to ensure last point takes precedence- // (last generally means on top of)- if (dist < smallestDistance) {- smallestDistance = dist;- item = [i, j / ps];- }- }- }- - if (s.bars.show && !item) { // no other point can be nearby- var barLeft = s.bars.align == "left" ? 0 : -s.bars.barWidth/2,- barRight = barLeft + s.bars.barWidth;- - for (j = 0; j < points.length; j += ps) {- var x = points[j], y = points[j + 1], b = points[j + 2];- if (x == null)- continue;- - // for a bar graph, the cursor must be inside the bar- if (series[i].bars.horizontal ? - (mx <= Math.max(b, x) && mx >= Math.min(b, x) && - my >= y + barLeft && my <= y + barRight) :- (mx >= x + barLeft && mx <= x + barRight &&- my >= Math.min(b, y) && my <= Math.max(b, y)))- item = [i, j / ps];- }- }- }-- if (item) {- i = item[0];- j = item[1];- ps = series[i].datapoints.pointsize;- - return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),- dataIndex: j,- series: series[i],- seriesIndex: i };- }- - return null;- }-- function onMouseMove(e) {- if (options.grid.hoverable)- triggerClickHoverEvent("plothover", e,- function (s) { return s["hoverable"] != false; });- }-- function onMouseLeave(e) {- if (options.grid.hoverable)- triggerClickHoverEvent("plothover", e,- function (s) { return false; });- }-- function onClick(e) {- triggerClickHoverEvent("plotclick", e,- function (s) { return s["clickable"] != false; });- }-- // trigger click or hover event (they send the same parameters- // so we share their code)- function triggerClickHoverEvent(eventname, event, seriesFilter) {- var offset = eventHolder.offset(),- canvasX = event.pageX - offset.left - plotOffset.left,- canvasY = event.pageY - offset.top - plotOffset.top,- pos = canvasToAxisCoords({ left: canvasX, top: canvasY });-- pos.pageX = event.pageX;- pos.pageY = event.pageY;-- var item = findNearbyItem(canvasX, canvasY, seriesFilter);-- if (item) {- // fill in mouse pos for any listeners out there- item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left);- item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top);- }-- if (options.grid.autoHighlight) {- // clear auto-highlights- for (var i = 0; i < highlights.length; ++i) {- var h = highlights[i];- if (h.auto == eventname &&- !(item && h.series == item.series &&- h.point[0] == item.datapoint[0] &&- h.point[1] == item.datapoint[1]))- unhighlight(h.series, h.point);- }- - if (item)- highlight(item.series, item.datapoint, eventname);- }- - placeholder.trigger(eventname, [ pos, item ]);- }-- function triggerRedrawOverlay() {- if (!redrawTimeout)- redrawTimeout = setTimeout(drawOverlay, 30);- }-- function drawOverlay() {- redrawTimeout = null;-- // draw highlights- octx.save();- octx.clearRect(0, 0, canvasWidth, canvasHeight);- octx.translate(plotOffset.left, plotOffset.top);- - var i, hi;- for (i = 0; i < highlights.length; ++i) {- hi = highlights[i];-- if (hi.series.bars.show)- drawBarHighlight(hi.series, hi.point);- else- drawPointHighlight(hi.series, hi.point);- }- octx.restore();- - executeHooks(hooks.drawOverlay, [octx]);- }- - function highlight(s, point, auto) {- if (typeof s == "number")- s = series[s];-- if (typeof point == "number") {- var ps = s.datapoints.pointsize;- point = s.datapoints.points.slice(ps * point, ps * (point + 1));- }-- var i = indexOfHighlight(s, point);- if (i == -1) {- highlights.push({ series: s, point: point, auto: auto });-- triggerRedrawOverlay();- }- else if (!auto)- highlights[i].auto = false;- }- - function unhighlight(s, point) {- if (s == null && point == null) {- highlights = [];- triggerRedrawOverlay();- }- - if (typeof s == "number")- s = series[s];-- if (typeof point == "number")- point = s.data[point];-- var i = indexOfHighlight(s, point);- if (i != -1) {- highlights.splice(i, 1);-- triggerRedrawOverlay();- }- }- - function indexOfHighlight(s, p) {- for (var i = 0; i < highlights.length; ++i) {- var h = highlights[i];- if (h.series == s && h.point[0] == p[0]- && h.point[1] == p[1])- return i;- }- return -1;- }- - function drawPointHighlight(series, point) {- var x = point[0], y = point[1],- axisx = series.xaxis, axisy = series.yaxis;- - if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)- return;- - var pointRadius = series.points.radius + series.points.lineWidth / 2;- octx.lineWidth = pointRadius;- octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString();- var radius = 1.5 * pointRadius,- x = axisx.p2c(x),- y = axisy.p2c(y);- - octx.beginPath();- if (series.points.symbol == "circle")- octx.arc(x, y, radius, 0, 2 * Math.PI, false);- else- series.points.symbol(octx, x, y, radius, false);- octx.closePath();- octx.stroke();- }-- function drawBarHighlight(series, point) {- octx.lineWidth = series.bars.lineWidth;- octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString();- var fillStyle = $.color.parse(series.color).scale('a', 0.5).toString();- var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;- drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,- 0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);- }-- function getColorOrGradient(spec, bottom, top, defaultColor) {- if (typeof spec == "string")- return spec;- else {- // assume this is a gradient spec; IE currently only- // supports a simple vertical gradient properly, so that's- // what we support too- var gradient = ctx.createLinearGradient(0, top, 0, bottom);- - for (var i = 0, l = spec.colors.length; i < l; ++i) {- var c = spec.colors[i];- if (typeof c != "string") {- var co = $.color.parse(defaultColor);- if (c.brightness != null)- co = co.scale('rgb', c.brightness)- if (c.opacity != null)- co.a *= c.opacity;- c = co.toString();- }- gradient.addColorStop(i / (l - 1), c);- }- - return gradient;- }- }- }-- $.plot = function(placeholder, data, options) {- //var t0 = new Date();- var plot = new Plot($(placeholder), data, options, $.plot.plugins);- //(window.console ? console.log : alert)("time used (msecs): " + ((new Date()).getTime() - t0.getTime()));- return plot;- };-- $.plot.version = "0.7";- - $.plot.plugins = [];-- // returns a string with the date d formatted according to fmt- $.plot.formatDate = function(d, fmt, monthNames) {- var leftPad = function(n) {- n = "" + n;- return n.length == 1 ? "0" + n : n;- };- - var r = [];- var escape = false, padNext = false;- var hours = d.getUTCHours();- var isAM = hours < 12;- if (monthNames == null)- monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];-- if (fmt.search(/%p|%P/) != -1) {- if (hours > 12) {- hours = hours - 12;- } else if (hours == 0) {- hours = 12;- }- }- for (var i = 0; i < fmt.length; ++i) {- var c = fmt.charAt(i);- - if (escape) {- switch (c) {- case 'h': c = "" + hours; break;- case 'H': c = leftPad(hours); break;- case 'M': c = leftPad(d.getUTCMinutes()); break;- case 'S': c = leftPad(d.getUTCSeconds()); break;- case 'd': c = "" + d.getUTCDate(); break;- case 'm': c = "" + (d.getUTCMonth() + 1); break;- case 'y': c = "" + d.getUTCFullYear(); break;- case 'b': c = "" + monthNames[d.getUTCMonth()]; break;- case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break;- case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break;- case '0': c = ""; padNext = true; break;- }- if (c && padNext) {- c = leftPad(c);- padNext = false;- }- r.push(c);- if (!padNext)- escape = false;- }- else {- if (c == "%")- escape = true;- else- r.push(c);- }- }- return r.join("");- };- - // round to nearby lower multiple of base- function floorInBase(n, base) {- return base * Math.floor(n / base);- }- -})(jQuery);
@@ -1,6 +0,0 @@-/* Javascript plotting library for jQuery, v. 0.7.- *- * Released under the MIT license by IOLA, December 2007.- *- */-(function(b){b.color={};b.color.make=function(d,e,g,f){var c={};c.r=d||0;c.g=e||0;c.b=g||0;c.a=f!=null?f:1;c.add=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]+=j}return c.normalize()};c.scale=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]*=j}return c.normalize()};c.toString=function(){if(c.a>=1){return"rgb("+[c.r,c.g,c.b].join(",")+")"}else{return"rgba("+[c.r,c.g,c.b,c.a].join(",")+")"}};c.normalize=function(){function h(k,j,l){return j<k?k:(j>l?l:j)}c.r=h(0,parseInt(c.r),255);c.g=h(0,parseInt(c.g),255);c.b=h(0,parseInt(c.b),255);c.a=h(0,c.a,1);return c};c.clone=function(){return b.color.make(c.r,c.b,c.g,c.a)};return c.normalize()};b.color.extract=function(d,e){var c;do{c=d.css(e).toLowerCase();if(c!=""&&c!="transparent"){break}d=d.parent()}while(!b.nodeName(d.get(0),"body"));if(c=="rgba(0, 0, 0, 0)"){c="transparent"}return b.color.parse(c)};b.color.parse=function(c){var d,f=b.color.make;if(d=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10))}if(d=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10),parseFloat(d[4]))}if(d=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55)}if(d=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55,parseFloat(d[4]))}if(d=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)){return f(parseInt(d[1],16),parseInt(d[2],16),parseInt(d[3],16))}if(d=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)){return f(parseInt(d[1]+d[1],16),parseInt(d[2]+d[2],16),parseInt(d[3]+d[3],16))}var e=b.trim(c).toLowerCase();if(e=="transparent"){return f(255,255,255,0)}else{d=a[e]||[0,0,0];return f(d[0],d[1],d[2])}};var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function(c){function b(av,ai,J,af){var Q=[],O={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{show:null,position:"bottom",mode:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,twelveHourClock:false},yaxis:{autoscaleMargin:0.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false},shadowSize:3},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},hooks:{}},az=null,ad=null,y=null,H=null,A=null,p=[],aw=[],q={left:0,right:0,top:0,bottom:0},G=0,I=0,h=0,w=0,ak={processOptions:[],processRawData:[],processDatapoints:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},aq=this;aq.setData=aj;aq.setupGrid=t;aq.draw=W;aq.getPlaceholder=function(){return av};aq.getCanvas=function(){return az};aq.getPlotOffset=function(){return q};aq.width=function(){return h};aq.height=function(){return w};aq.offset=function(){var aB=y.offset();aB.left+=q.left;aB.top+=q.top;return aB};aq.getData=function(){return Q};aq.getAxes=function(){var aC={},aB;c.each(p.concat(aw),function(aD,aE){if(aE){aC[aE.direction+(aE.n!=1?aE.n:"")+"axis"]=aE}});return aC};aq.getXAxes=function(){return p};aq.getYAxes=function(){return aw};aq.c2p=C;aq.p2c=ar;aq.getOptions=function(){return O};aq.highlight=x;aq.unhighlight=T;aq.triggerRedrawOverlay=f;aq.pointOffset=function(aB){return{left:parseInt(p[aA(aB,"x")-1].p2c(+aB.x)+q.left),top:parseInt(aw[aA(aB,"y")-1].p2c(+aB.y)+q.top)}};aq.shutdown=ag;aq.resize=function(){B();g(az);g(ad)};aq.hooks=ak;F(aq);Z(J);X();aj(ai);t();W();ah();function an(aD,aB){aB=[aq].concat(aB);for(var aC=0;aC<aD.length;++aC){aD[aC].apply(this,aB)}}function F(){for(var aB=0;aB<af.length;++aB){var aC=af[aB];aC.init(aq);if(aC.options){c.extend(true,O,aC.options)}}}function Z(aC){var aB;c.extend(true,O,aC);if(O.xaxis.color==null){O.xaxis.color=O.grid.color}if(O.yaxis.color==null){O.yaxis.color=O.grid.color}if(O.xaxis.tickColor==null){O.xaxis.tickColor=O.grid.tickColor}if(O.yaxis.tickColor==null){O.yaxis.tickColor=O.grid.tickColor}if(O.grid.borderColor==null){O.grid.borderColor=O.grid.color}if(O.grid.tickColor==null){O.grid.tickColor=c.color.parse(O.grid.color).scale("a",0.22).toString()}for(aB=0;aB<Math.max(1,O.xaxes.length);++aB){O.xaxes[aB]=c.extend(true,{},O.xaxis,O.xaxes[aB])}for(aB=0;aB<Math.max(1,O.yaxes.length);++aB){O.yaxes[aB]=c.extend(true,{},O.yaxis,O.yaxes[aB])}if(O.xaxis.noTicks&&O.xaxis.ticks==null){O.xaxis.ticks=O.xaxis.noTicks}if(O.yaxis.noTicks&&O.yaxis.ticks==null){O.yaxis.ticks=O.yaxis.noTicks}if(O.x2axis){O.xaxes[1]=c.extend(true,{},O.xaxis,O.x2axis);O.xaxes[1].position="top"}if(O.y2axis){O.yaxes[1]=c.extend(true,{},O.yaxis,O.y2axis);O.yaxes[1].position="right"}if(O.grid.coloredAreas){O.grid.markings=O.grid.coloredAreas}if(O.grid.coloredAreasColor){O.grid.markingsColor=O.grid.coloredAreasColor}if(O.lines){c.extend(true,O.series.lines,O.lines)}if(O.points){c.extend(true,O.series.points,O.points)}if(O.bars){c.extend(true,O.series.bars,O.bars)}if(O.shadowSize!=null){O.series.shadowSize=O.shadowSize}for(aB=0;aB<O.xaxes.length;++aB){V(p,aB+1).options=O.xaxes[aB]}for(aB=0;aB<O.yaxes.length;++aB){V(aw,aB+1).options=O.yaxes[aB]}for(var aD in ak){if(O.hooks[aD]&&O.hooks[aD].length){ak[aD]=ak[aD].concat(O.hooks[aD])}}an(ak.processOptions,[O])}function aj(aB){Q=Y(aB);ax();z()}function Y(aE){var aC=[];for(var aB=0;aB<aE.length;++aB){var aD=c.extend(true,{},O.series);if(aE[aB].data!=null){aD.data=aE[aB].data;delete aE[aB].data;c.extend(true,aD,aE[aB]);aE[aB].data=aD.data}else{aD.data=aE[aB]}aC.push(aD)}return aC}function aA(aC,aD){var aB=aC[aD+"axis"];if(typeof aB=="object"){aB=aB.n}if(typeof aB!="number"){aB=1}return aB}function m(){return c.grep(p.concat(aw),function(aB){return aB})}function C(aE){var aC={},aB,aD;for(aB=0;aB<p.length;++aB){aD=p[aB];if(aD&&aD.used){aC["x"+aD.n]=aD.c2p(aE.left)}}for(aB=0;aB<aw.length;++aB){aD=aw[aB];if(aD&&aD.used){aC["y"+aD.n]=aD.c2p(aE.top)}}if(aC.x1!==undefined){aC.x=aC.x1}if(aC.y1!==undefined){aC.y=aC.y1}return aC}function ar(aF){var aD={},aC,aE,aB;for(aC=0;aC<p.length;++aC){aE=p[aC];if(aE&&aE.used){aB="x"+aE.n;if(aF[aB]==null&&aE.n==1){aB="x"}if(aF[aB]!=null){aD.left=aE.p2c(aF[aB]);break}}}for(aC=0;aC<aw.length;++aC){aE=aw[aC];if(aE&&aE.used){aB="y"+aE.n;if(aF[aB]==null&&aE.n==1){aB="y"}if(aF[aB]!=null){aD.top=aE.p2c(aF[aB]);break}}}return aD}function V(aC,aB){if(!aC[aB-1]){aC[aB-1]={n:aB,direction:aC==p?"x":"y",options:c.extend(true,{},aC==p?O.xaxis:O.yaxis)}}return aC[aB-1]}function ax(){var aG;var aM=Q.length,aB=[],aE=[];for(aG=0;aG<Q.length;++aG){var aJ=Q[aG].color;if(aJ!=null){--aM;if(typeof aJ=="number"){aE.push(aJ)}else{aB.push(c.color.parse(Q[aG].color))}}}for(aG=0;aG<aE.length;++aG){aM=Math.max(aM,aE[aG]+1)}var aC=[],aF=0;aG=0;while(aC.length<aM){var aI;if(O.colors.length==aG){aI=c.color.make(100,100,100)}else{aI=c.color.parse(O.colors[aG])}var aD=aF%2==1?-1:1;aI.scale("rgb",1+aD*Math.ceil(aF/2)*0.2);aC.push(aI);++aG;if(aG>=O.colors.length){aG=0;++aF}}var aH=0,aN;for(aG=0;aG<Q.length;++aG){aN=Q[aG];if(aN.color==null){aN.color=aC[aH].toString();++aH}else{if(typeof aN.color=="number"){aN.color=aC[aN.color].toString()}}if(aN.lines.show==null){var aL,aK=true;for(aL in aN){if(aN[aL]&&aN[aL].show){aK=false;break}}if(aK){aN.lines.show=true}}aN.xaxis=V(p,aA(aN,"x"));aN.yaxis=V(aw,aA(aN,"y"))}}function z(){var aO=Number.POSITIVE_INFINITY,aI=Number.NEGATIVE_INFINITY,aB=Number.MAX_VALUE,aU,aS,aR,aN,aD,aJ,aT,aP,aH,aG,aC,a0,aX,aL;function aF(a3,a2,a1){if(a2<a3.datamin&&a2!=-aB){a3.datamin=a2}if(a1>a3.datamax&&a1!=aB){a3.datamax=a1}}c.each(m(),function(a1,a2){a2.datamin=aO;a2.datamax=aI;a2.used=false});for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aJ.datapoints={points:[]};an(ak.processRawData,[aJ,aJ.data,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];var aZ=aJ.data,aW=aJ.datapoints.format;if(!aW){aW=[];aW.push({x:true,number:true,required:true});aW.push({y:true,number:true,required:true});if(aJ.bars.show||(aJ.lines.show&&aJ.lines.fill)){aW.push({y:true,number:true,required:false,defaultValue:0});if(aJ.bars.horizontal){delete aW[aW.length-1].y;aW[aW.length-1].x=true}}aJ.datapoints.format=aW}if(aJ.datapoints.pointsize!=null){continue}aJ.datapoints.pointsize=aW.length;aP=aJ.datapoints.pointsize;aT=aJ.datapoints.points;insertSteps=aJ.lines.show&&aJ.lines.steps;aJ.xaxis.used=aJ.yaxis.used=true;for(aS=aR=0;aS<aZ.length;++aS,aR+=aP){aL=aZ[aS];var aE=aL==null;if(!aE){for(aN=0;aN<aP;++aN){a0=aL[aN];aX=aW[aN];if(aX){if(aX.number&&a0!=null){a0=+a0;if(isNaN(a0)){a0=null}else{if(a0==Infinity){a0=aB}else{if(a0==-Infinity){a0=-aB}}}}if(a0==null){if(aX.required){aE=true}if(aX.defaultValue!=null){a0=aX.defaultValue}}}aT[aR+aN]=a0}}if(aE){for(aN=0;aN<aP;++aN){a0=aT[aR+aN];if(a0!=null){aX=aW[aN];if(aX.x){aF(aJ.xaxis,a0,a0)}if(aX.y){aF(aJ.yaxis,a0,a0)}}aT[aR+aN]=null}}else{if(insertSteps&&aR>0&&aT[aR-aP]!=null&&aT[aR-aP]!=aT[aR]&&aT[aR-aP+1]!=aT[aR+1]){for(aN=0;aN<aP;++aN){aT[aR+aP+aN]=aT[aR+aN]}aT[aR+1]=aT[aR-aP+1];aR+=aP}}}}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];an(ak.processDatapoints,[aJ,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aT=aJ.datapoints.points,aP=aJ.datapoints.pointsize;var aK=aO,aQ=aO,aM=aI,aV=aI;for(aS=0;aS<aT.length;aS+=aP){if(aT[aS]==null){continue}for(aN=0;aN<aP;++aN){a0=aT[aS+aN];aX=aW[aN];if(!aX||a0==aB||a0==-aB){continue}if(aX.x){if(a0<aK){aK=a0}if(a0>aM){aM=a0}}if(aX.y){if(a0<aQ){aQ=a0}if(a0>aV){aV=a0}}}}if(aJ.bars.show){var aY=aJ.bars.align=="left"?0:-aJ.bars.barWidth/2;if(aJ.bars.horizontal){aQ+=aY;aV+=aY+aJ.bars.barWidth}else{aK+=aY;aM+=aY+aJ.bars.barWidth}}aF(aJ.xaxis,aK,aM);aF(aJ.yaxis,aQ,aV)}c.each(m(),function(a1,a2){if(a2.datamin==aO){a2.datamin=null}if(a2.datamax==aI){a2.datamax=null}})}function j(aB,aC){var aD=document.createElement("canvas");aD.className=aC;aD.width=G;aD.height=I;if(!aB){c(aD).css({position:"absolute",left:0,top:0})}c(aD).appendTo(av);if(!aD.getContext){aD=window.G_vmlCanvasManager.initElement(aD)}aD.getContext("2d").save();return aD}function B(){G=av.width();I=av.height();if(G<=0||I<=0){throw"Invalid dimensions for plot, width = "+G+", height = "+I}}function g(aC){if(aC.width!=G){aC.width=G}if(aC.height!=I){aC.height=I}var aB=aC.getContext("2d");aB.restore();aB.save()}function X(){var aC,aB=av.children("canvas.base"),aD=av.children("canvas.overlay");if(aB.length==0||aD==0){av.html("");av.css({padding:0});if(av.css("position")=="static"){av.css("position","relative")}B();az=j(true,"base");ad=j(false,"overlay");aC=false}else{az=aB.get(0);ad=aD.get(0);aC=true}H=az.getContext("2d");A=ad.getContext("2d");y=c([ad,az]);if(aC){av.data("plot").shutdown();aq.resize();A.clearRect(0,0,G,I);y.unbind();av.children().not([az,ad]).remove()}av.data("plot",aq)}function ah(){if(O.grid.hoverable){y.mousemove(aa);y.mouseleave(l)}if(O.grid.clickable){y.click(R)}an(ak.bindEvents,[y])}function ag(){if(M){clearTimeout(M)}y.unbind("mousemove",aa);y.unbind("mouseleave",l);y.unbind("click",R);an(ak.shutdown,[y])}function r(aG){function aC(aH){return aH}var aF,aB,aD=aG.options.transform||aC,aE=aG.options.inverseTransform;if(aG.direction=="x"){aF=aG.scale=h/Math.abs(aD(aG.max)-aD(aG.min));aB=Math.min(aD(aG.max),aD(aG.min))}else{aF=aG.scale=w/Math.abs(aD(aG.max)-aD(aG.min));aF=-aF;aB=Math.max(aD(aG.max),aD(aG.min))}if(aD==aC){aG.p2c=function(aH){return(aH-aB)*aF}}else{aG.p2c=function(aH){return(aD(aH)-aB)*aF}}if(!aE){aG.c2p=function(aH){return aB+aH/aF}}else{aG.c2p=function(aH){return aE(aB+aH/aF)}}}function L(aD){var aB=aD.options,aF,aJ=aD.ticks||[],aI=[],aE,aK=aB.labelWidth,aG=aB.labelHeight,aC;function aH(aM,aL){return c('<div style="position:absolute;top:-10000px;'+aL+'font-size:smaller"><div class="'+aD.direction+"Axis "+aD.direction+aD.n+'Axis">'+aM.join("")+"</div></div>").appendTo(av)}if(aD.direction=="x"){if(aK==null){aK=Math.floor(G/(aJ.length>0?aJ.length:1))}if(aG==null){aI=[];for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel" style="float:left;width:'+aK+'px">'+aE+"</div>")}}if(aI.length>0){aI.push('<div style="clear:left"></div>');aC=aH(aI,"width:10000px;");aG=aC.height();aC.remove()}}}else{if(aK==null||aG==null){for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel">'+aE+"</div>")}}if(aI.length>0){aC=aH(aI,"");if(aK==null){aK=aC.children().width()}if(aG==null){aG=aC.find("div.tickLabel").height()}aC.remove()}}}if(aK==null){aK=0}if(aG==null){aG=0}aD.labelWidth=aK;aD.labelHeight=aG}function au(aD){var aC=aD.labelWidth,aL=aD.labelHeight,aH=aD.options.position,aF=aD.options.tickLength,aG=O.grid.axisMargin,aJ=O.grid.labelMargin,aK=aD.direction=="x"?p:aw,aE;var aB=c.grep(aK,function(aN){return aN&&aN.options.position==aH&&aN.reserveSpace});if(c.inArray(aD,aB)==aB.length-1){aG=0}if(aF==null){aF="full"}var aI=c.grep(aK,function(aN){return aN&&aN.reserveSpace});var aM=c.inArray(aD,aI)==0;if(!aM&&aF=="full"){aF=5}if(!isNaN(+aF)){aJ+=+aF}if(aD.direction=="x"){aL+=aJ;if(aH=="bottom"){q.bottom+=aL+aG;aD.box={top:I-q.bottom,height:aL}}else{aD.box={top:q.top+aG,height:aL};q.top+=aL+aG}}else{aC+=aJ;if(aH=="left"){aD.box={left:q.left+aG,width:aC};q.left+=aC+aG}else{q.right+=aC+aG;aD.box={left:G-q.right,width:aC}}}aD.position=aH;aD.tickLength=aF;aD.box.padding=aJ;aD.innermost=aM}function U(aB){if(aB.direction=="x"){aB.box.left=q.left;aB.box.width=h}else{aB.box.top=q.top;aB.box.height=w}}function t(){var aC,aE=m();c.each(aE,function(aF,aG){aG.show=aG.options.show;if(aG.show==null){aG.show=aG.used}aG.reserveSpace=aG.show||aG.options.reserveSpace;n(aG)});allocatedAxes=c.grep(aE,function(aF){return aF.reserveSpace});q.left=q.right=q.top=q.bottom=0;if(O.grid.show){c.each(allocatedAxes,function(aF,aG){S(aG);P(aG);ap(aG,aG.ticks);L(aG)});for(aC=allocatedAxes.length-1;aC>=0;--aC){au(allocatedAxes[aC])}var aD=O.grid.minBorderMargin;if(aD==null){aD=0;for(aC=0;aC<Q.length;++aC){aD=Math.max(aD,Q[aC].points.radius+Q[aC].points.lineWidth/2)}}for(var aB in q){q[aB]+=O.grid.borderWidth;q[aB]=Math.max(aD,q[aB])}}h=G-q.left-q.right;w=I-q.bottom-q.top;c.each(aE,function(aF,aG){r(aG)});if(O.grid.show){c.each(allocatedAxes,function(aF,aG){U(aG)});k()}o()}function n(aE){var aF=aE.options,aD=+(aF.min!=null?aF.min:aE.datamin),aB=+(aF.max!=null?aF.max:aE.datamax),aH=aB-aD;if(aH==0){var aC=aB==0?1:0.01;if(aF.min==null){aD-=aC}if(aF.max==null||aF.min!=null){aB+=aC}}else{var aG=aF.autoscaleMargin;if(aG!=null){if(aF.min==null){aD-=aH*aG;if(aD<0&&aE.datamin!=null&&aE.datamin>=0){aD=0}}if(aF.max==null){aB+=aH*aG;if(aB>0&&aE.datamax!=null&&aE.datamax<=0){aB=0}}}}aE.min=aD;aE.max=aB}function S(aG){var aM=aG.options;var aH;if(typeof aM.ticks=="number"&&aM.ticks>0){aH=aM.ticks}else{aH=0.3*Math.sqrt(aG.direction=="x"?G:I)}var aT=(aG.max-aG.min)/aH,aO,aB,aN,aR,aS,aQ,aI;if(aM.mode=="time"){var aJ={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var aK=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]];var aC=0;if(aM.minTickSize!=null){if(typeof aM.tickSize=="number"){aC=aM.tickSize}else{aC=aM.minTickSize[0]*aJ[aM.minTickSize[1]]}}for(var aS=0;aS<aK.length-1;++aS){if(aT<(aK[aS][0]*aJ[aK[aS][1]]+aK[aS+1][0]*aJ[aK[aS+1][1]])/2&&aK[aS][0]*aJ[aK[aS][1]]>=aC){break}}aO=aK[aS][0];aN=aK[aS][1];if(aN=="year"){aQ=Math.pow(10,Math.floor(Math.log(aT/aJ.year)/Math.LN10));aI=(aT/aJ.year)/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ}aG.tickSize=aM.tickSize||[aO,aN];aB=function(aX){var a2=[],a0=aX.tickSize[0],a3=aX.tickSize[1],a1=new Date(aX.min);var aW=a0*aJ[a3];if(a3=="second"){a1.setUTCSeconds(a(a1.getUTCSeconds(),a0))}if(a3=="minute"){a1.setUTCMinutes(a(a1.getUTCMinutes(),a0))}if(a3=="hour"){a1.setUTCHours(a(a1.getUTCHours(),a0))}if(a3=="month"){a1.setUTCMonth(a(a1.getUTCMonth(),a0))}if(a3=="year"){a1.setUTCFullYear(a(a1.getUTCFullYear(),a0))}a1.setUTCMilliseconds(0);if(aW>=aJ.minute){a1.setUTCSeconds(0)}if(aW>=aJ.hour){a1.setUTCMinutes(0)}if(aW>=aJ.day){a1.setUTCHours(0)}if(aW>=aJ.day*4){a1.setUTCDate(1)}if(aW>=aJ.year){a1.setUTCMonth(0)}var a5=0,a4=Number.NaN,aY;do{aY=a4;a4=a1.getTime();a2.push(a4);if(a3=="month"){if(a0<1){a1.setUTCDate(1);var aV=a1.getTime();a1.setUTCMonth(a1.getUTCMonth()+1);var aZ=a1.getTime();a1.setTime(a4+a5*aJ.hour+(aZ-aV)*a0);a5=a1.getUTCHours();a1.setUTCHours(0)}else{a1.setUTCMonth(a1.getUTCMonth()+a0)}}else{if(a3=="year"){a1.setUTCFullYear(a1.getUTCFullYear()+a0)}else{a1.setTime(a4+aW)}}}while(a4<aX.max&&a4!=aY);return a2};aR=function(aV,aY){var a0=new Date(aV);if(aM.timeformat!=null){return c.plot.formatDate(a0,aM.timeformat,aM.monthNames)}var aW=aY.tickSize[0]*aJ[aY.tickSize[1]];var aX=aY.max-aY.min;var aZ=(aM.twelveHourClock)?" %p":"";if(aW<aJ.minute){fmt="%h:%M:%S"+aZ}else{if(aW<aJ.day){if(aX<2*aJ.day){fmt="%h:%M"+aZ}else{fmt="%b %d %h:%M"+aZ}}else{if(aW<aJ.month){fmt="%b %d"}else{if(aW<aJ.year){if(aX<aJ.year){fmt="%b"}else{fmt="%b %y"}}else{fmt="%y"}}}}return c.plot.formatDate(a0,fmt,aM.monthNames)}}else{var aU=aM.tickDecimals;var aP=-Math.floor(Math.log(aT)/Math.LN10);if(aU!=null&&aP>aU){aP=aU}aQ=Math.pow(10,-aP);aI=aT/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2;if(aI>2.25&&(aU==null||aP+1<=aU)){aO=2.5;++aP}}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ;if(aM.minTickSize!=null&&aO<aM.minTickSize){aO=aM.minTickSize}aG.tickDecimals=Math.max(0,aU!=null?aU:aP);aG.tickSize=aM.tickSize||aO;aB=function(aX){var aZ=[];var a0=a(aX.min,aX.tickSize),aW=0,aV=Number.NaN,aY;do{aY=aV;aV=a0+aW*aX.tickSize;aZ.push(aV);++aW}while(aV<aX.max&&aV!=aY);return aZ};aR=function(aV,aW){return aV.toFixed(aW.tickDecimals)}}if(aM.alignTicksWithAxis!=null){var aF=(aG.direction=="x"?p:aw)[aM.alignTicksWithAxis-1];if(aF&&aF.used&&aF!=aG){var aL=aB(aG);if(aL.length>0){if(aM.min==null){aG.min=Math.min(aG.min,aL[0])}if(aM.max==null&&aL.length>1){aG.max=Math.max(aG.max,aL[aL.length-1])}}aB=function(aX){var aY=[],aV,aW;for(aW=0;aW<aF.ticks.length;++aW){aV=(aF.ticks[aW].v-aF.min)/(aF.max-aF.min);aV=aX.min+aV*(aX.max-aX.min);aY.push(aV)}return aY};if(aG.mode!="time"&&aM.tickDecimals==null){var aE=Math.max(0,-Math.floor(Math.log(aT)/Math.LN10)+1),aD=aB(aG);if(!(aD.length>1&&/\..*0$/.test((aD[1]-aD[0]).toFixed(aE)))){aG.tickDecimals=aE}}}}aG.tickGenerator=aB;if(c.isFunction(aM.tickFormatter)){aG.tickFormatter=function(aV,aW){return""+aM.tickFormatter(aV,aW)}}else{aG.tickFormatter=aR}}function P(aF){var aH=aF.options.ticks,aG=[];if(aH==null||(typeof aH=="number"&&aH>0)){aG=aF.tickGenerator(aF)}else{if(aH){if(c.isFunction(aH)){aG=aH({min:aF.min,max:aF.max})}else{aG=aH}}}var aE,aB;aF.ticks=[];for(aE=0;aE<aG.length;++aE){var aC=null;var aD=aG[aE];if(typeof aD=="object"){aB=+aD[0];if(aD.length>1){aC=aD[1]}}else{aB=+aD}if(aC==null){aC=aF.tickFormatter(aB,aF)}if(!isNaN(aB)){aF.ticks.push({v:aB,label:aC})}}}function ap(aB,aC){if(aB.options.autoscaleMargin&&aC.length>0){if(aB.options.min==null){aB.min=Math.min(aB.min,aC[0].v)}if(aB.options.max==null&&aC.length>1){aB.max=Math.max(aB.max,aC[aC.length-1].v)}}}function W(){H.clearRect(0,0,G,I);var aC=O.grid;if(aC.show&&aC.backgroundColor){N()}if(aC.show&&!aC.aboveData){ac()}for(var aB=0;aB<Q.length;++aB){an(ak.drawSeries,[H,Q[aB]]);d(Q[aB])}an(ak.draw,[H]);if(aC.show&&aC.aboveData){ac()}}function D(aB,aI){var aE,aH,aG,aD,aF=m();for(i=0;i<aF.length;++i){aE=aF[i];if(aE.direction==aI){aD=aI+aE.n+"axis";if(!aB[aD]&&aE.n==1){aD=aI+"axis"}if(aB[aD]){aH=aB[aD].from;aG=aB[aD].to;break}}}if(!aB[aD]){aE=aI=="x"?p[0]:aw[0];aH=aB[aI+"1"];aG=aB[aI+"2"]}if(aH!=null&&aG!=null&&aH>aG){var aC=aH;aH=aG;aG=aC}return{from:aH,to:aG,axis:aE}}function N(){H.save();H.translate(q.left,q.top);H.fillStyle=am(O.grid.backgroundColor,w,0,"rgba(255, 255, 255, 0)");H.fillRect(0,0,h,w);H.restore()}function ac(){var aF;H.save();H.translate(q.left,q.top);var aH=O.grid.markings;if(aH){if(c.isFunction(aH)){var aK=aq.getAxes();aK.xmin=aK.xaxis.min;aK.xmax=aK.xaxis.max;aK.ymin=aK.yaxis.min;aK.ymax=aK.yaxis.max;aH=aH(aK)}for(aF=0;aF<aH.length;++aF){var aD=aH[aF],aC=D(aD,"x"),aI=D(aD,"y");if(aC.from==null){aC.from=aC.axis.min}if(aC.to==null){aC.to=aC.axis.max}if(aI.from==null){aI.from=aI.axis.min}if(aI.to==null){aI.to=aI.axis.max}if(aC.to<aC.axis.min||aC.from>aC.axis.max||aI.to<aI.axis.min||aI.from>aI.axis.max){continue}aC.from=Math.max(aC.from,aC.axis.min);aC.to=Math.min(aC.to,aC.axis.max);aI.from=Math.max(aI.from,aI.axis.min);aI.to=Math.min(aI.to,aI.axis.max);if(aC.from==aC.to&&aI.from==aI.to){continue}aC.from=aC.axis.p2c(aC.from);aC.to=aC.axis.p2c(aC.to);aI.from=aI.axis.p2c(aI.from);aI.to=aI.axis.p2c(aI.to);if(aC.from==aC.to||aI.from==aI.to){H.beginPath();H.strokeStyle=aD.color||O.grid.markingsColor;H.lineWidth=aD.lineWidth||O.grid.markingsLineWidth;H.moveTo(aC.from,aI.from);H.lineTo(aC.to,aI.to);H.stroke()}else{H.fillStyle=aD.color||O.grid.markingsColor;H.fillRect(aC.from,aI.to,aC.to-aC.from,aI.from-aI.to)}}}var aK=m(),aM=O.grid.borderWidth;for(var aE=0;aE<aK.length;++aE){var aB=aK[aE],aG=aB.box,aQ=aB.tickLength,aN,aL,aP,aJ;if(!aB.show||aB.ticks.length==0){continue}H.strokeStyle=aB.options.tickColor||c.color.parse(aB.options.color).scale("a",0.22).toString();H.lineWidth=1;if(aB.direction=="x"){aN=0;if(aQ=="full"){aL=(aB.position=="top"?0:w)}else{aL=aG.top-q.top+(aB.position=="top"?aG.height:0)}}else{aL=0;if(aQ=="full"){aN=(aB.position=="left"?0:h)}else{aN=aG.left-q.left+(aB.position=="left"?aG.width:0)}}if(!aB.innermost){H.beginPath();aP=aJ=0;if(aB.direction=="x"){aP=h}else{aJ=w}if(H.lineWidth==1){aN=Math.floor(aN)+0.5;aL=Math.floor(aL)+0.5}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ);H.stroke()}H.beginPath();for(aF=0;aF<aB.ticks.length;++aF){var aO=aB.ticks[aF].v;aP=aJ=0;if(aO<aB.min||aO>aB.max||(aQ=="full"&&aM>0&&(aO==aB.min||aO==aB.max))){continue}if(aB.direction=="x"){aN=aB.p2c(aO);aJ=aQ=="full"?-w:aQ;if(aB.position=="top"){aJ=-aJ}}else{aL=aB.p2c(aO);aP=aQ=="full"?-h:aQ;if(aB.position=="left"){aP=-aP}}if(H.lineWidth==1){if(aB.direction=="x"){aN=Math.floor(aN)+0.5}else{aL=Math.floor(aL)+0.5}}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ)}H.stroke()}if(aM){H.lineWidth=aM;H.strokeStyle=O.grid.borderColor;H.strokeRect(-aM/2,-aM/2,h+aM,w+aM)}H.restore()}function k(){av.find(".tickLabels").remove();var aG=['<div class="tickLabels" style="font-size:smaller">'];var aJ=m();for(var aD=0;aD<aJ.length;++aD){var aC=aJ[aD],aF=aC.box;if(!aC.show){continue}aG.push('<div class="'+aC.direction+"Axis "+aC.direction+aC.n+'Axis" style="color:'+aC.options.color+'">');for(var aE=0;aE<aC.ticks.length;++aE){var aH=aC.ticks[aE];if(!aH.label||aH.v<aC.min||aH.v>aC.max){continue}var aK={},aI;if(aC.direction=="x"){aI="center";aK.left=Math.round(q.left+aC.p2c(aH.v)-aC.labelWidth/2);if(aC.position=="bottom"){aK.top=aF.top+aF.padding}else{aK.bottom=I-(aF.top+aF.height-aF.padding)}}else{aK.top=Math.round(q.top+aC.p2c(aH.v)-aC.labelHeight/2);if(aC.position=="left"){aK.right=G-(aF.left+aF.width-aF.padding);aI="right"}else{aK.left=aF.left+aF.padding;aI="left"}}aK.width=aC.labelWidth;var aB=["position:absolute","text-align:"+aI];for(var aL in aK){aB.push(aL+":"+aK[aL]+"px")}aG.push('<div class="tickLabel" style="'+aB.join(";")+'">'+aH.label+"</div>")}aG.push("</div>")}aG.push("</div>");av.append(aG.join(""))}function d(aB){if(aB.lines.show){at(aB)}if(aB.bars.show){e(aB)}if(aB.points.show){ao(aB)}}function at(aE){function aD(aP,aQ,aI,aU,aT){var aV=aP.points,aJ=aP.pointsize,aN=null,aM=null;H.beginPath();for(var aO=aJ;aO<aV.length;aO+=aJ){var aL=aV[aO-aJ],aS=aV[aO-aJ+1],aK=aV[aO],aR=aV[aO+1];if(aL==null||aK==null){continue}if(aS<=aR&&aS<aT.min){if(aR<aT.min){continue}aL=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.min}else{if(aR<=aS&&aR<aT.min){if(aS<aT.min){continue}aK=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.min}}if(aS>=aR&&aS>aT.max){if(aR>aT.max){continue}aL=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.max}else{if(aR>=aS&&aR>aT.max){if(aS>aT.max){continue}aK=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.max}}if(aL<=aK&&aL<aU.min){if(aK<aU.min){continue}aS=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.min}else{if(aK<=aL&&aK<aU.min){if(aL<aU.min){continue}aR=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.min}}if(aL>=aK&&aL>aU.max){if(aK>aU.max){continue}aS=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.max}else{if(aK>=aL&&aK>aU.max){if(aL>aU.max){continue}aR=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.max}}if(aL!=aN||aS!=aM){H.moveTo(aU.p2c(aL)+aQ,aT.p2c(aS)+aI)}aN=aK;aM=aR;H.lineTo(aU.p2c(aK)+aQ,aT.p2c(aR)+aI)}H.stroke()}function aF(aI,aQ,aP){var aW=aI.points,aV=aI.pointsize,aN=Math.min(Math.max(0,aP.min),aP.max),aX=0,aU,aT=false,aM=1,aL=0,aR=0;while(true){if(aV>0&&aX>aW.length+aV){break}aX+=aV;var aZ=aW[aX-aV],aK=aW[aX-aV+aM],aY=aW[aX],aJ=aW[aX+aM];if(aT){if(aV>0&&aZ!=null&&aY==null){aR=aX;aV=-aV;aM=2;continue}if(aV<0&&aX==aL+aV){H.fill();aT=false;aV=-aV;aM=1;aX=aL=aR+aV;continue}}if(aZ==null||aY==null){continue}if(aZ<=aY&&aZ<aQ.min){if(aY<aQ.min){continue}aK=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.min}else{if(aY<=aZ&&aY<aQ.min){if(aZ<aQ.min){continue}aJ=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.min}}if(aZ>=aY&&aZ>aQ.max){if(aY>aQ.max){continue}aK=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.max}else{if(aY>=aZ&&aY>aQ.max){if(aZ>aQ.max){continue}aJ=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.max}}if(!aT){H.beginPath();H.moveTo(aQ.p2c(aZ),aP.p2c(aN));aT=true}if(aK>=aP.max&&aJ>=aP.max){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.max));H.lineTo(aQ.p2c(aY),aP.p2c(aP.max));continue}else{if(aK<=aP.min&&aJ<=aP.min){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.min));H.lineTo(aQ.p2c(aY),aP.p2c(aP.min));continue}}var aO=aZ,aS=aY;if(aK<=aJ&&aK<aP.min&&aJ>=aP.min){aZ=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.min}else{if(aJ<=aK&&aJ<aP.min&&aK>=aP.min){aY=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.min}}if(aK>=aJ&&aK>aP.max&&aJ<=aP.max){aZ=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.max}else{if(aJ>=aK&&aJ>aP.max&&aK<=aP.max){aY=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.max}}if(aZ!=aO){H.lineTo(aQ.p2c(aO),aP.p2c(aK))}H.lineTo(aQ.p2c(aZ),aP.p2c(aK));H.lineTo(aQ.p2c(aY),aP.p2c(aJ));if(aY!=aS){H.lineTo(aQ.p2c(aY),aP.p2c(aJ));H.lineTo(aQ.p2c(aS),aP.p2c(aJ))}}}H.save();H.translate(q.left,q.top);H.lineJoin="round";var aG=aE.lines.lineWidth,aB=aE.shadowSize;if(aG>0&&aB>0){H.lineWidth=aB;H.strokeStyle="rgba(0,0,0,0.1)";var aH=Math.PI/18;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/2),Math.cos(aH)*(aG/2+aB/2),aE.xaxis,aE.yaxis);H.lineWidth=aB/2;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/4),Math.cos(aH)*(aG/2+aB/4),aE.xaxis,aE.yaxis)}H.lineWidth=aG;H.strokeStyle=aE.color;var aC=ae(aE.lines,aE.color,0,w);if(aC){H.fillStyle=aC;aF(aE.datapoints,aE.xaxis,aE.yaxis)}if(aG>0){aD(aE.datapoints,0,0,aE.xaxis,aE.yaxis)}H.restore()}function ao(aE){function aH(aN,aM,aU,aK,aS,aT,aQ,aJ){var aR=aN.points,aI=aN.pointsize;for(var aL=0;aL<aR.length;aL+=aI){var aP=aR[aL],aO=aR[aL+1];if(aP==null||aP<aT.min||aP>aT.max||aO<aQ.min||aO>aQ.max){continue}H.beginPath();aP=aT.p2c(aP);aO=aQ.p2c(aO)+aK;if(aJ=="circle"){H.arc(aP,aO,aM,0,aS?Math.PI:Math.PI*2,false)}else{aJ(H,aP,aO,aM,aS)}H.closePath();if(aU){H.fillStyle=aU;H.fill()}H.stroke()}}H.save();H.translate(q.left,q.top);var aG=aE.points.lineWidth,aC=aE.shadowSize,aB=aE.points.radius,aF=aE.points.symbol;if(aG>0&&aC>0){var aD=aC/2;H.lineWidth=aD;H.strokeStyle="rgba(0,0,0,0.1)";aH(aE.datapoints,aB,null,aD+aD/2,true,aE.xaxis,aE.yaxis,aF);H.strokeStyle="rgba(0,0,0,0.2)";aH(aE.datapoints,aB,null,aD/2,true,aE.xaxis,aE.yaxis,aF)}H.lineWidth=aG;H.strokeStyle=aE.color;aH(aE.datapoints,aB,ae(aE.points,aE.color),0,false,aE.xaxis,aE.yaxis,aF);H.restore()}function E(aN,aM,aV,aI,aQ,aF,aD,aL,aK,aU,aR,aC){var aE,aT,aJ,aP,aG,aB,aO,aH,aS;if(aR){aH=aB=aO=true;aG=false;aE=aV;aT=aN;aP=aM+aI;aJ=aM+aQ;if(aT<aE){aS=aT;aT=aE;aE=aS;aG=true;aB=false}}else{aG=aB=aO=true;aH=false;aE=aN+aI;aT=aN+aQ;aJ=aV;aP=aM;if(aP<aJ){aS=aP;aP=aJ;aJ=aS;aH=true;aO=false}}if(aT<aL.min||aE>aL.max||aP<aK.min||aJ>aK.max){return}if(aE<aL.min){aE=aL.min;aG=false}if(aT>aL.max){aT=aL.max;aB=false}if(aJ<aK.min){aJ=aK.min;aH=false}if(aP>aK.max){aP=aK.max;aO=false}aE=aL.p2c(aE);aJ=aK.p2c(aJ);aT=aL.p2c(aT);aP=aK.p2c(aP);if(aD){aU.beginPath();aU.moveTo(aE,aJ);aU.lineTo(aE,aP);aU.lineTo(aT,aP);aU.lineTo(aT,aJ);aU.fillStyle=aD(aJ,aP);aU.fill()}if(aC>0&&(aG||aB||aO||aH)){aU.beginPath();aU.moveTo(aE,aJ+aF);if(aG){aU.lineTo(aE,aP+aF)}else{aU.moveTo(aE,aP+aF)}if(aO){aU.lineTo(aT,aP+aF)}else{aU.moveTo(aT,aP+aF)}if(aB){aU.lineTo(aT,aJ+aF)}else{aU.moveTo(aT,aJ+aF)}if(aH){aU.lineTo(aE,aJ+aF)}else{aU.moveTo(aE,aJ+aF)}aU.stroke()}}function e(aD){function aC(aJ,aI,aL,aG,aK,aN,aM){var aO=aJ.points,aF=aJ.pointsize;for(var aH=0;aH<aO.length;aH+=aF){if(aO[aH]==null){continue}E(aO[aH],aO[aH+1],aO[aH+2],aI,aL,aG,aK,aN,aM,H,aD.bars.horizontal,aD.bars.lineWidth)}}H.save();H.translate(q.left,q.top);H.lineWidth=aD.bars.lineWidth;H.strokeStyle=aD.color;var aB=aD.bars.align=="left"?0:-aD.bars.barWidth/2;var aE=aD.bars.fill?function(aF,aG){return ae(aD.bars,aD.color,aF,aG)}:null;aC(aD.datapoints,aB,aB+aD.bars.barWidth,0,aE,aD.xaxis,aD.yaxis);H.restore()}function ae(aD,aB,aC,aF){var aE=aD.fill;if(!aE){return null}if(aD.fillColor){return am(aD.fillColor,aC,aF,aB)}var aG=c.color.parse(aB);aG.a=typeof aE=="number"?aE:0.4;aG.normalize();return aG.toString()}function o(){av.find(".legend").remove();if(!O.legend.show){return}var aH=[],aF=false,aN=O.legend.labelFormatter,aM,aJ;for(var aE=0;aE<Q.length;++aE){aM=Q[aE];aJ=aM.label;if(!aJ){continue}if(aE%O.legend.noColumns==0){if(aF){aH.push("</tr>")}aH.push("<tr>");aF=true}if(aN){aJ=aN(aJ,aM)}aH.push('<td class="legendColorBox"><div style="border:1px solid '+O.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+aM.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+aJ+"</td>")}if(aF){aH.push("</tr>")}if(aH.length==0){return}var aL='<table style="font-size:smaller;color:'+O.grid.color+'">'+aH.join("")+"</table>";if(O.legend.container!=null){c(O.legend.container).html(aL)}else{var aI="",aC=O.legend.position,aD=O.legend.margin;if(aD[0]==null){aD=[aD,aD]}if(aC.charAt(0)=="n"){aI+="top:"+(aD[1]+q.top)+"px;"}else{if(aC.charAt(0)=="s"){aI+="bottom:"+(aD[1]+q.bottom)+"px;"}}if(aC.charAt(1)=="e"){aI+="right:"+(aD[0]+q.right)+"px;"}else{if(aC.charAt(1)=="w"){aI+="left:"+(aD[0]+q.left)+"px;"}}var aK=c('<div class="legend">'+aL.replace('style="','style="position:absolute;'+aI+";")+"</div>").appendTo(av);if(O.legend.backgroundOpacity!=0){var aG=O.legend.backgroundColor;if(aG==null){aG=O.grid.backgroundColor;if(aG&&typeof aG=="string"){aG=c.color.parse(aG)}else{aG=c.color.extract(aK,"background-color")}aG.a=1;aG=aG.toString()}var aB=aK.children();c('<div style="position:absolute;width:'+aB.width()+"px;height:"+aB.height()+"px;"+aI+"background-color:"+aG+';"> </div>').prependTo(aK).css("opacity",O.legend.backgroundOpacity)}}}var ab=[],M=null;function K(aI,aG,aD){var aO=O.grid.mouseActiveRadius,a0=aO*aO+1,aY=null,aR=false,aW,aU;for(aW=Q.length-1;aW>=0;--aW){if(!aD(Q[aW])){continue}var aP=Q[aW],aH=aP.xaxis,aF=aP.yaxis,aV=aP.datapoints.points,aT=aP.datapoints.pointsize,aQ=aH.c2p(aI),aN=aF.c2p(aG),aC=aO/aH.scale,aB=aO/aF.scale;if(aH.options.inverseTransform){aC=Number.MAX_VALUE}if(aF.options.inverseTransform){aB=Number.MAX_VALUE}if(aP.lines.show||aP.points.show){for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1];if(aK==null){continue}if(aK-aQ>aC||aK-aQ<-aC||aJ-aN>aB||aJ-aN<-aB){continue}var aM=Math.abs(aH.p2c(aK)-aI),aL=Math.abs(aF.p2c(aJ)-aG),aS=aM*aM+aL*aL;if(aS<a0){a0=aS;aY=[aW,aU/aT]}}}if(aP.bars.show&&!aY){var aE=aP.bars.align=="left"?0:-aP.bars.barWidth/2,aX=aE+aP.bars.barWidth;for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1],aZ=aV[aU+2];if(aK==null){continue}if(Q[aW].bars.horizontal?(aQ<=Math.max(aZ,aK)&&aQ>=Math.min(aZ,aK)&&aN>=aJ+aE&&aN<=aJ+aX):(aQ>=aK+aE&&aQ<=aK+aX&&aN>=Math.min(aZ,aJ)&&aN<=Math.max(aZ,aJ))){aY=[aW,aU/aT]}}}}if(aY){aW=aY[0];aU=aY[1];aT=Q[aW].datapoints.pointsize;return{datapoint:Q[aW].datapoints.points.slice(aU*aT,(aU+1)*aT),dataIndex:aU,series:Q[aW],seriesIndex:aW}}return null}function aa(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return aC.hoverable!=false})}}function l(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return false})}}function R(aB){u("plotclick",aB,function(aC){return aC.clickable!=false})}function u(aC,aB,aD){var aE=y.offset(),aH=aB.pageX-aE.left-q.left,aF=aB.pageY-aE.top-q.top,aJ=C({left:aH,top:aF});aJ.pageX=aB.pageX;aJ.pageY=aB.pageY;var aK=K(aH,aF,aD);if(aK){aK.pageX=parseInt(aK.series.xaxis.p2c(aK.datapoint[0])+aE.left+q.left);aK.pageY=parseInt(aK.series.yaxis.p2c(aK.datapoint[1])+aE.top+q.top)}if(O.grid.autoHighlight){for(var aG=0;aG<ab.length;++aG){var aI=ab[aG];if(aI.auto==aC&&!(aK&&aI.series==aK.series&&aI.point[0]==aK.datapoint[0]&&aI.point[1]==aK.datapoint[1])){T(aI.series,aI.point)}}if(aK){x(aK.series,aK.datapoint,aC)}}av.trigger(aC,[aJ,aK])}function f(){if(!M){M=setTimeout(s,30)}}function s(){M=null;A.save();A.clearRect(0,0,G,I);A.translate(q.left,q.top);var aC,aB;for(aC=0;aC<ab.length;++aC){aB=ab[aC];if(aB.series.bars.show){v(aB.series,aB.point)}else{ay(aB.series,aB.point)}}A.restore();an(ak.drawOverlay,[A])}function x(aD,aB,aF){if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){var aE=aD.datapoints.pointsize;aB=aD.datapoints.points.slice(aE*aB,aE*(aB+1))}var aC=al(aD,aB);if(aC==-1){ab.push({series:aD,point:aB,auto:aF});f()}else{if(!aF){ab[aC].auto=false}}}function T(aD,aB){if(aD==null&&aB==null){ab=[];f()}if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){aB=aD.data[aB]}var aC=al(aD,aB);if(aC!=-1){ab.splice(aC,1);f()}}function al(aD,aE){for(var aB=0;aB<ab.length;++aB){var aC=ab[aB];if(aC.series==aD&&aC.point[0]==aE[0]&&aC.point[1]==aE[1]){return aB}}return -1}function ay(aE,aD){var aC=aD[0],aI=aD[1],aH=aE.xaxis,aG=aE.yaxis;if(aC<aH.min||aC>aH.max||aI<aG.min||aI>aG.max){return}var aF=aE.points.radius+aE.points.lineWidth/2;A.lineWidth=aF;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aB=1.5*aF,aC=aH.p2c(aC),aI=aG.p2c(aI);A.beginPath();if(aE.points.symbol=="circle"){A.arc(aC,aI,aB,0,2*Math.PI,false)}else{aE.points.symbol(A,aC,aI,aB,false)}A.closePath();A.stroke()}function v(aE,aB){A.lineWidth=aE.bars.lineWidth;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aD=c.color.parse(aE.color).scale("a",0.5).toString();var aC=aE.bars.align=="left"?0:-aE.bars.barWidth/2;E(aB[0],aB[1],aB[2]||0,aC,aC+aE.bars.barWidth,0,function(){return aD},aE.xaxis,aE.yaxis,A,aE.bars.horizontal,aE.bars.lineWidth)}function am(aJ,aB,aH,aC){if(typeof aJ=="string"){return aJ}else{var aI=H.createLinearGradient(0,aH,0,aB);for(var aE=0,aD=aJ.colors.length;aE<aD;++aE){var aF=aJ.colors[aE];if(typeof aF!="string"){var aG=c.color.parse(aC);if(aF.brightness!=null){aG=aG.scale("rgb",aF.brightness)}if(aF.opacity!=null){aG.a*=aF.opacity}aF=aG.toString()}aI.addColorStop(aE/(aD-1),aF)}return aI}}}c.plot=function(g,e,d){var f=new b(c(g),e,d,c.plot.plugins);return f};c.plot.version="0.7";c.plot.plugins=[];c.plot.formatDate=function(l,f,h){var o=function(d){d=""+d;return d.length==1?"0"+d:d};var e=[];var p=false,j=false;var n=l.getUTCHours();var k=n<12;if(h==null){h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}if(f.search(/%p|%P/)!=-1){if(n>12){n=n-12}else{if(n==0){n=12}}}for(var g=0;g<f.length;++g){var m=f.charAt(g);if(p){switch(m){case"h":m=""+n;break;case"H":m=o(n);break;case"M":m=o(l.getUTCMinutes());break;case"S":m=o(l.getUTCSeconds());break;case"d":m=""+l.getUTCDate();break;case"m":m=""+(l.getUTCMonth()+1);break;case"y":m=""+l.getUTCFullYear();break;case"b":m=""+h[l.getUTCMonth()];break;case"p":m=(k)?("am"):("pm");break;case"P":m=(k)?("AM"):("PM");break;case"0":m="";j=true;break}if(m&&j){m=o(m);j=false}e.push(m);if(!j){p=false}}else{if(m=="%"){p=true}else{e.push(m)}}}return e.join("")};function a(e,d){return d*Math.floor(e/d)}})(jQuery);
@@ -1,9807 +0,0 @@-/*!- * jQuery JavaScript Library v1.10.1- * http://jquery.com/- *- * Includes Sizzle.js- * http://sizzlejs.com/- *- * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors- * Released under the MIT license- * http://jquery.org/license- *- * Date: 2013-05-30T21:49Z- */-(function( window, undefined ) {--// Can't do this because several apps including ASP.NET trace-// the stack via arguments.caller.callee and Firefox dies if-// you try to trace through "use strict" call chains. (#13335)-// Support: Firefox 18+-//"use strict";-var- // The deferred used on DOM ready- readyList,-- // A central reference to the root jQuery(document)- rootjQuery,-- // Support: IE<10- // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`- core_strundefined = typeof undefined,-- // Use the correct document accordingly with window argument (sandbox)- location = window.location,- document = window.document,- docElem = document.documentElement,-- // Map over jQuery in case of overwrite- _jQuery = window.jQuery,-- // Map over the $ in case of overwrite- _$ = window.$,-- // [[Class]] -> type pairs- class2type = {},-- // List of deleted data cache ids, so we can reuse them- core_deletedIds = [],-- core_version = "1.10.1",-- // Save a reference to some core methods- core_concat = core_deletedIds.concat,- core_push = core_deletedIds.push,- core_slice = core_deletedIds.slice,- core_indexOf = core_deletedIds.indexOf,- core_toString = class2type.toString,- core_hasOwn = class2type.hasOwnProperty,- core_trim = core_version.trim,-- // Define a local copy of jQuery- jQuery = function( selector, context ) {- // The jQuery object is actually just the init constructor 'enhanced'- return new jQuery.fn.init( selector, context, rootjQuery );- },-- // Used for matching numbers- core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,-- // Used for splitting on whitespace- core_rnotwhite = /\S+/g,-- // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,-- // A simple way to check for HTML strings- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)- // Strict HTML recognition (#11290: must start with <)- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,-- // Match a standalone tag- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,-- // JSON RegExp- rvalidchars = /^[\],:{}\s]*$/,- rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,- rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,- rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,-- // Matches dashed string for camelizing- rmsPrefix = /^-ms-/,- rdashAlpha = /-([\da-z])/gi,-- // Used by jQuery.camelCase as callback to replace()- fcamelCase = function( all, letter ) {- return letter.toUpperCase();- },-- // The ready event handler- completed = function( event ) {-- // readyState === "complete" is good enough for us to call the dom ready in oldIE- if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {- detach();- jQuery.ready();- }- },- // Clean-up method for dom ready events- detach = function() {- if ( document.addEventListener ) {- document.removeEventListener( "DOMContentLoaded", completed, false );- window.removeEventListener( "load", completed, false );-- } else {- document.detachEvent( "onreadystatechange", completed );- window.detachEvent( "onload", completed );- }- };--jQuery.fn = jQuery.prototype = {- // The current version of jQuery being used- jquery: core_version,-- constructor: jQuery,- init: function( selector, context, rootjQuery ) {- var match, elem;-- // HANDLE: $(""), $(null), $(undefined), $(false)- if ( !selector ) {- return this;- }-- // Handle HTML strings- if ( typeof selector === "string" ) {- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {- // Assume that strings that start and end with <> are HTML and skip the regex check- match = [ null, selector, null ];-- } else {- match = rquickExpr.exec( selector );- }-- // Match html or make sure no context is specified for #id- if ( match && (match[1] || !context) ) {-- // HANDLE: $(html) -> $(array)- if ( match[1] ) {- context = context instanceof jQuery ? context[0] : context;-- // scripts is true for back-compat- jQuery.merge( this, jQuery.parseHTML(- match[1],- context && context.nodeType ? context.ownerDocument || context : document,- true- ) );-- // HANDLE: $(html, props)- if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {- for ( match in context ) {- // Properties of context are called as methods if possible- if ( jQuery.isFunction( this[ match ] ) ) {- this[ match ]( context[ match ] );-- // ...and otherwise set as attributes- } else {- this.attr( match, context[ match ] );- }- }- }-- return this;-- // HANDLE: $(#id)- } else {- elem = document.getElementById( match[2] );-- // Check parentNode to catch when Blackberry 4.6 returns- // nodes that are no longer in the document #6963- if ( elem && elem.parentNode ) {- // Handle the case where IE and Opera return items- // by name instead of ID- if ( elem.id !== match[2] ) {- return rootjQuery.find( selector );- }-- // Otherwise, we inject the element directly into the jQuery object- this.length = 1;- this[0] = elem;- }-- this.context = document;- this.selector = selector;- return this;- }-- // HANDLE: $(expr, $(...))- } else if ( !context || context.jquery ) {- return ( context || rootjQuery ).find( selector );-- // HANDLE: $(expr, context)- // (which is just equivalent to: $(context).find(expr)- } else {- return this.constructor( context ).find( selector );- }-- // HANDLE: $(DOMElement)- } else if ( selector.nodeType ) {- this.context = this[0] = selector;- this.length = 1;- return this;-- // HANDLE: $(function)- // Shortcut for document ready- } else if ( jQuery.isFunction( selector ) ) {- return rootjQuery.ready( selector );- }-- if ( selector.selector !== undefined ) {- this.selector = selector.selector;- this.context = selector.context;- }-- return jQuery.makeArray( selector, this );- },-- // Start with an empty selector- selector: "",-- // The default length of a jQuery object is 0- length: 0,-- toArray: function() {- return core_slice.call( this );- },-- // Get the Nth element in the matched element set OR- // Get the whole matched element set as a clean array- get: function( num ) {- return num == null ?-- // Return a 'clean' array- this.toArray() :-- // Return just the object- ( num < 0 ? this[ this.length + num ] : this[ num ] );- },-- // Take an array of elements and push it onto the stack- // (returning the new matched element set)- pushStack: function( elems ) {-- // Build a new jQuery matched element set- var ret = jQuery.merge( this.constructor(), elems );-- // Add the old object onto the stack (as a reference)- ret.prevObject = this;- ret.context = this.context;-- // Return the newly-formed element set- return ret;- },-- // Execute a callback for every element in the matched set.- // (You can seed the arguments with an array of args, but this is- // only used internally.)- each: function( callback, args ) {- return jQuery.each( this, callback, args );- },-- ready: function( fn ) {- // Add the callback- jQuery.ready.promise().done( fn );-- return this;- },-- slice: function() {- return this.pushStack( core_slice.apply( this, arguments ) );- },-- first: function() {- return this.eq( 0 );- },-- last: function() {- return this.eq( -1 );- },-- eq: function( i ) {- var len = this.length,- j = +i + ( i < 0 ? len : 0 );- return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );- },-- map: function( callback ) {- return this.pushStack( jQuery.map(this, function( elem, i ) {- return callback.call( elem, i, elem );- }));- },-- end: function() {- return this.prevObject || this.constructor(null);- },-- // For internal use only.- // Behaves like an Array's method, not like a jQuery method.- push: core_push,- sort: [].sort,- splice: [].splice-};--// Give the init function the jQuery prototype for later instantiation-jQuery.fn.init.prototype = jQuery.fn;--jQuery.extend = jQuery.fn.extend = function() {- var src, copyIsArray, copy, name, options, clone,- target = arguments[0] || {},- i = 1,- length = arguments.length,- deep = false;-- // Handle a deep copy situation- if ( typeof target === "boolean" ) {- deep = target;- target = arguments[1] || {};- // skip the boolean and the target- i = 2;- }-- // Handle case when target is a string or something (possible in deep copy)- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {- target = {};- }-- // extend jQuery itself if only one argument is passed- if ( length === i ) {- target = this;- --i;- }-- for ( ; i < length; i++ ) {- // Only deal with non-null/undefined values- if ( (options = arguments[ i ]) != null ) {- // Extend the base object- for ( name in options ) {- src = target[ name ];- copy = options[ name ];-- // Prevent never-ending loop- if ( target === copy ) {- continue;- }-- // Recurse if we're merging plain objects or arrays- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {- if ( copyIsArray ) {- copyIsArray = false;- clone = src && jQuery.isArray(src) ? src : [];-- } else {- clone = src && jQuery.isPlainObject(src) ? src : {};- }-- // Never move original objects, clone them- target[ name ] = jQuery.extend( deep, clone, copy );-- // Don't bring in undefined values- } else if ( copy !== undefined ) {- target[ name ] = copy;- }- }- }- }-- // Return the modified object- return target;-};--jQuery.extend({- // Unique for each copy of jQuery on the page- // Non-digits removed to match rinlinejQuery- expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),-- noConflict: function( deep ) {- if ( window.$ === jQuery ) {- window.$ = _$;- }-- if ( deep && window.jQuery === jQuery ) {- window.jQuery = _jQuery;- }-- return jQuery;- },-- // Is the DOM ready to be used? Set to true once it occurs.- isReady: false,-- // A counter to track how many items to wait for before- // the ready event fires. See #6781- readyWait: 1,-- // Hold (or release) the ready event- holdReady: function( hold ) {- if ( hold ) {- jQuery.readyWait++;- } else {- jQuery.ready( true );- }- },-- // Handle when the DOM is ready- ready: function( wait ) {-- // Abort if there are pending holds or we're already ready- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {- return;- }-- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).- if ( !document.body ) {- return setTimeout( jQuery.ready );- }-- // Remember that the DOM is ready- jQuery.isReady = true;-- // If a normal DOM Ready event fired, decrement, and wait if need be- if ( wait !== true && --jQuery.readyWait > 0 ) {- return;- }-- // If there are functions bound, to execute- readyList.resolveWith( document, [ jQuery ] );-- // Trigger any bound ready events- if ( jQuery.fn.trigger ) {- jQuery( document ).trigger("ready").off("ready");- }- },-- // See test/unit/core.js for details concerning isFunction.- // Since version 1.3, DOM methods and functions like alert- // aren't supported. They return false on IE (#2968).- isFunction: function( obj ) {- return jQuery.type(obj) === "function";- },-- isArray: Array.isArray || function( obj ) {- return jQuery.type(obj) === "array";- },-- isWindow: function( obj ) {- /* jshint eqeqeq: false */- return obj != null && obj == obj.window;- },-- isNumeric: function( obj ) {- return !isNaN( parseFloat(obj) ) && isFinite( obj );- },-- type: function( obj ) {- if ( obj == null ) {- return String( obj );- }- return typeof obj === "object" || typeof obj === "function" ?- class2type[ core_toString.call(obj) ] || "object" :- typeof obj;- },-- isPlainObject: function( obj ) {- var key;-- // Must be an Object.- // Because of IE, we also have to check the presence of the constructor property.- // Make sure that DOM nodes and window objects don't pass through, as well- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {- return false;- }-- try {- // Not own constructor property must be Object- if ( obj.constructor &&- !core_hasOwn.call(obj, "constructor") &&- !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {- return false;- }- } catch ( e ) {- // IE8,9 Will throw exceptions on certain host objects #9897- return false;- }-- // Support: IE<9- // Handle iteration over inherited properties before own properties.- if ( jQuery.support.ownLast ) {- for ( key in obj ) {- return core_hasOwn.call( obj, key );- }- }-- // Own properties are enumerated firstly, so to speed up,- // if last one is own, then all properties are own.- for ( key in obj ) {}-- return key === undefined || core_hasOwn.call( obj, key );- },-- isEmptyObject: function( obj ) {- var name;- for ( name in obj ) {- return false;- }- return true;- },-- error: function( msg ) {- throw new Error( msg );- },-- // data: string of html- // context (optional): If specified, the fragment will be created in this context, defaults to document- // keepScripts (optional): If true, will include scripts passed in the html string- parseHTML: function( data, context, keepScripts ) {- if ( !data || typeof data !== "string" ) {- return null;- }- if ( typeof context === "boolean" ) {- keepScripts = context;- context = false;- }- context = context || document;-- var parsed = rsingleTag.exec( data ),- scripts = !keepScripts && [];-- // Single tag- if ( parsed ) {- return [ context.createElement( parsed[1] ) ];- }-- parsed = jQuery.buildFragment( [ data ], context, scripts );- if ( scripts ) {- jQuery( scripts ).remove();- }- return jQuery.merge( [], parsed.childNodes );- },-- parseJSON: function( data ) {- // Attempt to parse using the native JSON parser first- if ( window.JSON && window.JSON.parse ) {- return window.JSON.parse( data );- }-- if ( data === null ) {- return data;- }-- if ( typeof data === "string" ) {-- // Make sure leading/trailing whitespace is removed (IE can't handle it)- data = jQuery.trim( data );-- if ( data ) {- // Make sure the incoming data is actual JSON- // Logic borrowed from http://json.org/json2.js- if ( rvalidchars.test( data.replace( rvalidescape, "@" )- .replace( rvalidtokens, "]" )- .replace( rvalidbraces, "")) ) {-- return ( new Function( "return " + data ) )();- }- }- }-- jQuery.error( "Invalid JSON: " + data );- },-- // Cross-browser xml parsing- parseXML: function( data ) {- var xml, tmp;- if ( !data || typeof data !== "string" ) {- return null;- }- try {- if ( window.DOMParser ) { // Standard- tmp = new DOMParser();- xml = tmp.parseFromString( data , "text/xml" );- } else { // IE- xml = new ActiveXObject( "Microsoft.XMLDOM" );- xml.async = "false";- xml.loadXML( data );- }- } catch( e ) {- xml = undefined;- }- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {- jQuery.error( "Invalid XML: " + data );- }- return xml;- },-- noop: function() {},-- // Evaluates a script in a global context- // Workarounds based on findings by Jim Driscoll- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context- globalEval: function( data ) {- if ( data && jQuery.trim( data ) ) {- // We use execScript on Internet Explorer- // We use an anonymous function so that context is window- // rather than jQuery in Firefox- ( window.execScript || function( data ) {- window[ "eval" ].call( window, data );- } )( data );- }- },-- // Convert dashed to camelCase; used by the css and data modules- // Microsoft forgot to hump their vendor prefix (#9572)- camelCase: function( string ) {- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );- },-- nodeName: function( elem, name ) {- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();- },-- // args is for internal usage only- each: function( obj, callback, args ) {- var value,- i = 0,- length = obj.length,- isArray = isArraylike( obj );-- if ( args ) {- if ( isArray ) {- for ( ; i < length; i++ ) {- value = callback.apply( obj[ i ], args );-- if ( value === false ) {- break;- }- }- } else {- for ( i in obj ) {- value = callback.apply( obj[ i ], args );-- if ( value === false ) {- break;- }- }- }-- // A special, fast, case for the most common use of each- } else {- if ( isArray ) {- for ( ; i < length; i++ ) {- value = callback.call( obj[ i ], i, obj[ i ] );-- if ( value === false ) {- break;- }- }- } else {- for ( i in obj ) {- value = callback.call( obj[ i ], i, obj[ i ] );-- if ( value === false ) {- break;- }- }- }- }-- return obj;- },-- // Use native String.trim function wherever possible- trim: core_trim && !core_trim.call("\uFEFF\xA0") ?- function( text ) {- return text == null ?- "" :- core_trim.call( text );- } :-- // Otherwise use our own trimming functionality- function( text ) {- return text == null ?- "" :- ( text + "" ).replace( rtrim, "" );- },-- // results is for internal usage only- makeArray: function( arr, results ) {- var ret = results || [];-- if ( arr != null ) {- if ( isArraylike( Object(arr) ) ) {- jQuery.merge( ret,- typeof arr === "string" ?- [ arr ] : arr- );- } else {- core_push.call( ret, arr );- }- }-- return ret;- },-- inArray: function( elem, arr, i ) {- var len;-- if ( arr ) {- if ( core_indexOf ) {- return core_indexOf.call( arr, elem, i );- }-- len = arr.length;- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;-- for ( ; i < len; i++ ) {- // Skip accessing in sparse arrays- if ( i in arr && arr[ i ] === elem ) {- return i;- }- }- }-- return -1;- },-- merge: function( first, second ) {- var l = second.length,- i = first.length,- j = 0;-- if ( typeof l === "number" ) {- for ( ; j < l; j++ ) {- first[ i++ ] = second[ j ];- }- } else {- while ( second[j] !== undefined ) {- first[ i++ ] = second[ j++ ];- }- }-- first.length = i;-- return first;- },-- grep: function( elems, callback, inv ) {- var retVal,- ret = [],- i = 0,- length = elems.length;- inv = !!inv;-- // Go through the array, only saving the items- // that pass the validator function- for ( ; i < length; i++ ) {- retVal = !!callback( elems[ i ], i );- if ( inv !== retVal ) {- ret.push( elems[ i ] );- }- }-- return ret;- },-- // arg is for internal usage only- map: function( elems, callback, arg ) {- var value,- i = 0,- length = elems.length,- isArray = isArraylike( elems ),- ret = [];-- // Go through the array, translating each of the items to their- if ( isArray ) {- for ( ; i < length; i++ ) {- value = callback( elems[ i ], i, arg );-- if ( value != null ) {- ret[ ret.length ] = value;- }- }-- // Go through every key on the object,- } else {- for ( i in elems ) {- value = callback( elems[ i ], i, arg );-- if ( value != null ) {- ret[ ret.length ] = value;- }- }- }-- // Flatten any nested arrays- return core_concat.apply( [], ret );- },-- // A global GUID counter for objects- guid: 1,-- // Bind a function to a context, optionally partially applying any- // arguments.- proxy: function( fn, context ) {- var args, proxy, tmp;-- if ( typeof context === "string" ) {- tmp = fn[ context ];- context = fn;- fn = tmp;- }-- // Quick check to determine if target is callable, in the spec- // this throws a TypeError, but we will just return undefined.- if ( !jQuery.isFunction( fn ) ) {- return undefined;- }-- // Simulated bind- args = core_slice.call( arguments, 2 );- proxy = function() {- return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );- };-- // Set the guid of unique handler to the same of original handler, so it can be removed- proxy.guid = fn.guid = fn.guid || jQuery.guid++;-- return proxy;- },-- // Multifunctional method to get and set values of a collection- // The value/s can optionally be executed if it's a function- access: function( elems, fn, key, value, chainable, emptyGet, raw ) {- var i = 0,- length = elems.length,- bulk = key == null;-- // Sets many values- if ( jQuery.type( key ) === "object" ) {- chainable = true;- for ( i in key ) {- jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );- }-- // Sets one value- } else if ( value !== undefined ) {- chainable = true;-- if ( !jQuery.isFunction( value ) ) {- raw = true;- }-- if ( bulk ) {- // Bulk operations run against the entire set- if ( raw ) {- fn.call( elems, value );- fn = null;-- // ...except when executing function values- } else {- bulk = fn;- fn = function( elem, key, value ) {- return bulk.call( jQuery( elem ), value );- };- }- }-- if ( fn ) {- for ( ; i < length; i++ ) {- fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );- }- }- }-- return chainable ?- elems :-- // Gets- bulk ?- fn.call( elems ) :- length ? fn( elems[0], key ) : emptyGet;- },-- now: function() {- return ( new Date() ).getTime();- },-- // A method for quickly swapping in/out CSS properties to get correct calculations.- // Note: this method belongs to the css module but it's needed here for the support module.- // If support gets modularized, this method should be moved back to the css module.- swap: function( elem, options, callback, args ) {- var ret, name,- old = {};-- // Remember the old values, and insert the new ones- for ( name in options ) {- old[ name ] = elem.style[ name ];- elem.style[ name ] = options[ name ];- }-- ret = callback.apply( elem, args || [] );-- // Revert the old values- for ( name in options ) {- elem.style[ name ] = old[ name ];- }-- return ret;- }-});--jQuery.ready.promise = function( obj ) {- if ( !readyList ) {-- readyList = jQuery.Deferred();-- // Catch cases where $(document).ready() is called after the browser event has already occurred.- // we once tried to use readyState "interactive" here, but it caused issues like the one- // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15- if ( document.readyState === "complete" ) {- // Handle it asynchronously to allow scripts the opportunity to delay ready- setTimeout( jQuery.ready );-- // Standards-based browsers support DOMContentLoaded- } else if ( document.addEventListener ) {- // Use the handy event callback- document.addEventListener( "DOMContentLoaded", completed, false );-- // A fallback to window.onload, that will always work- window.addEventListener( "load", completed, false );-- // If IE event model is used- } else {- // Ensure firing before onload, maybe late but safe also for iframes- document.attachEvent( "onreadystatechange", completed );-- // A fallback to window.onload, that will always work- window.attachEvent( "onload", completed );-- // If IE and not a frame- // continually check to see if the document is ready- var top = false;-- try {- top = window.frameElement == null && document.documentElement;- } catch(e) {}-- if ( top && top.doScroll ) {- (function doScrollCheck() {- if ( !jQuery.isReady ) {-- try {- // Use the trick by Diego Perini- // http://javascript.nwbox.com/IEContentLoaded/- top.doScroll("left");- } catch(e) {- return setTimeout( doScrollCheck, 50 );- }-- // detach all dom ready events- detach();-- // and execute any waiting functions- jQuery.ready();- }- })();- }- }- }- return readyList.promise( obj );-};--// Populate the class2type map-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {- class2type[ "[object " + name + "]" ] = name.toLowerCase();-});--function isArraylike( obj ) {- var length = obj.length,- type = jQuery.type( obj );-- if ( jQuery.isWindow( obj ) ) {- return false;- }-- if ( obj.nodeType === 1 && length ) {- return true;- }-- return type === "array" || type !== "function" &&- ( length === 0 ||- typeof length === "number" && length > 0 && ( length - 1 ) in obj );-}--// All jQuery objects should point back to these-rootjQuery = jQuery(document);-/*!- * Sizzle CSS Selector Engine v1.9.4-pre- * http://sizzlejs.com/- *- * Copyright 2013 jQuery Foundation, Inc. and other contributors- * Released under the MIT license- * http://jquery.org/license- *- * Date: 2013-05-27- */-(function( window, undefined ) {--var i,- support,- cachedruns,- Expr,- getText,- isXML,- compile,- outermostContext,- sortInput,-- // Local document vars- setDocument,- document,- docElem,- documentIsHTML,- rbuggyQSA,- rbuggyMatches,- matches,- contains,-- // Instance-specific data- expando = "sizzle" + -(new Date()),- preferredDoc = window.document,- dirruns = 0,- done = 0,- classCache = createCache(),- tokenCache = createCache(),- compilerCache = createCache(),- hasDuplicate = false,- sortOrder = function() { return 0; },-- // General-purpose constants- strundefined = typeof undefined,- MAX_NEGATIVE = 1 << 31,-- // Instance methods- hasOwn = ({}).hasOwnProperty,- arr = [],- pop = arr.pop,- push_native = arr.push,- push = arr.push,- slice = arr.slice,- // Use a stripped-down indexOf if we can't use a native one- indexOf = arr.indexOf || function( elem ) {- var i = 0,- len = this.length;- for ( ; i < len; i++ ) {- if ( this[i] === elem ) {- return i;- }- }- return -1;- },-- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",-- // Regular expressions-- // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace- whitespace = "[\\x20\\t\\r\\n\\f]",- // http://www.w3.org/TR/css3-syntax/#characters- characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",-- // Loosely modeled on CSS identifier characters- // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors- // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier- identifier = characterEncoding.replace( "w", "w#" ),-- // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors- attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +- "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",-- // Prefer arguments quoted,- // then not containing pseudos/brackets,- // then attribute selectors/non-parenthetical expressions,- // then anything else- // These preferences are here to reduce the number of selectors- // needing tokenize in the PSEUDO preFilter- pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",-- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),-- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),-- rsibling = new RegExp( whitespace + "*[+~]" ),- rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ),-- rpseudo = new RegExp( pseudos ),- ridentifier = new RegExp( "^" + identifier + "$" ),-- matchExpr = {- "ID": new RegExp( "^#(" + characterEncoding + ")" ),- "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),- "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),- "ATTR": new RegExp( "^" + attributes ),- "PSEUDO": new RegExp( "^" + pseudos ),- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),- // For use in libraries implementing .is()- // We use this for POS matching in `select`- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )- },-- rnative = /^[^{]+\{\s*\[native \w/,-- // Easily-parseable/retrievable ID or TAG or CLASS selectors- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,-- rinputs = /^(?:input|select|textarea|button)$/i,- rheader = /^h\d$/i,-- rescape = /'|\\/g,-- // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),- funescape = function( _, escaped, escapedWhitespace ) {- var high = "0x" + escaped - 0x10000;- // NaN means non-codepoint- // Support: Firefox- // Workaround erroneous numeric interpretation of +"0x"- return high !== high || escapedWhitespace ?- escaped :- // BMP codepoint- high < 0 ?- String.fromCharCode( high + 0x10000 ) :- // Supplemental Plane codepoint (surrogate pair)- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );- };--// Optimize for push.apply( _, NodeList )-try {- push.apply(- (arr = slice.call( preferredDoc.childNodes )),- preferredDoc.childNodes- );- // Support: Android<4.0- // Detect silently failing push.apply- arr[ preferredDoc.childNodes.length ].nodeType;-} catch ( e ) {- push = { apply: arr.length ?-- // Leverage slice if possible- function( target, els ) {- push_native.apply( target, slice.call(els) );- } :-- // Support: IE<9- // Otherwise append directly- function( target, els ) {- var j = target.length,- i = 0;- // Can't trust NodeList.length- while ( (target[j++] = els[i++]) ) {}- target.length = j - 1;- }- };-}--function Sizzle( selector, context, results, seed ) {- var match, elem, m, nodeType,- // QSA vars- i, groups, old, nid, newContext, newSelector;-- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {- setDocument( context );- }-- context = context || document;- results = results || [];-- if ( !selector || typeof selector !== "string" ) {- return results;- }-- if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {- return [];- }-- if ( documentIsHTML && !seed ) {-- // Shortcuts- if ( (match = rquickExpr.exec( selector )) ) {- // Speed-up: Sizzle("#ID")- if ( (m = match[1]) ) {- if ( nodeType === 9 ) {- elem = context.getElementById( m );- // Check parentNode to catch when Blackberry 4.6 returns- // nodes that are no longer in the document #6963- if ( elem && elem.parentNode ) {- // Handle the case where IE, Opera, and Webkit return items- // by name instead of ID- if ( elem.id === m ) {- results.push( elem );- return results;- }- } else {- return results;- }- } else {- // Context is not a document- if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&- contains( context, elem ) && elem.id === m ) {- results.push( elem );- return results;- }- }-- // Speed-up: Sizzle("TAG")- } else if ( match[2] ) {- push.apply( results, context.getElementsByTagName( selector ) );- return results;-- // Speed-up: Sizzle(".CLASS")- } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {- push.apply( results, context.getElementsByClassName( m ) );- return results;- }- }-- // QSA path- if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {- nid = old = expando;- newContext = context;- newSelector = nodeType === 9 && selector;-- // qSA works strangely on Element-rooted queries- // We can work around this by specifying an extra ID on the root- // and working up from there (Thanks to Andrew Dupont for the technique)- // IE 8 doesn't work on object elements- if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {- groups = tokenize( selector );-- if ( (old = context.getAttribute("id")) ) {- nid = old.replace( rescape, "\\$&" );- } else {- context.setAttribute( "id", nid );- }- nid = "[id='" + nid + "'] ";-- i = groups.length;- while ( i-- ) {- groups[i] = nid + toSelector( groups[i] );- }- newContext = rsibling.test( selector ) && context.parentNode || context;- newSelector = groups.join(",");- }-- if ( newSelector ) {- try {- push.apply( results,- newContext.querySelectorAll( newSelector )- );- return results;- } catch(qsaError) {- } finally {- if ( !old ) {- context.removeAttribute("id");- }- }- }- }- }-- // All others- return select( selector.replace( rtrim, "$1" ), context, results, seed );-}--/**- * For feature detection- * @param {Function} fn The function to test for native support- */-function isNative( fn ) {- return rnative.test( fn + "" );-}--/**- * Create key-value caches of limited size- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)- * deleting the oldest entry- */-function createCache() {- var keys = [];-- function cache( key, value ) {- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)- if ( keys.push( key += " " ) > Expr.cacheLength ) {- // Only keep the most recent entries- delete cache[ keys.shift() ];- }- return (cache[ key ] = value);- }- return cache;-}--/**- * Mark a function for special use by Sizzle- * @param {Function} fn The function to mark- */-function markFunction( fn ) {- fn[ expando ] = true;- return fn;-}--/**- * Support testing using an element- * @param {Function} fn Passed the created div and expects a boolean result- */-function assert( fn ) {- var div = document.createElement("div");-- try {- return !!fn( div );- } catch (e) {- return false;- } finally {- // Remove from its parent by default- if ( div.parentNode ) {- div.parentNode.removeChild( div );- }- // release memory in IE- div = null;- }-}--/**- * Adds the same handler for all of the specified attrs- * @param {String} attrs Pipe-separated list of attributes- * @param {Function} handler The method that will be applied if the test fails- * @param {Boolean} test The result of a test. If true, null will be set as the handler in leiu of the specified handler- */-function addHandle( attrs, handler, test ) {- attrs = attrs.split("|");- var current,- i = attrs.length,- setHandle = test ? null : handler;-- while ( i-- ) {- // Don't override a user's handler- if ( !(current = Expr.attrHandle[ attrs[i] ]) || current === handler ) {- Expr.attrHandle[ attrs[i] ] = setHandle;- }- }-}--/**- * Fetches boolean attributes by node- * @param {Element} elem- * @param {String} name- */-function boolHandler( elem, name ) {- // XML does not need to be checked as this will not be assigned for XML documents- var val = elem.getAttributeNode( name );- return val && val.specified ?- val.value :- elem[ name ] === true ? name.toLowerCase() : null;-}--/**- * Fetches attributes without interpolation- * http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx- * @param {Element} elem- * @param {String} name- */-function interpolationHandler( elem, name ) {- // XML does not need to be checked as this will not be assigned for XML documents- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );-}--/**- * Uses defaultValue to retrieve value in IE6/7- * @param {Element} elem- * @param {String} name- */-function valueHandler( elem ) {- // Ignore the value *property* on inputs by using defaultValue- // Fallback to Sizzle.attr by returning undefined where appropriate- // XML does not need to be checked as this will not be assigned for XML documents- if ( elem.nodeName.toLowerCase() === "input" ) {- return elem.defaultValue;- }-}--/**- * Checks document order of two siblings- * @param {Element} a- * @param {Element} b- * @returns Returns -1 if a precedes b, 1 if a follows b- */-function siblingCheck( a, b ) {- var cur = b && a,- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&- ( ~b.sourceIndex || MAX_NEGATIVE ) -- ( ~a.sourceIndex || MAX_NEGATIVE );-- // Use IE sourceIndex if available on both nodes- if ( diff ) {- return diff;- }-- // Check if b follows a- if ( cur ) {- while ( (cur = cur.nextSibling) ) {- if ( cur === b ) {- return -1;- }- }- }-- return a ? 1 : -1;-}--/**- * Returns a function to use in pseudos for input types- * @param {String} type- */-function createInputPseudo( type ) {- return function( elem ) {- var name = elem.nodeName.toLowerCase();- return name === "input" && elem.type === type;- };-}--/**- * Returns a function to use in pseudos for buttons- * @param {String} type- */-function createButtonPseudo( type ) {- return function( elem ) {- var name = elem.nodeName.toLowerCase();- return (name === "input" || name === "button") && elem.type === type;- };-}--/**- * Returns a function to use in pseudos for positionals- * @param {Function} fn- */-function createPositionalPseudo( fn ) {- return markFunction(function( argument ) {- argument = +argument;- return markFunction(function( seed, matches ) {- var j,- matchIndexes = fn( [], seed.length, argument ),- i = matchIndexes.length;-- // Match elements found at the specified indexes- while ( i-- ) {- if ( seed[ (j = matchIndexes[i]) ] ) {- seed[j] = !(matches[j] = seed[j]);- }- }- });- });-}--/**- * Detect xml- * @param {Element|Object} elem An element or a document- */-isXML = Sizzle.isXML = function( elem ) {- // documentElement is verified for cases where it doesn't yet exist- // (such as loading iframes in IE - #4833)- var documentElement = elem && (elem.ownerDocument || elem).documentElement;- return documentElement ? documentElement.nodeName !== "HTML" : false;-};--// Expose support vars for convenience-support = Sizzle.support = {};--/**- * Sets document-related variables once based on the current document- * @param {Element|Object} [doc] An element or document object to use to set the document- * @returns {Object} Returns the current document- */-setDocument = Sizzle.setDocument = function( node ) {- var doc = node ? node.ownerDocument || node : preferredDoc,- parent = doc.parentWindow;-- // If no document and documentElement is available, return- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {- return document;- }-- // Set our document- document = doc;- docElem = doc.documentElement;-- // Support tests- documentIsHTML = !isXML( doc );-- // Support: IE>8- // If iframe document is assigned to "document" variable and if iframe has been reloaded,- // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936- if ( parent && parent.frameElement ) {- parent.attachEvent( "onbeforeunload", function() {- setDocument();- });- }-- /* Attributes- ---------------------------------------------------------------------- */-- // Support: IE<8- // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)- support.attributes = assert(function( div ) {-- // Support: IE<8- // Prevent attribute/property "interpolation"- div.innerHTML = "<a href='#'></a>";- addHandle( "type|href|height|width", interpolationHandler, div.firstChild.getAttribute("href") === "#" );-- // Support: IE<9- // Use getAttributeNode to fetch booleans when getAttribute lies- addHandle( booleans, boolHandler, div.getAttribute("disabled") == null );-- div.className = "i";- return !div.getAttribute("className");- });-- // Support: IE<9- // Retrieving value should defer to defaultValue- support.input = assert(function( div ) {- div.innerHTML = "<input>";- div.firstChild.setAttribute( "value", "" );- return div.firstChild.getAttribute( "value" ) === "";- });-- // IE6/7 still return empty string for value,- // but are actually retrieving the property- addHandle( "value", valueHandler, support.attributes && support.input );-- /* getElement(s)By*- ---------------------------------------------------------------------- */-- // Check if getElementsByTagName("*") returns only elements- support.getElementsByTagName = assert(function( div ) {- div.appendChild( doc.createComment("") );- return !div.getElementsByTagName("*").length;- });-- // Check if getElementsByClassName can be trusted- support.getElementsByClassName = assert(function( div ) {- div.innerHTML = "<div class='a'></div><div class='a i'></div>";-- // Support: Safari<4- // Catch class over-caching- div.firstChild.className = "i";- // Support: Opera<10- // Catch gEBCN failure to find non-leading classes- return div.getElementsByClassName("i").length === 2;- });-- // Support: IE<10- // Check if getElementById returns elements by name- // The broken getElementById methods don't pick up programatically-set names,- // so use a roundabout getElementsByName test- support.getById = assert(function( div ) {- docElem.appendChild( div ).id = expando;- return !doc.getElementsByName || !doc.getElementsByName( expando ).length;- });-- // ID find and filter- if ( support.getById ) {- Expr.find["ID"] = function( id, context ) {- if ( typeof context.getElementById !== strundefined && documentIsHTML ) {- var m = context.getElementById( id );- // Check parentNode to catch when Blackberry 4.6 returns- // nodes that are no longer in the document #6963- return m && m.parentNode ? [m] : [];- }- };- Expr.filter["ID"] = function( id ) {- var attrId = id.replace( runescape, funescape );- return function( elem ) {- return elem.getAttribute("id") === attrId;- };- };- } else {- // Support: IE6/7- // getElementById is not reliable as a find shortcut- delete Expr.find["ID"];-- Expr.filter["ID"] = function( id ) {- var attrId = id.replace( runescape, funescape );- return function( elem ) {- var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");- return node && node.value === attrId;- };- };- }-- // Tag- Expr.find["TAG"] = support.getElementsByTagName ?- function( tag, context ) {- if ( typeof context.getElementsByTagName !== strundefined ) {- return context.getElementsByTagName( tag );- }- } :- function( tag, context ) {- var elem,- tmp = [],- i = 0,- results = context.getElementsByTagName( tag );-- // Filter out possible comments- if ( tag === "*" ) {- while ( (elem = results[i++]) ) {- if ( elem.nodeType === 1 ) {- tmp.push( elem );- }- }-- return tmp;- }- return results;- };-- // Class- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {- if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {- return context.getElementsByClassName( className );- }- };-- /* QSA/matchesSelector- ---------------------------------------------------------------------- */-- // QSA and matchesSelector support-- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)- rbuggyMatches = [];-- // qSa(:focus) reports false when true (Chrome 21)- // We allow this because of a bug in IE8/9 that throws an error- // whenever `document.activeElement` is accessed on an iframe- // So, we allow :focus to pass through QSA all the time to avoid the IE error- // See http://bugs.jquery.com/ticket/13378- rbuggyQSA = [];-- if ( (support.qsa = isNative(doc.querySelectorAll)) ) {- // Build QSA regex- // Regex strategy adopted from Diego Perini- assert(function( div ) {- // Select is set to empty string on purpose- // This is to test IE's treatment of not explicitly- // setting a boolean content attribute,- // since its presence should be enough- // http://bugs.jquery.com/ticket/12359- div.innerHTML = "<select><option selected=''></option></select>";-- // Support: IE8- // Boolean attributes and "value" are not treated correctly- if ( !div.querySelectorAll("[selected]").length ) {- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );- }-- // Webkit/Opera - :checked should return selected option elements- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked- // IE8 throws error here and will not see later tests- if ( !div.querySelectorAll(":checked").length ) {- rbuggyQSA.push(":checked");- }- });-- assert(function( div ) {-- // Support: Opera 10-12/IE8- // ^= $= *= and empty values- // Should not select anything- // Support: Windows 8 Native Apps- // The type attribute is restricted during .innerHTML assignment- var input = doc.createElement("input");- input.setAttribute( "type", "hidden" );- div.appendChild( input ).setAttribute( "t", "" );-- if ( div.querySelectorAll("[t^='']").length ) {- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );- }-- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)- // IE8 throws error here and will not see later tests- if ( !div.querySelectorAll(":enabled").length ) {- rbuggyQSA.push( ":enabled", ":disabled" );- }-- // Opera 10-11 does not throw on post-comma invalid pseudos- div.querySelectorAll("*,:x");- rbuggyQSA.push(",.*:");- });- }-- if ( (support.matchesSelector = isNative( (matches = docElem.webkitMatchesSelector ||- docElem.mozMatchesSelector ||- docElem.oMatchesSelector ||- docElem.msMatchesSelector) )) ) {-- assert(function( div ) {- // Check to see if it's possible to do matchesSelector- // on a disconnected node (IE 9)- support.disconnectedMatch = matches.call( div, "div" );-- // This should fail with an exception- // Gecko does not error, returns false instead- matches.call( div, "[s!='']:x" );- rbuggyMatches.push( "!=", pseudos );- });- }-- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );-- /* Contains- ---------------------------------------------------------------------- */-- // Element contains another- // Purposefully does not implement inclusive descendent- // As in, an element does not contain itself- contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?- function( a, b ) {- var adown = a.nodeType === 9 ? a.documentElement : a,- bup = b && b.parentNode;- return a === bup || !!( bup && bup.nodeType === 1 && (- adown.contains ?- adown.contains( bup ) :- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16- ));- } :- function( a, b ) {- if ( b ) {- while ( (b = b.parentNode) ) {- if ( b === a ) {- return true;- }- }- }- return false;- };-- /* Sorting- ---------------------------------------------------------------------- */-- // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)- // Detached nodes confoundingly follow *each other*- support.sortDetached = assert(function( div1 ) {- // Should return 1, but returns 4 (following)- return div1.compareDocumentPosition( doc.createElement("div") ) & 1;- });-- // Document order sorting- sortOrder = docElem.compareDocumentPosition ?- function( a, b ) {-- // Flag for duplicate removal- if ( a === b ) {- hasDuplicate = true;- return 0;- }-- var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );-- if ( compare ) {- // Disconnected nodes- if ( compare & 1 ||- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {-- // Choose the first element that is related to our preferred document- if ( a === doc || contains(preferredDoc, a) ) {- return -1;- }- if ( b === doc || contains(preferredDoc, b) ) {- return 1;- }-- // Maintain original order- return sortInput ?- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :- 0;- }-- return compare & 4 ? -1 : 1;- }-- // Not directly comparable, sort on existence of method- return a.compareDocumentPosition ? -1 : 1;- } :- function( a, b ) {- var cur,- i = 0,- aup = a.parentNode,- bup = b.parentNode,- ap = [ a ],- bp = [ b ];-- // Exit early if the nodes are identical- if ( a === b ) {- hasDuplicate = true;- return 0;-- // Parentless nodes are either documents or disconnected- } else if ( !aup || !bup ) {- return a === doc ? -1 :- b === doc ? 1 :- aup ? -1 :- bup ? 1 :- sortInput ?- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :- 0;-- // If the nodes are siblings, we can do a quick check- } else if ( aup === bup ) {- return siblingCheck( a, b );- }-- // Otherwise we need full lists of their ancestors for comparison- cur = a;- while ( (cur = cur.parentNode) ) {- ap.unshift( cur );- }- cur = b;- while ( (cur = cur.parentNode) ) {- bp.unshift( cur );- }-- // Walk down the tree looking for a discrepancy- while ( ap[i] === bp[i] ) {- i++;- }-- return i ?- // Do a sibling check if the nodes have a common ancestor- siblingCheck( ap[i], bp[i] ) :-- // Otherwise nodes in our document sort first- ap[i] === preferredDoc ? -1 :- bp[i] === preferredDoc ? 1 :- 0;- };-- return doc;-};--Sizzle.matches = function( expr, elements ) {- return Sizzle( expr, null, null, elements );-};--Sizzle.matchesSelector = function( elem, expr ) {- // Set document vars if needed- if ( ( elem.ownerDocument || elem ) !== document ) {- setDocument( elem );- }-- // Make sure that attribute selectors are quoted- expr = expr.replace( rattributeQuotes, "='$1']" );-- if ( support.matchesSelector && documentIsHTML &&- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {-- try {- var ret = matches.call( elem, expr );-- // IE 9's matchesSelector returns false on disconnected nodes- if ( ret || support.disconnectedMatch ||- // As well, disconnected nodes are said to be in a document- // fragment in IE 9- elem.document && elem.document.nodeType !== 11 ) {- return ret;- }- } catch(e) {}- }-- return Sizzle( expr, document, null, [elem] ).length > 0;-};--Sizzle.contains = function( context, elem ) {- // Set document vars if needed- if ( ( context.ownerDocument || context ) !== document ) {- setDocument( context );- }- return contains( context, elem );-};--Sizzle.attr = function( elem, name ) {- // Set document vars if needed- if ( ( elem.ownerDocument || elem ) !== document ) {- setDocument( elem );- }-- var fn = Expr.attrHandle[ name.toLowerCase() ],- // Don't get fooled by Object.prototype properties (jQuery #13807)- val = ( fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?- fn( elem, name, !documentIsHTML ) :- undefined );-- return val === undefined ?- support.attributes || !documentIsHTML ?- elem.getAttribute( name ) :- (val = elem.getAttributeNode(name)) && val.specified ?- val.value :- null :- val;-};--Sizzle.error = function( msg ) {- throw new Error( "Syntax error, unrecognized expression: " + msg );-};--/**- * Document sorting and removing duplicates- * @param {ArrayLike} results- */-Sizzle.uniqueSort = function( results ) {- var elem,- duplicates = [],- j = 0,- i = 0;-- // Unless we *know* we can detect duplicates, assume their presence- hasDuplicate = !support.detectDuplicates;- sortInput = !support.sortStable && results.slice( 0 );- results.sort( sortOrder );-- if ( hasDuplicate ) {- while ( (elem = results[i++]) ) {- if ( elem === results[ i ] ) {- j = duplicates.push( i );- }- }- while ( j-- ) {- results.splice( duplicates[ j ], 1 );- }- }-- return results;-};--/**- * Utility function for retrieving the text value of an array of DOM nodes- * @param {Array|Element} elem- */-getText = Sizzle.getText = function( elem ) {- var node,- ret = "",- i = 0,- nodeType = elem.nodeType;-- if ( !nodeType ) {- // If no nodeType, this is expected to be an array- for ( ; (node = elem[i]); i++ ) {- // Do not traverse comment nodes- ret += getText( node );- }- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {- // Use textContent for elements- // innerText usage removed for consistency of new lines (see #11153)- if ( typeof elem.textContent === "string" ) {- return elem.textContent;- } else {- // Traverse its children- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {- ret += getText( elem );- }- }- } else if ( nodeType === 3 || nodeType === 4 ) {- return elem.nodeValue;- }- // Do not include comment or processing instruction nodes-- return ret;-};--Expr = Sizzle.selectors = {-- // Can be adjusted by the user- cacheLength: 50,-- createPseudo: markFunction,-- match: matchExpr,-- attrHandle: {},-- find: {},-- relative: {- ">": { dir: "parentNode", first: true },- " ": { dir: "parentNode" },- "+": { dir: "previousSibling", first: true },- "~": { dir: "previousSibling" }- },-- preFilter: {- "ATTR": function( match ) {- match[1] = match[1].replace( runescape, funescape );-- // Move the given value to match[3] whether quoted or unquoted- match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );-- if ( match[2] === "~=" ) {- match[3] = " " + match[3] + " ";- }-- return match.slice( 0, 4 );- },-- "CHILD": function( match ) {- /* matches from matchExpr["CHILD"]- 1 type (only|nth|...)- 2 what (child|of-type)- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)- 4 xn-component of xn+y argument ([+-]?\d*n|)- 5 sign of xn-component- 6 x of xn-component- 7 sign of y-component- 8 y of y-component- */- match[1] = match[1].toLowerCase();-- if ( match[1].slice( 0, 3 ) === "nth" ) {- // nth-* requires argument- if ( !match[3] ) {- Sizzle.error( match[0] );- }-- // numeric x and y parameters for Expr.filter.CHILD- // remember that false/true cast respectively to 0/1- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );-- // other types prohibit arguments- } else if ( match[3] ) {- Sizzle.error( match[0] );- }-- return match;- },-- "PSEUDO": function( match ) {- var excess,- unquoted = !match[5] && match[2];-- if ( matchExpr["CHILD"].test( match[0] ) ) {- return null;- }-- // Accept quoted arguments as-is- if ( match[3] && match[4] !== undefined ) {- match[2] = match[4];-- // Strip excess characters from unquoted arguments- } else if ( unquoted && rpseudo.test( unquoted ) &&- // Get excess from tokenize (recursively)- (excess = tokenize( unquoted, true )) &&- // advance to the next closing parenthesis- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {-- // excess is a negative index- match[0] = match[0].slice( 0, excess );- match[2] = unquoted.slice( 0, excess );- }-- // Return only captures needed by the pseudo filter method (type and argument)- return match.slice( 0, 3 );- }- },-- filter: {-- "TAG": function( nodeNameSelector ) {- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();- return nodeNameSelector === "*" ?- function() { return true; } :- function( elem ) {- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;- };- },-- "CLASS": function( className ) {- var pattern = classCache[ className + " " ];-- return pattern ||- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&- classCache( className, function( elem ) {- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );- });- },-- "ATTR": function( name, operator, check ) {- return function( elem ) {- var result = Sizzle.attr( elem, name );-- if ( result == null ) {- return operator === "!=";- }- if ( !operator ) {- return true;- }-- result += "";-- return operator === "=" ? result === check :- operator === "!=" ? result !== check :- operator === "^=" ? check && result.indexOf( check ) === 0 :- operator === "*=" ? check && result.indexOf( check ) > -1 :- operator === "$=" ? check && result.slice( -check.length ) === check :- operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :- false;- };- },-- "CHILD": function( type, what, argument, first, last ) {- var simple = type.slice( 0, 3 ) !== "nth",- forward = type.slice( -4 ) !== "last",- ofType = what === "of-type";-- return first === 1 && last === 0 ?-- // Shortcut for :nth-*(n)- function( elem ) {- return !!elem.parentNode;- } :-- function( elem, context, xml ) {- var cache, outerCache, node, diff, nodeIndex, start,- dir = simple !== forward ? "nextSibling" : "previousSibling",- parent = elem.parentNode,- name = ofType && elem.nodeName.toLowerCase(),- useCache = !xml && !ofType;-- if ( parent ) {-- // :(first|last|only)-(child|of-type)- if ( simple ) {- while ( dir ) {- node = elem;- while ( (node = node[ dir ]) ) {- if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {- return false;- }- }- // Reverse direction for :only-* (if we haven't yet done so)- start = dir = type === "only" && !start && "nextSibling";- }- return true;- }-- start = [ forward ? parent.firstChild : parent.lastChild ];-- // non-xml :nth-child(...) stores cache data on `parent`- if ( forward && useCache ) {- // Seek `elem` from a previously-cached index- outerCache = parent[ expando ] || (parent[ expando ] = {});- cache = outerCache[ type ] || [];- nodeIndex = cache[0] === dirruns && cache[1];- diff = cache[0] === dirruns && cache[2];- node = nodeIndex && parent.childNodes[ nodeIndex ];-- while ( (node = ++nodeIndex && node && node[ dir ] ||-- // Fallback to seeking `elem` from the start- (diff = nodeIndex = 0) || start.pop()) ) {-- // When found, cache indexes on `parent` and break- if ( node.nodeType === 1 && ++diff && node === elem ) {- outerCache[ type ] = [ dirruns, nodeIndex, diff ];- break;- }- }-- // Use previously-cached element index if available- } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {- diff = cache[1];-- // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)- } else {- // Use the same loop as above to seek `elem` from the start- while ( (node = ++nodeIndex && node && node[ dir ] ||- (diff = nodeIndex = 0) || start.pop()) ) {-- if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {- // Cache the index of each encountered element- if ( useCache ) {- (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];- }-- if ( node === elem ) {- break;- }- }- }- }-- // Incorporate the offset, then check against cycle size- diff -= last;- return diff === first || ( diff % first === 0 && diff / first >= 0 );- }- };- },-- "PSEUDO": function( pseudo, argument ) {- // pseudo-class names are case-insensitive- // http://www.w3.org/TR/selectors/#pseudo-classes- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters- // Remember that setFilters inherits from pseudos- var args,- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||- Sizzle.error( "unsupported pseudo: " + pseudo );-- // The user may use createPseudo to indicate that- // arguments are needed to create the filter function- // just as Sizzle does- if ( fn[ expando ] ) {- return fn( argument );- }-- // But maintain support for old signatures- if ( fn.length > 1 ) {- args = [ pseudo, pseudo, "", argument ];- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?- markFunction(function( seed, matches ) {- var idx,- matched = fn( seed, argument ),- i = matched.length;- while ( i-- ) {- idx = indexOf.call( seed, matched[i] );- seed[ idx ] = !( matches[ idx ] = matched[i] );- }- }) :- function( elem ) {- return fn( elem, 0, args );- };- }-- return fn;- }- },-- pseudos: {- // Potentially complex pseudos- "not": markFunction(function( selector ) {- // Trim the selector passed to compile- // to avoid treating leading and trailing- // spaces as combinators- var input = [],- results = [],- matcher = compile( selector.replace( rtrim, "$1" ) );-- return matcher[ expando ] ?- markFunction(function( seed, matches, context, xml ) {- var elem,- unmatched = matcher( seed, null, xml, [] ),- i = seed.length;-- // Match elements unmatched by `matcher`- while ( i-- ) {- if ( (elem = unmatched[i]) ) {- seed[i] = !(matches[i] = elem);- }- }- }) :- function( elem, context, xml ) {- input[0] = elem;- matcher( input, null, xml, results );- return !results.pop();- };- }),-- "has": markFunction(function( selector ) {- return function( elem ) {- return Sizzle( selector, elem ).length > 0;- };- }),-- "contains": markFunction(function( text ) {- return function( elem ) {- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;- };- }),-- // "Whether an element is represented by a :lang() selector- // is based solely on the element's language value- // being equal to the identifier C,- // or beginning with the identifier C immediately followed by "-".- // The matching of C against the element's language value is performed case-insensitively.- // The identifier C does not have to be a valid language name."- // http://www.w3.org/TR/selectors/#lang-pseudo- "lang": markFunction( function( lang ) {- // lang value must be a valid identifier- if ( !ridentifier.test(lang || "") ) {- Sizzle.error( "unsupported lang: " + lang );- }- lang = lang.replace( runescape, funescape ).toLowerCase();- return function( elem ) {- var elemLang;- do {- if ( (elemLang = documentIsHTML ?- elem.lang :- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {-- elemLang = elemLang.toLowerCase();- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;- }- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );- return false;- };- }),-- // Miscellaneous- "target": function( elem ) {- var hash = window.location && window.location.hash;- return hash && hash.slice( 1 ) === elem.id;- },-- "root": function( elem ) {- return elem === docElem;- },-- "focus": function( elem ) {- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);- },-- // Boolean properties- "enabled": function( elem ) {- return elem.disabled === false;- },-- "disabled": function( elem ) {- return elem.disabled === true;- },-- "checked": function( elem ) {- // In CSS3, :checked should return both checked and selected elements- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked- var nodeName = elem.nodeName.toLowerCase();- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);- },-- "selected": function( elem ) {- // Accessing this property makes selected-by-default- // options in Safari work properly- if ( elem.parentNode ) {- elem.parentNode.selectedIndex;- }-- return elem.selected === true;- },-- // Contents- "empty": function( elem ) {- // http://www.w3.org/TR/selectors/#empty-pseudo- // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),- // not comment, processing instructions, or others- // Thanks to Diego Perini for the nodeName shortcut- // Greater than "@" means alpha characters (specifically not starting with "#" or "?")- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {- if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {- return false;- }- }- return true;- },-- "parent": function( elem ) {- return !Expr.pseudos["empty"]( elem );- },-- // Element/input types- "header": function( elem ) {- return rheader.test( elem.nodeName );- },-- "input": function( elem ) {- return rinputs.test( elem.nodeName );- },-- "button": function( elem ) {- var name = elem.nodeName.toLowerCase();- return name === "input" && elem.type === "button" || name === "button";- },-- "text": function( elem ) {- var attr;- // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)- // use getAttribute instead to test this case- return elem.nodeName.toLowerCase() === "input" &&- elem.type === "text" &&- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );- },-- // Position-in-collection- "first": createPositionalPseudo(function() {- return [ 0 ];- }),-- "last": createPositionalPseudo(function( matchIndexes, length ) {- return [ length - 1 ];- }),-- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {- return [ argument < 0 ? argument + length : argument ];- }),-- "even": createPositionalPseudo(function( matchIndexes, length ) {- var i = 0;- for ( ; i < length; i += 2 ) {- matchIndexes.push( i );- }- return matchIndexes;- }),-- "odd": createPositionalPseudo(function( matchIndexes, length ) {- var i = 1;- for ( ; i < length; i += 2 ) {- matchIndexes.push( i );- }- return matchIndexes;- }),-- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {- var i = argument < 0 ? argument + length : argument;- for ( ; --i >= 0; ) {- matchIndexes.push( i );- }- return matchIndexes;- }),-- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {- var i = argument < 0 ? argument + length : argument;- for ( ; ++i < length; ) {- matchIndexes.push( i );- }- return matchIndexes;- })- }-};--// Add button/input type pseudos-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {- Expr.pseudos[ i ] = createInputPseudo( i );-}-for ( i in { submit: true, reset: true } ) {- Expr.pseudos[ i ] = createButtonPseudo( i );-}--function tokenize( selector, parseOnly ) {- var matched, match, tokens, type,- soFar, groups, preFilters,- cached = tokenCache[ selector + " " ];-- if ( cached ) {- return parseOnly ? 0 : cached.slice( 0 );- }-- soFar = selector;- groups = [];- preFilters = Expr.preFilter;-- while ( soFar ) {-- // Comma and first run- if ( !matched || (match = rcomma.exec( soFar )) ) {- if ( match ) {- // Don't consume trailing commas as valid- soFar = soFar.slice( match[0].length ) || soFar;- }- groups.push( tokens = [] );- }-- matched = false;-- // Combinators- if ( (match = rcombinators.exec( soFar )) ) {- matched = match.shift();- tokens.push({- value: matched,- // Cast descendant combinators to space- type: match[0].replace( rtrim, " " )- });- soFar = soFar.slice( matched.length );- }-- // Filters- for ( type in Expr.filter ) {- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||- (match = preFilters[ type ]( match ))) ) {- matched = match.shift();- tokens.push({- value: matched,- type: type,- matches: match- });- soFar = soFar.slice( matched.length );- }- }-- if ( !matched ) {- break;- }- }-- // Return the length of the invalid excess- // if we're just parsing- // Otherwise, throw an error or return tokens- return parseOnly ?- soFar.length :- soFar ?- Sizzle.error( selector ) :- // Cache the tokens- tokenCache( selector, groups ).slice( 0 );-}--function toSelector( tokens ) {- var i = 0,- len = tokens.length,- selector = "";- for ( ; i < len; i++ ) {- selector += tokens[i].value;- }- return selector;-}--function addCombinator( matcher, combinator, base ) {- var dir = combinator.dir,- checkNonElements = base && dir === "parentNode",- doneName = done++;-- return combinator.first ?- // Check against closest ancestor/preceding element- function( elem, context, xml ) {- while ( (elem = elem[ dir ]) ) {- if ( elem.nodeType === 1 || checkNonElements ) {- return matcher( elem, context, xml );- }- }- } :-- // Check against all ancestor/preceding elements- function( elem, context, xml ) {- var data, cache, outerCache,- dirkey = dirruns + " " + doneName;-- // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching- if ( xml ) {- while ( (elem = elem[ dir ]) ) {- if ( elem.nodeType === 1 || checkNonElements ) {- if ( matcher( elem, context, xml ) ) {- return true;- }- }- }- } else {- while ( (elem = elem[ dir ]) ) {- if ( elem.nodeType === 1 || checkNonElements ) {- outerCache = elem[ expando ] || (elem[ expando ] = {});- if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {- if ( (data = cache[1]) === true || data === cachedruns ) {- return data === true;- }- } else {- cache = outerCache[ dir ] = [ dirkey ];- cache[1] = matcher( elem, context, xml ) || cachedruns;- if ( cache[1] === true ) {- return true;- }- }- }- }- }- };-}--function elementMatcher( matchers ) {- return matchers.length > 1 ?- function( elem, context, xml ) {- var i = matchers.length;- while ( i-- ) {- if ( !matchers[i]( elem, context, xml ) ) {- return false;- }- }- return true;- } :- matchers[0];-}--function condense( unmatched, map, filter, context, xml ) {- var elem,- newUnmatched = [],- i = 0,- len = unmatched.length,- mapped = map != null;-- for ( ; i < len; i++ ) {- if ( (elem = unmatched[i]) ) {- if ( !filter || filter( elem, context, xml ) ) {- newUnmatched.push( elem );- if ( mapped ) {- map.push( i );- }- }- }- }-- return newUnmatched;-}--function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {- if ( postFilter && !postFilter[ expando ] ) {- postFilter = setMatcher( postFilter );- }- if ( postFinder && !postFinder[ expando ] ) {- postFinder = setMatcher( postFinder, postSelector );- }- return markFunction(function( seed, results, context, xml ) {- var temp, i, elem,- preMap = [],- postMap = [],- preexisting = results.length,-- // Get initial elements from seed or context- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),-- // Prefilter to get matcher input, preserving a map for seed-results synchronization- matcherIn = preFilter && ( seed || !selector ) ?- condense( elems, preMap, preFilter, context, xml ) :- elems,-- matcherOut = matcher ?- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?-- // ...intermediate processing is necessary- [] :-- // ...otherwise use results directly- results :- matcherIn;-- // Find primary matches- if ( matcher ) {- matcher( matcherIn, matcherOut, context, xml );- }-- // Apply postFilter- if ( postFilter ) {- temp = condense( matcherOut, postMap );- postFilter( temp, [], context, xml );-- // Un-match failing elements by moving them back to matcherIn- i = temp.length;- while ( i-- ) {- if ( (elem = temp[i]) ) {- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);- }- }- }-- if ( seed ) {- if ( postFinder || preFilter ) {- if ( postFinder ) {- // Get the final matcherOut by condensing this intermediate into postFinder contexts- temp = [];- i = matcherOut.length;- while ( i-- ) {- if ( (elem = matcherOut[i]) ) {- // Restore matcherIn since elem is not yet a final match- temp.push( (matcherIn[i] = elem) );- }- }- postFinder( null, (matcherOut = []), temp, xml );- }-- // Move matched elements from seed to results to keep them synchronized- i = matcherOut.length;- while ( i-- ) {- if ( (elem = matcherOut[i]) &&- (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {-- seed[temp] = !(results[temp] = elem);- }- }- }-- // Add elements to results, through postFinder if defined- } else {- matcherOut = condense(- matcherOut === results ?- matcherOut.splice( preexisting, matcherOut.length ) :- matcherOut- );- if ( postFinder ) {- postFinder( null, results, matcherOut, xml );- } else {- push.apply( results, matcherOut );- }- }- });-}--function matcherFromTokens( tokens ) {- var checkContext, matcher, j,- len = tokens.length,- leadingRelative = Expr.relative[ tokens[0].type ],- implicitRelative = leadingRelative || Expr.relative[" "],- i = leadingRelative ? 1 : 0,-- // The foundational matcher ensures that elements are reachable from top-level context(s)- matchContext = addCombinator( function( elem ) {- return elem === checkContext;- }, implicitRelative, true ),- matchAnyContext = addCombinator( function( elem ) {- return indexOf.call( checkContext, elem ) > -1;- }, implicitRelative, true ),- matchers = [ function( elem, context, xml ) {- return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (- (checkContext = context).nodeType ?- matchContext( elem, context, xml ) :- matchAnyContext( elem, context, xml ) );- } ];-- for ( ; i < len; i++ ) {- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];- } else {- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );-- // Return special upon seeing a positional matcher- if ( matcher[ expando ] ) {- // Find the next relative operator (if any) for proper handling- j = ++i;- for ( ; j < len; j++ ) {- if ( Expr.relative[ tokens[j].type ] ) {- break;- }- }- return setMatcher(- i > 1 && elementMatcher( matchers ),- i > 1 && toSelector(- // If the preceding token was a descendant combinator, insert an implicit any-element `*`- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })- ).replace( rtrim, "$1" ),- matcher,- i < j && matcherFromTokens( tokens.slice( i, j ) ),- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),- j < len && toSelector( tokens )- );- }- matchers.push( matcher );- }- }-- return elementMatcher( matchers );-}--function matcherFromGroupMatchers( elementMatchers, setMatchers ) {- // A counter to specify which element is currently being matched- var matcherCachedRuns = 0,- bySet = setMatchers.length > 0,- byElement = elementMatchers.length > 0,- superMatcher = function( seed, context, xml, results, expandContext ) {- var elem, j, matcher,- setMatched = [],- matchedCount = 0,- i = "0",- unmatched = seed && [],- outermost = expandContext != null,- contextBackup = outermostContext,- // We must always have either seed elements or context- elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),- // Use integer dirruns iff this is the outermost matcher- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);-- if ( outermost ) {- outermostContext = context !== document && context;- cachedruns = matcherCachedRuns;- }-- // Add elements passing elementMatchers directly to results- // Keep `i` a string if there are no elements so `matchedCount` will be "00" below- for ( ; (elem = elems[i]) != null; i++ ) {- if ( byElement && elem ) {- j = 0;- while ( (matcher = elementMatchers[j++]) ) {- if ( matcher( elem, context, xml ) ) {- results.push( elem );- break;- }- }- if ( outermost ) {- dirruns = dirrunsUnique;- cachedruns = ++matcherCachedRuns;- }- }-- // Track unmatched elements for set filters- if ( bySet ) {- // They will have gone through all possible matchers- if ( (elem = !matcher && elem) ) {- matchedCount--;- }-- // Lengthen the array for every element, matched or not- if ( seed ) {- unmatched.push( elem );- }- }- }-- // Apply set filters to unmatched elements- matchedCount += i;- if ( bySet && i !== matchedCount ) {- j = 0;- while ( (matcher = setMatchers[j++]) ) {- matcher( unmatched, setMatched, context, xml );- }-- if ( seed ) {- // Reintegrate element matches to eliminate the need for sorting- if ( matchedCount > 0 ) {- while ( i-- ) {- if ( !(unmatched[i] || setMatched[i]) ) {- setMatched[i] = pop.call( results );- }- }- }-- // Discard index placeholder values to get only actual matches- setMatched = condense( setMatched );- }-- // Add matches to results- push.apply( results, setMatched );-- // Seedless set matches succeeding multiple successful matchers stipulate sorting- if ( outermost && !seed && setMatched.length > 0 &&- ( matchedCount + setMatchers.length ) > 1 ) {-- Sizzle.uniqueSort( results );- }- }-- // Override manipulation of globals by nested matchers- if ( outermost ) {- dirruns = dirrunsUnique;- outermostContext = contextBackup;- }-- return unmatched;- };-- return bySet ?- markFunction( superMatcher ) :- superMatcher;-}--compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {- var i,- setMatchers = [],- elementMatchers = [],- cached = compilerCache[ selector + " " ];-- if ( !cached ) {- // Generate a function of recursive functions that can be used to check each element- if ( !group ) {- group = tokenize( selector );- }- i = group.length;- while ( i-- ) {- cached = matcherFromTokens( group[i] );- if ( cached[ expando ] ) {- setMatchers.push( cached );- } else {- elementMatchers.push( cached );- }- }-- // Cache the compiled function- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );- }- return cached;-};--function multipleContexts( selector, contexts, results ) {- var i = 0,- len = contexts.length;- for ( ; i < len; i++ ) {- Sizzle( selector, contexts[i], results );- }- return results;-}--function select( selector, context, results, seed ) {- var i, tokens, token, type, find,- match = tokenize( selector );-- if ( !seed ) {- // Try to minimize operations if there is only one group- if ( match.length === 1 ) {-- // Take a shortcut and set the context if the root selector is an ID- tokens = match[0] = match[0].slice( 0 );- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&- support.getById && context.nodeType === 9 && documentIsHTML &&- Expr.relative[ tokens[1].type ] ) {-- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];- if ( !context ) {- return results;- }- selector = selector.slice( tokens.shift().value.length );- }-- // Fetch a seed set for right-to-left matching- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;- while ( i-- ) {- token = tokens[i];-- // Abort if we hit a combinator- if ( Expr.relative[ (type = token.type) ] ) {- break;- }- if ( (find = Expr.find[ type ]) ) {- // Search, expanding context for leading sibling combinators- if ( (seed = find(- token.matches[0].replace( runescape, funescape ),- rsibling.test( tokens[0].type ) && context.parentNode || context- )) ) {-- // If seed is empty or no tokens remain, we can return early- tokens.splice( i, 1 );- selector = seed.length && toSelector( tokens );- if ( !selector ) {- push.apply( results, seed );- return results;- }-- break;- }- }- }- }- }-- // Compile and execute a filtering function- // Provide `match` to avoid retokenization if we modified the selector above- compile( selector, match )(- seed,- context,- !documentIsHTML,- results,- rsibling.test( selector )- );- return results;-}--// Deprecated-Expr.pseudos["nth"] = Expr.pseudos["eq"];--// Easy API for creating new setFilters-function setFilters() {}-setFilters.prototype = Expr.filters = Expr.pseudos;-Expr.setFilters = new setFilters();--// One-time assignments--// Sort stability-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;--// Initialize against the default document-setDocument();--// Support: Chrome<<14-// Always assume duplicates if they aren't passed to the comparison function-[0, 0].sort( sortOrder );-support.detectDuplicates = hasDuplicate;--jQuery.find = Sizzle;-jQuery.expr = Sizzle.selectors;-jQuery.expr[":"] = jQuery.expr.pseudos;-jQuery.unique = Sizzle.uniqueSort;-jQuery.text = Sizzle.getText;-jQuery.isXMLDoc = Sizzle.isXML;-jQuery.contains = Sizzle.contains;---})( window );-// String to Object options format cache-var optionsCache = {};--// Convert String-formatted options into Object-formatted ones and store in cache-function createOptions( options ) {- var object = optionsCache[ options ] = {};- jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {- object[ flag ] = true;- });- return object;-}--/*- * Create a callback list using the following parameters:- *- * options: an optional list of space-separated options that will change how- * the callback list behaves or a more traditional option object- *- * By default a callback list will act like an event callback list and can be- * "fired" multiple times.- *- * Possible options:- *- * once: will ensure the callback list can only be fired once (like a Deferred)- *- * memory: will keep track of previous values and will call any callback added- * after the list has been fired right away with the latest "memorized"- * values (like a Deferred)- *- * unique: will ensure a callback can only be added once (no duplicate in the list)- *- * stopOnFalse: interrupt callings when a callback returns false- *- */-jQuery.Callbacks = function( options ) {-- // Convert options from String-formatted to Object-formatted if needed- // (we check in cache first)- options = typeof options === "string" ?- ( optionsCache[ options ] || createOptions( options ) ) :- jQuery.extend( {}, options );-- var // Flag to know if list is currently firing- firing,- // Last fire value (for non-forgettable lists)- memory,- // Flag to know if list was already fired- fired,- // End of the loop when firing- firingLength,- // Index of currently firing callback (modified by remove if needed)- firingIndex,- // First callback to fire (used internally by add and fireWith)- firingStart,- // Actual callback list- list = [],- // Stack of fire calls for repeatable lists- stack = !options.once && [],- // Fire callbacks- fire = function( data ) {- memory = options.memory && data;- fired = true;- firingIndex = firingStart || 0;- firingStart = 0;- firingLength = list.length;- firing = true;- for ( ; list && firingIndex < firingLength; firingIndex++ ) {- if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {- memory = false; // To prevent further calls using add- break;- }- }- firing = false;- if ( list ) {- if ( stack ) {- if ( stack.length ) {- fire( stack.shift() );- }- } else if ( memory ) {- list = [];- } else {- self.disable();- }- }- },- // Actual Callbacks object- self = {- // Add a callback or a collection of callbacks to the list- add: function() {- if ( list ) {- // First, we save the current length- var start = list.length;- (function add( args ) {- jQuery.each( args, function( _, arg ) {- var type = jQuery.type( arg );- if ( type === "function" ) {- if ( !options.unique || !self.has( arg ) ) {- list.push( arg );- }- } else if ( arg && arg.length && type !== "string" ) {- // Inspect recursively- add( arg );- }- });- })( arguments );- // Do we need to add the callbacks to the- // current firing batch?- if ( firing ) {- firingLength = list.length;- // With memory, if we're not firing then- // we should call right away- } else if ( memory ) {- firingStart = start;- fire( memory );- }- }- return this;- },- // Remove a callback from the list- remove: function() {- if ( list ) {- jQuery.each( arguments, function( _, arg ) {- var index;- while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {- list.splice( index, 1 );- // Handle firing indexes- if ( firing ) {- if ( index <= firingLength ) {- firingLength--;- }- if ( index <= firingIndex ) {- firingIndex--;- }- }- }- });- }- return this;- },- // Check if a given callback is in the list.- // If no argument is given, return whether or not list has callbacks attached.- has: function( fn ) {- return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );- },- // Remove all callbacks from the list- empty: function() {- list = [];- firingLength = 0;- return this;- },- // Have the list do nothing anymore- disable: function() {- list = stack = memory = undefined;- return this;- },- // Is it disabled?- disabled: function() {- return !list;- },- // Lock the list in its current state- lock: function() {- stack = undefined;- if ( !memory ) {- self.disable();- }- return this;- },- // Is it locked?- locked: function() {- return !stack;- },- // Call all callbacks with the given context and arguments- fireWith: function( context, args ) {- args = args || [];- args = [ context, args.slice ? args.slice() : args ];- if ( list && ( !fired || stack ) ) {- if ( firing ) {- stack.push( args );- } else {- fire( args );- }- }- return this;- },- // Call all the callbacks with the given arguments- fire: function() {- self.fireWith( this, arguments );- return this;- },- // To know if the callbacks have already been called at least once- fired: function() {- return !!fired;- }- };-- return self;-};-jQuery.extend({-- Deferred: function( func ) {- var tuples = [- // action, add listener, listener list, final state- [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],- [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],- [ "notify", "progress", jQuery.Callbacks("memory") ]- ],- state = "pending",- promise = {- state: function() {- return state;- },- always: function() {- deferred.done( arguments ).fail( arguments );- return this;- },- then: function( /* fnDone, fnFail, fnProgress */ ) {- var fns = arguments;- return jQuery.Deferred(function( newDefer ) {- jQuery.each( tuples, function( i, tuple ) {- var action = tuple[ 0 ],- fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];- // deferred[ done | fail | progress ] for forwarding actions to newDefer- deferred[ tuple[1] ](function() {- var returned = fn && fn.apply( this, arguments );- if ( returned && jQuery.isFunction( returned.promise ) ) {- returned.promise()- .done( newDefer.resolve )- .fail( newDefer.reject )- .progress( newDefer.notify );- } else {- newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );- }- });- });- fns = null;- }).promise();- },- // Get a promise for this deferred- // If obj is provided, the promise aspect is added to the object- promise: function( obj ) {- return obj != null ? jQuery.extend( obj, promise ) : promise;- }- },- deferred = {};-- // Keep pipe for back-compat- promise.pipe = promise.then;-- // Add list-specific methods- jQuery.each( tuples, function( i, tuple ) {- var list = tuple[ 2 ],- stateString = tuple[ 3 ];-- // promise[ done | fail | progress ] = list.add- promise[ tuple[1] ] = list.add;-- // Handle state- if ( stateString ) {- list.add(function() {- // state = [ resolved | rejected ]- state = stateString;-- // [ reject_list | resolve_list ].disable; progress_list.lock- }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );- }-- // deferred[ resolve | reject | notify ]- deferred[ tuple[0] ] = function() {- deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );- return this;- };- deferred[ tuple[0] + "With" ] = list.fireWith;- });-- // Make the deferred a promise- promise.promise( deferred );-- // Call given func if any- if ( func ) {- func.call( deferred, deferred );- }-- // All done!- return deferred;- },-- // Deferred helper- when: function( subordinate /* , ..., subordinateN */ ) {- var i = 0,- resolveValues = core_slice.call( arguments ),- length = resolveValues.length,-- // the count of uncompleted subordinates- remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,-- // the master Deferred. If resolveValues consist of only a single Deferred, just use that.- deferred = remaining === 1 ? subordinate : jQuery.Deferred(),-- // Update function for both resolve and progress values- updateFunc = function( i, contexts, values ) {- return function( value ) {- contexts[ i ] = this;- values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;- if( values === progressValues ) {- deferred.notifyWith( contexts, values );- } else if ( !( --remaining ) ) {- deferred.resolveWith( contexts, values );- }- };- },-- progressValues, progressContexts, resolveContexts;-- // add listeners to Deferred subordinates; treat others as resolved- if ( length > 1 ) {- progressValues = new Array( length );- progressContexts = new Array( length );- resolveContexts = new Array( length );- for ( ; i < length; i++ ) {- if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {- resolveValues[ i ].promise()- .done( updateFunc( i, resolveContexts, resolveValues ) )- .fail( deferred.reject )- .progress( updateFunc( i, progressContexts, progressValues ) );- } else {- --remaining;- }- }- }-- // if we're not waiting on anything, resolve the master- if ( !remaining ) {- deferred.resolveWith( resolveContexts, resolveValues );- }-- return deferred.promise();- }-});-jQuery.support = (function( support ) {-- var all, a, input, select, fragment, opt, eventName, isSupported, i,- div = document.createElement("div");-- // Setup- div.setAttribute( "className", "t" );- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";-- // Finish early in limited (non-browser) environments- all = div.getElementsByTagName("*") || [];- a = div.getElementsByTagName("a")[ 0 ];- if ( !a || !a.style || !all.length ) {- return support;- }-- // First batch of tests- select = document.createElement("select");- opt = select.appendChild( document.createElement("option") );- input = div.getElementsByTagName("input")[ 0 ];-- a.style.cssText = "top:1px;float:left;opacity:.5";-- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)- support.getSetAttribute = div.className !== "t";-- // IE strips leading whitespace when .innerHTML is used- support.leadingWhitespace = div.firstChild.nodeType === 3;-- // Make sure that tbody elements aren't automatically inserted- // IE will insert them into empty tables- support.tbody = !div.getElementsByTagName("tbody").length;-- // Make sure that link elements get serialized correctly by innerHTML- // This requires a wrapper element in IE- support.htmlSerialize = !!div.getElementsByTagName("link").length;-- // Get the style information from getAttribute- // (IE uses .cssText instead)- support.style = /top/.test( a.getAttribute("style") );-- // Make sure that URLs aren't manipulated- // (IE normalizes it by default)- support.hrefNormalized = a.getAttribute("href") === "/a";-- // Make sure that element opacity exists- // (IE uses filter instead)- // Use a regex to work around a WebKit issue. See #5145- support.opacity = /^0.5/.test( a.style.opacity );-- // Verify style float existence- // (IE uses styleFloat instead of cssFloat)- support.cssFloat = !!a.style.cssFloat;-- // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)- support.checkOn = !!input.value;-- // Make sure that a selected-by-default option has a working selected property.- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)- support.optSelected = opt.selected;-- // Tests for enctype support on a form (#6743)- support.enctype = !!document.createElement("form").enctype;-- // Makes sure cloning an html5 element does not cause problems- // Where outerHTML is undefined, this still works- support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>";-- // Will be defined later- support.inlineBlockNeedsLayout = false;- support.shrinkWrapBlocks = false;- support.pixelPosition = false;- support.deleteExpando = true;- support.noCloneEvent = true;- support.reliableMarginRight = true;- support.boxSizingReliable = true;-- // Make sure checked status is properly cloned- input.checked = true;- support.noCloneChecked = input.cloneNode( true ).checked;-- // Make sure that the options inside disabled selects aren't marked as disabled- // (WebKit marks them as disabled)- select.disabled = true;- support.optDisabled = !opt.disabled;-- // Support: IE<9- try {- delete div.test;- } catch( e ) {- support.deleteExpando = false;- }-- // Check if we can trust getAttribute("value")- input = document.createElement("input");- input.setAttribute( "value", "" );- support.input = input.getAttribute( "value" ) === "";-- // Check if an input maintains its value after becoming a radio- input.value = "t";- input.setAttribute( "type", "radio" );- support.radioValue = input.value === "t";-- // #11217 - WebKit loses check when the name is after the checked attribute- input.setAttribute( "checked", "t" );- input.setAttribute( "name", "t" );-- fragment = document.createDocumentFragment();- fragment.appendChild( input );-- // Check if a disconnected checkbox will retain its checked- // value of true after appended to the DOM (IE6/7)- support.appendChecked = input.checked;-- // WebKit doesn't clone checked state correctly in fragments- support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;-- // Support: IE<9- // Opera does not clone events (and typeof div.attachEvent === undefined).- // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()- if ( div.attachEvent ) {- div.attachEvent( "onclick", function() {- support.noCloneEvent = false;- });-- div.cloneNode( true ).click();- }-- // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)- // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)- for ( i in { submit: true, change: true, focusin: true }) {- div.setAttribute( eventName = "on" + i, "t" );-- support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;- }-- div.style.backgroundClip = "content-box";- div.cloneNode( true ).style.backgroundClip = "";- support.clearCloneStyle = div.style.backgroundClip === "content-box";-- // Support: IE<9- // Iteration over object's inherited properties before its own.- for ( i in jQuery( support ) ) {- break;- }- support.ownLast = i !== "0";-- // Run tests that need a body at doc ready- jQuery(function() {- var container, marginDiv, tds,- divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",- body = document.getElementsByTagName("body")[0];-- if ( !body ) {- // Return for frameset docs that don't have a body- return;- }-- container = document.createElement("div");- container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";-- body.appendChild( container ).appendChild( div );-- // Support: IE8- // Check if table cells still have offsetWidth/Height when they are set- // to display:none and there are still other visible table cells in a- // table row; if so, offsetWidth/Height are not reliable for use when- // determining if an element has been hidden directly using- // display:none (it is still safe to use offsets if a parent element is- // hidden; don safety goggles and see bug #4512 for more information).- div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";- tds = div.getElementsByTagName("td");- tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";- isSupported = ( tds[ 0 ].offsetHeight === 0 );-- tds[ 0 ].style.display = "";- tds[ 1 ].style.display = "none";-- // Support: IE8- // Check if empty table cells still have offsetWidth/Height- support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );-- // Check box-sizing and margin behavior.- div.innerHTML = "";- div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";-- // Workaround failing boxSizing test due to offsetWidth returning wrong value- // with some non-1 values of body zoom, ticket #13543- jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {- support.boxSizing = div.offsetWidth === 4;- });-- // Use window.getComputedStyle because jsdom on node.js will break without it.- if ( window.getComputedStyle ) {- support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";- support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";-- // Check if div with explicit width and no margin-right incorrectly- // gets computed margin-right based on width of container. (#3333)- // Fails in WebKit before Feb 2011 nightlies- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right- marginDiv = div.appendChild( document.createElement("div") );- marginDiv.style.cssText = div.style.cssText = divReset;- marginDiv.style.marginRight = marginDiv.style.width = "0";- div.style.width = "1px";-- support.reliableMarginRight =- !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );- }-- if ( typeof div.style.zoom !== core_strundefined ) {- // Support: IE<8- // Check if natively block-level elements act like inline-block- // elements when setting their display to 'inline' and giving- // them layout- div.innerHTML = "";- div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";- support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );-- // Support: IE6- // Check if elements with layout shrink-wrap their children- div.style.display = "block";- div.innerHTML = "<div></div>";- div.firstChild.style.width = "5px";- support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );-- if ( support.inlineBlockNeedsLayout ) {- // Prevent IE 6 from affecting layout for positioned elements #11048- // Prevent IE from shrinking the body in IE 7 mode #12869- // Support: IE<8- body.style.zoom = 1;- }- }-- body.removeChild( container );-- // Null elements to avoid leaks in IE- container = div = tds = marginDiv = null;- });-- // Null elements to avoid leaks in IE- all = select = fragment = opt = a = input = null;-- return support;-})({});--var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,- rmultiDash = /([A-Z])/g;--function internalData( elem, name, data, pvt /* Internal Use Only */ ){- if ( !jQuery.acceptData( elem ) ) {- return;- }-- var ret, thisCache,- internalKey = jQuery.expando,-- // We have to handle DOM nodes and JS objects differently because IE6-7- // can't GC object references properly across the DOM-JS boundary- isNode = elem.nodeType,-- // Only DOM nodes need the global jQuery cache; JS object data is- // attached directly to the object so GC can occur automatically- cache = isNode ? jQuery.cache : elem,-- // Only defining an ID for JS objects if its cache already exists allows- // the code to shortcut on the same path as a DOM node with no cache- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;-- // Avoid doing any more work than we need to when trying to get data on an- // object that has no data at all- if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {- return;- }-- if ( !id ) {- // Only DOM nodes need a new unique ID for each element since their data- // ends up in the global cache- if ( isNode ) {- id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;- } else {- id = internalKey;- }- }-- if ( !cache[ id ] ) {- // Avoid exposing jQuery metadata on plain JS objects when the object- // is serialized using JSON.stringify- cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };- }-- // An object can be passed to jQuery.data instead of a key/value pair; this gets- // shallow copied over onto the existing cache- if ( typeof name === "object" || typeof name === "function" ) {- if ( pvt ) {- cache[ id ] = jQuery.extend( cache[ id ], name );- } else {- cache[ id ].data = jQuery.extend( cache[ id ].data, name );- }- }-- thisCache = cache[ id ];-- // jQuery data() is stored in a separate object inside the object's internal data- // cache in order to avoid key collisions between internal data and user-defined- // data.- if ( !pvt ) {- if ( !thisCache.data ) {- thisCache.data = {};- }-- thisCache = thisCache.data;- }-- if ( data !== undefined ) {- thisCache[ jQuery.camelCase( name ) ] = data;- }-- // Check for both converted-to-camel and non-converted data property names- // If a data property was specified- if ( typeof name === "string" ) {-- // First Try to find as-is property data- ret = thisCache[ name ];-- // Test for null|undefined property data- if ( ret == null ) {-- // Try to find the camelCased property- ret = thisCache[ jQuery.camelCase( name ) ];- }- } else {- ret = thisCache;- }-- return ret;-}--function internalRemoveData( elem, name, pvt ) {- if ( !jQuery.acceptData( elem ) ) {- return;- }-- var thisCache, i,- isNode = elem.nodeType,-- // See jQuery.data for more information- cache = isNode ? jQuery.cache : elem,- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;-- // If there is already no cache entry for this object, there is no- // purpose in continuing- if ( !cache[ id ] ) {- return;- }-- if ( name ) {-- thisCache = pvt ? cache[ id ] : cache[ id ].data;-- if ( thisCache ) {-- // Support array or space separated string names for data keys- if ( !jQuery.isArray( name ) ) {-- // try the string as a key before any manipulation- if ( name in thisCache ) {- name = [ name ];- } else {-- // split the camel cased version by spaces unless a key with the spaces exists- name = jQuery.camelCase( name );- if ( name in thisCache ) {- name = [ name ];- } else {- name = name.split(" ");- }- }- } else {- // If "name" is an array of keys...- // When data is initially created, via ("key", "val") signature,- // keys will be converted to camelCase.- // Since there is no way to tell _how_ a key was added, remove- // both plain key and camelCase key. #12786- // This will only penalize the array argument path.- name = name.concat( jQuery.map( name, jQuery.camelCase ) );- }-- i = name.length;- while ( i-- ) {- delete thisCache[ name[i] ];- }-- // If there is no data left in the cache, we want to continue- // and let the cache object itself get destroyed- if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {- return;- }- }- }-- // See jQuery.data for more information- if ( !pvt ) {- delete cache[ id ].data;-- // Don't destroy the parent cache unless the internal data object- // had been the only thing left in it- if ( !isEmptyDataObject( cache[ id ] ) ) {- return;- }- }-- // Destroy the cache- if ( isNode ) {- jQuery.cleanData( [ elem ], true );-- // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)- /* jshint eqeqeq: false */- } else if ( jQuery.support.deleteExpando || cache != cache.window ) {- /* jshint eqeqeq: true */- delete cache[ id ];-- // When all else fails, null- } else {- cache[ id ] = null;- }-}--jQuery.extend({- cache: {},-- // The following elements throw uncatchable exceptions if you- // attempt to add expando properties to them.- noData: {- "applet": true,- "embed": true,- // Ban all objects except for Flash (which handle expandos)- "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"- },-- hasData: function( elem ) {- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];- return !!elem && !isEmptyDataObject( elem );- },-- data: function( elem, name, data ) {- return internalData( elem, name, data );- },-- removeData: function( elem, name ) {- return internalRemoveData( elem, name );- },-- // For internal use only.- _data: function( elem, name, data ) {- return internalData( elem, name, data, true );- },-- _removeData: function( elem, name ) {- return internalRemoveData( elem, name, true );- },-- // A method for determining if a DOM node can handle the data expando- acceptData: function( elem ) {- // Do not set data on non-element because it will not be cleared (#8335).- if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {- return false;- }-- var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];-- // nodes accept data unless otherwise specified; rejection can be conditional- return !noData || noData !== true && elem.getAttribute("classid") === noData;- }-});--jQuery.fn.extend({- data: function( key, value ) {- var attrs, name,- data = null,- i = 0,- elem = this[0];-- // Special expections of .data basically thwart jQuery.access,- // so implement the relevant behavior ourselves-- // Gets all values- if ( key === undefined ) {- if ( this.length ) {- data = jQuery.data( elem );-- if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {- attrs = elem.attributes;- for ( ; i < attrs.length; i++ ) {- name = attrs[i].name;-- if ( name.indexOf("data-") === 0 ) {- name = jQuery.camelCase( name.slice(5) );-- dataAttr( elem, name, data[ name ] );- }- }- jQuery._data( elem, "parsedAttrs", true );- }- }-- return data;- }-- // Sets multiple values- if ( typeof key === "object" ) {- return this.each(function() {- jQuery.data( this, key );- });- }-- return arguments.length > 1 ?-- // Sets one value- this.each(function() {- jQuery.data( this, key, value );- }) :-- // Gets one value- // Try to fetch any internally stored data first- elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;- },-- removeData: function( key ) {- return this.each(function() {- jQuery.removeData( this, key );- });- }-});--function dataAttr( elem, key, data ) {- // If nothing was found internally, try to fetch any- // data from the HTML5 data-* attribute- if ( data === undefined && elem.nodeType === 1 ) {-- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();-- data = elem.getAttribute( name );-- if ( typeof data === "string" ) {- try {- data = data === "true" ? true :- data === "false" ? false :- data === "null" ? null :- // Only convert to a number if it doesn't change the string- +data + "" === data ? +data :- rbrace.test( data ) ? jQuery.parseJSON( data ) :- data;- } catch( e ) {}-- // Make sure we set the data so it isn't changed later- jQuery.data( elem, key, data );-- } else {- data = undefined;- }- }-- return data;-}--// checks a cache object for emptiness-function isEmptyDataObject( obj ) {- var name;- for ( name in obj ) {-- // if the public data object is empty, the private is still empty- if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {- continue;- }- if ( name !== "toJSON" ) {- return false;- }- }-- return true;-}-jQuery.extend({- queue: function( elem, type, data ) {- var queue;-- if ( elem ) {- type = ( type || "fx" ) + "queue";- queue = jQuery._data( elem, type );-- // Speed up dequeue by getting out quickly if this is just a lookup- if ( data ) {- if ( !queue || jQuery.isArray(data) ) {- queue = jQuery._data( elem, type, jQuery.makeArray(data) );- } else {- queue.push( data );- }- }- return queue || [];- }- },-- dequeue: function( elem, type ) {- type = type || "fx";-- var queue = jQuery.queue( elem, type ),- startLength = queue.length,- fn = queue.shift(),- hooks = jQuery._queueHooks( elem, type ),- next = function() {- jQuery.dequeue( elem, type );- };-- // If the fx queue is dequeued, always remove the progress sentinel- if ( fn === "inprogress" ) {- fn = queue.shift();- startLength--;- }-- if ( fn ) {-- // Add a progress sentinel to prevent the fx queue from being- // automatically dequeued- if ( type === "fx" ) {- queue.unshift( "inprogress" );- }-- // clear up the last queue stop function- delete hooks.stop;- fn.call( elem, next, hooks );- }-- if ( !startLength && hooks ) {- hooks.empty.fire();- }- },-- // not intended for public consumption - generates a queueHooks object, or returns the current one- _queueHooks: function( elem, type ) {- var key = type + "queueHooks";- return jQuery._data( elem, key ) || jQuery._data( elem, key, {- empty: jQuery.Callbacks("once memory").add(function() {- jQuery._removeData( elem, type + "queue" );- jQuery._removeData( elem, key );- })- });- }-});--jQuery.fn.extend({- queue: function( type, data ) {- var setter = 2;-- if ( typeof type !== "string" ) {- data = type;- type = "fx";- setter--;- }-- if ( arguments.length < setter ) {- return jQuery.queue( this[0], type );- }-- return data === undefined ?- this :- this.each(function() {- var queue = jQuery.queue( this, type, data );-- // ensure a hooks for this queue- jQuery._queueHooks( this, type );-- if ( type === "fx" && queue[0] !== "inprogress" ) {- jQuery.dequeue( this, type );- }- });- },- dequeue: function( type ) {- return this.each(function() {- jQuery.dequeue( this, type );- });- },- // Based off of the plugin by Clint Helfers, with permission.- // http://blindsignals.com/index.php/2009/07/jquery-delay/- delay: function( time, type ) {- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;- type = type || "fx";-- return this.queue( type, function( next, hooks ) {- var timeout = setTimeout( next, time );- hooks.stop = function() {- clearTimeout( timeout );- };- });- },- clearQueue: function( type ) {- return this.queue( type || "fx", [] );- },- // Get a promise resolved when queues of a certain type- // are emptied (fx is the type by default)- promise: function( type, obj ) {- var tmp,- count = 1,- defer = jQuery.Deferred(),- elements = this,- i = this.length,- resolve = function() {- if ( !( --count ) ) {- defer.resolveWith( elements, [ elements ] );- }- };-- if ( typeof type !== "string" ) {- obj = type;- type = undefined;- }- type = type || "fx";-- while( i-- ) {- tmp = jQuery._data( elements[ i ], type + "queueHooks" );- if ( tmp && tmp.empty ) {- count++;- tmp.empty.add( resolve );- }- }- resolve();- return defer.promise( obj );- }-});-var nodeHook, boolHook,- rclass = /[\t\r\n\f]/g,- rreturn = /\r/g,- rfocusable = /^(?:input|select|textarea|button|object)$/i,- rclickable = /^(?:a|area)$/i,- ruseDefault = /^(?:checked|selected)$/i,- getSetAttribute = jQuery.support.getSetAttribute,- getSetInput = jQuery.support.input;--jQuery.fn.extend({- attr: function( name, value ) {- return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );- },-- removeAttr: function( name ) {- return this.each(function() {- jQuery.removeAttr( this, name );- });- },-- prop: function( name, value ) {- return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );- },-- removeProp: function( name ) {- name = jQuery.propFix[ name ] || name;- return this.each(function() {- // try/catch handles cases where IE balks (such as removing a property on window)- try {- this[ name ] = undefined;- delete this[ name ];- } catch( e ) {}- });- },-- addClass: function( value ) {- var classes, elem, cur, clazz, j,- i = 0,- len = this.length,- proceed = typeof value === "string" && value;-- if ( jQuery.isFunction( value ) ) {- return this.each(function( j ) {- jQuery( this ).addClass( value.call( this, j, this.className ) );- });- }-- if ( proceed ) {- // The disjunction here is for better compressibility (see removeClass)- classes = ( value || "" ).match( core_rnotwhite ) || [];-- for ( ; i < len; i++ ) {- elem = this[ i ];- cur = elem.nodeType === 1 && ( elem.className ?- ( " " + elem.className + " " ).replace( rclass, " " ) :- " "- );-- if ( cur ) {- j = 0;- while ( (clazz = classes[j++]) ) {- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {- cur += clazz + " ";- }- }- elem.className = jQuery.trim( cur );-- }- }- }-- return this;- },-- removeClass: function( value ) {- var classes, elem, cur, clazz, j,- i = 0,- len = this.length,- proceed = arguments.length === 0 || typeof value === "string" && value;-- if ( jQuery.isFunction( value ) ) {- return this.each(function( j ) {- jQuery( this ).removeClass( value.call( this, j, this.className ) );- });- }- if ( proceed ) {- classes = ( value || "" ).match( core_rnotwhite ) || [];-- for ( ; i < len; i++ ) {- elem = this[ i ];- // This expression is here for better compressibility (see addClass)- cur = elem.nodeType === 1 && ( elem.className ?- ( " " + elem.className + " " ).replace( rclass, " " ) :- ""- );-- if ( cur ) {- j = 0;- while ( (clazz = classes[j++]) ) {- // Remove *all* instances- while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {- cur = cur.replace( " " + clazz + " ", " " );- }- }- elem.className = value ? jQuery.trim( cur ) : "";- }- }- }-- return this;- },-- toggleClass: function( value, stateVal ) {- var type = typeof value,- isBool = typeof stateVal === "boolean";-- if ( jQuery.isFunction( value ) ) {- return this.each(function( i ) {- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );- });- }-- return this.each(function() {- if ( type === "string" ) {- // toggle individual class names- var className,- i = 0,- self = jQuery( this ),- state = stateVal,- classNames = value.match( core_rnotwhite ) || [];-- while ( (className = classNames[ i++ ]) ) {- // check each className given, space separated list- state = isBool ? state : !self.hasClass( className );- self[ state ? "addClass" : "removeClass" ]( className );- }-- // Toggle whole class name- } else if ( type === core_strundefined || type === "boolean" ) {- if ( this.className ) {- // store className if set- jQuery._data( this, "__className__", this.className );- }-- // If the element has a class name or if we're passed "false",- // then remove the whole classname (if there was one, the above saved it).- // Otherwise bring back whatever was previously saved (if anything),- // falling back to the empty string if nothing was stored.- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";- }- });- },-- hasClass: function( selector ) {- var className = " " + selector + " ",- i = 0,- l = this.length;- for ( ; i < l; i++ ) {- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {- return true;- }- }-- return false;- },-- val: function( value ) {- var ret, hooks, isFunction,- elem = this[0];-- if ( !arguments.length ) {- if ( elem ) {- hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];-- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {- return ret;- }-- ret = elem.value;-- return typeof ret === "string" ?- // handle most common string cases- ret.replace(rreturn, "") :- // handle cases where value is null/undef or number- ret == null ? "" : ret;- }-- return;- }-- isFunction = jQuery.isFunction( value );-- return this.each(function( i ) {- var val;-- if ( this.nodeType !== 1 ) {- return;- }-- if ( isFunction ) {- val = value.call( this, i, jQuery( this ).val() );- } else {- val = value;- }-- // Treat null/undefined as ""; convert numbers to string- if ( val == null ) {- val = "";- } else if ( typeof val === "number" ) {- val += "";- } else if ( jQuery.isArray( val ) ) {- val = jQuery.map(val, function ( value ) {- return value == null ? "" : value + "";- });- }-- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];-- // If set returns undefined, fall back to normal setting- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {- this.value = val;- }- });- }-});--jQuery.extend({- valHooks: {- option: {- get: function( elem ) {- // Use proper attribute retrieval(#6932, #12072)- var val = jQuery.find.attr( elem, "value" );- return val != null ?- val :- elem.text;- }- },- select: {- get: function( elem ) {- var value, option,- options = elem.options,- index = elem.selectedIndex,- one = elem.type === "select-one" || index < 0,- values = one ? null : [],- max = one ? index + 1 : options.length,- i = index < 0 ?- max :- one ? index : 0;-- // Loop through all the selected options- for ( ; i < max; i++ ) {- option = options[ i ];-- // oldIE doesn't update selected after form reset (#2551)- if ( ( option.selected || i === index ) &&- // Don't return options that are disabled or in a disabled optgroup- ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&- ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {-- // Get the specific value for the option- value = jQuery( option ).val();-- // We don't need an array for one selects- if ( one ) {- return value;- }-- // Multi-Selects return an array- values.push( value );- }- }-- return values;- },-- set: function( elem, value ) {- var optionSet, option,- options = elem.options,- values = jQuery.makeArray( value ),- i = options.length;-- while ( i-- ) {- option = options[ i ];- if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {- optionSet = true;- }- }-- // force browsers to behave consistently when non-matching value is set- if ( !optionSet ) {- elem.selectedIndex = -1;- }- return values;- }- }- },-- attr: function( elem, name, value ) {- var hooks, ret,- nType = elem.nodeType;-- // don't get/set attributes on text, comment and attribute nodes- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {- return;- }-- // Fallback to prop when attributes are not supported- if ( typeof elem.getAttribute === core_strundefined ) {- return jQuery.prop( elem, name, value );- }-- // All attributes are lowercase- // Grab necessary hook if one is defined- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {- name = name.toLowerCase();- hooks = jQuery.attrHooks[ name ] ||- ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );- }-- if ( value !== undefined ) {-- if ( value === null ) {- jQuery.removeAttr( elem, name );-- } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {- return ret;-- } else {- elem.setAttribute( name, value + "" );- return value;- }-- } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {- return ret;-- } else {- ret = jQuery.find.attr( elem, name );-- // Non-existent attributes return null, we normalize to undefined- return ret == null ?- undefined :- ret;- }- },-- removeAttr: function( elem, value ) {- var name, propName,- i = 0,- attrNames = value && value.match( core_rnotwhite );-- if ( attrNames && elem.nodeType === 1 ) {- while ( (name = attrNames[i++]) ) {- propName = jQuery.propFix[ name ] || name;-- // Boolean attributes get special treatment (#10870)- if ( jQuery.expr.match.bool.test( name ) ) {- // Set corresponding property to false- if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {- elem[ propName ] = false;- // Support: IE<9- // Also clear defaultChecked/defaultSelected (if appropriate)- } else {- elem[ jQuery.camelCase( "default-" + name ) ] =- elem[ propName ] = false;- }-- // See #9699 for explanation of this approach (setting first, then removal)- } else {- jQuery.attr( elem, name, "" );- }-- elem.removeAttribute( getSetAttribute ? name : propName );- }- }- },-- attrHooks: {- type: {- set: function( elem, value ) {- if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {- // Setting the type on a radio button after the value resets the value in IE6-9- // Reset value to default in case type is set after value during creation- var val = elem.value;- elem.setAttribute( "type", value );- if ( val ) {- elem.value = val;- }- return value;- }- }- }- },-- propFix: {- "for": "htmlFor",- "class": "className"- },-- prop: function( elem, name, value ) {- var ret, hooks, notxml,- nType = elem.nodeType;-- // don't get/set properties on text, comment and attribute nodes- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {- return;- }-- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );-- if ( notxml ) {- // Fix name and attach hooks- name = jQuery.propFix[ name ] || name;- hooks = jQuery.propHooks[ name ];- }-- if ( value !== undefined ) {- return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?- ret :- ( elem[ name ] = value );-- } else {- return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?- ret :- elem[ name ];- }- },-- propHooks: {- tabIndex: {- get: function( elem ) {- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/- // Use proper attribute retrieval(#12072)- var tabindex = jQuery.find.attr( elem, "tabindex" );-- return tabindex ?- parseInt( tabindex, 10 ) :- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?- 0 :- -1;- }- }- }-});--// Hooks for boolean attributes-boolHook = {- set: function( elem, value, name ) {- if ( value === false ) {- // Remove boolean attributes when set to false- jQuery.removeAttr( elem, name );- } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {- // IE<8 needs the *property* name- elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );-- // Use defaultChecked and defaultSelected for oldIE- } else {- elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;- }-- return name;- }-};-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {- var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;-- jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?- function( elem, name, isXML ) {- var fn = jQuery.expr.attrHandle[ name ],- ret = isXML ?- undefined :- /* jshint eqeqeq: false */- (jQuery.expr.attrHandle[ name ] = undefined) !=- getter( elem, name, isXML ) ?-- name.toLowerCase() :- null;- jQuery.expr.attrHandle[ name ] = fn;- return ret;- } :- function( elem, name, isXML ) {- return isXML ?- undefined :- elem[ jQuery.camelCase( "default-" + name ) ] ?- name.toLowerCase() :- null;- };-});--// fix oldIE attroperties-if ( !getSetInput || !getSetAttribute ) {- jQuery.attrHooks.value = {- set: function( elem, value, name ) {- if ( jQuery.nodeName( elem, "input" ) ) {- // Does not return so that setAttribute is also used- elem.defaultValue = value;- } else {- // Use nodeHook if defined (#1954); otherwise setAttribute is fine- return nodeHook && nodeHook.set( elem, value, name );- }- }- };-}--// IE6/7 do not support getting/setting some attributes with get/setAttribute-if ( !getSetAttribute ) {-- // Use this for any attribute in IE6/7- // This fixes almost every IE6/7 issue- nodeHook = {- set: function( elem, value, name ) {- // Set the existing or create a new attribute node- var ret = elem.getAttributeNode( name );- if ( !ret ) {- elem.setAttributeNode(- (ret = elem.ownerDocument.createAttribute( name ))- );- }-- ret.value = value += "";-- // Break association with cloned elements by also using setAttribute (#9646)- return name === "value" || value === elem.getAttribute( name ) ?- value :- undefined;- }- };- jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =- // Some attributes are constructed with empty-string values when not defined- function( elem, name, isXML ) {- var ret;- return isXML ?- undefined :- (ret = elem.getAttributeNode( name )) && ret.value !== "" ?- ret.value :- null;- };- jQuery.valHooks.button = {- get: function( elem, name ) {- var ret = elem.getAttributeNode( name );- return ret && ret.specified ?- ret.value :- undefined;- },- set: nodeHook.set- };-- // Set contenteditable to false on removals(#10429)- // Setting to empty string throws an error as an invalid value- jQuery.attrHooks.contenteditable = {- set: function( elem, value, name ) {- nodeHook.set( elem, value === "" ? false : value, name );- }- };-- // Set width and height to auto instead of 0 on empty string( Bug #8150 )- // This is for removals- jQuery.each([ "width", "height" ], function( i, name ) {- jQuery.attrHooks[ name ] = {- set: function( elem, value ) {- if ( value === "" ) {- elem.setAttribute( name, "auto" );- return value;- }- }- };- });-}---// Some attributes require a special call on IE-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx-if ( !jQuery.support.hrefNormalized ) {- // href/src property should get the full normalized URL (#10299/#12915)- jQuery.each([ "href", "src" ], function( i, name ) {- jQuery.propHooks[ name ] = {- get: function( elem ) {- return elem.getAttribute( name, 4 );- }- };- });-}--if ( !jQuery.support.style ) {- jQuery.attrHooks.style = {- get: function( elem ) {- // Return undefined in the case of empty string- // Note: IE uppercases css property names, but if we were to .toLowerCase()- // .cssText, that would destroy case senstitivity in URL's, like in "background"- return elem.style.cssText || undefined;- },- set: function( elem, value ) {- return ( elem.style.cssText = value + "" );- }- };-}--// Safari mis-reports the default selected property of an option-// Accessing the parent's selectedIndex property fixes it-if ( !jQuery.support.optSelected ) {- jQuery.propHooks.selected = {- get: function( elem ) {- var parent = elem.parentNode;-- if ( parent ) {- parent.selectedIndex;-- // Make sure that it also works with optgroups, see #5701- if ( parent.parentNode ) {- parent.parentNode.selectedIndex;- }- }- return null;- }- };-}--jQuery.each([- "tabIndex",- "readOnly",- "maxLength",- "cellSpacing",- "cellPadding",- "rowSpan",- "colSpan",- "useMap",- "frameBorder",- "contentEditable"-], function() {- jQuery.propFix[ this.toLowerCase() ] = this;-});--// IE6/7 call enctype encoding-if ( !jQuery.support.enctype ) {- jQuery.propFix.enctype = "encoding";-}--// Radios and checkboxes getter/setter-jQuery.each([ "radio", "checkbox" ], function() {- jQuery.valHooks[ this ] = {- set: function( elem, value ) {- if ( jQuery.isArray( value ) ) {- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );- }- }- };- if ( !jQuery.support.checkOn ) {- jQuery.valHooks[ this ].get = function( elem ) {- // Support: Webkit- // "" is returned instead of "on" if a value isn't specified- return elem.getAttribute("value") === null ? "on" : elem.value;- };- }-});-var rformElems = /^(?:input|select|textarea)$/i,- rkeyEvent = /^key/,- rmouseEvent = /^(?:mouse|contextmenu)|click/,- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,- rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;--function returnTrue() {- return true;-}--function returnFalse() {- return false;-}--function safeActiveElement() {- try {- return document.activeElement;- } catch ( err ) { }-}--/*- * Helper functions for managing events -- not part of the public interface.- * Props to Dean Edwards' addEvent library for many of the ideas.- */-jQuery.event = {-- global: {},-- add: function( elem, types, handler, data, selector ) {- var tmp, events, t, handleObjIn,- special, eventHandle, handleObj,- handlers, type, namespaces, origType,- elemData = jQuery._data( elem );-- // Don't attach events to noData or text/comment nodes (but allow plain objects)- if ( !elemData ) {- return;- }-- // Caller can pass in an object of custom data in lieu of the handler- if ( handler.handler ) {- handleObjIn = handler;- handler = handleObjIn.handler;- selector = handleObjIn.selector;- }-- // Make sure that the handler has a unique ID, used to find/remove it later- if ( !handler.guid ) {- handler.guid = jQuery.guid++;- }-- // Init the element's event structure and main handler, if this is the first- if ( !(events = elemData.events) ) {- events = elemData.events = {};- }- if ( !(eventHandle = elemData.handle) ) {- eventHandle = elemData.handle = function( e ) {- // Discard the second event of a jQuery.event.trigger() and- // when an event is called after a page has unloaded- return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :- undefined;- };- // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events- eventHandle.elem = elem;- }-- // Handle multiple events separated by a space- types = ( types || "" ).match( core_rnotwhite ) || [""];- t = types.length;- while ( t-- ) {- tmp = rtypenamespace.exec( types[t] ) || [];- type = origType = tmp[1];- namespaces = ( tmp[2] || "" ).split( "." ).sort();-- // There *must* be a type, no attaching namespace-only handlers- if ( !type ) {- continue;- }-- // If event changes its type, use the special event handlers for the changed type- special = jQuery.event.special[ type ] || {};-- // If selector defined, determine special event api type, otherwise given type- type = ( selector ? special.delegateType : special.bindType ) || type;-- // Update special based on newly reset type- special = jQuery.event.special[ type ] || {};-- // handleObj is passed to all event handlers- handleObj = jQuery.extend({- type: type,- origType: origType,- data: data,- handler: handler,- guid: handler.guid,- selector: selector,- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),- namespace: namespaces.join(".")- }, handleObjIn );-- // Init the event handler queue if we're the first- if ( !(handlers = events[ type ]) ) {- handlers = events[ type ] = [];- handlers.delegateCount = 0;-- // Only use addEventListener/attachEvent if the special events handler returns false- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {- // Bind the global event handler to the element- if ( elem.addEventListener ) {- elem.addEventListener( type, eventHandle, false );-- } else if ( elem.attachEvent ) {- elem.attachEvent( "on" + type, eventHandle );- }- }- }-- if ( special.add ) {- special.add.call( elem, handleObj );-- if ( !handleObj.handler.guid ) {- handleObj.handler.guid = handler.guid;- }- }-- // Add to the element's handler list, delegates in front- if ( selector ) {- handlers.splice( handlers.delegateCount++, 0, handleObj );- } else {- handlers.push( handleObj );- }-- // Keep track of which events have ever been used, for event optimization- jQuery.event.global[ type ] = true;- }-- // Nullify elem to prevent memory leaks in IE- elem = null;- },-- // Detach an event or set of events from an element- remove: function( elem, types, handler, selector, mappedTypes ) {- var j, handleObj, tmp,- origCount, t, events,- special, handlers, type,- namespaces, origType,- elemData = jQuery.hasData( elem ) && jQuery._data( elem );-- if ( !elemData || !(events = elemData.events) ) {- return;- }-- // Once for each type.namespace in types; type may be omitted- types = ( types || "" ).match( core_rnotwhite ) || [""];- t = types.length;- while ( t-- ) {- tmp = rtypenamespace.exec( types[t] ) || [];- type = origType = tmp[1];- namespaces = ( tmp[2] || "" ).split( "." ).sort();-- // Unbind all events (on this namespace, if provided) for the element- if ( !type ) {- for ( type in events ) {- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );- }- continue;- }-- special = jQuery.event.special[ type ] || {};- type = ( selector ? special.delegateType : special.bindType ) || type;- handlers = events[ type ] || [];- tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );-- // Remove matching events- origCount = j = handlers.length;- while ( j-- ) {- handleObj = handlers[ j ];-- if ( ( mappedTypes || origType === handleObj.origType ) &&- ( !handler || handler.guid === handleObj.guid ) &&- ( !tmp || tmp.test( handleObj.namespace ) ) &&- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {- handlers.splice( j, 1 );-- if ( handleObj.selector ) {- handlers.delegateCount--;- }- if ( special.remove ) {- special.remove.call( elem, handleObj );- }- }- }-- // Remove generic event handler if we removed something and no more handlers exist- // (avoids potential for endless recursion during removal of special event handlers)- if ( origCount && !handlers.length ) {- if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {- jQuery.removeEvent( elem, type, elemData.handle );- }-- delete events[ type ];- }- }-- // Remove the expando if it's no longer used- if ( jQuery.isEmptyObject( events ) ) {- delete elemData.handle;-- // removeData also checks for emptiness and clears the expando if empty- // so use it instead of delete- jQuery._removeData( elem, "events" );- }- },-- trigger: function( event, data, elem, onlyHandlers ) {- var handle, ontype, cur,- bubbleType, special, tmp, i,- eventPath = [ elem || document ],- type = core_hasOwn.call( event, "type" ) ? event.type : event,- namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];-- cur = tmp = elem = elem || document;-- // Don't do events on text and comment nodes- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {- return;- }-- // focus/blur morphs to focusin/out; ensure we're not firing them right now- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {- return;- }-- if ( type.indexOf(".") >= 0 ) {- // Namespaced trigger; create a regexp to match event type in handle()- namespaces = type.split(".");- type = namespaces.shift();- namespaces.sort();- }- ontype = type.indexOf(":") < 0 && "on" + type;-- // Caller can pass in a jQuery.Event object, Object, or just an event type string- event = event[ jQuery.expando ] ?- event :- new jQuery.Event( type, typeof event === "object" && event );-- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)- event.isTrigger = onlyHandlers ? 2 : 3;- event.namespace = namespaces.join(".");- event.namespace_re = event.namespace ?- new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :- null;-- // Clean up the event in case it is being reused- event.result = undefined;- if ( !event.target ) {- event.target = elem;- }-- // Clone any incoming data and prepend the event, creating the handler arg list- data = data == null ?- [ event ] :- jQuery.makeArray( data, [ event ] );-- // Allow special events to draw outside the lines- special = jQuery.event.special[ type ] || {};- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {- return;- }-- // Determine event propagation path in advance, per W3C events spec (#9951)- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {-- bubbleType = special.delegateType || type;- if ( !rfocusMorph.test( bubbleType + type ) ) {- cur = cur.parentNode;- }- for ( ; cur; cur = cur.parentNode ) {- eventPath.push( cur );- tmp = cur;- }-- // Only add window if we got to document (e.g., not plain obj or detached DOM)- if ( tmp === (elem.ownerDocument || document) ) {- eventPath.push( tmp.defaultView || tmp.parentWindow || window );- }- }-- // Fire handlers on the event path- i = 0;- while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {-- event.type = i > 1 ?- bubbleType :- special.bindType || type;-- // jQuery handler- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );- if ( handle ) {- handle.apply( cur, data );- }-- // Native handler- handle = ontype && cur[ ontype ];- if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {- event.preventDefault();- }- }- event.type = type;-- // If nobody prevented the default action, do it now- if ( !onlyHandlers && !event.isDefaultPrevented() ) {-- if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&- jQuery.acceptData( elem ) ) {-- // Call a native DOM method on the target with the same name name as the event.- // Can't use an .isFunction() check here because IE6/7 fails that test.- // Don't do default actions on window, that's where global variables be (#6170)- if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {-- // Don't re-trigger an onFOO event when we call its FOO() method- tmp = elem[ ontype ];-- if ( tmp ) {- elem[ ontype ] = null;- }-- // Prevent re-triggering of the same event, since we already bubbled it above- jQuery.event.triggered = type;- try {- elem[ type ]();- } catch ( e ) {- // IE<9 dies on focus/blur to hidden element (#1486,#12518)- // only reproducible on winXP IE8 native, not IE9 in IE8 mode- }- jQuery.event.triggered = undefined;-- if ( tmp ) {- elem[ ontype ] = tmp;- }- }- }- }-- return event.result;- },-- dispatch: function( event ) {-- // Make a writable jQuery.Event from the native event object- event = jQuery.event.fix( event );-- var i, ret, handleObj, matched, j,- handlerQueue = [],- args = core_slice.call( arguments ),- handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],- special = jQuery.event.special[ event.type ] || {};-- // Use the fix-ed jQuery.Event rather than the (read-only) native event- args[0] = event;- event.delegateTarget = this;-- // Call the preDispatch hook for the mapped type, and let it bail if desired- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {- return;- }-- // Determine handlers- handlerQueue = jQuery.event.handlers.call( this, event, handlers );-- // Run delegates first; they may want to stop propagation beneath us- i = 0;- while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {- event.currentTarget = matched.elem;-- j = 0;- while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {-- // Triggered event must either 1) have no namespace, or- // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).- if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {-- event.handleObj = handleObj;- event.data = handleObj.data;-- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )- .apply( matched.elem, args );-- if ( ret !== undefined ) {- if ( (event.result = ret) === false ) {- event.preventDefault();- event.stopPropagation();- }- }- }- }- }-- // Call the postDispatch hook for the mapped type- if ( special.postDispatch ) {- special.postDispatch.call( this, event );- }-- return event.result;- },-- handlers: function( event, handlers ) {- var sel, handleObj, matches, i,- handlerQueue = [],- delegateCount = handlers.delegateCount,- cur = event.target;-- // Find delegate handlers- // Black-hole SVG <use> instance trees (#13180)- // Avoid non-left-click bubbling in Firefox (#3861)- if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {-- /* jshint eqeqeq: false */- for ( ; cur != this; cur = cur.parentNode || this ) {- /* jshint eqeqeq: true */-- // Don't check non-elements (#13208)- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)- if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {- matches = [];- for ( i = 0; i < delegateCount; i++ ) {- handleObj = handlers[ i ];-- // Don't conflict with Object.prototype properties (#13203)- sel = handleObj.selector + " ";-- if ( matches[ sel ] === undefined ) {- matches[ sel ] = handleObj.needsContext ?- jQuery( sel, this ).index( cur ) >= 0 :- jQuery.find( sel, this, null, [ cur ] ).length;- }- if ( matches[ sel ] ) {- matches.push( handleObj );- }- }- if ( matches.length ) {- handlerQueue.push({ elem: cur, handlers: matches });- }- }- }- }-- // Add the remaining (directly-bound) handlers- if ( delegateCount < handlers.length ) {- handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });- }-- return handlerQueue;- },-- fix: function( event ) {- if ( event[ jQuery.expando ] ) {- return event;- }-- // Create a writable copy of the event object and normalize some properties- var i, prop, copy,- type = event.type,- originalEvent = event,- fixHook = this.fixHooks[ type ];-- if ( !fixHook ) {- this.fixHooks[ type ] = fixHook =- rmouseEvent.test( type ) ? this.mouseHooks :- rkeyEvent.test( type ) ? this.keyHooks :- {};- }- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;-- event = new jQuery.Event( originalEvent );-- i = copy.length;- while ( i-- ) {- prop = copy[ i ];- event[ prop ] = originalEvent[ prop ];- }-- // Support: IE<9- // Fix target property (#1925)- if ( !event.target ) {- event.target = originalEvent.srcElement || document;- }-- // Support: Chrome 23+, Safari?- // Target should not be a text node (#504, #13143)- if ( event.target.nodeType === 3 ) {- event.target = event.target.parentNode;- }-- // Support: IE<9- // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)- event.metaKey = !!event.metaKey;-- return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;- },-- // Includes some event props shared by KeyEvent and MouseEvent- props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),-- fixHooks: {},-- keyHooks: {- props: "char charCode key keyCode".split(" "),- filter: function( event, original ) {-- // Add which for key events- if ( event.which == null ) {- event.which = original.charCode != null ? original.charCode : original.keyCode;- }-- return event;- }- },-- mouseHooks: {- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),- filter: function( event, original ) {- var body, eventDoc, doc,- button = original.button,- fromElement = original.fromElement;-- // Calculate pageX/Y if missing and clientX/Y available- if ( event.pageX == null && original.clientX != null ) {- eventDoc = event.target.ownerDocument || document;- doc = eventDoc.documentElement;- body = eventDoc.body;-- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );- }-- // Add relatedTarget, if necessary- if ( !event.relatedTarget && fromElement ) {- event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;- }-- // Add which for click: 1 === left; 2 === middle; 3 === right- // Note: button is not normalized, so don't use it- if ( !event.which && button !== undefined ) {- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );- }-- return event;- }- },-- special: {- load: {- // Prevent triggered image.load events from bubbling to window.load- noBubble: true- },- focus: {- // Fire native event if possible so blur/focus sequence is correct- trigger: function() {- if ( this !== safeActiveElement() && this.focus ) {- try {- this.focus();- return false;- } catch ( e ) {- // Support: IE<9- // If we error on focus to hidden element (#1486, #12518),- // let .trigger() run the handlers- }- }- },- delegateType: "focusin"- },- blur: {- trigger: function() {- if ( this === safeActiveElement() && this.blur ) {- this.blur();- return false;- }- },- delegateType: "focusout"- },- click: {- // For checkbox, fire native event so checked state will be right- trigger: function() {- if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {- this.click();- return false;- }- },-- // For cross-browser consistency, don't fire native .click() on links- _default: function( event ) {- return jQuery.nodeName( event.target, "a" );- }- },-- beforeunload: {- postDispatch: function( event ) {-- // Even when returnValue equals to undefined Firefox will still show alert- if ( event.result !== undefined ) {- event.originalEvent.returnValue = event.result;- }- }- }- },-- simulate: function( type, elem, event, bubble ) {- // Piggyback on a donor event to simulate a different one.- // Fake originalEvent to avoid donor's stopPropagation, but if the- // simulated event prevents default then we do the same on the donor.- var e = jQuery.extend(- new jQuery.Event(),- event,- {- type: type,- isSimulated: true,- originalEvent: {}- }- );- if ( bubble ) {- jQuery.event.trigger( e, null, elem );- } else {- jQuery.event.dispatch.call( elem, e );- }- if ( e.isDefaultPrevented() ) {- event.preventDefault();- }- }-};--jQuery.removeEvent = document.removeEventListener ?- function( elem, type, handle ) {- if ( elem.removeEventListener ) {- elem.removeEventListener( type, handle, false );- }- } :- function( elem, type, handle ) {- var name = "on" + type;-- if ( elem.detachEvent ) {-- // #8545, #7054, preventing memory leaks for custom events in IE6-8- // detachEvent needed property on element, by name of that event, to properly expose it to GC- if ( typeof elem[ name ] === core_strundefined ) {- elem[ name ] = null;- }-- elem.detachEvent( name, handle );- }- };--jQuery.Event = function( src, props ) {- // Allow instantiation without the 'new' keyword- if ( !(this instanceof jQuery.Event) ) {- return new jQuery.Event( src, props );- }-- // Event object- if ( src && src.type ) {- this.originalEvent = src;- this.type = src.type;-- // Events bubbling up the document may have been marked as prevented- // by a handler lower down the tree; reflect the correct value.- this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||- src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;-- // Event type- } else {- this.type = src;- }-- // Put explicitly provided properties onto the event object- if ( props ) {- jQuery.extend( this, props );- }-- // Create a timestamp if incoming event doesn't have one- this.timeStamp = src && src.timeStamp || jQuery.now();-- // Mark it as fixed- this[ jQuery.expando ] = true;-};--// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html-jQuery.Event.prototype = {- isDefaultPrevented: returnFalse,- isPropagationStopped: returnFalse,- isImmediatePropagationStopped: returnFalse,-- preventDefault: function() {- var e = this.originalEvent;-- this.isDefaultPrevented = returnTrue;- if ( !e ) {- return;- }-- // If preventDefault exists, run it on the original event- if ( e.preventDefault ) {- e.preventDefault();-- // Support: IE- // Otherwise set the returnValue property of the original event to false- } else {- e.returnValue = false;- }- },- stopPropagation: function() {- var e = this.originalEvent;-- this.isPropagationStopped = returnTrue;- if ( !e ) {- return;- }- // If stopPropagation exists, run it on the original event- if ( e.stopPropagation ) {- e.stopPropagation();- }-- // Support: IE- // Set the cancelBubble property of the original event to true- e.cancelBubble = true;- },- stopImmediatePropagation: function() {- this.isImmediatePropagationStopped = returnTrue;- this.stopPropagation();- }-};--// Create mouseenter/leave events using mouseover/out and event-time checks-jQuery.each({- mouseenter: "mouseover",- mouseleave: "mouseout"-}, function( orig, fix ) {- jQuery.event.special[ orig ] = {- delegateType: fix,- bindType: fix,-- handle: function( event ) {- var ret,- target = this,- related = event.relatedTarget,- handleObj = event.handleObj;-- // For mousenter/leave call the handler if related is outside the target.- // NB: No relatedTarget if the mouse left/entered the browser window- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {- event.type = handleObj.origType;- ret = handleObj.handler.apply( this, arguments );- event.type = fix;- }- return ret;- }- };-});--// IE submit delegation-if ( !jQuery.support.submitBubbles ) {-- jQuery.event.special.submit = {- setup: function() {- // Only need this for delegated form submit events- if ( jQuery.nodeName( this, "form" ) ) {- return false;- }-- // Lazy-add a submit handler when a descendant form may potentially be submitted- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {- // Node name check avoids a VML-related crash in IE (#9807)- var elem = e.target,- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;- if ( form && !jQuery._data( form, "submitBubbles" ) ) {- jQuery.event.add( form, "submit._submit", function( event ) {- event._submit_bubble = true;- });- jQuery._data( form, "submitBubbles", true );- }- });- // return undefined since we don't need an event listener- },-- postDispatch: function( event ) {- // If form was submitted by the user, bubble the event up the tree- if ( event._submit_bubble ) {- delete event._submit_bubble;- if ( this.parentNode && !event.isTrigger ) {- jQuery.event.simulate( "submit", this.parentNode, event, true );- }- }- },-- teardown: function() {- // Only need this for delegated form submit events- if ( jQuery.nodeName( this, "form" ) ) {- return false;- }-- // Remove delegated handlers; cleanData eventually reaps submit handlers attached above- jQuery.event.remove( this, "._submit" );- }- };-}--// IE change delegation and checkbox/radio fix-if ( !jQuery.support.changeBubbles ) {-- jQuery.event.special.change = {-- setup: function() {-- if ( rformElems.test( this.nodeName ) ) {- // IE doesn't fire change on a check/radio until blur; trigger it on click- // after a propertychange. Eat the blur-change in special.change.handle.- // This still fires onchange a second time for check/radio after blur.- if ( this.type === "checkbox" || this.type === "radio" ) {- jQuery.event.add( this, "propertychange._change", function( event ) {- if ( event.originalEvent.propertyName === "checked" ) {- this._just_changed = true;- }- });- jQuery.event.add( this, "click._change", function( event ) {- if ( this._just_changed && !event.isTrigger ) {- this._just_changed = false;- }- // Allow triggered, simulated change events (#11500)- jQuery.event.simulate( "change", this, event, true );- });- }- return false;- }- // Delegated event; lazy-add a change handler on descendant inputs- jQuery.event.add( this, "beforeactivate._change", function( e ) {- var elem = e.target;-- if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {- jQuery.event.add( elem, "change._change", function( event ) {- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {- jQuery.event.simulate( "change", this.parentNode, event, true );- }- });- jQuery._data( elem, "changeBubbles", true );- }- });- },-- handle: function( event ) {- var elem = event.target;-- // Swallow native change events from checkbox/radio, we already triggered them above- if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {- return event.handleObj.handler.apply( this, arguments );- }- },-- teardown: function() {- jQuery.event.remove( this, "._change" );-- return !rformElems.test( this.nodeName );- }- };-}--// Create "bubbling" focus and blur events-if ( !jQuery.support.focusinBubbles ) {- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {-- // Attach a single capturing handler while someone wants focusin/focusout- var attaches = 0,- handler = function( event ) {- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );- };-- jQuery.event.special[ fix ] = {- setup: function() {- if ( attaches++ === 0 ) {- document.addEventListener( orig, handler, true );- }- },- teardown: function() {- if ( --attaches === 0 ) {- document.removeEventListener( orig, handler, true );- }- }- };- });-}--jQuery.fn.extend({-- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {- var type, origFn;-- // Types can be a map of types/handlers- if ( typeof types === "object" ) {- // ( types-Object, selector, data )- if ( typeof selector !== "string" ) {- // ( types-Object, data )- data = data || selector;- selector = undefined;- }- for ( type in types ) {- this.on( type, selector, data, types[ type ], one );- }- return this;- }-- if ( data == null && fn == null ) {- // ( types, fn )- fn = selector;- data = selector = undefined;- } else if ( fn == null ) {- if ( typeof selector === "string" ) {- // ( types, selector, fn )- fn = data;- data = undefined;- } else {- // ( types, data, fn )- fn = data;- data = selector;- selector = undefined;- }- }- if ( fn === false ) {- fn = returnFalse;- } else if ( !fn ) {- return this;- }-- if ( one === 1 ) {- origFn = fn;- fn = function( event ) {- // Can use an empty set, since event contains the info- jQuery().off( event );- return origFn.apply( this, arguments );- };- // Use same guid so caller can remove using origFn- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );- }- return this.each( function() {- jQuery.event.add( this, types, fn, data, selector );- });- },- one: function( types, selector, data, fn ) {- return this.on( types, selector, data, fn, 1 );- },- off: function( types, selector, fn ) {- var handleObj, type;- if ( types && types.preventDefault && types.handleObj ) {- // ( event ) dispatched jQuery.Event- handleObj = types.handleObj;- jQuery( types.delegateTarget ).off(- handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,- handleObj.selector,- handleObj.handler- );- return this;- }- if ( typeof types === "object" ) {- // ( types-object [, selector] )- for ( type in types ) {- this.off( type, selector, types[ type ] );- }- return this;- }- if ( selector === false || typeof selector === "function" ) {- // ( types [, fn] )- fn = selector;- selector = undefined;- }- if ( fn === false ) {- fn = returnFalse;- }- return this.each(function() {- jQuery.event.remove( this, types, fn, selector );- });- },-- trigger: function( type, data ) {- return this.each(function() {- jQuery.event.trigger( type, data, this );- });- },- triggerHandler: function( type, data ) {- var elem = this[0];- if ( elem ) {- return jQuery.event.trigger( type, data, elem, true );- }- }-});-var isSimple = /^.[^:#\[\.,]*$/,- rparentsprev = /^(?:parents|prev(?:Until|All))/,- rneedsContext = jQuery.expr.match.needsContext,- // methods guaranteed to produce a unique set when starting from a unique set- guaranteedUnique = {- children: true,- contents: true,- next: true,- prev: true- };--jQuery.fn.extend({- find: function( selector ) {- var i,- ret = [],- self = this,- len = self.length;-- if ( typeof selector !== "string" ) {- return this.pushStack( jQuery( selector ).filter(function() {- for ( i = 0; i < len; i++ ) {- if ( jQuery.contains( self[ i ], this ) ) {- return true;- }- }- }) );- }-- for ( i = 0; i < len; i++ ) {- jQuery.find( selector, self[ i ], ret );- }-- // Needed because $( selector, context ) becomes $( context ).find( selector )- ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );- ret.selector = this.selector ? this.selector + " " + selector : selector;- return ret;- },-- has: function( target ) {- var i,- targets = jQuery( target, this ),- len = targets.length;-- return this.filter(function() {- for ( i = 0; i < len; i++ ) {- if ( jQuery.contains( this, targets[i] ) ) {- return true;- }- }- });- },-- not: function( selector ) {- return this.pushStack( winnow(this, selector || [], true) );- },-- filter: function( selector ) {- return this.pushStack( winnow(this, selector || [], false) );- },-- is: function( selector ) {- return !!winnow(- this,-- // If this is a positional/relative selector, check membership in the returned set- // so $("p:first").is("p:last") won't return true for a doc with two "p".- typeof selector === "string" && rneedsContext.test( selector ) ?- jQuery( selector ) :- selector || [],- false- ).length;- },-- closest: function( selectors, context ) {- var cur,- i = 0,- l = this.length,- ret = [],- pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?- jQuery( selectors, context || this.context ) :- 0;-- for ( ; i < l; i++ ) {- for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {- // Always skip document fragments- if ( cur.nodeType < 11 && (pos ?- pos.index(cur) > -1 :-- // Don't pass non-elements to Sizzle- cur.nodeType === 1 &&- jQuery.find.matchesSelector(cur, selectors)) ) {-- cur = ret.push( cur );- break;- }- }- }-- return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );- },-- // Determine the position of an element within- // the matched set of elements- index: function( elem ) {-- // No argument, return index in parent- if ( !elem ) {- return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;- }-- // index in selector- if ( typeof elem === "string" ) {- return jQuery.inArray( this[0], jQuery( elem ) );- }-- // Locate the position of the desired element- return jQuery.inArray(- // If it receives a jQuery object, the first element is used- elem.jquery ? elem[0] : elem, this );- },-- add: function( selector, context ) {- var set = typeof selector === "string" ?- jQuery( selector, context ) :- jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),- all = jQuery.merge( this.get(), set );-- return this.pushStack( jQuery.unique(all) );- },-- addBack: function( selector ) {- return this.add( selector == null ?- this.prevObject : this.prevObject.filter(selector)- );- }-});--function sibling( cur, dir ) {- do {- cur = cur[ dir ];- } while ( cur && cur.nodeType !== 1 );-- return cur;-}--jQuery.each({- parent: function( elem ) {- var parent = elem.parentNode;- return parent && parent.nodeType !== 11 ? parent : null;- },- parents: function( elem ) {- return jQuery.dir( elem, "parentNode" );- },- parentsUntil: function( elem, i, until ) {- return jQuery.dir( elem, "parentNode", until );- },- next: function( elem ) {- return sibling( elem, "nextSibling" );- },- prev: function( elem ) {- return sibling( elem, "previousSibling" );- },- nextAll: function( elem ) {- return jQuery.dir( elem, "nextSibling" );- },- prevAll: function( elem ) {- return jQuery.dir( elem, "previousSibling" );- },- nextUntil: function( elem, i, until ) {- return jQuery.dir( elem, "nextSibling", until );- },- prevUntil: function( elem, i, until ) {- return jQuery.dir( elem, "previousSibling", until );- },- siblings: function( elem ) {- return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );- },- children: function( elem ) {- return jQuery.sibling( elem.firstChild );- },- contents: function( elem ) {- return jQuery.nodeName( elem, "iframe" ) ?- elem.contentDocument || elem.contentWindow.document :- jQuery.merge( [], elem.childNodes );- }-}, function( name, fn ) {- jQuery.fn[ name ] = function( until, selector ) {- var ret = jQuery.map( this, fn, until );-- if ( name.slice( -5 ) !== "Until" ) {- selector = until;- }-- if ( selector && typeof selector === "string" ) {- ret = jQuery.filter( selector, ret );- }-- if ( this.length > 1 ) {- // Remove duplicates- if ( !guaranteedUnique[ name ] ) {- ret = jQuery.unique( ret );- }-- // Reverse order for parents* and prev-derivatives- if ( rparentsprev.test( name ) ) {- ret = ret.reverse();- }- }-- return this.pushStack( ret );- };-});--jQuery.extend({- filter: function( expr, elems, not ) {- var elem = elems[ 0 ];-- if ( not ) {- expr = ":not(" + expr + ")";- }-- return elems.length === 1 && elem.nodeType === 1 ?- jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :- jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {- return elem.nodeType === 1;- }));- },-- dir: function( elem, dir, until ) {- var matched = [],- cur = elem[ dir ];-- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {- if ( cur.nodeType === 1 ) {- matched.push( cur );- }- cur = cur[dir];- }- return matched;- },-- sibling: function( n, elem ) {- var r = [];-- for ( ; n; n = n.nextSibling ) {- if ( n.nodeType === 1 && n !== elem ) {- r.push( n );- }- }-- return r;- }-});--// Implement the identical functionality for filter and not-function winnow( elements, qualifier, not ) {- if ( jQuery.isFunction( qualifier ) ) {- return jQuery.grep( elements, function( elem, i ) {- /* jshint -W018 */- return !!qualifier.call( elem, i, elem ) !== not;- });-- }-- if ( qualifier.nodeType ) {- return jQuery.grep( elements, function( elem ) {- return ( elem === qualifier ) !== not;- });-- }-- if ( typeof qualifier === "string" ) {- if ( isSimple.test( qualifier ) ) {- return jQuery.filter( qualifier, elements, not );- }-- qualifier = jQuery.filter( qualifier, elements );- }-- return jQuery.grep( elements, function( elem ) {- return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;- });-}-function createSafeFragment( document ) {- var list = nodeNames.split( "|" ),- safeFrag = document.createDocumentFragment();-- if ( safeFrag.createElement ) {- while ( list.length ) {- safeFrag.createElement(- list.pop()- );- }- }- return safeFrag;-}--var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +- "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",- rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,- rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),- rleadingWhitespace = /^\s+/,- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,- rtagName = /<([\w:]+)/,- rtbody = /<tbody/i,- rhtml = /<|&#?\w+;/,- rnoInnerhtml = /<(?:script|style|link)/i,- manipulation_rcheckableType = /^(?:checkbox|radio)$/i,- // checked="checked" or checked- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,- rscriptType = /^$|\/(?:java|ecma)script/i,- rscriptTypeMasked = /^true\/(.*)/,- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,-- // We have to close these tags to support XHTML (#13200)- wrapMap = {- option: [ 1, "<select multiple='multiple'>", "</select>" ],- legend: [ 1, "<fieldset>", "</fieldset>" ],- area: [ 1, "<map>", "</map>" ],- param: [ 1, "<object>", "</object>" ],- thead: [ 1, "<table>", "</table>" ],- tr: [ 2, "<table><tbody>", "</tbody></table>" ],- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],-- // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,- // unless wrapped in a div with non-breaking characters in front of it.- _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]- },- safeFragment = createSafeFragment( document ),- fragmentDiv = safeFragment.appendChild( document.createElement("div") );--wrapMap.optgroup = wrapMap.option;-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;-wrapMap.th = wrapMap.td;--jQuery.fn.extend({- text: function( value ) {- return jQuery.access( this, function( value ) {- return value === undefined ?- jQuery.text( this ) :- this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );- }, null, value, arguments.length );- },-- append: function() {- return this.domManip( arguments, function( elem ) {- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {- var target = manipulationTarget( this, elem );- target.appendChild( elem );- }- });- },-- prepend: function() {- return this.domManip( arguments, function( elem ) {- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {- var target = manipulationTarget( this, elem );- target.insertBefore( elem, target.firstChild );- }- });- },-- before: function() {- return this.domManip( arguments, function( elem ) {- if ( this.parentNode ) {- this.parentNode.insertBefore( elem, this );- }- });- },-- after: function() {- return this.domManip( arguments, function( elem ) {- if ( this.parentNode ) {- this.parentNode.insertBefore( elem, this.nextSibling );- }- });- },-- // keepData is for internal use only--do not document- remove: function( selector, keepData ) {- var elem,- elems = selector ? jQuery.filter( selector, this ) : this,- i = 0;-- for ( ; (elem = elems[i]) != null; i++ ) {-- if ( !keepData && elem.nodeType === 1 ) {- jQuery.cleanData( getAll( elem ) );- }-- if ( elem.parentNode ) {- if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {- setGlobalEval( getAll( elem, "script" ) );- }- elem.parentNode.removeChild( elem );- }- }-- return this;- },-- empty: function() {- var elem,- i = 0;-- for ( ; (elem = this[i]) != null; i++ ) {- // Remove element nodes and prevent memory leaks- if ( elem.nodeType === 1 ) {- jQuery.cleanData( getAll( elem, false ) );- }-- // Remove any remaining nodes- while ( elem.firstChild ) {- elem.removeChild( elem.firstChild );- }-- // If this is a select, ensure that it displays empty (#12336)- // Support: IE<9- if ( elem.options && jQuery.nodeName( elem, "select" ) ) {- elem.options.length = 0;- }- }-- return this;- },-- clone: function( dataAndEvents, deepDataAndEvents ) {- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;-- return this.map( function () {- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );- });- },-- html: function( value ) {- return jQuery.access( this, function( value ) {- var elem = this[0] || {},- i = 0,- l = this.length;-- if ( value === undefined ) {- return elem.nodeType === 1 ?- elem.innerHTML.replace( rinlinejQuery, "" ) :- undefined;- }-- // See if we can take a shortcut and just use innerHTML- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&- ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) &&- ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&- !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {-- value = value.replace( rxhtmlTag, "<$1></$2>" );-- try {- for (; i < l; i++ ) {- // Remove element nodes and prevent memory leaks- elem = this[i] || {};- if ( elem.nodeType === 1 ) {- jQuery.cleanData( getAll( elem, false ) );- elem.innerHTML = value;- }- }-- elem = 0;-- // If using innerHTML throws an exception, use the fallback method- } catch(e) {}- }-- if ( elem ) {- this.empty().append( value );- }- }, null, value, arguments.length );- },-- replaceWith: function() {- var- // Snapshot the DOM in case .domManip sweeps something relevant into its fragment- args = jQuery.map( this, function( elem ) {- return [ elem.nextSibling, elem.parentNode ];- }),- i = 0;-- // Make the changes, replacing each context element with the new content- this.domManip( arguments, function( elem ) {- var next = args[ i++ ],- parent = args[ i++ ];-- if ( parent ) {- // Don't use the snapshot next if it has moved (#13810)- if ( next && next.parentNode !== parent ) {- next = this.nextSibling;- }- jQuery( this ).remove();- parent.insertBefore( elem, next );- }- // Allow new content to include elements from the context set- }, true );-- // Force removal if there was no new content (e.g., from empty arguments)- return i ? this : this.remove();- },-- detach: function( selector ) {- return this.remove( selector, true );- },-- domManip: function( args, callback, allowIntersection ) {-- // Flatten any nested arrays- args = core_concat.apply( [], args );-- var first, node, hasScripts,- scripts, doc, fragment,- i = 0,- l = this.length,- set = this,- iNoClone = l - 1,- value = args[0],- isFunction = jQuery.isFunction( value );-- // We can't cloneNode fragments that contain checked, in WebKit- if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {- return this.each(function( index ) {- var self = set.eq( index );- if ( isFunction ) {- args[0] = value.call( this, index, self.html() );- }- self.domManip( args, callback, allowIntersection );- });- }-- if ( l ) {- fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );- first = fragment.firstChild;-- if ( fragment.childNodes.length === 1 ) {- fragment = first;- }-- if ( first ) {- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );- hasScripts = scripts.length;-- // Use the original fragment for the last item instead of the first because it can end up- // being emptied incorrectly in certain situations (#8070).- for ( ; i < l; i++ ) {- node = fragment;-- if ( i !== iNoClone ) {- node = jQuery.clone( node, true, true );-- // Keep references to cloned scripts for later restoration- if ( hasScripts ) {- jQuery.merge( scripts, getAll( node, "script" ) );- }- }-- callback.call( this[i], node, i );- }-- if ( hasScripts ) {- doc = scripts[ scripts.length - 1 ].ownerDocument;-- // Reenable scripts- jQuery.map( scripts, restoreScript );-- // Evaluate executable scripts on first document insertion- for ( i = 0; i < hasScripts; i++ ) {- node = scripts[ i ];- if ( rscriptType.test( node.type || "" ) &&- !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {-- if ( node.src ) {- // Hope ajax is available...- jQuery._evalUrl( node.src );- } else {- jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );- }- }- }- }-- // Fix #11809: Avoid leaking memory- fragment = first = null;- }- }-- return this;- }-});--// Support: IE<8-// Manipulating tables requires a tbody-function manipulationTarget( elem, content ) {- return jQuery.nodeName( elem, "table" ) &&- jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ?-- elem.getElementsByTagName("tbody")[0] ||- elem.appendChild( elem.ownerDocument.createElement("tbody") ) :- elem;-}--// Replace/restore the type attribute of script elements for safe DOM manipulation-function disableScript( elem ) {- elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;- return elem;-}-function restoreScript( elem ) {- var match = rscriptTypeMasked.exec( elem.type );- if ( match ) {- elem.type = match[1];- } else {- elem.removeAttribute("type");- }- return elem;-}--// Mark scripts as having already been evaluated-function setGlobalEval( elems, refElements ) {- var elem,- i = 0;- for ( ; (elem = elems[i]) != null; i++ ) {- jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );- }-}--function cloneCopyEvent( src, dest ) {-- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {- return;- }-- var type, i, l,- oldData = jQuery._data( src ),- curData = jQuery._data( dest, oldData ),- events = oldData.events;-- if ( events ) {- delete curData.handle;- curData.events = {};-- for ( type in events ) {- for ( i = 0, l = events[ type ].length; i < l; i++ ) {- jQuery.event.add( dest, type, events[ type ][ i ] );- }- }- }-- // make the cloned public data object a copy from the original- if ( curData.data ) {- curData.data = jQuery.extend( {}, curData.data );- }-}--function fixCloneNodeIssues( src, dest ) {- var nodeName, e, data;-- // We do not need to do anything for non-Elements- if ( dest.nodeType !== 1 ) {- return;- }-- nodeName = dest.nodeName.toLowerCase();-- // IE6-8 copies events bound via attachEvent when using cloneNode.- if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {- data = jQuery._data( dest );-- for ( e in data.events ) {- jQuery.removeEvent( dest, e, data.handle );- }-- // Event data gets referenced instead of copied if the expando gets copied too- dest.removeAttribute( jQuery.expando );- }-- // IE blanks contents when cloning scripts, and tries to evaluate newly-set text- if ( nodeName === "script" && dest.text !== src.text ) {- disableScript( dest ).text = src.text;- restoreScript( dest );-- // IE6-10 improperly clones children of object elements using classid.- // IE10 throws NoModificationAllowedError if parent is null, #12132.- } else if ( nodeName === "object" ) {- if ( dest.parentNode ) {- dest.outerHTML = src.outerHTML;- }-- // This path appears unavoidable for IE9. When cloning an object- // element in IE9, the outerHTML strategy above is not sufficient.- // If the src has innerHTML and the destination does not,- // copy the src.innerHTML into the dest.innerHTML. #10324- if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {- dest.innerHTML = src.innerHTML;- }-- } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {- // IE6-8 fails to persist the checked state of a cloned checkbox- // or radio button. Worse, IE6-7 fail to give the cloned element- // a checked appearance if the defaultChecked value isn't also set-- dest.defaultChecked = dest.checked = src.checked;-- // IE6-7 get confused and end up setting the value of a cloned- // checkbox/radio button to an empty string instead of "on"- if ( dest.value !== src.value ) {- dest.value = src.value;- }-- // IE6-8 fails to return the selected option to the default selected- // state when cloning options- } else if ( nodeName === "option" ) {- dest.defaultSelected = dest.selected = src.defaultSelected;-- // IE6-8 fails to set the defaultValue to the correct value when- // cloning other types of input fields- } else if ( nodeName === "input" || nodeName === "textarea" ) {- dest.defaultValue = src.defaultValue;- }-}--jQuery.each({- appendTo: "append",- prependTo: "prepend",- insertBefore: "before",- insertAfter: "after",- replaceAll: "replaceWith"-}, function( name, original ) {- jQuery.fn[ name ] = function( selector ) {- var elems,- i = 0,- ret = [],- insert = jQuery( selector ),- last = insert.length - 1;-- for ( ; i <= last; i++ ) {- elems = i === last ? this : this.clone(true);- jQuery( insert[i] )[ original ]( elems );-- // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()- core_push.apply( ret, elems.get() );- }-- return this.pushStack( ret );- };-});--function getAll( context, tag ) {- var elems, elem,- i = 0,- found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :- typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :- undefined;-- if ( !found ) {- for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {- if ( !tag || jQuery.nodeName( elem, tag ) ) {- found.push( elem );- } else {- jQuery.merge( found, getAll( elem, tag ) );- }- }- }-- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?- jQuery.merge( [ context ], found ) :- found;-}--// Used in buildFragment, fixes the defaultChecked property-function fixDefaultChecked( elem ) {- if ( manipulation_rcheckableType.test( elem.type ) ) {- elem.defaultChecked = elem.checked;- }-}--jQuery.extend({- clone: function( elem, dataAndEvents, deepDataAndEvents ) {- var destElements, node, clone, i, srcElements,- inPage = jQuery.contains( elem.ownerDocument, elem );-- if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {- clone = elem.cloneNode( true );-- // IE<=8 does not properly clone detached, unknown element nodes- } else {- fragmentDiv.innerHTML = elem.outerHTML;- fragmentDiv.removeChild( clone = fragmentDiv.firstChild );- }-- if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {-- // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2- destElements = getAll( clone );- srcElements = getAll( elem );-- // Fix all IE cloning issues- for ( i = 0; (node = srcElements[i]) != null; ++i ) {- // Ensure that the destination node is not null; Fixes #9587- if ( destElements[i] ) {- fixCloneNodeIssues( node, destElements[i] );- }- }- }-- // Copy the events from the original to the clone- if ( dataAndEvents ) {- if ( deepDataAndEvents ) {- srcElements = srcElements || getAll( elem );- destElements = destElements || getAll( clone );-- for ( i = 0; (node = srcElements[i]) != null; i++ ) {- cloneCopyEvent( node, destElements[i] );- }- } else {- cloneCopyEvent( elem, clone );- }- }-- // Preserve script evaluation history- destElements = getAll( clone, "script" );- if ( destElements.length > 0 ) {- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );- }-- destElements = srcElements = node = null;-- // Return the cloned set- return clone;- },-- buildFragment: function( elems, context, scripts, selection ) {- var j, elem, contains,- tmp, tag, tbody, wrap,- l = elems.length,-- // Ensure a safe fragment- safe = createSafeFragment( context ),-- nodes = [],- i = 0;-- for ( ; i < l; i++ ) {- elem = elems[ i ];-- if ( elem || elem === 0 ) {-- // Add nodes directly- if ( jQuery.type( elem ) === "object" ) {- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );-- // Convert non-html into a text node- } else if ( !rhtml.test( elem ) ) {- nodes.push( context.createTextNode( elem ) );-- // Convert html into DOM nodes- } else {- tmp = tmp || safe.appendChild( context.createElement("div") );-- // Deserialize a standard representation- tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();- wrap = wrapMap[ tag ] || wrapMap._default;-- tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];-- // Descend through wrappers to the right content- j = wrap[0];- while ( j-- ) {- tmp = tmp.lastChild;- }-- // Manually add leading whitespace removed by IE- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {- nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );- }-- // Remove IE's autoinserted <tbody> from table fragments- if ( !jQuery.support.tbody ) {-- // String was a <table>, *may* have spurious <tbody>- elem = tag === "table" && !rtbody.test( elem ) ?- tmp.firstChild :-- // String was a bare <thead> or <tfoot>- wrap[1] === "<table>" && !rtbody.test( elem ) ?- tmp :- 0;-- j = elem && elem.childNodes.length;- while ( j-- ) {- if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {- elem.removeChild( tbody );- }- }- }-- jQuery.merge( nodes, tmp.childNodes );-- // Fix #12392 for WebKit and IE > 9- tmp.textContent = "";-- // Fix #12392 for oldIE- while ( tmp.firstChild ) {- tmp.removeChild( tmp.firstChild );- }-- // Remember the top-level container for proper cleanup- tmp = safe.lastChild;- }- }- }-- // Fix #11356: Clear elements from fragment- if ( tmp ) {- safe.removeChild( tmp );- }-- // Reset defaultChecked for any radios and checkboxes- // about to be appended to the DOM in IE 6/7 (#8060)- if ( !jQuery.support.appendChecked ) {- jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );- }-- i = 0;- while ( (elem = nodes[ i++ ]) ) {-- // #4087 - If origin and destination elements are the same, and this is- // that element, do not do anything- if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {- continue;- }-- contains = jQuery.contains( elem.ownerDocument, elem );-- // Append to fragment- tmp = getAll( safe.appendChild( elem ), "script" );-- // Preserve script evaluation history- if ( contains ) {- setGlobalEval( tmp );- }-- // Capture executables- if ( scripts ) {- j = 0;- while ( (elem = tmp[ j++ ]) ) {- if ( rscriptType.test( elem.type || "" ) ) {- scripts.push( elem );- }- }- }- }-- tmp = null;-- return safe;- },-- cleanData: function( elems, /* internal */ acceptData ) {- var elem, type, id, data,- i = 0,- internalKey = jQuery.expando,- cache = jQuery.cache,- deleteExpando = jQuery.support.deleteExpando,- special = jQuery.event.special;-- for ( ; (elem = elems[i]) != null; i++ ) {-- if ( acceptData || jQuery.acceptData( elem ) ) {-- id = elem[ internalKey ];- data = id && cache[ id ];-- if ( data ) {- if ( data.events ) {- for ( type in data.events ) {- if ( special[ type ] ) {- jQuery.event.remove( elem, type );-- // This is a shortcut to avoid jQuery.event.remove's overhead- } else {- jQuery.removeEvent( elem, type, data.handle );- }- }- }-- // Remove cache only if it was not already removed by jQuery.event.remove- if ( cache[ id ] ) {-- delete cache[ id ];-- // IE does not allow us to delete expando properties from nodes,- // nor does it have a removeAttribute function on Document nodes;- // we must handle all of these cases- if ( deleteExpando ) {- delete elem[ internalKey ];-- } else if ( typeof elem.removeAttribute !== core_strundefined ) {- elem.removeAttribute( internalKey );-- } else {- elem[ internalKey ] = null;- }-- core_deletedIds.push( id );- }- }- }- }- },-- _evalUrl: function( url ) {- return jQuery.ajax({- url: url,- type: "GET",- dataType: "script",- async: false,- global: false,- "throws": true- });- }-});-jQuery.fn.extend({- wrapAll: function( html ) {- if ( jQuery.isFunction( html ) ) {- return this.each(function(i) {- jQuery(this).wrapAll( html.call(this, i) );- });- }-- if ( this[0] ) {- // The elements to wrap the target around- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);-- if ( this[0].parentNode ) {- wrap.insertBefore( this[0] );- }-- wrap.map(function() {- var elem = this;-- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {- elem = elem.firstChild;- }-- return elem;- }).append( this );- }-- return this;- },-- wrapInner: function( html ) {- if ( jQuery.isFunction( html ) ) {- return this.each(function(i) {- jQuery(this).wrapInner( html.call(this, i) );- });- }-- return this.each(function() {- var self = jQuery( this ),- contents = self.contents();-- if ( contents.length ) {- contents.wrapAll( html );-- } else {- self.append( html );- }- });- },-- wrap: function( html ) {- var isFunction = jQuery.isFunction( html );-- return this.each(function(i) {- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );- });- },-- unwrap: function() {- return this.parent().each(function() {- if ( !jQuery.nodeName( this, "body" ) ) {- jQuery( this ).replaceWith( this.childNodes );- }- }).end();- }-});-var iframe, getStyles, curCSS,- ralpha = /alpha\([^)]*\)/i,- ropacity = /opacity\s*=\s*([^)]*)/,- rposition = /^(top|right|bottom|left)$/,- // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"- // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display- rdisplayswap = /^(none|table(?!-c[ea]).+)/,- rmargin = /^margin/,- rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),- rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),- rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),- elemdisplay = { BODY: "block" },-- cssShow = { position: "absolute", visibility: "hidden", display: "block" },- cssNormalTransform = {- letterSpacing: 0,- fontWeight: 400- },-- cssExpand = [ "Top", "Right", "Bottom", "Left" ],- cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];--// return a css property mapped to a potentially vendor prefixed property-function vendorPropName( style, name ) {-- // shortcut for names that are not vendor prefixed- if ( name in style ) {- return name;- }-- // check for vendor prefixed names- var capName = name.charAt(0).toUpperCase() + name.slice(1),- origName = name,- i = cssPrefixes.length;-- while ( i-- ) {- name = cssPrefixes[ i ] + capName;- if ( name in style ) {- return name;- }- }-- return origName;-}--function isHidden( elem, el ) {- // isHidden might be called from jQuery#filter function;- // in that case, element will be second argument- elem = el || elem;- return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );-}--function showHide( elements, show ) {- var display, elem, hidden,- values = [],- index = 0,- length = elements.length;-- for ( ; index < length; index++ ) {- elem = elements[ index ];- if ( !elem.style ) {- continue;- }-- values[ index ] = jQuery._data( elem, "olddisplay" );- display = elem.style.display;- if ( show ) {- // Reset the inline display of this element to learn if it is- // being hidden by cascaded rules or not- if ( !values[ index ] && display === "none" ) {- elem.style.display = "";- }-- // Set elements which have been overridden with display: none- // in a stylesheet to whatever the default browser style is- // for such an element- if ( elem.style.display === "" && isHidden( elem ) ) {- values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );- }- } else {-- if ( !values[ index ] ) {- hidden = isHidden( elem );-- if ( display && display !== "none" || !hidden ) {- jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );- }- }- }- }-- // Set the display of most of the elements in a second loop- // to avoid the constant reflow- for ( index = 0; index < length; index++ ) {- elem = elements[ index ];- if ( !elem.style ) {- continue;- }- if ( !show || elem.style.display === "none" || elem.style.display === "" ) {- elem.style.display = show ? values[ index ] || "" : "none";- }- }-- return elements;-}--jQuery.fn.extend({- css: function( name, value ) {- return jQuery.access( this, function( elem, name, value ) {- var len, styles,- map = {},- i = 0;-- if ( jQuery.isArray( name ) ) {- styles = getStyles( elem );- len = name.length;-- for ( ; i < len; i++ ) {- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );- }-- return map;- }-- return value !== undefined ?- jQuery.style( elem, name, value ) :- jQuery.css( elem, name );- }, name, value, arguments.length > 1 );- },- show: function() {- return showHide( this, true );- },- hide: function() {- return showHide( this );- },- toggle: function( state ) {- var bool = typeof state === "boolean";-- return this.each(function() {- if ( bool ? state : isHidden( this ) ) {- jQuery( this ).show();- } else {- jQuery( this ).hide();- }- });- }-});--jQuery.extend({- // Add in style property hooks for overriding the default- // behavior of getting and setting a style property- cssHooks: {- opacity: {- get: function( elem, computed ) {- if ( computed ) {- // We should always get a number back from opacity- var ret = curCSS( elem, "opacity" );- return ret === "" ? "1" : ret;- }- }- }- },-- // Don't automatically add "px" to these possibly-unitless properties- cssNumber: {- "columnCount": true,- "fillOpacity": true,- "fontWeight": true,- "lineHeight": true,- "opacity": true,- "orphans": true,- "widows": true,- "zIndex": true,- "zoom": true- },-- // Add in properties whose names you wish to fix before- // setting or getting the value- cssProps: {- // normalize float css property- "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"- },-- // Get and set the style property on a DOM Node- style: function( elem, name, value, extra ) {- // Don't set styles on text and comment nodes- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {- return;- }-- // Make sure that we're working with the right name- var ret, type, hooks,- origName = jQuery.camelCase( name ),- style = elem.style;-- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );-- // gets hook for the prefixed version- // followed by the unprefixed version- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];-- // Check if we're setting a value- if ( value !== undefined ) {- type = typeof value;-- // convert relative number strings (+= or -=) to relative numbers. #7345- if ( type === "string" && (ret = rrelNum.exec( value )) ) {- value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );- // Fixes bug #9237- type = "number";- }-- // Make sure that NaN and null values aren't set. See: #7116- if ( value == null || type === "number" && isNaN( value ) ) {- return;- }-- // If a number was passed in, add 'px' to the (except for certain CSS properties)- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {- value += "px";- }-- // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,- // but it would mean to define eight (for every problematic property) identical functions- if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {- style[ name ] = "inherit";- }-- // If a hook was provided, use that value, otherwise just set the specified value- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {-- // Wrapped to prevent IE from throwing errors when 'invalid' values are provided- // Fixes bug #5509- try {- style[ name ] = value;- } catch(e) {}- }-- } else {- // If a hook was provided get the non-computed value from there- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {- return ret;- }-- // Otherwise just get the value from the style object- return style[ name ];- }- },-- css: function( elem, name, extra, styles ) {- var num, val, hooks,- origName = jQuery.camelCase( name );-- // Make sure that we're working with the right name- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );-- // gets hook for the prefixed version- // followed by the unprefixed version- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];-- // If a hook was provided get the computed value from there- if ( hooks && "get" in hooks ) {- val = hooks.get( elem, true, extra );- }-- // Otherwise, if a way to get the computed value exists, use that- if ( val === undefined ) {- val = curCSS( elem, name, styles );- }-- //convert "normal" to computed value- if ( val === "normal" && name in cssNormalTransform ) {- val = cssNormalTransform[ name ];- }-- // Return, converting to number if forced or a qualifier was provided and val looks numeric- if ( extra === "" || extra ) {- num = parseFloat( val );- return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;- }- return val;- }-});--// NOTE: we've included the "window" in window.getComputedStyle-// because jsdom on node.js will break without it.-if ( window.getComputedStyle ) {- getStyles = function( elem ) {- return window.getComputedStyle( elem, null );- };-- curCSS = function( elem, name, _computed ) {- var width, minWidth, maxWidth,- computed = _computed || getStyles( elem ),-- // getPropertyValue is only needed for .css('filter') in IE9, see #12537- ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,- style = elem.style;-- if ( computed ) {-- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {- ret = jQuery.style( elem, name );- }-- // A tribute to the "awesome hack by Dean Edwards"- // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right- // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels- // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values- if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {-- // Remember the original values- width = style.width;- minWidth = style.minWidth;- maxWidth = style.maxWidth;-- // Put in the new values to get a computed value out- style.minWidth = style.maxWidth = style.width = ret;- ret = computed.width;-- // Revert the changed values- style.width = width;- style.minWidth = minWidth;- style.maxWidth = maxWidth;- }- }-- return ret;- };-} else if ( document.documentElement.currentStyle ) {- getStyles = function( elem ) {- return elem.currentStyle;- };-- curCSS = function( elem, name, _computed ) {- var left, rs, rsLeft,- computed = _computed || getStyles( elem ),- ret = computed ? computed[ name ] : undefined,- style = elem.style;-- // Avoid setting ret to empty string here- // so we don't default to auto- if ( ret == null && style && style[ name ] ) {- ret = style[ name ];- }-- // From the awesome hack by Dean Edwards- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291-- // If we're not dealing with a regular pixel number- // but a number that has a weird ending, we need to convert it to pixels- // but not position css attributes, as those are proportional to the parent element instead- // and we can't measure the parent instead because it might trigger a "stacking dolls" problem- if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {-- // Remember the original values- left = style.left;- rs = elem.runtimeStyle;- rsLeft = rs && rs.left;-- // Put in the new values to get a computed value out- if ( rsLeft ) {- rs.left = elem.currentStyle.left;- }- style.left = name === "fontSize" ? "1em" : ret;- ret = style.pixelLeft + "px";-- // Revert the changed values- style.left = left;- if ( rsLeft ) {- rs.left = rsLeft;- }- }-- return ret === "" ? "auto" : ret;- };-}--function setPositiveNumber( elem, value, subtract ) {- var matches = rnumsplit.exec( value );- return matches ?- // Guard against undefined "subtract", e.g., when used as in cssHooks- Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :- value;-}--function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {- var i = extra === ( isBorderBox ? "border" : "content" ) ?- // If we already have the right measurement, avoid augmentation- 4 :- // Otherwise initialize for horizontal or vertical properties- name === "width" ? 1 : 0,-- val = 0;-- for ( ; i < 4; i += 2 ) {- // both box models exclude margin, so add it if we want it- if ( extra === "margin" ) {- val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );- }-- if ( isBorderBox ) {- // border-box includes padding, so remove it if we want content- if ( extra === "content" ) {- val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );- }-- // at this point, extra isn't border nor margin, so remove border- if ( extra !== "margin" ) {- val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );- }- } else {- // at this point, extra isn't content, so add padding- val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );-- // at this point, extra isn't content nor padding, so add border- if ( extra !== "padding" ) {- val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );- }- }- }-- return val;-}--function getWidthOrHeight( elem, name, extra ) {-- // Start with offset property, which is equivalent to the border-box value- var valueIsBorderBox = true,- val = name === "width" ? elem.offsetWidth : elem.offsetHeight,- styles = getStyles( elem ),- isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";-- // some non-html elements return undefined for offsetWidth, so check for null/undefined- // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285- // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668- if ( val <= 0 || val == null ) {- // Fall back to computed then uncomputed css if necessary- val = curCSS( elem, name, styles );- if ( val < 0 || val == null ) {- val = elem.style[ name ];- }-- // Computed unit is not pixels. Stop here and return.- if ( rnumnonpx.test(val) ) {- return val;- }-- // we need the check for style in case a browser which returns unreliable values- // for getComputedStyle silently falls back to the reliable elem.style- valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );-- // Normalize "", auto, and prepare for extra- val = parseFloat( val ) || 0;- }-- // use the active box-sizing model to add/subtract irrelevant styles- return ( val +- augmentWidthOrHeight(- elem,- name,- extra || ( isBorderBox ? "border" : "content" ),- valueIsBorderBox,- styles- )- ) + "px";-}--// Try to determine the default display value of an element-function css_defaultDisplay( nodeName ) {- var doc = document,- display = elemdisplay[ nodeName ];-- if ( !display ) {- display = actualDisplay( nodeName, doc );-- // If the simple way fails, read from inside an iframe- if ( display === "none" || !display ) {- // Use the already-created iframe if possible- iframe = ( iframe ||- jQuery("<iframe frameborder='0' width='0' height='0'/>")- .css( "cssText", "display:block !important" )- ).appendTo( doc.documentElement );-- // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse- doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;- doc.write("<!doctype html><html><body>");- doc.close();-- display = actualDisplay( nodeName, doc );- iframe.detach();- }-- // Store the correct default display- elemdisplay[ nodeName ] = display;- }-- return display;-}--// Called ONLY from within css_defaultDisplay-function actualDisplay( name, doc ) {- var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),- display = jQuery.css( elem[0], "display" );- elem.remove();- return display;-}--jQuery.each([ "height", "width" ], function( i, name ) {- jQuery.cssHooks[ name ] = {- get: function( elem, computed, extra ) {- if ( computed ) {- // certain elements can have dimension info if we invisibly show them- // however, it must have a current display style that would benefit from this- return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?- jQuery.swap( elem, cssShow, function() {- return getWidthOrHeight( elem, name, extra );- }) :- getWidthOrHeight( elem, name, extra );- }- },-- set: function( elem, value, extra ) {- var styles = extra && getStyles( elem );- return setPositiveNumber( elem, value, extra ?- augmentWidthOrHeight(- elem,- name,- extra,- jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",- styles- ) : 0- );- }- };-});--if ( !jQuery.support.opacity ) {- jQuery.cssHooks.opacity = {- get: function( elem, computed ) {- // IE uses filters for opacity- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?- ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :- computed ? "1" : "";- },-- set: function( elem, value ) {- var style = elem.style,- currentStyle = elem.currentStyle,- opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",- filter = currentStyle && currentStyle.filter || style.filter || "";-- // IE has trouble with opacity if it does not have layout- // Force it by setting the zoom level- style.zoom = 1;-- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652- // if value === "", then remove inline opacity #12685- if ( ( value >= 1 || value === "" ) &&- jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&- style.removeAttribute ) {-- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText- // if "filter:" is present at all, clearType is disabled, we want to avoid this- // style.removeAttribute is IE Only, but so apparently is this code path...- style.removeAttribute( "filter" );-- // if there is no filter style applied in a css rule or unset inline opacity, we are done- if ( value === "" || currentStyle && !currentStyle.filter ) {- return;- }- }-- // otherwise, set new filter values- style.filter = ralpha.test( filter ) ?- filter.replace( ralpha, opacity ) :- filter + " " + opacity;- }- };-}--// These hooks cannot be added until DOM ready because the support test-// for it is not run until after DOM ready-jQuery(function() {- if ( !jQuery.support.reliableMarginRight ) {- jQuery.cssHooks.marginRight = {- get: function( elem, computed ) {- if ( computed ) {- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right- // Work around by temporarily setting element display to inline-block- return jQuery.swap( elem, { "display": "inline-block" },- curCSS, [ elem, "marginRight" ] );- }- }- };- }-- // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084- // getComputedStyle returns percent when specified for top/left/bottom/right- // rather than make the css module depend on the offset module, we just check for it here- if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {- jQuery.each( [ "top", "left" ], function( i, prop ) {- jQuery.cssHooks[ prop ] = {- get: function( elem, computed ) {- if ( computed ) {- computed = curCSS( elem, prop );- // if curCSS returns percentage, fallback to offset- return rnumnonpx.test( computed ) ?- jQuery( elem ).position()[ prop ] + "px" :- computed;- }- }- };- });- }--});--if ( jQuery.expr && jQuery.expr.filters ) {- jQuery.expr.filters.hidden = function( elem ) {- // Support: Opera <= 12.12- // Opera reports offsetWidths and offsetHeights less than zero on some elements- return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||- (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");- };-- jQuery.expr.filters.visible = function( elem ) {- return !jQuery.expr.filters.hidden( elem );- };-}--// These hooks are used by animate to expand properties-jQuery.each({- margin: "",- padding: "",- border: "Width"-}, function( prefix, suffix ) {- jQuery.cssHooks[ prefix + suffix ] = {- expand: function( value ) {- var i = 0,- expanded = {},-- // assumes a single number if not a string- parts = typeof value === "string" ? value.split(" ") : [ value ];-- for ( ; i < 4; i++ ) {- expanded[ prefix + cssExpand[ i ] + suffix ] =- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];- }-- return expanded;- }- };-- if ( !rmargin.test( prefix ) ) {- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;- }-});-var r20 = /%20/g,- rbracket = /\[\]$/,- rCRLF = /\r?\n/g,- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,- rsubmittable = /^(?:input|select|textarea|keygen)/i;--jQuery.fn.extend({- serialize: function() {- return jQuery.param( this.serializeArray() );- },- serializeArray: function() {- return this.map(function(){- // Can add propHook for "elements" to filter or add form elements- var elements = jQuery.prop( this, "elements" );- return elements ? jQuery.makeArray( elements ) : this;- })- .filter(function(){- var type = this.type;- // Use .is(":disabled") so that fieldset[disabled] works- return this.name && !jQuery( this ).is( ":disabled" ) &&- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&- ( this.checked || !manipulation_rcheckableType.test( type ) );- })- .map(function( i, elem ){- var val = jQuery( this ).val();-- return val == null ?- null :- jQuery.isArray( val ) ?- jQuery.map( val, function( val ){- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };- }) :- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };- }).get();- }-});--//Serialize an array of form elements or a set of-//key/values into a query string-jQuery.param = function( a, traditional ) {- var prefix,- s = [],- add = function( key, value ) {- // If value is a function, invoke it and return its value- value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );- };-- // Set traditional to true for jQuery <= 1.3.2 behavior.- if ( traditional === undefined ) {- traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;- }-- // If an array was passed in, assume that it is an array of form elements.- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {- // Serialize the form elements- jQuery.each( a, function() {- add( this.name, this.value );- });-- } else {- // If traditional, encode the "old" way (the way 1.3.2 or older- // did it), otherwise encode params recursively.- for ( prefix in a ) {- buildParams( prefix, a[ prefix ], traditional, add );- }- }-- // Return the resulting serialization- return s.join( "&" ).replace( r20, "+" );-};--function buildParams( prefix, obj, traditional, add ) {- var name;-- if ( jQuery.isArray( obj ) ) {- // Serialize array item.- jQuery.each( obj, function( i, v ) {- if ( traditional || rbracket.test( prefix ) ) {- // Treat each array item as a scalar.- add( prefix, v );-- } else {- // Item is non-scalar (array or object), encode its numeric index.- buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );- }- });-- } else if ( !traditional && jQuery.type( obj ) === "object" ) {- // Serialize object item.- for ( name in obj ) {- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );- }-- } else {- // Serialize scalar item.- add( prefix, obj );- }-}-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +- "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {-- // Handle event binding- jQuery.fn[ name ] = function( data, fn ) {- return arguments.length > 0 ?- this.on( name, null, data, fn ) :- this.trigger( name );- };-});--jQuery.fn.extend({- hover: function( fnOver, fnOut ) {- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );- },-- bind: function( types, data, fn ) {- return this.on( types, null, data, fn );- },- unbind: function( types, fn ) {- return this.off( types, null, fn );- },-- delegate: function( selector, types, data, fn ) {- return this.on( types, selector, data, fn );- },- undelegate: function( selector, types, fn ) {- // ( namespace ) or ( selector, types [, fn] )- return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );- }-});-var- // Document location- ajaxLocParts,- ajaxLocation,- ajax_nonce = jQuery.now(),-- ajax_rquery = /\?/,- rhash = /#.*$/,- rts = /([?&])_=[^&]*/,- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL- // #7653, #8125, #8152: local protocol detection- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,- rnoContent = /^(?:GET|HEAD)$/,- rprotocol = /^\/\//,- rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,-- // Keep a copy of the old load method- _load = jQuery.fn.load,-- /* Prefilters- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)- * 2) These are called:- * - BEFORE asking for a transport- * - AFTER param serialization (s.data is a string if s.processData is true)- * 3) key is the dataType- * 4) the catchall symbol "*" can be used- * 5) execution will start with transport dataType and THEN continue down to "*" if needed- */- prefilters = {},-- /* Transports bindings- * 1) key is the dataType- * 2) the catchall symbol "*" can be used- * 3) selection will start with transport dataType and THEN go to "*" if needed- */- transports = {},-- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression- allTypes = "*/".concat("*");--// #8138, IE may throw an exception when accessing-// a field from window.location if document.domain has been set-try {- ajaxLocation = location.href;-} catch( e ) {- // Use the href attribute of an A element- // since IE will modify it given document.location- ajaxLocation = document.createElement( "a" );- ajaxLocation.href = "";- ajaxLocation = ajaxLocation.href;-}--// Segment location into parts-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];--// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport-function addToPrefiltersOrTransports( structure ) {-- // dataTypeExpression is optional and defaults to "*"- return function( dataTypeExpression, func ) {-- if ( typeof dataTypeExpression !== "string" ) {- func = dataTypeExpression;- dataTypeExpression = "*";- }-- var dataType,- i = 0,- dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];-- if ( jQuery.isFunction( func ) ) {- // For each dataType in the dataTypeExpression- while ( (dataType = dataTypes[i++]) ) {- // Prepend if requested- if ( dataType[0] === "+" ) {- dataType = dataType.slice( 1 ) || "*";- (structure[ dataType ] = structure[ dataType ] || []).unshift( func );-- // Otherwise append- } else {- (structure[ dataType ] = structure[ dataType ] || []).push( func );- }- }- }- };-}--// Base inspection function for prefilters and transports-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {-- var inspected = {},- seekingTransport = ( structure === transports );-- function inspect( dataType ) {- var selected;- inspected[ dataType ] = true;- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );- if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {- options.dataTypes.unshift( dataTypeOrTransport );- inspect( dataTypeOrTransport );- return false;- } else if ( seekingTransport ) {- return !( selected = dataTypeOrTransport );- }- });- return selected;- }-- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );-}--// A special extend for ajax options-// that takes "flat" options (not to be deep extended)-// Fixes #9887-function ajaxExtend( target, src ) {- var deep, key,- flatOptions = jQuery.ajaxSettings.flatOptions || {};-- for ( key in src ) {- if ( src[ key ] !== undefined ) {- ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];- }- }- if ( deep ) {- jQuery.extend( true, target, deep );- }-- return target;-}--jQuery.fn.load = function( url, params, callback ) {- if ( typeof url !== "string" && _load ) {- return _load.apply( this, arguments );- }-- var selector, response, type,- self = this,- off = url.indexOf(" ");-- if ( off >= 0 ) {- selector = url.slice( off, url.length );- url = url.slice( 0, off );- }-- // If it's a function- if ( jQuery.isFunction( params ) ) {-- // We assume that it's the callback- callback = params;- params = undefined;-- // Otherwise, build a param string- } else if ( params && typeof params === "object" ) {- type = "POST";- }-- // If we have elements to modify, make the request- if ( self.length > 0 ) {- jQuery.ajax({- url: url,-- // if "type" variable is undefined, then "GET" method will be used- type: type,- dataType: "html",- data: params- }).done(function( responseText ) {-- // Save response for use in complete callback- response = arguments;-- self.html( selector ?-- // If a selector was specified, locate the right elements in a dummy div- // Exclude scripts to avoid IE 'Permission Denied' errors- jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :-- // Otherwise use the full result- responseText );-- }).complete( callback && function( jqXHR, status ) {- self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );- });- }-- return this;-};--// Attach a bunch of functions for handling common AJAX events-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){- jQuery.fn[ type ] = function( fn ){- return this.on( type, fn );- };-});--jQuery.extend({-- // Counter for holding the number of active queries- active: 0,-- // Last-Modified header cache for next request- lastModified: {},- etag: {},-- ajaxSettings: {- url: ajaxLocation,- type: "GET",- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),- global: true,- processData: true,- async: true,- contentType: "application/x-www-form-urlencoded; charset=UTF-8",- /*- timeout: 0,- data: null,- dataType: null,- username: null,- password: null,- cache: null,- throws: false,- traditional: false,- headers: {},- */-- accepts: {- "*": allTypes,- text: "text/plain",- html: "text/html",- xml: "application/xml, text/xml",- json: "application/json, text/javascript"- },-- contents: {- xml: /xml/,- html: /html/,- json: /json/- },-- responseFields: {- xml: "responseXML",- text: "responseText",- json: "responseJSON"- },-- // Data converters- // Keys separate source (or catchall "*") and destination types with a single space- converters: {-- // Convert anything to text- "* text": String,-- // Text to html (true = no transformation)- "text html": true,-- // Evaluate text as a json expression- "text json": jQuery.parseJSON,-- // Parse text as xml- "text xml": jQuery.parseXML- },-- // For options that shouldn't be deep extended:- // you can add your own custom options here if- // and when you create one that shouldn't be- // deep extended (see ajaxExtend)- flatOptions: {- url: true,- context: true- }- },-- // Creates a full fledged settings object into target- // with both ajaxSettings and settings fields.- // If target is omitted, writes into ajaxSettings.- ajaxSetup: function( target, settings ) {- return settings ?-- // Building a settings object- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :-- // Extending ajaxSettings- ajaxExtend( jQuery.ajaxSettings, target );- },-- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),- ajaxTransport: addToPrefiltersOrTransports( transports ),-- // Main method- ajax: function( url, options ) {-- // If url is an object, simulate pre-1.5 signature- if ( typeof url === "object" ) {- options = url;- url = undefined;- }-- // Force options to be an object- options = options || {};-- var // Cross-domain detection vars- parts,- // Loop variable- i,- // URL without anti-cache param- cacheURL,- // Response headers as string- responseHeadersString,- // timeout handle- timeoutTimer,-- // To know if global events are to be dispatched- fireGlobals,-- transport,- // Response headers- responseHeaders,- // Create the final options object- s = jQuery.ajaxSetup( {}, options ),- // Callbacks context- callbackContext = s.context || s,- // Context for global events is callbackContext if it is a DOM node or jQuery collection- globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?- jQuery( callbackContext ) :- jQuery.event,- // Deferreds- deferred = jQuery.Deferred(),- completeDeferred = jQuery.Callbacks("once memory"),- // Status-dependent callbacks- statusCode = s.statusCode || {},- // Headers (they are sent all at once)- requestHeaders = {},- requestHeadersNames = {},- // The jqXHR state- state = 0,- // Default abort message- strAbort = "canceled",- // Fake xhr- jqXHR = {- readyState: 0,-- // Builds headers hashtable if needed- getResponseHeader: function( key ) {- var match;- if ( state === 2 ) {- if ( !responseHeaders ) {- responseHeaders = {};- while ( (match = rheaders.exec( responseHeadersString )) ) {- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];- }- }- match = responseHeaders[ key.toLowerCase() ];- }- return match == null ? null : match;- },-- // Raw string- getAllResponseHeaders: function() {- return state === 2 ? responseHeadersString : null;- },-- // Caches the header- setRequestHeader: function( name, value ) {- var lname = name.toLowerCase();- if ( !state ) {- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;- requestHeaders[ name ] = value;- }- return this;- },-- // Overrides response content-type header- overrideMimeType: function( type ) {- if ( !state ) {- s.mimeType = type;- }- return this;- },-- // Status-dependent callbacks- statusCode: function( map ) {- var code;- if ( map ) {- if ( state < 2 ) {- for ( code in map ) {- // Lazy-add the new callback in a way that preserves old ones- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];- }- } else {- // Execute the appropriate callbacks- jqXHR.always( map[ jqXHR.status ] );- }- }- return this;- },-- // Cancel the request- abort: function( statusText ) {- var finalText = statusText || strAbort;- if ( transport ) {- transport.abort( finalText );- }- done( 0, finalText );- return this;- }- };-- // Attach deferreds- deferred.promise( jqXHR ).complete = completeDeferred.add;- jqXHR.success = jqXHR.done;- jqXHR.error = jqXHR.fail;-- // Remove hash character (#7531: and string promotion)- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)- // Handle falsy url in the settings object (#10093: consistency with old signature)- // We also use the url parameter if available- s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );-- // Alias method option to type as per ticket #12004- s.type = options.method || options.type || s.method || s.type;-- // Extract dataTypes list- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];-- // A cross-domain request is in order when we have a protocol:host:port mismatch- if ( s.crossDomain == null ) {- parts = rurl.exec( s.url.toLowerCase() );- s.crossDomain = !!( parts &&- ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )- );- }-- // Convert data if not already a string- if ( s.data && s.processData && typeof s.data !== "string" ) {- s.data = jQuery.param( s.data, s.traditional );- }-- // Apply prefilters- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );-- // If request was aborted inside a prefilter, stop there- if ( state === 2 ) {- return jqXHR;- }-- // We can fire global events as of now if asked to- fireGlobals = s.global;-- // Watch for a new set of requests- if ( fireGlobals && jQuery.active++ === 0 ) {- jQuery.event.trigger("ajaxStart");- }-- // Uppercase the type- s.type = s.type.toUpperCase();-- // Determine if request has content- s.hasContent = !rnoContent.test( s.type );-- // Save the URL in case we're toying with the If-Modified-Since- // and/or If-None-Match header later on- cacheURL = s.url;-- // More options handling for requests with no content- if ( !s.hasContent ) {-- // If data is available, append data to url- if ( s.data ) {- cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );- // #9682: remove data so that it's not used in an eventual retry- delete s.data;- }-- // Add anti-cache in url if needed- if ( s.cache === false ) {- s.url = rts.test( cacheURL ) ?-- // If there is already a '_' parameter, set its value- cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :-- // Otherwise add one to the end- cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;- }- }-- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.- if ( s.ifModified ) {- if ( jQuery.lastModified[ cacheURL ] ) {- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );- }- if ( jQuery.etag[ cacheURL ] ) {- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );- }- }-- // Set the correct header, if data is being sent- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {- jqXHR.setRequestHeader( "Content-Type", s.contentType );- }-- // Set the Accepts header for the server, depending on the dataType- jqXHR.setRequestHeader(- "Accept",- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :- s.accepts[ "*" ]- );-- // Check for headers option- for ( i in s.headers ) {- jqXHR.setRequestHeader( i, s.headers[ i ] );- }-- // Allow custom headers/mimetypes and early abort- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {- // Abort if not done already and return- return jqXHR.abort();- }-- // aborting is no longer a cancellation- strAbort = "abort";-- // Install callbacks on deferreds- for ( i in { success: 1, error: 1, complete: 1 } ) {- jqXHR[ i ]( s[ i ] );- }-- // Get transport- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );-- // If no transport, we auto-abort- if ( !transport ) {- done( -1, "No Transport" );- } else {- jqXHR.readyState = 1;-- // Send global event- if ( fireGlobals ) {- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );- }- // Timeout- if ( s.async && s.timeout > 0 ) {- timeoutTimer = setTimeout(function() {- jqXHR.abort("timeout");- }, s.timeout );- }-- try {- state = 1;- transport.send( requestHeaders, done );- } catch ( e ) {- // Propagate exception as error if not done- if ( state < 2 ) {- done( -1, e );- // Simply rethrow otherwise- } else {- throw e;- }- }- }-- // Callback for when everything is done- function done( status, nativeStatusText, responses, headers ) {- var isSuccess, success, error, response, modified,- statusText = nativeStatusText;-- // Called once- if ( state === 2 ) {- return;- }-- // State is "done" now- state = 2;-- // Clear timeout if it exists- if ( timeoutTimer ) {- clearTimeout( timeoutTimer );- }-- // Dereference transport for early garbage collection- // (no matter how long the jqXHR object will be used)- transport = undefined;-- // Cache response headers- responseHeadersString = headers || "";-- // Set readyState- jqXHR.readyState = status > 0 ? 4 : 0;-- // Determine if successful- isSuccess = status >= 200 && status < 300 || status === 304;-- // Get response data- if ( responses ) {- response = ajaxHandleResponses( s, jqXHR, responses );- }-- // Convert no matter what (that way responseXXX fields are always set)- response = ajaxConvert( s, response, jqXHR, isSuccess );-- // If successful, handle type chaining- if ( isSuccess ) {-- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.- if ( s.ifModified ) {- modified = jqXHR.getResponseHeader("Last-Modified");- if ( modified ) {- jQuery.lastModified[ cacheURL ] = modified;- }- modified = jqXHR.getResponseHeader("etag");- if ( modified ) {- jQuery.etag[ cacheURL ] = modified;- }- }-- // if no content- if ( status === 204 || s.type === "HEAD" ) {- statusText = "nocontent";-- // if not modified- } else if ( status === 304 ) {- statusText = "notmodified";-- // If we have data, let's convert it- } else {- statusText = response.state;- success = response.data;- error = response.error;- isSuccess = !error;- }- } else {- // We extract error from statusText- // then normalize statusText and status for non-aborts- error = statusText;- if ( status || !statusText ) {- statusText = "error";- if ( status < 0 ) {- status = 0;- }- }- }-- // Set data for the fake xhr object- jqXHR.status = status;- jqXHR.statusText = ( nativeStatusText || statusText ) + "";-- // Success/Error- if ( isSuccess ) {- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );- } else {- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );- }-- // Status-dependent callbacks- jqXHR.statusCode( statusCode );- statusCode = undefined;-- if ( fireGlobals ) {- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",- [ jqXHR, s, isSuccess ? success : error ] );- }-- // Complete- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );-- if ( fireGlobals ) {- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );- // Handle the global AJAX counter- if ( !( --jQuery.active ) ) {- jQuery.event.trigger("ajaxStop");- }- }- }-- return jqXHR;- },-- getJSON: function( url, data, callback ) {- return jQuery.get( url, data, callback, "json" );- },-- getScript: function( url, callback ) {- return jQuery.get( url, undefined, callback, "script" );- }-});--jQuery.each( [ "get", "post" ], function( i, method ) {- jQuery[ method ] = function( url, data, callback, type ) {- // shift arguments if data argument was omitted- if ( jQuery.isFunction( data ) ) {- type = type || callback;- callback = data;- data = undefined;- }-- return jQuery.ajax({- url: url,- type: method,- dataType: type,- data: data,- success: callback- });- };-});--/* Handles responses to an ajax request:- * - finds the right dataType (mediates between content-type and expected dataType)- * - returns the corresponding response- */-function ajaxHandleResponses( s, jqXHR, responses ) {- var firstDataType, ct, finalDataType, type,- contents = s.contents,- dataTypes = s.dataTypes;-- // Remove auto dataType and get content-type in the process- while( dataTypes[ 0 ] === "*" ) {- dataTypes.shift();- if ( ct === undefined ) {- ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");- }- }-- // Check if we're dealing with a known content-type- if ( ct ) {- for ( type in contents ) {- if ( contents[ type ] && contents[ type ].test( ct ) ) {- dataTypes.unshift( type );- break;- }- }- }-- // Check to see if we have a response for the expected dataType- if ( dataTypes[ 0 ] in responses ) {- finalDataType = dataTypes[ 0 ];- } else {- // Try convertible dataTypes- for ( type in responses ) {- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {- finalDataType = type;- break;- }- if ( !firstDataType ) {- firstDataType = type;- }- }- // Or just use first one- finalDataType = finalDataType || firstDataType;- }-- // If we found a dataType- // We add the dataType to the list if needed- // and return the corresponding response- if ( finalDataType ) {- if ( finalDataType !== dataTypes[ 0 ] ) {- dataTypes.unshift( finalDataType );- }- return responses[ finalDataType ];- }-}--/* Chain conversions given the request and the original response- * Also sets the responseXXX fields on the jqXHR instance- */-function ajaxConvert( s, response, jqXHR, isSuccess ) {- var conv2, current, conv, tmp, prev,- converters = {},- // Work with a copy of dataTypes in case we need to modify it for conversion- dataTypes = s.dataTypes.slice();-- // Create converters map with lowercased keys- if ( dataTypes[ 1 ] ) {- for ( conv in s.converters ) {- converters[ conv.toLowerCase() ] = s.converters[ conv ];- }- }-- current = dataTypes.shift();-- // Convert to each sequential dataType- while ( current ) {-- if ( s.responseFields[ current ] ) {- jqXHR[ s.responseFields[ current ] ] = response;- }-- // Apply the dataFilter if provided- if ( !prev && isSuccess && s.dataFilter ) {- response = s.dataFilter( response, s.dataType );- }-- prev = current;- current = dataTypes.shift();-- if ( current ) {-- // There's only work to do if current dataType is non-auto- if ( current === "*" ) {-- current = prev;-- // Convert response if prev dataType is non-auto and differs from current- } else if ( prev !== "*" && prev !== current ) {-- // Seek a direct converter- conv = converters[ prev + " " + current ] || converters[ "* " + current ];-- // If none found, seek a pair- if ( !conv ) {- for ( conv2 in converters ) {-- // If conv2 outputs current- tmp = conv2.split( " " );- if ( tmp[ 1 ] === current ) {-- // If prev can be converted to accepted input- conv = converters[ prev + " " + tmp[ 0 ] ] ||- converters[ "* " + tmp[ 0 ] ];- if ( conv ) {- // Condense equivalence converters- if ( conv === true ) {- conv = converters[ conv2 ];-- // Otherwise, insert the intermediate dataType- } else if ( converters[ conv2 ] !== true ) {- current = tmp[ 0 ];- dataTypes.unshift( tmp[ 1 ] );- }- break;- }- }- }- }-- // Apply converter (if not an equivalence)- if ( conv !== true ) {-- // Unless errors are allowed to bubble, catch and return them- if ( conv && s[ "throws" ] ) {- response = conv( response );- } else {- try {- response = conv( response );- } catch ( e ) {- return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };- }- }- }- }- }- }-- return { state: "success", data: response };-}-// Install script dataType-jQuery.ajaxSetup({- accepts: {- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"- },- contents: {- script: /(?:java|ecma)script/- },- converters: {- "text script": function( text ) {- jQuery.globalEval( text );- return text;- }- }-});--// Handle cache's special case and global-jQuery.ajaxPrefilter( "script", function( s ) {- if ( s.cache === undefined ) {- s.cache = false;- }- if ( s.crossDomain ) {- s.type = "GET";- s.global = false;- }-});--// Bind script tag hack transport-jQuery.ajaxTransport( "script", function(s) {-- // This transport only deals with cross domain requests- if ( s.crossDomain ) {-- var script,- head = document.head || jQuery("head")[0] || document.documentElement;-- return {-- send: function( _, callback ) {-- script = document.createElement("script");-- script.async = true;-- if ( s.scriptCharset ) {- script.charset = s.scriptCharset;- }-- script.src = s.url;-- // Attach handlers for all browsers- script.onload = script.onreadystatechange = function( _, isAbort ) {-- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {-- // Handle memory leak in IE- script.onload = script.onreadystatechange = null;-- // Remove the script- if ( script.parentNode ) {- script.parentNode.removeChild( script );- }-- // Dereference the script- script = null;-- // Callback if not abort- if ( !isAbort ) {- callback( 200, "success" );- }- }- };-- // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending- // Use native DOM manipulation to avoid our domManip AJAX trickery- head.insertBefore( script, head.firstChild );- },-- abort: function() {- if ( script ) {- script.onload( undefined, true );- }- }- };- }-});-var oldCallbacks = [],- rjsonp = /(=)\?(?=&|$)|\?\?/;--// Default jsonp settings-jQuery.ajaxSetup({- jsonp: "callback",- jsonpCallback: function() {- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );- this[ callback ] = true;- return callback;- }-});--// Detect, normalize options and install callbacks for jsonp requests-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {-- var callbackName, overwritten, responseContainer,- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?- "url" :- typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"- );-- // Handle iff the expected data type is "jsonp" or we have a parameter to set- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {-- // Get callback name, remembering preexisting value associated with it- callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?- s.jsonpCallback() :- s.jsonpCallback;-- // Insert callback into url or form data- if ( jsonProp ) {- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );- } else if ( s.jsonp !== false ) {- s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;- }-- // Use data converter to retrieve json after script execution- s.converters["script json"] = function() {- if ( !responseContainer ) {- jQuery.error( callbackName + " was not called" );- }- return responseContainer[ 0 ];- };-- // force json dataType- s.dataTypes[ 0 ] = "json";-- // Install callback- overwritten = window[ callbackName ];- window[ callbackName ] = function() {- responseContainer = arguments;- };-- // Clean-up function (fires after converters)- jqXHR.always(function() {- // Restore preexisting value- window[ callbackName ] = overwritten;-- // Save back as free- if ( s[ callbackName ] ) {- // make sure that re-using the options doesn't screw things around- s.jsonpCallback = originalSettings.jsonpCallback;-- // save the callback name for future use- oldCallbacks.push( callbackName );- }-- // Call if it was a function and we have a response- if ( responseContainer && jQuery.isFunction( overwritten ) ) {- overwritten( responseContainer[ 0 ] );- }-- responseContainer = overwritten = undefined;- });-- // Delegate to script- return "script";- }-});-var xhrCallbacks, xhrSupported,- xhrId = 0,- // #5280: Internet Explorer will keep connections alive if we don't abort on unload- xhrOnUnloadAbort = window.ActiveXObject && function() {- // Abort all pending requests- var key;- for ( key in xhrCallbacks ) {- xhrCallbacks[ key ]( undefined, true );- }- };--// Functions to create xhrs-function createStandardXHR() {- try {- return new window.XMLHttpRequest();- } catch( e ) {}-}--function createActiveXHR() {- try {- return new window.ActiveXObject("Microsoft.XMLHTTP");- } catch( e ) {}-}--// Create the request object-// (This is still attached to ajaxSettings for backward compatibility)-jQuery.ajaxSettings.xhr = window.ActiveXObject ?- /* Microsoft failed to properly- * implement the XMLHttpRequest in IE7 (can't request local files),- * so we use the ActiveXObject when it is available- * Additionally XMLHttpRequest can be disabled in IE7/IE8 so- * we need a fallback.- */- function() {- return !this.isLocal && createStandardXHR() || createActiveXHR();- } :- // For all other browsers, use the standard XMLHttpRequest object- createStandardXHR;--// Determine support properties-xhrSupported = jQuery.ajaxSettings.xhr();-jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );-xhrSupported = jQuery.support.ajax = !!xhrSupported;--// Create transport if the browser can provide an xhr-if ( xhrSupported ) {-- jQuery.ajaxTransport(function( s ) {- // Cross domain only allowed if supported through XMLHttpRequest- if ( !s.crossDomain || jQuery.support.cors ) {-- var callback;-- return {- send: function( headers, complete ) {-- // Get a new xhr- var handle, i,- xhr = s.xhr();-- // Open the socket- // Passing null username, generates a login popup on Opera (#2865)- if ( s.username ) {- xhr.open( s.type, s.url, s.async, s.username, s.password );- } else {- xhr.open( s.type, s.url, s.async );- }-- // Apply custom fields if provided- if ( s.xhrFields ) {- for ( i in s.xhrFields ) {- xhr[ i ] = s.xhrFields[ i ];- }- }-- // Override mime type if needed- if ( s.mimeType && xhr.overrideMimeType ) {- xhr.overrideMimeType( s.mimeType );- }-- // X-Requested-With header- // For cross-domain requests, seeing as conditions for a preflight are- // akin to a jigsaw puzzle, we simply never set it to be sure.- // (it can always be set on a per-request basis or even using ajaxSetup)- // For same-domain requests, won't change header if already provided.- if ( !s.crossDomain && !headers["X-Requested-With"] ) {- headers["X-Requested-With"] = "XMLHttpRequest";- }-- // Need an extra try/catch for cross domain requests in Firefox 3- try {- for ( i in headers ) {- xhr.setRequestHeader( i, headers[ i ] );- }- } catch( err ) {}-- // Do send the request- // This may raise an exception which is actually- // handled in jQuery.ajax (so no try/catch here)- xhr.send( ( s.hasContent && s.data ) || null );-- // Listener- callback = function( _, isAbort ) {- var status, responseHeaders, statusText, responses;-- // Firefox throws exceptions when accessing properties- // of an xhr when a network error occurred- // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)- try {-- // Was never called and is aborted or complete- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {-- // Only called once- callback = undefined;-- // Do not keep as active anymore- if ( handle ) {- xhr.onreadystatechange = jQuery.noop;- if ( xhrOnUnloadAbort ) {- delete xhrCallbacks[ handle ];- }- }-- // If it's an abort- if ( isAbort ) {- // Abort it manually if needed- if ( xhr.readyState !== 4 ) {- xhr.abort();- }- } else {- responses = {};- status = xhr.status;- responseHeaders = xhr.getAllResponseHeaders();-- // When requesting binary data, IE6-9 will throw an exception- // on any attempt to access responseText (#11426)- if ( typeof xhr.responseText === "string" ) {- responses.text = xhr.responseText;- }-- // Firefox throws an exception when accessing- // statusText for faulty cross-domain requests- try {- statusText = xhr.statusText;- } catch( e ) {- // We normalize with Webkit giving an empty statusText- statusText = "";- }-- // Filter status for non standard behaviors-- // If the request is local and we have data: assume a success- // (success with no data won't get notified, that's the best we- // can do given current implementations)- if ( !status && s.isLocal && !s.crossDomain ) {- status = responses.text ? 200 : 404;- // IE - #1450: sometimes returns 1223 when it should be 204- } else if ( status === 1223 ) {- status = 204;- }- }- }- } catch( firefoxAccessException ) {- if ( !isAbort ) {- complete( -1, firefoxAccessException );- }- }-- // Call complete if needed- if ( responses ) {- complete( status, statusText, responses, responseHeaders );- }- };-- if ( !s.async ) {- // if we're in sync mode we fire the callback- callback();- } else if ( xhr.readyState === 4 ) {- // (IE6 & IE7) if it's in cache and has been- // retrieved directly we need to fire the callback- setTimeout( callback );- } else {- handle = ++xhrId;- if ( xhrOnUnloadAbort ) {- // Create the active xhrs callbacks list if needed- // and attach the unload handler- if ( !xhrCallbacks ) {- xhrCallbacks = {};- jQuery( window ).unload( xhrOnUnloadAbort );- }- // Add to list of active xhrs callbacks- xhrCallbacks[ handle ] = callback;- }- xhr.onreadystatechange = callback;- }- },-- abort: function() {- if ( callback ) {- callback( undefined, true );- }- }- };- }- });-}-var fxNow, timerId,- rfxtypes = /^(?:toggle|show|hide)$/,- rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),- rrun = /queueHooks$/,- animationPrefilters = [ defaultPrefilter ],- tweeners = {- "*": [function( prop, value ) {- var tween = this.createTween( prop, value ),- target = tween.cur(),- parts = rfxnum.exec( value ),- unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),-- // Starting value computation is required for potential unit mismatches- start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&- rfxnum.exec( jQuery.css( tween.elem, prop ) ),- scale = 1,- maxIterations = 20;-- if ( start && start[ 3 ] !== unit ) {- // Trust units reported by jQuery.css- unit = unit || start[ 3 ];-- // Make sure we update the tween properties later on- parts = parts || [];-- // Iteratively approximate from a nonzero starting point- start = +target || 1;-- do {- // If previous iteration zeroed out, double until we get *something*- // Use a string for doubling factor so we don't accidentally see scale as unchanged below- scale = scale || ".5";-- // Adjust and apply- start = start / scale;- jQuery.style( tween.elem, prop, start + unit );-- // Update scale, tolerating zero or NaN from tween.cur()- // And breaking the loop if scale is unchanged or perfect, or if we've just had enough- } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );- }-- // Update tween properties- if ( parts ) {- start = tween.start = +start || +target || 0;- tween.unit = unit;- // If a +=/-= token was provided, we're doing a relative animation- tween.end = parts[ 1 ] ?- start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :- +parts[ 2 ];- }-- return tween;- }]- };--// Animations created synchronously will run synchronously-function createFxNow() {- setTimeout(function() {- fxNow = undefined;- });- return ( fxNow = jQuery.now() );-}--function createTween( value, prop, animation ) {- var tween,- collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),- index = 0,- length = collection.length;- for ( ; index < length; index++ ) {- if ( (tween = collection[ index ].call( animation, prop, value )) ) {-- // we're done with this property- return tween;- }- }-}--function Animation( elem, properties, options ) {- var result,- stopped,- index = 0,- length = animationPrefilters.length,- deferred = jQuery.Deferred().always( function() {- // don't match elem in the :animated selector- delete tick.elem;- }),- tick = function() {- if ( stopped ) {- return false;- }- var currentTime = fxNow || createFxNow(),- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),- // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)- temp = remaining / animation.duration || 0,- percent = 1 - temp,- index = 0,- length = animation.tweens.length;-- for ( ; index < length ; index++ ) {- animation.tweens[ index ].run( percent );- }-- deferred.notifyWith( elem, [ animation, percent, remaining ]);-- if ( percent < 1 && length ) {- return remaining;- } else {- deferred.resolveWith( elem, [ animation ] );- return false;- }- },- animation = deferred.promise({- elem: elem,- props: jQuery.extend( {}, properties ),- opts: jQuery.extend( true, { specialEasing: {} }, options ),- originalProperties: properties,- originalOptions: options,- startTime: fxNow || createFxNow(),- duration: options.duration,- tweens: [],- createTween: function( prop, end ) {- var tween = jQuery.Tween( elem, animation.opts, prop, end,- animation.opts.specialEasing[ prop ] || animation.opts.easing );- animation.tweens.push( tween );- return tween;- },- stop: function( gotoEnd ) {- var index = 0,- // if we are going to the end, we want to run all the tweens- // otherwise we skip this part- length = gotoEnd ? animation.tweens.length : 0;- if ( stopped ) {- return this;- }- stopped = true;- for ( ; index < length ; index++ ) {- animation.tweens[ index ].run( 1 );- }-- // resolve when we played the last frame- // otherwise, reject- if ( gotoEnd ) {- deferred.resolveWith( elem, [ animation, gotoEnd ] );- } else {- deferred.rejectWith( elem, [ animation, gotoEnd ] );- }- return this;- }- }),- props = animation.props;-- propFilter( props, animation.opts.specialEasing );-- for ( ; index < length ; index++ ) {- result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );- if ( result ) {- return result;- }- }-- jQuery.map( props, createTween, animation );-- if ( jQuery.isFunction( animation.opts.start ) ) {- animation.opts.start.call( elem, animation );- }-- jQuery.fx.timer(- jQuery.extend( tick, {- elem: elem,- anim: animation,- queue: animation.opts.queue- })- );-- // attach callbacks from options- return animation.progress( animation.opts.progress )- .done( animation.opts.done, animation.opts.complete )- .fail( animation.opts.fail )- .always( animation.opts.always );-}--function propFilter( props, specialEasing ) {- var index, name, easing, value, hooks;-- // camelCase, specialEasing and expand cssHook pass- for ( index in props ) {- name = jQuery.camelCase( index );- easing = specialEasing[ name ];- value = props[ index ];- if ( jQuery.isArray( value ) ) {- easing = value[ 1 ];- value = props[ index ] = value[ 0 ];- }-- if ( index !== name ) {- props[ name ] = value;- delete props[ index ];- }-- hooks = jQuery.cssHooks[ name ];- if ( hooks && "expand" in hooks ) {- value = hooks.expand( value );- delete props[ name ];-- // not quite $.extend, this wont overwrite keys already present.- // also - reusing 'index' from above because we have the correct "name"- for ( index in value ) {- if ( !( index in props ) ) {- props[ index ] = value[ index ];- specialEasing[ index ] = easing;- }- }- } else {- specialEasing[ name ] = easing;- }- }-}--jQuery.Animation = jQuery.extend( Animation, {-- tweener: function( props, callback ) {- if ( jQuery.isFunction( props ) ) {- callback = props;- props = [ "*" ];- } else {- props = props.split(" ");- }-- var prop,- index = 0,- length = props.length;-- for ( ; index < length ; index++ ) {- prop = props[ index ];- tweeners[ prop ] = tweeners[ prop ] || [];- tweeners[ prop ].unshift( callback );- }- },-- prefilter: function( callback, prepend ) {- if ( prepend ) {- animationPrefilters.unshift( callback );- } else {- animationPrefilters.push( callback );- }- }-});--function defaultPrefilter( elem, props, opts ) {- /* jshint validthis: true */- var prop, value, toggle, tween, hooks, oldfire,- anim = this,- orig = {},- style = elem.style,- hidden = elem.nodeType && isHidden( elem ),- dataShow = jQuery._data( elem, "fxshow" );-- // handle queue: false promises- if ( !opts.queue ) {- hooks = jQuery._queueHooks( elem, "fx" );- if ( hooks.unqueued == null ) {- hooks.unqueued = 0;- oldfire = hooks.empty.fire;- hooks.empty.fire = function() {- if ( !hooks.unqueued ) {- oldfire();- }- };- }- hooks.unqueued++;-- anim.always(function() {- // doing this makes sure that the complete handler will be called- // before this completes- anim.always(function() {- hooks.unqueued--;- if ( !jQuery.queue( elem, "fx" ).length ) {- hooks.empty.fire();- }- });- });- }-- // height/width overflow pass- if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {- // Make sure that nothing sneaks out- // Record all 3 overflow attributes because IE does not- // change the overflow attribute when overflowX and- // overflowY are set to the same value- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];-- // Set display property to inline-block for height/width- // animations on inline elements that are having width/height animated- if ( jQuery.css( elem, "display" ) === "inline" &&- jQuery.css( elem, "float" ) === "none" ) {-- // inline-level elements accept inline-block;- // block-level elements need to be inline with layout- if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {- style.display = "inline-block";-- } else {- style.zoom = 1;- }- }- }-- if ( opts.overflow ) {- style.overflow = "hidden";- if ( !jQuery.support.shrinkWrapBlocks ) {- anim.always(function() {- style.overflow = opts.overflow[ 0 ];- style.overflowX = opts.overflow[ 1 ];- style.overflowY = opts.overflow[ 2 ];- });- }- }--- // show/hide pass- for ( prop in props ) {- value = props[ prop ];- if ( rfxtypes.exec( value ) ) {- delete props[ prop ];- toggle = toggle || value === "toggle";- if ( value === ( hidden ? "hide" : "show" ) ) {- continue;- }- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );- }- }-- if ( !jQuery.isEmptyObject( orig ) ) {- if ( dataShow ) {- if ( "hidden" in dataShow ) {- hidden = dataShow.hidden;- }- } else {- dataShow = jQuery._data( elem, "fxshow", {} );- }-- // store state if its toggle - enables .stop().toggle() to "reverse"- if ( toggle ) {- dataShow.hidden = !hidden;- }- if ( hidden ) {- jQuery( elem ).show();- } else {- anim.done(function() {- jQuery( elem ).hide();- });- }- anim.done(function() {- var prop;- jQuery._removeData( elem, "fxshow" );- for ( prop in orig ) {- jQuery.style( elem, prop, orig[ prop ] );- }- });- for ( prop in orig ) {- tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );-- if ( !( prop in dataShow ) ) {- dataShow[ prop ] = tween.start;- if ( hidden ) {- tween.end = tween.start;- tween.start = prop === "width" || prop === "height" ? 1 : 0;- }- }- }- }-}--function Tween( elem, options, prop, end, easing ) {- return new Tween.prototype.init( elem, options, prop, end, easing );-}-jQuery.Tween = Tween;--Tween.prototype = {- constructor: Tween,- init: function( elem, options, prop, end, easing, unit ) {- this.elem = elem;- this.prop = prop;- this.easing = easing || "swing";- this.options = options;- this.start = this.now = this.cur();- this.end = end;- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );- },- cur: function() {- var hooks = Tween.propHooks[ this.prop ];-- return hooks && hooks.get ?- hooks.get( this ) :- Tween.propHooks._default.get( this );- },- run: function( percent ) {- var eased,- hooks = Tween.propHooks[ this.prop ];-- if ( this.options.duration ) {- this.pos = eased = jQuery.easing[ this.easing ](- percent, this.options.duration * percent, 0, 1, this.options.duration- );- } else {- this.pos = eased = percent;- }- this.now = ( this.end - this.start ) * eased + this.start;-- if ( this.options.step ) {- this.options.step.call( this.elem, this.now, this );- }-- if ( hooks && hooks.set ) {- hooks.set( this );- } else {- Tween.propHooks._default.set( this );- }- return this;- }-};--Tween.prototype.init.prototype = Tween.prototype;--Tween.propHooks = {- _default: {- get: function( tween ) {- var result;-- if ( tween.elem[ tween.prop ] != null &&- (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {- return tween.elem[ tween.prop ];- }-- // passing an empty string as a 3rd parameter to .css will automatically- // attempt a parseFloat and fallback to a string if the parse fails- // so, simple values such as "10px" are parsed to Float.- // complex values such as "rotate(1rad)" are returned as is.- result = jQuery.css( tween.elem, tween.prop, "" );- // Empty strings, null, undefined and "auto" are converted to 0.- return !result || result === "auto" ? 0 : result;- },- set: function( tween ) {- // use step hook for back compat - use cssHook if its there - use .style if its- // available and use plain properties where available- if ( jQuery.fx.step[ tween.prop ] ) {- jQuery.fx.step[ tween.prop ]( tween );- } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );- } else {- tween.elem[ tween.prop ] = tween.now;- }- }- }-};--// Support: IE <=9-// Panic based approach to setting things on disconnected nodes--Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {- set: function( tween ) {- if ( tween.elem.nodeType && tween.elem.parentNode ) {- tween.elem[ tween.prop ] = tween.now;- }- }-};--jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {- var cssFn = jQuery.fn[ name ];- jQuery.fn[ name ] = function( speed, easing, callback ) {- return speed == null || typeof speed === "boolean" ?- cssFn.apply( this, arguments ) :- this.animate( genFx( name, true ), speed, easing, callback );- };-});--jQuery.fn.extend({- fadeTo: function( speed, to, easing, callback ) {-- // show any hidden elements after setting opacity to 0- return this.filter( isHidden ).css( "opacity", 0 ).show()-- // animate to the value specified- .end().animate({ opacity: to }, speed, easing, callback );- },- animate: function( prop, speed, easing, callback ) {- var empty = jQuery.isEmptyObject( prop ),- optall = jQuery.speed( speed, easing, callback ),- doAnimation = function() {- // Operate on a copy of prop so per-property easing won't be lost- var anim = Animation( this, jQuery.extend( {}, prop ), optall );-- // Empty animations, or finishing resolves immediately- if ( empty || jQuery._data( this, "finish" ) ) {- anim.stop( true );- }- };- doAnimation.finish = doAnimation;-- return empty || optall.queue === false ?- this.each( doAnimation ) :- this.queue( optall.queue, doAnimation );- },- stop: function( type, clearQueue, gotoEnd ) {- var stopQueue = function( hooks ) {- var stop = hooks.stop;- delete hooks.stop;- stop( gotoEnd );- };-- if ( typeof type !== "string" ) {- gotoEnd = clearQueue;- clearQueue = type;- type = undefined;- }- if ( clearQueue && type !== false ) {- this.queue( type || "fx", [] );- }-- return this.each(function() {- var dequeue = true,- index = type != null && type + "queueHooks",- timers = jQuery.timers,- data = jQuery._data( this );-- if ( index ) {- if ( data[ index ] && data[ index ].stop ) {- stopQueue( data[ index ] );- }- } else {- for ( index in data ) {- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {- stopQueue( data[ index ] );- }- }- }-- for ( index = timers.length; index--; ) {- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {- timers[ index ].anim.stop( gotoEnd );- dequeue = false;- timers.splice( index, 1 );- }- }-- // start the next in the queue if the last step wasn't forced- // timers currently will call their complete callbacks, which will dequeue- // but only if they were gotoEnd- if ( dequeue || !gotoEnd ) {- jQuery.dequeue( this, type );- }- });- },- finish: function( type ) {- if ( type !== false ) {- type = type || "fx";- }- return this.each(function() {- var index,- data = jQuery._data( this ),- queue = data[ type + "queue" ],- hooks = data[ type + "queueHooks" ],- timers = jQuery.timers,- length = queue ? queue.length : 0;-- // enable finishing flag on private data- data.finish = true;-- // empty the queue first- jQuery.queue( this, type, [] );-- if ( hooks && hooks.stop ) {- hooks.stop.call( this, true );- }-- // look for any active animations, and finish them- for ( index = timers.length; index--; ) {- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {- timers[ index ].anim.stop( true );- timers.splice( index, 1 );- }- }-- // look for any animations in the old queue and finish them- for ( index = 0; index < length; index++ ) {- if ( queue[ index ] && queue[ index ].finish ) {- queue[ index ].finish.call( this );- }- }-- // turn off finishing flag- delete data.finish;- });- }-});--// Generate parameters to create a standard animation-function genFx( type, includeWidth ) {- var which,- attrs = { height: type },- i = 0;-- // if we include width, step value is 1 to do all cssExpand values,- // if we don't include width, step value is 2 to skip over Left and Right- includeWidth = includeWidth? 1 : 0;- for( ; i < 4 ; i += 2 - includeWidth ) {- which = cssExpand[ i ];- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;- }-- if ( includeWidth ) {- attrs.opacity = attrs.width = type;- }-- return attrs;-}--// Generate shortcuts for custom animations-jQuery.each({- slideDown: genFx("show"),- slideUp: genFx("hide"),- slideToggle: genFx("toggle"),- fadeIn: { opacity: "show" },- fadeOut: { opacity: "hide" },- fadeToggle: { opacity: "toggle" }-}, function( name, props ) {- jQuery.fn[ name ] = function( speed, easing, callback ) {- return this.animate( props, speed, easing, callback );- };-});--jQuery.speed = function( speed, easing, fn ) {- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {- complete: fn || !fn && easing ||- jQuery.isFunction( speed ) && speed,- duration: speed,- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing- };-- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;-- // normalize opt.queue - true/undefined/null -> "fx"- if ( opt.queue == null || opt.queue === true ) {- opt.queue = "fx";- }-- // Queueing- opt.old = opt.complete;-- opt.complete = function() {- if ( jQuery.isFunction( opt.old ) ) {- opt.old.call( this );- }-- if ( opt.queue ) {- jQuery.dequeue( this, opt.queue );- }- };-- return opt;-};--jQuery.easing = {- linear: function( p ) {- return p;- },- swing: function( p ) {- return 0.5 - Math.cos( p*Math.PI ) / 2;- }-};--jQuery.timers = [];-jQuery.fx = Tween.prototype.init;-jQuery.fx.tick = function() {- var timer,- timers = jQuery.timers,- i = 0;-- fxNow = jQuery.now();-- for ( ; i < timers.length; i++ ) {- timer = timers[ i ];- // Checks the timer has not already been removed- if ( !timer() && timers[ i ] === timer ) {- timers.splice( i--, 1 );- }- }-- if ( !timers.length ) {- jQuery.fx.stop();- }- fxNow = undefined;-};--jQuery.fx.timer = function( timer ) {- if ( timer() && jQuery.timers.push( timer ) ) {- jQuery.fx.start();- }-};--jQuery.fx.interval = 13;--jQuery.fx.start = function() {- if ( !timerId ) {- timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );- }-};--jQuery.fx.stop = function() {- clearInterval( timerId );- timerId = null;-};--jQuery.fx.speeds = {- slow: 600,- fast: 200,- // Default speed- _default: 400-};--// Back Compat <1.8 extension point-jQuery.fx.step = {};--if ( jQuery.expr && jQuery.expr.filters ) {- jQuery.expr.filters.animated = function( elem ) {- return jQuery.grep(jQuery.timers, function( fn ) {- return elem === fn.elem;- }).length;- };-}-jQuery.fn.offset = function( options ) {- if ( arguments.length ) {- return options === undefined ?- this :- this.each(function( i ) {- jQuery.offset.setOffset( this, options, i );- });- }-- var docElem, win,- box = { top: 0, left: 0 },- elem = this[ 0 ],- doc = elem && elem.ownerDocument;-- if ( !doc ) {- return;- }-- docElem = doc.documentElement;-- // Make sure it's not a disconnected DOM node- if ( !jQuery.contains( docElem, elem ) ) {- return box;- }-- // If we don't have gBCR, just use 0,0 rather than error- // BlackBerry 5, iOS 3 (original iPhone)- if ( typeof elem.getBoundingClientRect !== core_strundefined ) {- box = elem.getBoundingClientRect();- }- win = getWindow( doc );- return {- top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),- left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )- };-};--jQuery.offset = {-- setOffset: function( elem, options, i ) {- var position = jQuery.css( elem, "position" );-- // set position first, in-case top/left are set even on static elem- if ( position === "static" ) {- elem.style.position = "relative";- }-- var curElem = jQuery( elem ),- curOffset = curElem.offset(),- curCSSTop = jQuery.css( elem, "top" ),- curCSSLeft = jQuery.css( elem, "left" ),- calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,- props = {}, curPosition = {}, curTop, curLeft;-- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed- if ( calculatePosition ) {- curPosition = curElem.position();- curTop = curPosition.top;- curLeft = curPosition.left;- } else {- curTop = parseFloat( curCSSTop ) || 0;- curLeft = parseFloat( curCSSLeft ) || 0;- }-- if ( jQuery.isFunction( options ) ) {- options = options.call( elem, i, curOffset );- }-- if ( options.top != null ) {- props.top = ( options.top - curOffset.top ) + curTop;- }- if ( options.left != null ) {- props.left = ( options.left - curOffset.left ) + curLeft;- }-- if ( "using" in options ) {- options.using.call( elem, props );- } else {- curElem.css( props );- }- }-};---jQuery.fn.extend({-- position: function() {- if ( !this[ 0 ] ) {- return;- }-- var offsetParent, offset,- parentOffset = { top: 0, left: 0 },- elem = this[ 0 ];-- // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent- if ( jQuery.css( elem, "position" ) === "fixed" ) {- // we assume that getBoundingClientRect is available when computed position is fixed- offset = elem.getBoundingClientRect();- } else {- // Get *real* offsetParent- offsetParent = this.offsetParent();-- // Get correct offsets- offset = this.offset();- if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {- parentOffset = offsetParent.offset();- }-- // Add offsetParent borders- parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );- parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );- }-- // Subtract parent offsets and element margins- // note: when an element has margin: auto the offsetLeft and marginLeft- // are the same in Safari causing offset.left to incorrectly be 0- return {- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)- };- },-- offsetParent: function() {- return this.map(function() {- var offsetParent = this.offsetParent || docElem;- while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {- offsetParent = offsetParent.offsetParent;- }- return offsetParent || docElem;- });- }-});---// Create scrollLeft and scrollTop methods-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {- var top = /Y/.test( prop );-- jQuery.fn[ method ] = function( val ) {- return jQuery.access( this, function( elem, method, val ) {- var win = getWindow( elem );-- if ( val === undefined ) {- return win ? (prop in win) ? win[ prop ] :- win.document.documentElement[ method ] :- elem[ method ];- }-- if ( win ) {- win.scrollTo(- !top ? val : jQuery( win ).scrollLeft(),- top ? val : jQuery( win ).scrollTop()- );-- } else {- elem[ method ] = val;- }- }, method, val, arguments.length, null );- };-});--function getWindow( elem ) {- return jQuery.isWindow( elem ) ?- elem :- elem.nodeType === 9 ?- elem.defaultView || elem.parentWindow :- false;-}-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {- // margin is only for outerHeight, outerWidth- jQuery.fn[ funcName ] = function( margin, value ) {- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );-- return jQuery.access( this, function( elem, type, value ) {- var doc;-- if ( jQuery.isWindow( elem ) ) {- // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there- // isn't a whole lot we can do. See pull request at this URL for discussion:- // https://github.com/jquery/jquery/pull/764- return elem.document.documentElement[ "client" + name ];- }-- // Get document width or height- if ( elem.nodeType === 9 ) {- doc = elem.documentElement;-- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest- // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.- return Math.max(- elem.body[ "scroll" + name ], doc[ "scroll" + name ],- elem.body[ "offset" + name ], doc[ "offset" + name ],- doc[ "client" + name ]- );- }-- return value === undefined ?- // Get width or height on the element, requesting but not forcing parseFloat- jQuery.css( elem, type, extra ) :-- // Set width or height on the element- jQuery.style( elem, type, value, extra );- }, type, chainable ? margin : undefined, chainable, null );- };- });-});-// Limit scope pollution from any deprecated API-// (function() {--// The number of elements contained in the matched element set-jQuery.fn.size = function() {- return this.length;-};--jQuery.fn.andSelf = jQuery.fn.addBack;--// })();-if ( typeof module === "object" && module && typeof module.exports === "object" ) {- // Expose jQuery as module.exports in loaders that implement the Node- // module pattern (including browserify). Do not create the global, since- // the user will be storing it themselves locally, and globals are frowned- // upon in the Node module world.- module.exports = jQuery;-} else {- // Otherwise expose jQuery to the global object as usual- window.jQuery = window.$ = jQuery;-- // Register as a named AMD module, since jQuery can be concatenated with other- // files that may use define, but not via a proper concatenation script that- // understands anonymous AMD modules. A named AMD is safest and most robust- // way to register. Lowercase jquery is used because AMD module names are- // derived from file names, and jQuery is normally delivered in a lowercase- // file name. Do this after creating the global so that if an AMD module wants- // to call noConflict to hide this version of jQuery, it will work.- if ( typeof define === "function" && define.amd ) {- define( "jquery", [], function () { return jQuery; } );- }-}--})( window );
@@ -1,6 +0,0 @@-/*! jQuery v1.10.1 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license-//@ sourceMappingURL=jquery-1.10.1.min.map-*/-(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.1",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=lt(),k=lt(),E=lt(),S=!1,A=function(){return 0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=bt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+xt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return At(e.replace(z,"$1"),t,n,i)}function st(e){return K.test(e+"")}function lt(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function ut(e){return e[b]=!0,e}function ct(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function pt(e,t,n){e=e.split("|");var r,i=e.length,a=n?null:t;while(i--)(r=o.attrHandle[e[i]])&&r!==t||(o.attrHandle[e[i]]=a)}function ft(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:e[t]===!0?t.toLowerCase():null}function dt(e,t){return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}function ht(e){return"input"===e.nodeName.toLowerCase()?e.defaultValue:t}function gt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function mt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function yt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function vt(e){return ut(function(t){return t=+t,ut(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.parentWindow;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.frameElement&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ct(function(e){return e.innerHTML="<a href='#'></a>",pt("type|href|height|width",dt,"#"===e.firstChild.getAttribute("href")),pt(B,ft,null==e.getAttribute("disabled")),e.className="i",!e.getAttribute("className")}),r.input=ct(function(e){return e.innerHTML="<input>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}),pt("value",ht,r.attributes&&r.input),r.getElementsByTagName=ct(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ct(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ct(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=st(n.querySelectorAll))&&(ct(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ct(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=st(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ct(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=st(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},r.sortDetached=ct(function(e){return 1&e.compareDocumentPosition(n.createElement("div"))}),A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return gt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?gt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:ut,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=bt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?ut(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ut(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?ut(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ut(function(e){return function(t){return at(e,t).length>0}}),contains:ut(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:ut(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:vt(function(){return[0]}),last:vt(function(e,t){return[t-1]}),eq:vt(function(e,t,n){return[0>n?n+t:n]}),even:vt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:vt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:vt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:vt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=mt(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=yt(n);function bt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function xt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function wt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function Tt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Ct(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function Nt(e,t,n,r,i,o){return r&&!r[b]&&(r=Nt(r)),i&&!i[b]&&(i=Nt(i,o)),ut(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||St(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:Ct(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=Ct(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=Ct(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function kt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=wt(function(e){return e===t},s,!0),p=wt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[wt(Tt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return Nt(l>1&&Tt(f),l>1&&xt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&kt(e.slice(l,r)),i>r&&kt(e=e.slice(r)),i>r&&xt(e))}f.push(n)}return Tt(f)}function Et(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=Ct(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?ut(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=bt(e)),n=t.length;while(n--)o=kt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Et(i,r))}return o};function St(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function At(e,t,n,i){var a,s,u,c,p,f=bt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&xt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}o.pseudos.nth=o.pseudos.eq;function jt(){}jt.prototype=o.filters=o.pseudos,o.setFilters=new jt,r.sortStable=b.split("").sort(A).join("")===b,p(),[0,0].sort(A),r.detectDuplicates=S,x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!u||(n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)-}),n=s=l=u=r=o=null,t}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=x(this),l=t,u=e.match(T)||[];while(o=u[a++])l=r?l:!s.hasClass(o),s[l?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);-u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
@@ -1,181 +0,0 @@-// JQuery URL Parser-// Written by Mark Perkins, mark@allmarkedup.com-// License: http://unlicense.org/ (i.e. do what you want with it!)--jQuery.url = function()-{- var segments = {};- - var parsed = {};- - /**- * Options object. Only the URI and strictMode values can be changed via the setters below.- */- var options = {- - url : window.location, // default URI is the page in which the script is running- - strictMode: false, // 'loose' parsing by default- - key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], // keys available to query - - q: {- name: "queryKey",- parser: /(?:^|&|;)([^&=;]*)=?([^&;]*)/g- },- - parser: {- strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, //less intuitive, more accurate to the specs- loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // more intuitive, fails on relative paths and deviates from specs- }- - };- - /**- * Deals with the parsing of the URI according to the regex above.- * Written by Steven Levithan - see credits at top.- */ - var parseUri = function()- {- str = decodeURI( options.url );- - var m = options.parser[ options.strictMode ? "strict" : "loose" ].exec( str );- var uri = {};- var i = 14;-- while ( i-- ) {- uri[ options.key[i] ] = m[i] || "";- }-- uri[ options.q.name ] = {};- uri[ options.key[12] ].replace( options.q.parser, function ( $0, $1, $2 ) {- if ($1) {- uri[options.q.name][$1] = $2;- }- });-- return uri;- };-- /**- * Returns the value of the passed in key from the parsed URI.- * - * @param string key The key whose value is required- */ - var key = function( key )- {- if ( jQuery.isEmptyObject(parsed) )- {- setUp(); // if the URI has not been parsed yet then do this first... - } - if ( key == "base" )- {- if ( parsed.port !== null && parsed.port !== "" )- {- return parsed.protocol+"://"+parsed.host+":"+parsed.port+"/"; - }- else- {- return parsed.protocol+"://"+parsed.host+"/";- }- }- - return ( parsed[key] === "" ) ? null : parsed[key];- };- - /**- * Returns the value of the required query string parameter.- * - * @param string item The parameter whose value is required- */ - var param = function( item )- {- if ( jQuery.isEmptyObject(parsed) )- {- setUp(); // if the URI has not been parsed yet then do this first... - }- if ( item === undefined )- {- return parsed.queryKey;- }- else- {- return ( parsed.queryKey[item] === null ) ? null : parsed.queryKey[item];- }- };-- /**- * 'Constructor' (not really!) function.- * Called whenever the URI changes to kick off re-parsing of the URI and splitting it up into segments. - */ - var setUp = function()- {- parsed = parseUri();- - getSegments(); - };- - /**- * Splits up the body of the URI into segments (i.e. sections delimited by '/')- */- var getSegments = function()- {- var p = parsed.path;- segments = []; // clear out segments array- segments = parsed.path.length == 1 ? {} : ( p.charAt( p.length - 1 ) == "/" ? p.substring( 1, p.length - 1 ) : path = p.substring( 1 ) ).split("/");- };- - return {- - /**- * Sets the parsing mode - either strict or loose. Set to loose by default.- *- * @param string mode The mode to set the parser to. Anything apart from a value of 'strict' will set it to loose!- */- setMode : function( mode )- {- options.strictMode = mode == "strict" ? true : false;- return this;- },- - /**- * Sets URI to parse if you don't want to to parse the current page's URI.- * Calling the function with no value for newUri resets it to the current page's URI.- *- * @param string newUri The URI to parse.- */ - setUrl : function( newUri )- {- options.url = newUri === undefined ? window.location : newUri;- setUp();- return this;- }, - - /**- * Returns the value of the specified URI segment. Segments are numbered from 1 to the number of segments.- * For example the URI http://test.com/about/company/ segment(1) would return 'about'.- *- * If no integer is passed into the function it returns the number of segments in the URI.- *- * @param int pos The position of the segment to return. Can be empty.- */ - segment : function( pos )- {- if ( jQuery.isEmptyObject(parsed) )- {- setUp(); // if the URI has not been parsed yet then do this first... - } - if ( pos === undefined )- {- return segments.length;- }- return ( segments[pos] === "" || segments[pos] === undefined ) ? null : segments[pos];- },- - attr : key, // provides public access to private 'key' function - see above- - param : param // provides public access to private 'param' function - see above- - };- -}();
@@ -0,0 +1,2114 @@+/*!+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ */++if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }++/* ========================================================================+ * Bootstrap: transition.js v3.2.0+ * http://getbootstrap.com/javascript/#transitions+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)+ // ============================================================++ function transitionEnd() {+ var el = document.createElement('bootstrap')++ var transEndEventNames = {+ WebkitTransition : 'webkitTransitionEnd',+ MozTransition : 'transitionend',+ OTransition : 'oTransitionEnd otransitionend',+ transition : 'transitionend'+ }++ for (var name in transEndEventNames) {+ if (el.style[name] !== undefined) {+ return { end: transEndEventNames[name] }+ }+ }++ return false // explicit for ie8 ( ._.)+ }++ // http://blog.alexmaccaw.com/css-transitions+ $.fn.emulateTransitionEnd = function (duration) {+ var called = false+ var $el = this+ $(this).one('bsTransitionEnd', function () { called = true })+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }+ setTimeout(callback, duration)+ return this+ }++ $(function () {+ $.support.transition = transitionEnd()++ if (!$.support.transition) return++ $.event.special.bsTransitionEnd = {+ bindType: $.support.transition.end,+ delegateType: $.support.transition.end,+ handle: function (e) {+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)+ }+ }+ })++}(jQuery);++/* ========================================================================+ * Bootstrap: alert.js v3.2.0+ * http://getbootstrap.com/javascript/#alerts+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // ALERT CLASS DEFINITION+ // ======================++ var dismiss = '[data-dismiss="alert"]'+ var Alert = function (el) {+ $(el).on('click', dismiss, this.close)+ }++ Alert.VERSION = '3.2.0'++ Alert.prototype.close = function (e) {+ var $this = $(this)+ var selector = $this.attr('data-target')++ if (!selector) {+ selector = $this.attr('href')+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7+ }++ var $parent = $(selector)++ if (e) e.preventDefault()++ if (!$parent.length) {+ $parent = $this.hasClass('alert') ? $this : $this.parent()+ }++ $parent.trigger(e = $.Event('close.bs.alert'))++ if (e.isDefaultPrevented()) return++ $parent.removeClass('in')++ function removeElement() {+ // detach from parent, fire event then clean up data+ $parent.detach().trigger('closed.bs.alert').remove()+ }++ $.support.transition && $parent.hasClass('fade') ?+ $parent+ .one('bsTransitionEnd', removeElement)+ .emulateTransitionEnd(150) :+ removeElement()+ }+++ // ALERT PLUGIN DEFINITION+ // =======================++ function Plugin(option) {+ return this.each(function () {+ var $this = $(this)+ var data = $this.data('bs.alert')++ if (!data) $this.data('bs.alert', (data = new Alert(this)))+ if (typeof option == 'string') data[option].call($this)+ })+ }++ var old = $.fn.alert++ $.fn.alert = Plugin+ $.fn.alert.Constructor = Alert+++ // ALERT NO CONFLICT+ // =================++ $.fn.alert.noConflict = function () {+ $.fn.alert = old+ return this+ }+++ // ALERT DATA-API+ // ==============++ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)++}(jQuery);++/* ========================================================================+ * Bootstrap: button.js v3.2.0+ * http://getbootstrap.com/javascript/#buttons+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // BUTTON PUBLIC CLASS DEFINITION+ // ==============================++ var Button = function (element, options) {+ this.$element = $(element)+ this.options = $.extend({}, Button.DEFAULTS, options)+ this.isLoading = false+ }++ Button.VERSION = '3.2.0'++ Button.DEFAULTS = {+ loadingText: 'loading...'+ }++ Button.prototype.setState = function (state) {+ var d = 'disabled'+ var $el = this.$element+ var val = $el.is('input') ? 'val' : 'html'+ var data = $el.data()++ state = state + 'Text'++ if (data.resetText == null) $el.data('resetText', $el[val]())++ $el[val](data[state] == null ? this.options[state] : data[state])++ // push to event loop to allow forms to submit+ setTimeout($.proxy(function () {+ if (state == 'loadingText') {+ this.isLoading = true+ $el.addClass(d).attr(d, d)+ } else if (this.isLoading) {+ this.isLoading = false+ $el.removeClass(d).removeAttr(d)+ }+ }, this), 0)+ }++ Button.prototype.toggle = function () {+ var changed = true+ var $parent = this.$element.closest('[data-toggle="buttons"]')++ if ($parent.length) {+ var $input = this.$element.find('input')+ if ($input.prop('type') == 'radio') {+ if ($input.prop('checked') && this.$element.hasClass('active')) changed = false+ else $parent.find('.active').removeClass('active')+ }+ if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')+ }++ if (changed) this.$element.toggleClass('active')+ }+++ // BUTTON PLUGIN DEFINITION+ // ========================++ function Plugin(option) {+ return this.each(function () {+ var $this = $(this)+ var data = $this.data('bs.button')+ var options = typeof option == 'object' && option++ if (!data) $this.data('bs.button', (data = new Button(this, options)))++ if (option == 'toggle') data.toggle()+ else if (option) data.setState(option)+ })+ }++ var old = $.fn.button++ $.fn.button = Plugin+ $.fn.button.Constructor = Button+++ // BUTTON NO CONFLICT+ // ==================++ $.fn.button.noConflict = function () {+ $.fn.button = old+ return this+ }+++ // BUTTON DATA-API+ // ===============++ $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {+ var $btn = $(e.target)+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')+ Plugin.call($btn, 'toggle')+ e.preventDefault()+ })++}(jQuery);++/* ========================================================================+ * Bootstrap: carousel.js v3.2.0+ * http://getbootstrap.com/javascript/#carousel+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // CAROUSEL CLASS DEFINITION+ // =========================++ var Carousel = function (element, options) {+ this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this))+ this.$indicators = this.$element.find('.carousel-indicators')+ this.options = options+ this.paused =+ this.sliding =+ this.interval =+ this.$active =+ this.$items = null++ this.options.pause == 'hover' && this.$element+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))+ }++ Carousel.VERSION = '3.2.0'++ Carousel.DEFAULTS = {+ interval: 5000,+ pause: 'hover',+ wrap: true+ }++ Carousel.prototype.keydown = function (e) {+ switch (e.which) {+ case 37: this.prev(); break+ case 39: this.next(); break+ default: return+ }++ e.preventDefault()+ }++ Carousel.prototype.cycle = function (e) {+ e || (this.paused = false)++ this.interval && clearInterval(this.interval)++ this.options.interval+ && !this.paused+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))++ return this+ }++ Carousel.prototype.getItemIndex = function (item) {+ this.$items = item.parent().children('.item')+ return this.$items.index(item || this.$active)+ }++ Carousel.prototype.to = function (pos) {+ var that = this+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))++ if (pos > (this.$items.length - 1) || pos < 0) return++ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"+ if (activeIndex == pos) return this.pause().cycle()++ return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))+ }++ Carousel.prototype.pause = function (e) {+ e || (this.paused = true)++ if (this.$element.find('.next, .prev').length && $.support.transition) {+ this.$element.trigger($.support.transition.end)+ this.cycle(true)+ }++ this.interval = clearInterval(this.interval)++ return this+ }++ Carousel.prototype.next = function () {+ if (this.sliding) return+ return this.slide('next')+ }++ Carousel.prototype.prev = function () {+ if (this.sliding) return+ return this.slide('prev')+ }++ Carousel.prototype.slide = function (type, next) {+ var $active = this.$element.find('.item.active')+ var $next = next || $active[type]()+ var isCycling = this.interval+ var direction = type == 'next' ? 'left' : 'right'+ var fallback = type == 'next' ? 'first' : 'last'+ var that = this++ if (!$next.length) {+ if (!this.options.wrap) return+ $next = this.$element.find('.item')[fallback]()+ }++ if ($next.hasClass('active')) return (this.sliding = false)++ var relatedTarget = $next[0]+ var slideEvent = $.Event('slide.bs.carousel', {+ relatedTarget: relatedTarget,+ direction: direction+ })+ this.$element.trigger(slideEvent)+ if (slideEvent.isDefaultPrevented()) return++ this.sliding = true++ isCycling && this.pause()++ if (this.$indicators.length) {+ this.$indicators.find('.active').removeClass('active')+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])+ $nextIndicator && $nextIndicator.addClass('active')+ }++ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"+ if ($.support.transition && this.$element.hasClass('slide')) {+ $next.addClass(type)+ $next[0].offsetWidth // force reflow+ $active.addClass(direction)+ $next.addClass(direction)+ $active+ .one('bsTransitionEnd', function () {+ $next.removeClass([type, direction].join(' ')).addClass('active')+ $active.removeClass(['active', direction].join(' '))+ that.sliding = false+ setTimeout(function () {+ that.$element.trigger(slidEvent)+ }, 0)+ })+ .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)+ } else {+ $active.removeClass('active')+ $next.addClass('active')+ this.sliding = false+ this.$element.trigger(slidEvent)+ }++ isCycling && this.cycle()++ return this+ }+++ // CAROUSEL PLUGIN DEFINITION+ // ==========================++ function Plugin(option) {+ return this.each(function () {+ var $this = $(this)+ var data = $this.data('bs.carousel')+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)+ var action = typeof option == 'string' ? option : options.slide++ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))+ if (typeof option == 'number') data.to(option)+ else if (action) data[action]()+ else if (options.interval) data.pause().cycle()+ })+ }++ var old = $.fn.carousel++ $.fn.carousel = Plugin+ $.fn.carousel.Constructor = Carousel+++ // CAROUSEL NO CONFLICT+ // ====================++ $.fn.carousel.noConflict = function () {+ $.fn.carousel = old+ return this+ }+++ // CAROUSEL DATA-API+ // =================++ $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {+ var href+ var $this = $(this)+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7+ if (!$target.hasClass('carousel')) return+ var options = $.extend({}, $target.data(), $this.data())+ var slideIndex = $this.attr('data-slide-to')+ if (slideIndex) options.interval = false++ Plugin.call($target, options)++ if (slideIndex) {+ $target.data('bs.carousel').to(slideIndex)+ }++ e.preventDefault()+ })++ $(window).on('load', function () {+ $('[data-ride="carousel"]').each(function () {+ var $carousel = $(this)+ Plugin.call($carousel, $carousel.data())+ })+ })++}(jQuery);++/* ========================================================================+ * Bootstrap: collapse.js v3.2.0+ * http://getbootstrap.com/javascript/#collapse+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // COLLAPSE PUBLIC CLASS DEFINITION+ // ================================++ var Collapse = function (element, options) {+ this.$element = $(element)+ this.options = $.extend({}, Collapse.DEFAULTS, options)+ this.transitioning = null++ if (this.options.parent) this.$parent = $(this.options.parent)+ if (this.options.toggle) this.toggle()+ }++ Collapse.VERSION = '3.2.0'++ Collapse.DEFAULTS = {+ toggle: true+ }++ Collapse.prototype.dimension = function () {+ var hasWidth = this.$element.hasClass('width')+ return hasWidth ? 'width' : 'height'+ }++ Collapse.prototype.show = function () {+ if (this.transitioning || this.$element.hasClass('in')) return++ var startEvent = $.Event('show.bs.collapse')+ this.$element.trigger(startEvent)+ if (startEvent.isDefaultPrevented()) return++ var actives = this.$parent && this.$parent.find('> .panel > .in')++ if (actives && actives.length) {+ var hasData = actives.data('bs.collapse')+ if (hasData && hasData.transitioning) return+ Plugin.call(actives, 'hide')+ hasData || actives.data('bs.collapse', null)+ }++ var dimension = this.dimension()++ this.$element+ .removeClass('collapse')+ .addClass('collapsing')[dimension](0)++ this.transitioning = 1++ var complete = function () {+ this.$element+ .removeClass('collapsing')+ .addClass('collapse in')[dimension]('')+ this.transitioning = 0+ this.$element+ .trigger('shown.bs.collapse')+ }++ if (!$.support.transition) return complete.call(this)++ var scrollSize = $.camelCase(['scroll', dimension].join('-'))++ this.$element+ .one('bsTransitionEnd', $.proxy(complete, this))+ .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])+ }++ Collapse.prototype.hide = function () {+ if (this.transitioning || !this.$element.hasClass('in')) return++ var startEvent = $.Event('hide.bs.collapse')+ this.$element.trigger(startEvent)+ if (startEvent.isDefaultPrevented()) return++ var dimension = this.dimension()++ this.$element[dimension](this.$element[dimension]())[0].offsetHeight++ this.$element+ .addClass('collapsing')+ .removeClass('collapse')+ .removeClass('in')++ this.transitioning = 1++ var complete = function () {+ this.transitioning = 0+ this.$element+ .trigger('hidden.bs.collapse')+ .removeClass('collapsing')+ .addClass('collapse')+ }++ if (!$.support.transition) return complete.call(this)++ this.$element+ [dimension](0)+ .one('bsTransitionEnd', $.proxy(complete, this))+ .emulateTransitionEnd(350)+ }++ Collapse.prototype.toggle = function () {+ this[this.$element.hasClass('in') ? 'hide' : 'show']()+ }+++ // COLLAPSE PLUGIN DEFINITION+ // ==========================++ function Plugin(option) {+ return this.each(function () {+ var $this = $(this)+ var data = $this.data('bs.collapse')+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)++ if (!data && options.toggle && option == 'show') option = !option+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))+ if (typeof option == 'string') data[option]()+ })+ }++ var old = $.fn.collapse++ $.fn.collapse = Plugin+ $.fn.collapse.Constructor = Collapse+++ // COLLAPSE NO CONFLICT+ // ====================++ $.fn.collapse.noConflict = function () {+ $.fn.collapse = old+ return this+ }+++ // COLLAPSE DATA-API+ // =================++ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {+ var href+ var $this = $(this)+ var target = $this.attr('data-target')+ || e.preventDefault()+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7+ var $target = $(target)+ var data = $target.data('bs.collapse')+ var option = data ? 'toggle' : $this.data()+ var parent = $this.attr('data-parent')+ var $parent = parent && $(parent)++ if (!data || !data.transitioning) {+ if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')+ $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')+ }++ Plugin.call($target, option)+ })++}(jQuery);++/* ========================================================================+ * Bootstrap: dropdown.js v3.2.0+ * http://getbootstrap.com/javascript/#dropdowns+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // DROPDOWN CLASS DEFINITION+ // =========================++ var backdrop = '.dropdown-backdrop'+ var toggle = '[data-toggle="dropdown"]'+ var Dropdown = function (element) {+ $(element).on('click.bs.dropdown', this.toggle)+ }++ Dropdown.VERSION = '3.2.0'++ Dropdown.prototype.toggle = function (e) {+ var $this = $(this)++ if ($this.is('.disabled, :disabled')) return++ var $parent = getParent($this)+ var isActive = $parent.hasClass('open')++ clearMenus()++ if (!isActive) {+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {+ // if mobile we use a backdrop because click events don't delegate+ $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)+ }++ var relatedTarget = { relatedTarget: this }+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))++ if (e.isDefaultPrevented()) return++ $this.trigger('focus')++ $parent+ .toggleClass('open')+ .trigger('shown.bs.dropdown', relatedTarget)+ }++ return false+ }++ Dropdown.prototype.keydown = function (e) {+ if (!/(38|40|27)/.test(e.keyCode)) return++ var $this = $(this)++ e.preventDefault()+ e.stopPropagation()++ if ($this.is('.disabled, :disabled')) return++ var $parent = getParent($this)+ var isActive = $parent.hasClass('open')++ if (!isActive || (isActive && e.keyCode == 27)) {+ if (e.which == 27) $parent.find(toggle).trigger('focus')+ return $this.trigger('click')+ }++ var desc = ' li:not(.divider):visible a'+ var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)++ if (!$items.length) return++ var index = $items.index($items.filter(':focus'))++ if (e.keyCode == 38 && index > 0) index-- // up+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down+ if (!~index) index = 0++ $items.eq(index).trigger('focus')+ }++ function clearMenus(e) {+ if (e && e.which === 3) return+ $(backdrop).remove()+ $(toggle).each(function () {+ var $parent = getParent($(this))+ var relatedTarget = { relatedTarget: this }+ if (!$parent.hasClass('open')) return+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))+ if (e.isDefaultPrevented()) return+ $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)+ })+ }++ function getParent($this) {+ var selector = $this.attr('data-target')++ if (!selector) {+ selector = $this.attr('href')+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7+ }++ var $parent = selector && $(selector)++ return $parent && $parent.length ? $parent : $this.parent()+ }+++ // DROPDOWN PLUGIN DEFINITION+ // ==========================++ function Plugin(option) {+ return this.each(function () {+ var $this = $(this)+ var data = $this.data('bs.dropdown')++ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))+ if (typeof option == 'string') data[option].call($this)+ })+ }++ var old = $.fn.dropdown++ $.fn.dropdown = Plugin+ $.fn.dropdown.Constructor = Dropdown+++ // DROPDOWN NO CONFLICT+ // ====================++ $.fn.dropdown.noConflict = function () {+ $.fn.dropdown = old+ return this+ }+++ // APPLY TO STANDARD DROPDOWN ELEMENTS+ // ===================================++ $(document)+ .on('click.bs.dropdown.data-api', clearMenus)+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)+ .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)++}(jQuery);++/* ========================================================================+ * Bootstrap: modal.js v3.2.0+ * http://getbootstrap.com/javascript/#modals+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // MODAL CLASS DEFINITION+ // ======================++ var Modal = function (element, options) {+ this.options = options+ this.$body = $(document.body)+ this.$element = $(element)+ this.$backdrop =+ this.isShown = null+ this.scrollbarWidth = 0++ if (this.options.remote) {+ this.$element+ .find('.modal-content')+ .load(this.options.remote, $.proxy(function () {+ this.$element.trigger('loaded.bs.modal')+ }, this))+ }+ }++ Modal.VERSION = '3.2.0'++ Modal.DEFAULTS = {+ backdrop: true,+ keyboard: true,+ show: true+ }++ Modal.prototype.toggle = function (_relatedTarget) {+ return this.isShown ? this.hide() : this.show(_relatedTarget)+ }++ Modal.prototype.show = function (_relatedTarget) {+ var that = this+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })++ this.$element.trigger(e)++ if (this.isShown || e.isDefaultPrevented()) return++ this.isShown = true++ this.checkScrollbar()+ this.$body.addClass('modal-open')++ this.setScrollbar()+ this.escape()++ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))++ this.backdrop(function () {+ var transition = $.support.transition && that.$element.hasClass('fade')++ if (!that.$element.parent().length) {+ that.$element.appendTo(that.$body) // don't move modals dom position+ }++ that.$element+ .show()+ .scrollTop(0)++ if (transition) {+ that.$element[0].offsetWidth // force reflow+ }++ that.$element+ .addClass('in')+ .attr('aria-hidden', false)++ that.enforceFocus()++ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })++ transition ?+ that.$element.find('.modal-dialog') // wait for modal to slide in+ .one('bsTransitionEnd', function () {+ that.$element.trigger('focus').trigger(e)+ })+ .emulateTransitionEnd(300) :+ that.$element.trigger('focus').trigger(e)+ })+ }++ Modal.prototype.hide = function (e) {+ if (e) e.preventDefault()++ e = $.Event('hide.bs.modal')++ this.$element.trigger(e)++ if (!this.isShown || e.isDefaultPrevented()) return++ this.isShown = false++ this.$body.removeClass('modal-open')++ this.resetScrollbar()+ this.escape()++ $(document).off('focusin.bs.modal')++ this.$element+ .removeClass('in')+ .attr('aria-hidden', true)+ .off('click.dismiss.bs.modal')++ $.support.transition && this.$element.hasClass('fade') ?+ this.$element+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))+ .emulateTransitionEnd(300) :+ this.hideModal()+ }++ Modal.prototype.enforceFocus = function () {+ $(document)+ .off('focusin.bs.modal') // guard against infinite focus loop+ .on('focusin.bs.modal', $.proxy(function (e) {+ if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {+ this.$element.trigger('focus')+ }+ }, this))+ }++ Modal.prototype.escape = function () {+ if (this.isShown && this.options.keyboard) {+ this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {+ e.which == 27 && this.hide()+ }, this))+ } else if (!this.isShown) {+ this.$element.off('keyup.dismiss.bs.modal')+ }+ }++ Modal.prototype.hideModal = function () {+ var that = this+ this.$element.hide()+ this.backdrop(function () {+ that.$element.trigger('hidden.bs.modal')+ })+ }++ Modal.prototype.removeBackdrop = function () {+ this.$backdrop && this.$backdrop.remove()+ this.$backdrop = null+ }++ Modal.prototype.backdrop = function (callback) {+ var that = this+ var animate = this.$element.hasClass('fade') ? 'fade' : ''++ if (this.isShown && this.options.backdrop) {+ var doAnimate = $.support.transition && animate++ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')+ .appendTo(this.$body)++ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {+ if (e.target !== e.currentTarget) return+ this.options.backdrop == 'static'+ ? this.$element[0].focus.call(this.$element[0])+ : this.hide.call(this)+ }, this))++ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow++ this.$backdrop.addClass('in')++ if (!callback) return++ doAnimate ?+ this.$backdrop+ .one('bsTransitionEnd', callback)+ .emulateTransitionEnd(150) :+ callback()++ } else if (!this.isShown && this.$backdrop) {+ this.$backdrop.removeClass('in')++ var callbackRemove = function () {+ that.removeBackdrop()+ callback && callback()+ }+ $.support.transition && this.$element.hasClass('fade') ?+ this.$backdrop+ .one('bsTransitionEnd', callbackRemove)+ .emulateTransitionEnd(150) :+ callbackRemove()++ } else if (callback) {+ callback()+ }+ }++ Modal.prototype.checkScrollbar = function () {+ if (document.body.clientWidth >= window.innerWidth) return+ this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()+ }++ Modal.prototype.setScrollbar = function () {+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)+ if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)+ }++ Modal.prototype.resetScrollbar = function () {+ this.$body.css('padding-right', '')+ }++ Modal.prototype.measureScrollbar = function () { // thx walsh+ var scrollDiv = document.createElement('div')+ scrollDiv.className = 'modal-scrollbar-measure'+ this.$body.append(scrollDiv)+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth+ this.$body[0].removeChild(scrollDiv)+ return scrollbarWidth+ }+++ // MODAL PLUGIN DEFINITION+ // =======================++ function Plugin(option, _relatedTarget) {+ return this.each(function () {+ var $this = $(this)+ var data = $this.data('bs.modal')+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)++ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))+ if (typeof option == 'string') data[option](_relatedTarget)+ else if (options.show) data.show(_relatedTarget)+ })+ }++ var old = $.fn.modal++ $.fn.modal = Plugin+ $.fn.modal.Constructor = Modal+++ // MODAL NO CONFLICT+ // =================++ $.fn.modal.noConflict = function () {+ $.fn.modal = old+ return this+ }+++ // MODAL DATA-API+ // ==============++ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {+ var $this = $(this)+ var href = $this.attr('href')+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())++ if ($this.is('a')) e.preventDefault()++ $target.one('show.bs.modal', function (showEvent) {+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown+ $target.one('hidden.bs.modal', function () {+ $this.is(':visible') && $this.trigger('focus')+ })+ })+ Plugin.call($target, option, this)+ })++}(jQuery);++/* ========================================================================+ * Bootstrap: tooltip.js v3.2.0+ * http://getbootstrap.com/javascript/#tooltip+ * Inspired by the original jQuery.tipsy by Jason Frame+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // TOOLTIP PUBLIC CLASS DEFINITION+ // ===============================++ var Tooltip = function (element, options) {+ this.type =+ this.options =+ this.enabled =+ this.timeout =+ this.hoverState =+ this.$element = null++ this.init('tooltip', element, options)+ }++ Tooltip.VERSION = '3.2.0'++ Tooltip.DEFAULTS = {+ animation: true,+ placement: 'top',+ selector: false,+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',+ trigger: 'hover focus',+ title: '',+ delay: 0,+ html: false,+ container: false,+ viewport: {+ selector: 'body',+ padding: 0+ }+ }++ Tooltip.prototype.init = function (type, element, options) {+ this.enabled = true+ this.type = type+ this.$element = $(element)+ this.options = this.getOptions(options)+ this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)++ var triggers = this.options.trigger.split(' ')++ for (var i = triggers.length; i--;) {+ var trigger = triggers[i]++ if (trigger == 'click') {+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))+ } else if (trigger != 'manual') {+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'++ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))+ }+ }++ this.options.selector ?+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :+ this.fixTitle()+ }++ Tooltip.prototype.getDefaults = function () {+ return Tooltip.DEFAULTS+ }++ Tooltip.prototype.getOptions = function (options) {+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)++ if (options.delay && typeof options.delay == 'number') {+ options.delay = {+ show: options.delay,+ hide: options.delay+ }+ }++ return options+ }++ Tooltip.prototype.getDelegateOptions = function () {+ var options = {}+ var defaults = this.getDefaults()++ this._options && $.each(this._options, function (key, value) {+ if (defaults[key] != value) options[key] = value+ })++ return options+ }++ Tooltip.prototype.enter = function (obj) {+ var self = obj instanceof this.constructor ?+ obj : $(obj.currentTarget).data('bs.' + this.type)++ if (!self) {+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())+ $(obj.currentTarget).data('bs.' + this.type, self)+ }++ clearTimeout(self.timeout)++ self.hoverState = 'in'++ if (!self.options.delay || !self.options.delay.show) return self.show()++ self.timeout = setTimeout(function () {+ if (self.hoverState == 'in') self.show()+ }, self.options.delay.show)+ }++ Tooltip.prototype.leave = function (obj) {+ var self = obj instanceof this.constructor ?+ obj : $(obj.currentTarget).data('bs.' + this.type)++ if (!self) {+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())+ $(obj.currentTarget).data('bs.' + this.type, self)+ }++ clearTimeout(self.timeout)++ self.hoverState = 'out'++ if (!self.options.delay || !self.options.delay.hide) return self.hide()++ self.timeout = setTimeout(function () {+ if (self.hoverState == 'out') self.hide()+ }, self.options.delay.hide)+ }++ Tooltip.prototype.show = function () {+ var e = $.Event('show.bs.' + this.type)++ if (this.hasContent() && this.enabled) {+ this.$element.trigger(e)++ var inDom = $.contains(document.documentElement, this.$element[0])+ if (e.isDefaultPrevented() || !inDom) return+ var that = this++ var $tip = this.tip()++ var tipId = this.getUID(this.type)++ this.setContent()+ $tip.attr('id', tipId)+ this.$element.attr('aria-describedby', tipId)++ if (this.options.animation) $tip.addClass('fade')++ var placement = typeof this.options.placement == 'function' ?+ this.options.placement.call(this, $tip[0], this.$element[0]) :+ this.options.placement++ var autoToken = /\s?auto?\s?/i+ var autoPlace = autoToken.test(placement)+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'++ $tip+ .detach()+ .css({ top: 0, left: 0, display: 'block' })+ .addClass(placement)+ .data('bs.' + this.type, this)++ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)++ var pos = this.getPosition()+ var actualWidth = $tip[0].offsetWidth+ var actualHeight = $tip[0].offsetHeight++ if (autoPlace) {+ var orgPlacement = placement+ var $parent = this.$element.parent()+ var parentDim = this.getPosition($parent)++ placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' :+ placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' :+ placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' :+ placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' :+ placement++ $tip+ .removeClass(orgPlacement)+ .addClass(placement)+ }++ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)++ this.applyPlacement(calculatedOffset, placement)++ var complete = function () {+ that.$element.trigger('shown.bs.' + that.type)+ that.hoverState = null+ }++ $.support.transition && this.$tip.hasClass('fade') ?+ $tip+ .one('bsTransitionEnd', complete)+ .emulateTransitionEnd(150) :+ complete()+ }+ }++ Tooltip.prototype.applyPlacement = function (offset, placement) {+ var $tip = this.tip()+ var width = $tip[0].offsetWidth+ var height = $tip[0].offsetHeight++ // manually read margins because getBoundingClientRect includes difference+ var marginTop = parseInt($tip.css('margin-top'), 10)+ var marginLeft = parseInt($tip.css('margin-left'), 10)++ // we must check for NaN for ie 8/9+ if (isNaN(marginTop)) marginTop = 0+ if (isNaN(marginLeft)) marginLeft = 0++ offset.top = offset.top + marginTop+ offset.left = offset.left + marginLeft++ // $.fn.offset doesn't round pixel values+ // so we use setOffset directly with our own function B-0+ $.offset.setOffset($tip[0], $.extend({+ using: function (props) {+ $tip.css({+ top: Math.round(props.top),+ left: Math.round(props.left)+ })+ }+ }, offset), 0)++ $tip.addClass('in')++ // check to see if placing tip in new offset caused the tip to resize itself+ var actualWidth = $tip[0].offsetWidth+ var actualHeight = $tip[0].offsetHeight++ if (placement == 'top' && actualHeight != height) {+ offset.top = offset.top + height - actualHeight+ }++ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)++ if (delta.left) offset.left += delta.left+ else offset.top += delta.top++ var arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight+ var arrowPosition = delta.left ? 'left' : 'top'+ var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'++ $tip.offset(offset)+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)+ }++ Tooltip.prototype.replaceArrow = function (delta, dimension, position) {+ this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')+ }++ Tooltip.prototype.setContent = function () {+ var $tip = this.tip()+ var title = this.getTitle()++ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)+ $tip.removeClass('fade in top bottom left right')+ }++ Tooltip.prototype.hide = function () {+ var that = this+ var $tip = this.tip()+ var e = $.Event('hide.bs.' + this.type)++ this.$element.removeAttr('aria-describedby')++ function complete() {+ if (that.hoverState != 'in') $tip.detach()+ that.$element.trigger('hidden.bs.' + that.type)+ }++ this.$element.trigger(e)++ if (e.isDefaultPrevented()) return++ $tip.removeClass('in')++ $.support.transition && this.$tip.hasClass('fade') ?+ $tip+ .one('bsTransitionEnd', complete)+ .emulateTransitionEnd(150) :+ complete()++ this.hoverState = null++ return this+ }++ Tooltip.prototype.fixTitle = function () {+ var $e = this.$element+ if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')+ }+ }++ Tooltip.prototype.hasContent = function () {+ return this.getTitle()+ }++ Tooltip.prototype.getPosition = function ($element) {+ $element = $element || this.$element+ var el = $element[0]+ var isBody = el.tagName == 'BODY'+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {+ scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),+ width: isBody ? $(window).width() : $element.outerWidth(),+ height: isBody ? $(window).height() : $element.outerHeight()+ }, isBody ? { top: 0, left: 0 } : $element.offset())+ }++ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }++ }++ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {+ var delta = { top: 0, left: 0 }+ if (!this.$viewport) return delta++ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0+ var viewportDimensions = this.getPosition(this.$viewport)++ if (/right|left/.test(placement)) {+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight+ if (topEdgeOffset < viewportDimensions.top) { // top overflow+ delta.top = viewportDimensions.top - topEdgeOffset+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset+ }+ } else {+ var leftEdgeOffset = pos.left - viewportPadding+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow+ delta.left = viewportDimensions.left - leftEdgeOffset+ } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset+ }+ }++ return delta+ }++ Tooltip.prototype.getTitle = function () {+ var title+ var $e = this.$element+ var o = this.options++ title = $e.attr('data-original-title')+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)++ return title+ }++ Tooltip.prototype.getUID = function (prefix) {+ do prefix += ~~(Math.random() * 1000000)+ while (document.getElementById(prefix))+ return prefix+ }++ Tooltip.prototype.tip = function () {+ return (this.$tip = this.$tip || $(this.options.template))+ }++ Tooltip.prototype.arrow = function () {+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))+ }++ Tooltip.prototype.validate = function () {+ if (!this.$element[0].parentNode) {+ this.hide()+ this.$element = null+ this.options = null+ }+ }++ Tooltip.prototype.enable = function () {+ this.enabled = true+ }++ Tooltip.prototype.disable = function () {+ this.enabled = false+ }++ Tooltip.prototype.toggleEnabled = function () {+ this.enabled = !this.enabled+ }++ Tooltip.prototype.toggle = function (e) {+ var self = this+ if (e) {+ self = $(e.currentTarget).data('bs.' + this.type)+ if (!self) {+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())+ $(e.currentTarget).data('bs.' + this.type, self)+ }+ }++ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)+ }++ Tooltip.prototype.destroy = function () {+ clearTimeout(this.timeout)+ this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)+ }+++ // TOOLTIP PLUGIN DEFINITION+ // =========================++ function Plugin(option) {+ return this.each(function () {+ var $this = $(this)+ var data = $this.data('bs.tooltip')+ var options = typeof option == 'object' && option++ if (!data && option == 'destroy') return+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))+ if (typeof option == 'string') data[option]()+ })+ }++ var old = $.fn.tooltip++ $.fn.tooltip = Plugin+ $.fn.tooltip.Constructor = Tooltip+++ // TOOLTIP NO CONFLICT+ // ===================++ $.fn.tooltip.noConflict = function () {+ $.fn.tooltip = old+ return this+ }++}(jQuery);++/* ========================================================================+ * Bootstrap: popover.js v3.2.0+ * http://getbootstrap.com/javascript/#popovers+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // POPOVER PUBLIC CLASS DEFINITION+ // ===============================++ var Popover = function (element, options) {+ this.init('popover', element, options)+ }++ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')++ Popover.VERSION = '3.2.0'++ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {+ placement: 'right',+ trigger: 'click',+ content: '',+ template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'+ })+++ // NOTE: POPOVER EXTENDS tooltip.js+ // ================================++ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)++ Popover.prototype.constructor = Popover++ Popover.prototype.getDefaults = function () {+ return Popover.DEFAULTS+ }++ Popover.prototype.setContent = function () {+ var $tip = this.tip()+ var title = this.getTitle()+ var content = this.getContent()++ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)+ $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'+ ](content)++ $tip.removeClass('fade top bottom left right in')++ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do+ // this manually by checking the contents.+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()+ }++ Popover.prototype.hasContent = function () {+ return this.getTitle() || this.getContent()+ }++ Popover.prototype.getContent = function () {+ var $e = this.$element+ var o = this.options++ return $e.attr('data-content')+ || (typeof o.content == 'function' ?+ o.content.call($e[0]) :+ o.content)+ }++ Popover.prototype.arrow = function () {+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))+ }++ Popover.prototype.tip = function () {+ if (!this.$tip) this.$tip = $(this.options.template)+ return this.$tip+ }+++ // POPOVER PLUGIN DEFINITION+ // =========================++ function Plugin(option) {+ return this.each(function () {+ var $this = $(this)+ var data = $this.data('bs.popover')+ var options = typeof option == 'object' && option++ if (!data && option == 'destroy') return+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))+ if (typeof option == 'string') data[option]()+ })+ }++ var old = $.fn.popover++ $.fn.popover = Plugin+ $.fn.popover.Constructor = Popover+++ // POPOVER NO CONFLICT+ // ===================++ $.fn.popover.noConflict = function () {+ $.fn.popover = old+ return this+ }++}(jQuery);++/* ========================================================================+ * Bootstrap: scrollspy.js v3.2.0+ * http://getbootstrap.com/javascript/#scrollspy+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // SCROLLSPY CLASS DEFINITION+ // ==========================++ function ScrollSpy(element, options) {+ var process = $.proxy(this.process, this)++ this.$body = $('body')+ this.$scrollElement = $(element).is('body') ? $(window) : $(element)+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)+ this.selector = (this.options.target || '') + ' .nav li > a'+ this.offsets = []+ this.targets = []+ this.activeTarget = null+ this.scrollHeight = 0++ this.$scrollElement.on('scroll.bs.scrollspy', process)+ this.refresh()+ this.process()+ }++ ScrollSpy.VERSION = '3.2.0'++ ScrollSpy.DEFAULTS = {+ offset: 10+ }++ ScrollSpy.prototype.getScrollHeight = function () {+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)+ }++ ScrollSpy.prototype.refresh = function () {+ var offsetMethod = 'offset'+ var offsetBase = 0++ if (!$.isWindow(this.$scrollElement[0])) {+ offsetMethod = 'position'+ offsetBase = this.$scrollElement.scrollTop()+ }++ this.offsets = []+ this.targets = []+ this.scrollHeight = this.getScrollHeight()++ var self = this++ this.$body+ .find(this.selector)+ .map(function () {+ var $el = $(this)+ var href = $el.data('target') || $el.attr('href')+ var $href = /^#./.test(href) && $(href)++ return ($href+ && $href.length+ && $href.is(':visible')+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null+ })+ .sort(function (a, b) { return a[0] - b[0] })+ .each(function () {+ self.offsets.push(this[0])+ self.targets.push(this[1])+ })+ }++ ScrollSpy.prototype.process = function () {+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset+ var scrollHeight = this.getScrollHeight()+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()+ var offsets = this.offsets+ var targets = this.targets+ var activeTarget = this.activeTarget+ var i++ if (this.scrollHeight != scrollHeight) {+ this.refresh()+ }++ if (scrollTop >= maxScroll) {+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)+ }++ if (activeTarget && scrollTop <= offsets[0]) {+ return activeTarget != (i = targets[0]) && this.activate(i)+ }++ for (i = offsets.length; i--;) {+ activeTarget != targets[i]+ && scrollTop >= offsets[i]+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])+ && this.activate(targets[i])+ }+ }++ ScrollSpy.prototype.activate = function (target) {+ this.activeTarget = target++ $(this.selector)+ .parentsUntil(this.options.target, '.active')+ .removeClass('active')++ var selector = this.selector ++ '[data-target="' + target + '"],' ++ this.selector + '[href="' + target + '"]'++ var active = $(selector)+ .parents('li')+ .addClass('active')++ if (active.parent('.dropdown-menu').length) {+ active = active+ .closest('li.dropdown')+ .addClass('active')+ }++ active.trigger('activate.bs.scrollspy')+ }+++ // SCROLLSPY PLUGIN DEFINITION+ // ===========================++ function Plugin(option) {+ return this.each(function () {+ var $this = $(this)+ var data = $this.data('bs.scrollspy')+ var options = typeof option == 'object' && option++ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))+ if (typeof option == 'string') data[option]()+ })+ }++ var old = $.fn.scrollspy++ $.fn.scrollspy = Plugin+ $.fn.scrollspy.Constructor = ScrollSpy+++ // SCROLLSPY NO CONFLICT+ // =====================++ $.fn.scrollspy.noConflict = function () {+ $.fn.scrollspy = old+ return this+ }+++ // SCROLLSPY DATA-API+ // ==================++ $(window).on('load.bs.scrollspy.data-api', function () {+ $('[data-spy="scroll"]').each(function () {+ var $spy = $(this)+ Plugin.call($spy, $spy.data())+ })+ })++}(jQuery);++/* ========================================================================+ * Bootstrap: tab.js v3.2.0+ * http://getbootstrap.com/javascript/#tabs+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // TAB CLASS DEFINITION+ // ====================++ var Tab = function (element) {+ this.element = $(element)+ }++ Tab.VERSION = '3.2.0'++ Tab.prototype.show = function () {+ var $this = this.element+ var $ul = $this.closest('ul:not(.dropdown-menu)')+ var selector = $this.data('target')++ if (!selector) {+ selector = $this.attr('href')+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7+ }++ if ($this.parent('li').hasClass('active')) return++ var previous = $ul.find('.active:last a')[0]+ var e = $.Event('show.bs.tab', {+ relatedTarget: previous+ })++ $this.trigger(e)++ if (e.isDefaultPrevented()) return++ var $target = $(selector)++ this.activate($this.closest('li'), $ul)+ this.activate($target, $target.parent(), function () {+ $this.trigger({+ type: 'shown.bs.tab',+ relatedTarget: previous+ })+ })+ }++ Tab.prototype.activate = function (element, container, callback) {+ var $active = container.find('> .active')+ var transition = callback+ && $.support.transition+ && $active.hasClass('fade')++ function next() {+ $active+ .removeClass('active')+ .find('> .dropdown-menu > .active')+ .removeClass('active')++ element.addClass('active')++ if (transition) {+ element[0].offsetWidth // reflow for transition+ element.addClass('in')+ } else {+ element.removeClass('fade')+ }++ if (element.parent('.dropdown-menu')) {+ element.closest('li.dropdown').addClass('active')+ }++ callback && callback()+ }++ transition ?+ $active+ .one('bsTransitionEnd', next)+ .emulateTransitionEnd(150) :+ next()++ $active.removeClass('in')+ }+++ // TAB PLUGIN DEFINITION+ // =====================++ function Plugin(option) {+ return this.each(function () {+ var $this = $(this)+ var data = $this.data('bs.tab')++ if (!data) $this.data('bs.tab', (data = new Tab(this)))+ if (typeof option == 'string') data[option]()+ })+ }++ var old = $.fn.tab++ $.fn.tab = Plugin+ $.fn.tab.Constructor = Tab+++ // TAB NO CONFLICT+ // ===============++ $.fn.tab.noConflict = function () {+ $.fn.tab = old+ return this+ }+++ // TAB DATA-API+ // ============++ $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {+ e.preventDefault()+ Plugin.call($(this), 'show')+ })++}(jQuery);++/* ========================================================================+ * Bootstrap: affix.js v3.2.0+ * http://getbootstrap.com/javascript/#affix+ * ========================================================================+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ * ======================================================================== */++++function ($) {+ 'use strict';++ // AFFIX CLASS DEFINITION+ // ======================++ var Affix = function (element, options) {+ this.options = $.extend({}, Affix.DEFAULTS, options)++ this.$target = $(this.options.target)+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))++ this.$element = $(element)+ this.affixed =+ this.unpin =+ this.pinnedOffset = null++ this.checkPosition()+ }++ Affix.VERSION = '3.2.0'++ Affix.RESET = 'affix affix-top affix-bottom'++ Affix.DEFAULTS = {+ offset: 0,+ target: window+ }++ Affix.prototype.getPinnedOffset = function () {+ if (this.pinnedOffset) return this.pinnedOffset+ this.$element.removeClass(Affix.RESET).addClass('affix')+ var scrollTop = this.$target.scrollTop()+ var position = this.$element.offset()+ return (this.pinnedOffset = position.top - scrollTop)+ }++ Affix.prototype.checkPositionWithEventLoop = function () {+ setTimeout($.proxy(this.checkPosition, this), 1)+ }++ Affix.prototype.checkPosition = function () {+ if (!this.$element.is(':visible')) return++ var scrollHeight = $(document).height()+ var scrollTop = this.$target.scrollTop()+ var position = this.$element.offset()+ var offset = this.options.offset+ var offsetTop = offset.top+ var offsetBottom = offset.bottom++ if (typeof offset != 'object') offsetBottom = offsetTop = offset+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)++ var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :+ offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :+ offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false++ if (this.affixed === affix) return+ if (this.unpin != null) this.$element.css('top', '')++ var affixType = 'affix' + (affix ? '-' + affix : '')+ var e = $.Event(affixType + '.bs.affix')++ this.$element.trigger(e)++ if (e.isDefaultPrevented()) return++ this.affixed = affix+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null++ this.$element+ .removeClass(Affix.RESET)+ .addClass(affixType)+ .trigger($.Event(affixType.replace('affix', 'affixed')))++ if (affix == 'bottom') {+ this.$element.offset({+ top: scrollHeight - this.$element.height() - offsetBottom+ })+ }+ }+++ // AFFIX PLUGIN DEFINITION+ // =======================++ function Plugin(option) {+ return this.each(function () {+ var $this = $(this)+ var data = $this.data('bs.affix')+ var options = typeof option == 'object' && option++ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))+ if (typeof option == 'string') data[option]()+ })+ }++ var old = $.fn.affix++ $.fn.affix = Plugin+ $.fn.affix.Constructor = Affix+++ // AFFIX NO CONFLICT+ // =================++ $.fn.affix.noConflict = function () {+ $.fn.affix = old+ return this+ }+++ // AFFIX DATA-API+ // ==============++ $(window).on('load', function () {+ $('[data-spy="affix"]').each(function () {+ var $spy = $(this)+ var data = $spy.data()++ data.offset = data.offset || {}++ if (data.offsetBottom) data.offset.bottom = data.offsetBottom+ if (data.offsetTop) data.offset.top = data.offsetTop++ Plugin.call($spy, data)+ })+ })++}(jQuery);
@@ -0,0 +1,6 @@+/*!+ * Bootstrap v3.2.0 (http://getbootstrap.com)+ * Copyright 2011-2014 Twitter, Inc.+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)+ */+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
@@ -0,0 +1,1427 @@+// Copyright 2006 Google Inc.+//+// Licensed under the Apache License, Version 2.0 (the "License");+// you may not use this file except in compliance with the License.+// You may obtain a copy of the License at+//+// http://www.apache.org/licenses/LICENSE-2.0+//+// Unless required by applicable law or agreed to in writing, software+// distributed under the License is distributed on an "AS IS" BASIS,+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+// See the License for the specific language governing permissions and+// limitations under the License.+++// Known Issues:+//+// * Patterns only support repeat.+// * Radial gradient are not implemented. The VML version of these look very+// different from the canvas one.+// * Clipping paths are not implemented.+// * Coordsize. The width and height attribute have higher priority than the+// width and height style values which isn't correct.+// * Painting mode isn't implemented.+// * Canvas width/height should is using content-box by default. IE in+// Quirks mode will draw the canvas using border-box. Either change your+// doctype to HTML5+// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)+// or use Box Sizing Behavior from WebFX+// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)+// * Non uniform scaling does not correctly scale strokes.+// * Filling very large shapes (above 5000 points) is buggy.+// * Optimize. There is always room for speed improvements.++// Only add this code if we do not already have a canvas implementation+if (!document.createElement('canvas').getContext) {++(function() {++ // alias some functions to make (compiled) code shorter+ var m = Math;+ var mr = m.round;+ var ms = m.sin;+ var mc = m.cos;+ var abs = m.abs;+ var sqrt = m.sqrt;++ // this is used for sub pixel precision+ var Z = 10;+ var Z2 = Z / 2;++ /**+ * This funtion is assigned to the <canvas> elements as element.getContext().+ * @this {HTMLElement}+ * @return {CanvasRenderingContext2D_}+ */+ function getContext() {+ return this.context_ ||+ (this.context_ = new CanvasRenderingContext2D_(this));+ }++ var slice = Array.prototype.slice;++ /**+ * Binds a function to an object. The returned function will always use the+ * passed in {@code obj} as {@code this}.+ *+ * Example:+ *+ * g = bind(f, obj, a, b)+ * g(c, d) // will do f.call(obj, a, b, c, d)+ *+ * @param {Function} f The function to bind the object to+ * @param {Object} obj The object that should act as this when the function+ * is called+ * @param {*} var_args Rest arguments that will be used as the initial+ * arguments when the function is called+ * @return {Function} A new function that has bound this+ */+ function bind(f, obj, var_args) {+ var a = slice.call(arguments, 2);+ return function() {+ return f.apply(obj, a.concat(slice.call(arguments)));+ };+ }++ function encodeHtmlAttribute(s) {+ return String(s).replace(/&/g, '&').replace(/"/g, '"');+ }++ function addNamespacesAndStylesheet(doc) {+ // create xmlns+ if (!doc.namespaces['g_vml_']) {+ doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml',+ '#default#VML');++ }+ if (!doc.namespaces['g_o_']) {+ doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office',+ '#default#VML');+ }++ // Setup default CSS. Only add one style sheet per document+ if (!doc.styleSheets['ex_canvas_']) {+ var ss = doc.createStyleSheet();+ ss.owningElement.id = 'ex_canvas_';+ ss.cssText = 'canvas{display:inline-block;overflow:hidden;' ++ // default size is 300x150 in Gecko and Opera+ 'text-align:left;width:300px;height:150px}';+ }+ }++ // Add namespaces and stylesheet at startup.+ addNamespacesAndStylesheet(document);++ var G_vmlCanvasManager_ = {+ init: function(opt_doc) {+ if (/MSIE/.test(navigator.userAgent) && !window.opera) {+ var doc = opt_doc || document;+ // Create a dummy element so that IE will allow canvas elements to be+ // recognized.+ doc.createElement('canvas');+ doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));+ }+ },++ init_: function(doc) {+ // find all canvas elements+ var els = doc.getElementsByTagName('canvas');+ for (var i = 0; i < els.length; i++) {+ this.initElement(els[i]);+ }+ },++ /**+ * Public initializes a canvas element so that it can be used as canvas+ * element from now on. This is called automatically before the page is+ * loaded but if you are creating elements using createElement you need to+ * make sure this is called on the element.+ * @param {HTMLElement} el The canvas element to initialize.+ * @return {HTMLElement} the element that was created.+ */+ initElement: function(el) {+ if (!el.getContext) {+ el.getContext = getContext;++ // Add namespaces and stylesheet to document of the element.+ addNamespacesAndStylesheet(el.ownerDocument);++ // Remove fallback content. There is no way to hide text nodes so we+ // just remove all childNodes. We could hide all elements and remove+ // text nodes but who really cares about the fallback content.+ el.innerHTML = '';++ // do not use inline function because that will leak memory+ el.attachEvent('onpropertychange', onPropertyChange);+ el.attachEvent('onresize', onResize);++ var attrs = el.attributes;+ if (attrs.width && attrs.width.specified) {+ // TODO: use runtimeStyle and coordsize+ // el.getContext().setWidth_(attrs.width.nodeValue);+ el.style.width = attrs.width.nodeValue + 'px';+ } else {+ el.width = el.clientWidth;+ }+ if (attrs.height && attrs.height.specified) {+ // TODO: use runtimeStyle and coordsize+ // el.getContext().setHeight_(attrs.height.nodeValue);+ el.style.height = attrs.height.nodeValue + 'px';+ } else {+ el.height = el.clientHeight;+ }+ //el.getContext().setCoordsize_()+ }+ return el;+ }+ };++ function onPropertyChange(e) {+ var el = e.srcElement;++ switch (e.propertyName) {+ case 'width':+ el.getContext().clearRect();+ el.style.width = el.attributes.width.nodeValue + 'px';+ // In IE8 this does not trigger onresize.+ el.firstChild.style.width = el.clientWidth + 'px';+ break;+ case 'height':+ el.getContext().clearRect();+ el.style.height = el.attributes.height.nodeValue + 'px';+ el.firstChild.style.height = el.clientHeight + 'px';+ break;+ }+ }++ function onResize(e) {+ var el = e.srcElement;+ if (el.firstChild) {+ el.firstChild.style.width = el.clientWidth + 'px';+ el.firstChild.style.height = el.clientHeight + 'px';+ }+ }++ G_vmlCanvasManager_.init();++ // precompute "00" to "FF"+ var decToHex = [];+ for (var i = 0; i < 16; i++) {+ for (var j = 0; j < 16; j++) {+ decToHex[i * 16 + j] = i.toString(16) + j.toString(16);+ }+ }++ function createMatrixIdentity() {+ return [+ [1, 0, 0],+ [0, 1, 0],+ [0, 0, 1]+ ];+ }++ function matrixMultiply(m1, m2) {+ var result = createMatrixIdentity();++ for (var x = 0; x < 3; x++) {+ for (var y = 0; y < 3; y++) {+ var sum = 0;++ for (var z = 0; z < 3; z++) {+ sum += m1[x][z] * m2[z][y];+ }++ result[x][y] = sum;+ }+ }+ return result;+ }++ function copyState(o1, o2) {+ o2.fillStyle = o1.fillStyle;+ o2.lineCap = o1.lineCap;+ o2.lineJoin = o1.lineJoin;+ o2.lineWidth = o1.lineWidth;+ o2.miterLimit = o1.miterLimit;+ o2.shadowBlur = o1.shadowBlur;+ o2.shadowColor = o1.shadowColor;+ o2.shadowOffsetX = o1.shadowOffsetX;+ o2.shadowOffsetY = o1.shadowOffsetY;+ o2.strokeStyle = o1.strokeStyle;+ o2.globalAlpha = o1.globalAlpha;+ o2.font = o1.font;+ o2.textAlign = o1.textAlign;+ o2.textBaseline = o1.textBaseline;+ o2.arcScaleX_ = o1.arcScaleX_;+ o2.arcScaleY_ = o1.arcScaleY_;+ o2.lineScale_ = o1.lineScale_;+ }++ var colorData = {+ aliceblue: '#F0F8FF',+ antiquewhite: '#FAEBD7',+ aquamarine: '#7FFFD4',+ azure: '#F0FFFF',+ beige: '#F5F5DC',+ bisque: '#FFE4C4',+ black: '#000000',+ blanchedalmond: '#FFEBCD',+ blueviolet: '#8A2BE2',+ brown: '#A52A2A',+ burlywood: '#DEB887',+ cadetblue: '#5F9EA0',+ chartreuse: '#7FFF00',+ chocolate: '#D2691E',+ coral: '#FF7F50',+ cornflowerblue: '#6495ED',+ cornsilk: '#FFF8DC',+ crimson: '#DC143C',+ cyan: '#00FFFF',+ darkblue: '#00008B',+ darkcyan: '#008B8B',+ darkgoldenrod: '#B8860B',+ darkgray: '#A9A9A9',+ darkgreen: '#006400',+ darkgrey: '#A9A9A9',+ darkkhaki: '#BDB76B',+ darkmagenta: '#8B008B',+ darkolivegreen: '#556B2F',+ darkorange: '#FF8C00',+ darkorchid: '#9932CC',+ darkred: '#8B0000',+ darksalmon: '#E9967A',+ darkseagreen: '#8FBC8F',+ darkslateblue: '#483D8B',+ darkslategray: '#2F4F4F',+ darkslategrey: '#2F4F4F',+ darkturquoise: '#00CED1',+ darkviolet: '#9400D3',+ deeppink: '#FF1493',+ deepskyblue: '#00BFFF',+ dimgray: '#696969',+ dimgrey: '#696969',+ dodgerblue: '#1E90FF',+ firebrick: '#B22222',+ floralwhite: '#FFFAF0',+ forestgreen: '#228B22',+ gainsboro: '#DCDCDC',+ ghostwhite: '#F8F8FF',+ gold: '#FFD700',+ goldenrod: '#DAA520',+ grey: '#808080',+ greenyellow: '#ADFF2F',+ honeydew: '#F0FFF0',+ hotpink: '#FF69B4',+ indianred: '#CD5C5C',+ indigo: '#4B0082',+ ivory: '#FFFFF0',+ khaki: '#F0E68C',+ lavender: '#E6E6FA',+ lavenderblush: '#FFF0F5',+ lawngreen: '#7CFC00',+ lemonchiffon: '#FFFACD',+ lightblue: '#ADD8E6',+ lightcoral: '#F08080',+ lightcyan: '#E0FFFF',+ lightgoldenrodyellow: '#FAFAD2',+ lightgreen: '#90EE90',+ lightgrey: '#D3D3D3',+ lightpink: '#FFB6C1',+ lightsalmon: '#FFA07A',+ lightseagreen: '#20B2AA',+ lightskyblue: '#87CEFA',+ lightslategray: '#778899',+ lightslategrey: '#778899',+ lightsteelblue: '#B0C4DE',+ lightyellow: '#FFFFE0',+ limegreen: '#32CD32',+ linen: '#FAF0E6',+ magenta: '#FF00FF',+ mediumaquamarine: '#66CDAA',+ mediumblue: '#0000CD',+ mediumorchid: '#BA55D3',+ mediumpurple: '#9370DB',+ mediumseagreen: '#3CB371',+ mediumslateblue: '#7B68EE',+ mediumspringgreen: '#00FA9A',+ mediumturquoise: '#48D1CC',+ mediumvioletred: '#C71585',+ midnightblue: '#191970',+ mintcream: '#F5FFFA',+ mistyrose: '#FFE4E1',+ moccasin: '#FFE4B5',+ navajowhite: '#FFDEAD',+ oldlace: '#FDF5E6',+ olivedrab: '#6B8E23',+ orange: '#FFA500',+ orangered: '#FF4500',+ orchid: '#DA70D6',+ palegoldenrod: '#EEE8AA',+ palegreen: '#98FB98',+ paleturquoise: '#AFEEEE',+ palevioletred: '#DB7093',+ papayawhip: '#FFEFD5',+ peachpuff: '#FFDAB9',+ peru: '#CD853F',+ pink: '#FFC0CB',+ plum: '#DDA0DD',+ powderblue: '#B0E0E6',+ rosybrown: '#BC8F8F',+ royalblue: '#4169E1',+ saddlebrown: '#8B4513',+ salmon: '#FA8072',+ sandybrown: '#F4A460',+ seagreen: '#2E8B57',+ seashell: '#FFF5EE',+ sienna: '#A0522D',+ skyblue: '#87CEEB',+ slateblue: '#6A5ACD',+ slategray: '#708090',+ slategrey: '#708090',+ snow: '#FFFAFA',+ springgreen: '#00FF7F',+ steelblue: '#4682B4',+ tan: '#D2B48C',+ thistle: '#D8BFD8',+ tomato: '#FF6347',+ turquoise: '#40E0D0',+ violet: '#EE82EE',+ wheat: '#F5DEB3',+ whitesmoke: '#F5F5F5',+ yellowgreen: '#9ACD32'+ };+++ function getRgbHslContent(styleString) {+ var start = styleString.indexOf('(', 3);+ var end = styleString.indexOf(')', start + 1);+ var parts = styleString.substring(start + 1, end).split(',');+ // add alpha if needed+ if (parts.length == 4 && styleString.substr(3, 1) == 'a') {+ alpha = Number(parts[3]);+ } else {+ parts[3] = 1;+ }+ return parts;+ }++ function percent(s) {+ return parseFloat(s) / 100;+ }++ function clamp(v, min, max) {+ return Math.min(max, Math.max(min, v));+ }++ function hslToRgb(parts){+ var r, g, b;+ h = parseFloat(parts[0]) / 360 % 360;+ if (h < 0)+ h++;+ s = clamp(percent(parts[1]), 0, 1);+ l = clamp(percent(parts[2]), 0, 1);+ if (s == 0) {+ r = g = b = l; // achromatic+ } else {+ var q = l < 0.5 ? l * (1 + s) : l + s - l * s;+ var p = 2 * l - q;+ r = hueToRgb(p, q, h + 1 / 3);+ g = hueToRgb(p, q, h);+ b = hueToRgb(p, q, h - 1 / 3);+ }++ return '#' + decToHex[Math.floor(r * 255)] ++ decToHex[Math.floor(g * 255)] ++ decToHex[Math.floor(b * 255)];+ }++ function hueToRgb(m1, m2, h) {+ if (h < 0)+ h++;+ if (h > 1)+ h--;++ if (6 * h < 1)+ return m1 + (m2 - m1) * 6 * h;+ else if (2 * h < 1)+ return m2;+ else if (3 * h < 2)+ return m1 + (m2 - m1) * (2 / 3 - h) * 6;+ else+ return m1;+ }++ function processStyle(styleString) {+ var str, alpha = 1;++ styleString = String(styleString);+ if (styleString.charAt(0) == '#') {+ str = styleString;+ } else if (/^rgb/.test(styleString)) {+ var parts = getRgbHslContent(styleString);+ var str = '#', n;+ for (var i = 0; i < 3; i++) {+ if (parts[i].indexOf('%') != -1) {+ n = Math.floor(percent(parts[i]) * 255);+ } else {+ n = Number(parts[i]);+ }+ str += decToHex[clamp(n, 0, 255)];+ }+ alpha = parts[3];+ } else if (/^hsl/.test(styleString)) {+ var parts = getRgbHslContent(styleString);+ str = hslToRgb(parts);+ alpha = parts[3];+ } else {+ str = colorData[styleString] || styleString;+ }+ return {color: str, alpha: alpha};+ }++ var DEFAULT_STYLE = {+ style: 'normal',+ variant: 'normal',+ weight: 'normal',+ size: 10,+ family: 'sans-serif'+ };++ // Internal text style cache+ var fontStyleCache = {};++ function processFontStyle(styleString) {+ if (fontStyleCache[styleString]) {+ return fontStyleCache[styleString];+ }++ var el = document.createElement('div');+ var style = el.style;+ try {+ style.font = styleString;+ } catch (ex) {+ // Ignore failures to set to invalid font.+ }++ return fontStyleCache[styleString] = {+ style: style.fontStyle || DEFAULT_STYLE.style,+ variant: style.fontVariant || DEFAULT_STYLE.variant,+ weight: style.fontWeight || DEFAULT_STYLE.weight,+ size: style.fontSize || DEFAULT_STYLE.size,+ family: style.fontFamily || DEFAULT_STYLE.family+ };+ }++ function getComputedStyle(style, element) {+ var computedStyle = {};++ for (var p in style) {+ computedStyle[p] = style[p];+ }++ // Compute the size+ var canvasFontSize = parseFloat(element.currentStyle.fontSize),+ fontSize = parseFloat(style.size);++ if (typeof style.size == 'number') {+ computedStyle.size = style.size;+ } else if (style.size.indexOf('px') != -1) {+ computedStyle.size = fontSize;+ } else if (style.size.indexOf('em') != -1) {+ computedStyle.size = canvasFontSize * fontSize;+ } else if(style.size.indexOf('%') != -1) {+ computedStyle.size = (canvasFontSize / 100) * fontSize;+ } else if (style.size.indexOf('pt') != -1) {+ computedStyle.size = fontSize / .75;+ } else {+ computedStyle.size = canvasFontSize;+ }++ // Different scaling between normal text and VML text. This was found using+ // trial and error to get the same size as non VML text.+ computedStyle.size *= 0.981;++ return computedStyle;+ }++ function buildStyle(style) {+ return style.style + ' ' + style.variant + ' ' + style.weight + ' ' ++ style.size + 'px ' + style.family;+ }++ function processLineCap(lineCap) {+ switch (lineCap) {+ case 'butt':+ return 'flat';+ case 'round':+ return 'round';+ case 'square':+ default:+ return 'square';+ }+ }++ /**+ * This class implements CanvasRenderingContext2D interface as described by+ * the WHATWG.+ * @param {HTMLElement} surfaceElement The element that the 2D context should+ * be associated with+ */+ function CanvasRenderingContext2D_(surfaceElement) {+ this.m_ = createMatrixIdentity();++ this.mStack_ = [];+ this.aStack_ = [];+ this.currentPath_ = [];++ // Canvas context properties+ this.strokeStyle = '#000';+ this.fillStyle = '#000';++ this.lineWidth = 1;+ this.lineJoin = 'miter';+ this.lineCap = 'butt';+ this.miterLimit = Z * 1;+ this.globalAlpha = 1;+ this.font = '10px sans-serif';+ this.textAlign = 'left';+ this.textBaseline = 'alphabetic';+ this.canvas = surfaceElement;++ var el = surfaceElement.ownerDocument.createElement('div');+ el.style.width = surfaceElement.clientWidth + 'px';+ el.style.height = surfaceElement.clientHeight + 'px';+ el.style.overflow = 'hidden';+ el.style.position = 'absolute';+ surfaceElement.appendChild(el);++ this.element_ = el;+ this.arcScaleX_ = 1;+ this.arcScaleY_ = 1;+ this.lineScale_ = 1;+ }++ var contextPrototype = CanvasRenderingContext2D_.prototype;+ contextPrototype.clearRect = function() {+ if (this.textMeasureEl_) {+ this.textMeasureEl_.removeNode(true);+ this.textMeasureEl_ = null;+ }+ this.element_.innerHTML = '';+ };++ contextPrototype.beginPath = function() {+ // TODO: Branch current matrix so that save/restore has no effect+ // as per safari docs.+ this.currentPath_ = [];+ };++ contextPrototype.moveTo = function(aX, aY) {+ var p = this.getCoords_(aX, aY);+ this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});+ this.currentX_ = p.x;+ this.currentY_ = p.y;+ };++ contextPrototype.lineTo = function(aX, aY) {+ var p = this.getCoords_(aX, aY);+ this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});++ this.currentX_ = p.x;+ this.currentY_ = p.y;+ };++ contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,+ aCP2x, aCP2y,+ aX, aY) {+ var p = this.getCoords_(aX, aY);+ var cp1 = this.getCoords_(aCP1x, aCP1y);+ var cp2 = this.getCoords_(aCP2x, aCP2y);+ bezierCurveTo(this, cp1, cp2, p);+ };++ // Helper function that takes the already fixed cordinates.+ function bezierCurveTo(self, cp1, cp2, p) {+ self.currentPath_.push({+ type: 'bezierCurveTo',+ cp1x: cp1.x,+ cp1y: cp1.y,+ cp2x: cp2.x,+ cp2y: cp2.y,+ x: p.x,+ y: p.y+ });+ self.currentX_ = p.x;+ self.currentY_ = p.y;+ }++ contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {+ // the following is lifted almost directly from+ // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes++ var cp = this.getCoords_(aCPx, aCPy);+ var p = this.getCoords_(aX, aY);++ var cp1 = {+ x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),+ y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)+ };+ var cp2 = {+ x: cp1.x + (p.x - this.currentX_) / 3.0,+ y: cp1.y + (p.y - this.currentY_) / 3.0+ };++ bezierCurveTo(this, cp1, cp2, p);+ };++ contextPrototype.arc = function(aX, aY, aRadius,+ aStartAngle, aEndAngle, aClockwise) {+ aRadius *= Z;+ var arcType = aClockwise ? 'at' : 'wa';++ var xStart = aX + mc(aStartAngle) * aRadius - Z2;+ var yStart = aY + ms(aStartAngle) * aRadius - Z2;++ var xEnd = aX + mc(aEndAngle) * aRadius - Z2;+ var yEnd = aY + ms(aEndAngle) * aRadius - Z2;++ // IE won't render arches drawn counter clockwise if xStart == xEnd.+ if (xStart == xEnd && !aClockwise) {+ xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something+ // that can be represented in binary+ }++ var p = this.getCoords_(aX, aY);+ var pStart = this.getCoords_(xStart, yStart);+ var pEnd = this.getCoords_(xEnd, yEnd);++ this.currentPath_.push({type: arcType,+ x: p.x,+ y: p.y,+ radius: aRadius,+ xStart: pStart.x,+ yStart: pStart.y,+ xEnd: pEnd.x,+ yEnd: pEnd.y});++ };++ contextPrototype.rect = function(aX, aY, aWidth, aHeight) {+ this.moveTo(aX, aY);+ this.lineTo(aX + aWidth, aY);+ this.lineTo(aX + aWidth, aY + aHeight);+ this.lineTo(aX, aY + aHeight);+ this.closePath();+ };++ contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {+ var oldPath = this.currentPath_;+ this.beginPath();++ this.moveTo(aX, aY);+ this.lineTo(aX + aWidth, aY);+ this.lineTo(aX + aWidth, aY + aHeight);+ this.lineTo(aX, aY + aHeight);+ this.closePath();+ this.stroke();++ this.currentPath_ = oldPath;+ };++ contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {+ var oldPath = this.currentPath_;+ this.beginPath();++ this.moveTo(aX, aY);+ this.lineTo(aX + aWidth, aY);+ this.lineTo(aX + aWidth, aY + aHeight);+ this.lineTo(aX, aY + aHeight);+ this.closePath();+ this.fill();++ this.currentPath_ = oldPath;+ };++ contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {+ var gradient = new CanvasGradient_('gradient');+ gradient.x0_ = aX0;+ gradient.y0_ = aY0;+ gradient.x1_ = aX1;+ gradient.y1_ = aY1;+ return gradient;+ };++ contextPrototype.createRadialGradient = function(aX0, aY0, aR0,+ aX1, aY1, aR1) {+ var gradient = new CanvasGradient_('gradientradial');+ gradient.x0_ = aX0;+ gradient.y0_ = aY0;+ gradient.r0_ = aR0;+ gradient.x1_ = aX1;+ gradient.y1_ = aY1;+ gradient.r1_ = aR1;+ return gradient;+ };++ contextPrototype.drawImage = function(image, var_args) {+ var dx, dy, dw, dh, sx, sy, sw, sh;++ // to find the original width we overide the width and height+ var oldRuntimeWidth = image.runtimeStyle.width;+ var oldRuntimeHeight = image.runtimeStyle.height;+ image.runtimeStyle.width = 'auto';+ image.runtimeStyle.height = 'auto';++ // get the original size+ var w = image.width;+ var h = image.height;++ // and remove overides+ image.runtimeStyle.width = oldRuntimeWidth;+ image.runtimeStyle.height = oldRuntimeHeight;++ if (arguments.length == 3) {+ dx = arguments[1];+ dy = arguments[2];+ sx = sy = 0;+ sw = dw = w;+ sh = dh = h;+ } else if (arguments.length == 5) {+ dx = arguments[1];+ dy = arguments[2];+ dw = arguments[3];+ dh = arguments[4];+ sx = sy = 0;+ sw = w;+ sh = h;+ } else if (arguments.length == 9) {+ sx = arguments[1];+ sy = arguments[2];+ sw = arguments[3];+ sh = arguments[4];+ dx = arguments[5];+ dy = arguments[6];+ dw = arguments[7];+ dh = arguments[8];+ } else {+ throw Error('Invalid number of arguments');+ }++ var d = this.getCoords_(dx, dy);++ var w2 = sw / 2;+ var h2 = sh / 2;++ var vmlStr = [];++ var W = 10;+ var H = 10;++ // For some reason that I've now forgotten, using divs didn't work+ vmlStr.push(' <g_vml_:group',+ ' coordsize="', Z * W, ',', Z * H, '"',+ ' coordorigin="0,0"' ,+ ' style="width:', W, 'px;height:', H, 'px;position:absolute;');++ // If filters are necessary (rotation exists), create them+ // filters are bog-slow, so only create them if abbsolutely necessary+ // The following check doesn't account for skews (which don't exist+ // in the canvas spec (yet) anyway.++ if (this.m_[0][0] != 1 || this.m_[0][1] ||+ this.m_[1][1] != 1 || this.m_[1][0]) {+ var filter = [];++ // Note the 12/21 reversal+ filter.push('M11=', this.m_[0][0], ',',+ 'M12=', this.m_[1][0], ',',+ 'M21=', this.m_[0][1], ',',+ 'M22=', this.m_[1][1], ',',+ 'Dx=', mr(d.x / Z), ',',+ 'Dy=', mr(d.y / Z), '');++ // Bounding box calculation (need to minimize displayed area so that+ // filters don't waste time on unused pixels.+ var max = d;+ var c2 = this.getCoords_(dx + dw, dy);+ var c3 = this.getCoords_(dx, dy + dh);+ var c4 = this.getCoords_(dx + dw, dy + dh);++ max.x = m.max(max.x, c2.x, c3.x, c4.x);+ max.y = m.max(max.y, c2.y, c3.y, c4.y);++ vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),+ 'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',+ filter.join(''), ", sizingmethod='clip');");++ } else {+ vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');+ }++ vmlStr.push(' ">' ,+ '<g_vml_:image src="', image.src, '"',+ ' style="width:', Z * dw, 'px;',+ ' height:', Z * dh, 'px"',+ ' cropleft="', sx / w, '"',+ ' croptop="', sy / h, '"',+ ' cropright="', (w - sx - sw) / w, '"',+ ' cropbottom="', (h - sy - sh) / h, '"',+ ' />',+ '</g_vml_:group>');++ this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));+ };++ contextPrototype.stroke = function(aFill) {+ var W = 10;+ var H = 10;+ // Divide the shape into chunks if it's too long because IE has a limit+ // somewhere for how long a VML shape can be. This simple division does+ // not work with fills, only strokes, unfortunately.+ var chunkSize = 5000;++ var min = {x: null, y: null};+ var max = {x: null, y: null};++ for (var j = 0; j < this.currentPath_.length; j += chunkSize) {+ var lineStr = [];+ var lineOpen = false;++ lineStr.push('<g_vml_:shape',+ ' filled="', !!aFill, '"',+ ' style="position:absolute;width:', W, 'px;height:', H, 'px;"',+ ' coordorigin="0,0"',+ ' coordsize="', Z * W, ',', Z * H, '"',+ ' stroked="', !aFill, '"',+ ' path="');++ var newSeq = false;++ for (var i = j; i < Math.min(j + chunkSize, this.currentPath_.length); i++) {+ if (i % chunkSize == 0 && i > 0) { // move into position for next chunk+ lineStr.push(' m ', mr(this.currentPath_[i-1].x), ',', mr(this.currentPath_[i-1].y));+ }++ var p = this.currentPath_[i];+ var c;++ switch (p.type) {+ case 'moveTo':+ c = p;+ lineStr.push(' m ', mr(p.x), ',', mr(p.y));+ break;+ case 'lineTo':+ lineStr.push(' l ', mr(p.x), ',', mr(p.y));+ break;+ case 'close':+ lineStr.push(' x ');+ p = null;+ break;+ case 'bezierCurveTo':+ lineStr.push(' c ',+ mr(p.cp1x), ',', mr(p.cp1y), ',',+ mr(p.cp2x), ',', mr(p.cp2y), ',',+ mr(p.x), ',', mr(p.y));+ break;+ case 'at':+ case 'wa':+ lineStr.push(' ', p.type, ' ',+ mr(p.x - this.arcScaleX_ * p.radius), ',',+ mr(p.y - this.arcScaleY_ * p.radius), ' ',+ mr(p.x + this.arcScaleX_ * p.radius), ',',+ mr(p.y + this.arcScaleY_ * p.radius), ' ',+ mr(p.xStart), ',', mr(p.yStart), ' ',+ mr(p.xEnd), ',', mr(p.yEnd));+ break;+ }+ + + // TODO: Following is broken for curves due to+ // move to proper paths.+ + // Figure out dimensions so we can do gradient fills+ // properly+ if (p) {+ if (min.x == null || p.x < min.x) {+ min.x = p.x;+ }+ if (max.x == null || p.x > max.x) {+ max.x = p.x;+ }+ if (min.y == null || p.y < min.y) {+ min.y = p.y;+ }+ if (max.y == null || p.y > max.y) {+ max.y = p.y;+ }+ }+ }+ lineStr.push(' ">');+ + if (!aFill) {+ appendStroke(this, lineStr);+ } else {+ appendFill(this, lineStr, min, max);+ }+ + lineStr.push('</g_vml_:shape>');+ + this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));+ }+ };++ function appendStroke(ctx, lineStr) {+ var a = processStyle(ctx.strokeStyle);+ var color = a.color;+ var opacity = a.alpha * ctx.globalAlpha;+ var lineWidth = ctx.lineScale_ * ctx.lineWidth;++ // VML cannot correctly render a line if the width is less than 1px.+ // In that case, we dilute the color to make the line look thinner.+ if (lineWidth < 1) {+ opacity *= lineWidth;+ }++ lineStr.push(+ '<g_vml_:stroke',+ ' opacity="', opacity, '"',+ ' joinstyle="', ctx.lineJoin, '"',+ ' miterlimit="', ctx.miterLimit, '"',+ ' endcap="', processLineCap(ctx.lineCap), '"',+ ' weight="', lineWidth, 'px"',+ ' color="', color, '" />'+ );+ }++ function appendFill(ctx, lineStr, min, max) {+ var fillStyle = ctx.fillStyle;+ var arcScaleX = ctx.arcScaleX_;+ var arcScaleY = ctx.arcScaleY_;+ var width = max.x - min.x;+ var height = max.y - min.y;+ if (fillStyle instanceof CanvasGradient_) {+ // TODO: Gradients transformed with the transformation matrix.+ var angle = 0;+ var focus = {x: 0, y: 0};++ // additional offset+ var shift = 0;+ // scale factor for offset+ var expansion = 1;++ if (fillStyle.type_ == 'gradient') {+ var x0 = fillStyle.x0_ / arcScaleX;+ var y0 = fillStyle.y0_ / arcScaleY;+ var x1 = fillStyle.x1_ / arcScaleX;+ var y1 = fillStyle.y1_ / arcScaleY;+ var p0 = ctx.getCoords_(x0, y0);+ var p1 = ctx.getCoords_(x1, y1);+ var dx = p1.x - p0.x;+ var dy = p1.y - p0.y;+ angle = Math.atan2(dx, dy) * 180 / Math.PI;++ // The angle should be a non-negative number.+ if (angle < 0) {+ angle += 360;+ }++ // Very small angles produce an unexpected result because they are+ // converted to a scientific notation string.+ if (angle < 1e-6) {+ angle = 0;+ }+ } else {+ var p0 = ctx.getCoords_(fillStyle.x0_, fillStyle.y0_);+ focus = {+ x: (p0.x - min.x) / width,+ y: (p0.y - min.y) / height+ };++ width /= arcScaleX * Z;+ height /= arcScaleY * Z;+ var dimension = m.max(width, height);+ shift = 2 * fillStyle.r0_ / dimension;+ expansion = 2 * fillStyle.r1_ / dimension - shift;+ }++ // We need to sort the color stops in ascending order by offset,+ // otherwise IE won't interpret it correctly.+ var stops = fillStyle.colors_;+ stops.sort(function(cs1, cs2) {+ return cs1.offset - cs2.offset;+ });++ var length = stops.length;+ var color1 = stops[0].color;+ var color2 = stops[length - 1].color;+ var opacity1 = stops[0].alpha * ctx.globalAlpha;+ var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;++ var colors = [];+ for (var i = 0; i < length; i++) {+ var stop = stops[i];+ colors.push(stop.offset * expansion + shift + ' ' + stop.color);+ }++ // When colors attribute is used, the meanings of opacity and o:opacity2+ // are reversed.+ lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"',+ ' method="none" focus="100%"',+ ' color="', color1, '"',+ ' color2="', color2, '"',+ ' colors="', colors.join(','), '"',+ ' opacity="', opacity2, '"',+ ' g_o_:opacity2="', opacity1, '"',+ ' angle="', angle, '"',+ ' focusposition="', focus.x, ',', focus.y, '" />');+ } else if (fillStyle instanceof CanvasPattern_) {+ if (width && height) {+ var deltaLeft = -min.x;+ var deltaTop = -min.y;+ lineStr.push('<g_vml_:fill',+ ' position="',+ deltaLeft / width * arcScaleX * arcScaleX, ',',+ deltaTop / height * arcScaleY * arcScaleY, '"',+ ' type="tile"',+ // TODO: Figure out the correct size to fit the scale.+ //' size="', w, 'px ', h, 'px"',+ ' src="', fillStyle.src_, '" />');+ }+ } else {+ var a = processStyle(ctx.fillStyle);+ var color = a.color;+ var opacity = a.alpha * ctx.globalAlpha;+ lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity,+ '" />');+ }+ }++ contextPrototype.fill = function() {+ this.stroke(true);+ };++ contextPrototype.closePath = function() {+ this.currentPath_.push({type: 'close'});+ };++ /**+ * @private+ */+ contextPrototype.getCoords_ = function(aX, aY) {+ var m = this.m_;+ return {+ x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,+ y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2+ };+ };++ contextPrototype.save = function() {+ var o = {};+ copyState(this, o);+ this.aStack_.push(o);+ this.mStack_.push(this.m_);+ this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);+ };++ contextPrototype.restore = function() {+ if (this.aStack_.length) {+ copyState(this.aStack_.pop(), this);+ this.m_ = this.mStack_.pop();+ }+ };++ function matrixIsFinite(m) {+ return isFinite(m[0][0]) && isFinite(m[0][1]) &&+ isFinite(m[1][0]) && isFinite(m[1][1]) &&+ isFinite(m[2][0]) && isFinite(m[2][1]);+ }++ function setM(ctx, m, updateLineScale) {+ if (!matrixIsFinite(m)) {+ return;+ }+ ctx.m_ = m;++ if (updateLineScale) {+ // Get the line scale.+ // Determinant of this.m_ means how much the area is enlarged by the+ // transformation. So its square root can be used as a scale factor+ // for width.+ var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];+ ctx.lineScale_ = sqrt(abs(det));+ }+ }++ contextPrototype.translate = function(aX, aY) {+ var m1 = [+ [1, 0, 0],+ [0, 1, 0],+ [aX, aY, 1]+ ];++ setM(this, matrixMultiply(m1, this.m_), false);+ };++ contextPrototype.rotate = function(aRot) {+ var c = mc(aRot);+ var s = ms(aRot);++ var m1 = [+ [c, s, 0],+ [-s, c, 0],+ [0, 0, 1]+ ];++ setM(this, matrixMultiply(m1, this.m_), false);+ };++ contextPrototype.scale = function(aX, aY) {+ this.arcScaleX_ *= aX;+ this.arcScaleY_ *= aY;+ var m1 = [+ [aX, 0, 0],+ [0, aY, 0],+ [0, 0, 1]+ ];++ setM(this, matrixMultiply(m1, this.m_), true);+ };++ contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {+ var m1 = [+ [m11, m12, 0],+ [m21, m22, 0],+ [dx, dy, 1]+ ];++ setM(this, matrixMultiply(m1, this.m_), true);+ };++ contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {+ var m = [+ [m11, m12, 0],+ [m21, m22, 0],+ [dx, dy, 1]+ ];++ setM(this, m, true);+ };++ /**+ * The text drawing function.+ * The maxWidth argument isn't taken in account, since no browser supports+ * it yet.+ */+ contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {+ var m = this.m_,+ delta = 1000,+ left = 0,+ right = delta,+ offset = {x: 0, y: 0},+ lineStr = [];++ var fontStyle = getComputedStyle(processFontStyle(this.font),+ this.element_);++ var fontStyleString = buildStyle(fontStyle);++ var elementStyle = this.element_.currentStyle;+ var textAlign = this.textAlign.toLowerCase();+ switch (textAlign) {+ case 'left':+ case 'center':+ case 'right':+ break;+ case 'end':+ textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';+ break;+ case 'start':+ textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';+ break;+ default:+ textAlign = 'left';+ }++ // 1.75 is an arbitrary number, as there is no info about the text baseline+ switch (this.textBaseline) {+ case 'hanging':+ case 'top':+ offset.y = fontStyle.size / 1.75;+ break;+ case 'middle':+ break;+ default:+ case null:+ case 'alphabetic':+ case 'ideographic':+ case 'bottom':+ offset.y = -fontStyle.size / 2.25;+ break;+ }++ switch(textAlign) {+ case 'right':+ left = delta;+ right = 0.05;+ break;+ case 'center':+ left = right = delta / 2;+ break;+ }++ var d = this.getCoords_(x + offset.x, y + offset.y);++ lineStr.push('<g_vml_:line from="', -left ,' 0" to="', right ,' 0.05" ',+ ' coordsize="100 100" coordorigin="0 0"',+ ' filled="', !stroke, '" stroked="', !!stroke,+ '" style="position:absolute;width:1px;height:1px;">');++ if (stroke) {+ appendStroke(this, lineStr);+ } else {+ // TODO: Fix the min and max params.+ appendFill(this, lineStr, {x: -left, y: 0},+ {x: right, y: fontStyle.size});+ }++ var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' ++ m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';++ var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);++ lineStr.push('<g_vml_:skew on="t" matrix="', skewM ,'" ',+ ' offset="', skewOffset, '" origin="', left ,' 0" />',+ '<g_vml_:path textpathok="true" />',+ '<g_vml_:textpath on="true" string="',+ encodeHtmlAttribute(text),+ '" style="v-text-align:', textAlign,+ ';font:', encodeHtmlAttribute(fontStyleString),+ '" /></g_vml_:line>');++ this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));+ };++ contextPrototype.fillText = function(text, x, y, maxWidth) {+ this.drawText_(text, x, y, maxWidth, false);+ };++ contextPrototype.strokeText = function(text, x, y, maxWidth) {+ this.drawText_(text, x, y, maxWidth, true);+ };++ contextPrototype.measureText = function(text) {+ if (!this.textMeasureEl_) {+ var s = '<span style="position:absolute;' ++ 'top:-20000px;left:0;padding:0;margin:0;border:none;' ++ 'white-space:pre;"></span>';+ this.element_.insertAdjacentHTML('beforeEnd', s);+ this.textMeasureEl_ = this.element_.lastChild;+ }+ var doc = this.element_.ownerDocument;+ this.textMeasureEl_.innerHTML = '';+ this.textMeasureEl_.style.font = this.font;+ // Don't use innerHTML or innerText because they allow markup/whitespace.+ this.textMeasureEl_.appendChild(doc.createTextNode(text));+ return {width: this.textMeasureEl_.offsetWidth};+ };++ /******** STUBS ********/+ contextPrototype.clip = function() {+ // TODO: Implement+ };++ contextPrototype.arcTo = function() {+ // TODO: Implement+ };++ contextPrototype.createPattern = function(image, repetition) {+ return new CanvasPattern_(image, repetition);+ };++ // Gradient / Pattern Stubs+ function CanvasGradient_(aType) {+ this.type_ = aType;+ this.x0_ = 0;+ this.y0_ = 0;+ this.r0_ = 0;+ this.x1_ = 0;+ this.y1_ = 0;+ this.r1_ = 0;+ this.colors_ = [];+ }++ CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {+ aColor = processStyle(aColor);+ this.colors_.push({offset: aOffset,+ color: aColor.color,+ alpha: aColor.alpha});+ };++ function CanvasPattern_(image, repetition) {+ assertImageIsValid(image);+ switch (repetition) {+ case 'repeat':+ case null:+ case '':+ this.repetition_ = 'repeat';+ break+ case 'repeat-x':+ case 'repeat-y':+ case 'no-repeat':+ this.repetition_ = repetition;+ break;+ default:+ throwException('SYNTAX_ERR');+ }++ this.src_ = image.src;+ this.width_ = image.width;+ this.height_ = image.height;+ }++ function throwException(s) {+ throw new DOMException_(s);+ }++ function assertImageIsValid(img) {+ if (!img || img.nodeType != 1 || img.tagName != 'IMG') {+ throwException('TYPE_MISMATCH_ERR');+ }+ if (img.readyState != 'complete') {+ throwException('INVALID_STATE_ERR');+ }+ }++ function DOMException_(s) {+ this.code = this[s];+ this.message = s +': DOM Exception ' + this.code;+ }+ var p = DOMException_.prototype = new Error;+ p.INDEX_SIZE_ERR = 1;+ p.DOMSTRING_SIZE_ERR = 2;+ p.HIERARCHY_REQUEST_ERR = 3;+ p.WRONG_DOCUMENT_ERR = 4;+ p.INVALID_CHARACTER_ERR = 5;+ p.NO_DATA_ALLOWED_ERR = 6;+ p.NO_MODIFICATION_ALLOWED_ERR = 7;+ p.NOT_FOUND_ERR = 8;+ p.NOT_SUPPORTED_ERR = 9;+ p.INUSE_ATTRIBUTE_ERR = 10;+ p.INVALID_STATE_ERR = 11;+ p.SYNTAX_ERR = 12;+ p.INVALID_MODIFICATION_ERR = 13;+ p.NAMESPACE_ERR = 14;+ p.INVALID_ACCESS_ERR = 15;+ p.VALIDATION_ERR = 16;+ p.TYPE_MISMATCH_ERR = 17;++ // set up externs+ G_vmlCanvasManager = G_vmlCanvasManager_;+ CanvasRenderingContext2D = CanvasRenderingContext2D_;+ CanvasGradient = CanvasGradient_;+ CanvasPattern = CanvasPattern_;+ DOMException = DOMException_;+})();++} // if
@@ -0,0 +1,1 @@+if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&").replace(/"/g,""")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};
@@ -0,0 +1,180 @@+/* Plugin for jQuery for working with colors.+ * + * Version 1.1.+ * + * Inspiration from jQuery color animation plugin by John Resig.+ *+ * Released under the MIT license by Ole Laursen, October 2009.+ *+ * Examples:+ *+ * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()+ * var c = $.color.extract($("#mydiv"), 'background-color');+ * console.log(c.r, c.g, c.b, c.a);+ * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"+ *+ * Note that .scale() and .add() return the same modified object+ * instead of making a new one.+ *+ * V. 1.1: Fix error handling so e.g. parsing an empty string does+ * produce a color rather than just crashing.+ */ ++(function($) {+ $.color = {};++ // construct color object with some convenient chainable helpers+ $.color.make = function (r, g, b, a) {+ var o = {};+ o.r = r || 0;+ o.g = g || 0;+ o.b = b || 0;+ o.a = a != null ? a : 1;++ o.add = function (c, d) {+ for (var i = 0; i < c.length; ++i)+ o[c.charAt(i)] += d;+ return o.normalize();+ };+ + o.scale = function (c, f) {+ for (var i = 0; i < c.length; ++i)+ o[c.charAt(i)] *= f;+ return o.normalize();+ };+ + o.toString = function () {+ if (o.a >= 1.0) {+ return "rgb("+[o.r, o.g, o.b].join(",")+")";+ } else {+ return "rgba("+[o.r, o.g, o.b, o.a].join(",")+")";+ }+ };++ o.normalize = function () {+ function clamp(min, value, max) {+ return value < min ? min: (value > max ? max: value);+ }+ + o.r = clamp(0, parseInt(o.r), 255);+ o.g = clamp(0, parseInt(o.g), 255);+ o.b = clamp(0, parseInt(o.b), 255);+ o.a = clamp(0, o.a, 1);+ return o;+ };++ o.clone = function () {+ return $.color.make(o.r, o.b, o.g, o.a);+ };++ return o.normalize();+ }++ // extract CSS color property from element, going up in the DOM+ // if it's "transparent"+ $.color.extract = function (elem, css) {+ var c;++ do {+ c = elem.css(css).toLowerCase();+ // keep going until we find an element that has color, or+ // we hit the body or root (have no parent)+ if (c != '' && c != 'transparent')+ break;+ elem = elem.parent();+ } while (elem.length && !$.nodeName(elem.get(0), "body"));++ // catch Safari's way of signalling transparent+ if (c == "rgba(0, 0, 0, 0)")+ c = "transparent";+ + return $.color.parse(c);+ }+ + // parse CSS color string (like "rgb(10, 32, 43)" or "#fff"),+ // returns color object, if parsing failed, you get black (0, 0,+ // 0) out+ $.color.parse = function (str) {+ var res, m = $.color.make;++ // Look for rgb(num,num,num)+ if (res = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))+ return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10));+ + // Look for rgba(num,num,num,num)+ if (res = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))+ return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4]));+ + // Look for rgb(num%,num%,num%)+ if (res = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))+ return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55);++ // Look for rgba(num%,num%,num%,num)+ if (res = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))+ return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55, parseFloat(res[4]));+ + // Look for #a0b1c2+ if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))+ return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16));++ // Look for #fff+ if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))+ return m(parseInt(res[1]+res[1], 16), parseInt(res[2]+res[2], 16), parseInt(res[3]+res[3], 16));++ // Otherwise, we're most likely dealing with a named color+ var name = $.trim(str).toLowerCase();+ if (name == "transparent")+ return m(255, 255, 255, 0);+ else {+ // default to black+ res = lookupColors[name] || [0, 0, 0];+ return m(res[0], res[1], res[2]);+ }+ }+ + var lookupColors = {+ aqua:[0,255,255],+ azure:[240,255,255],+ beige:[245,245,220],+ black:[0,0,0],+ blue:[0,0,255],+ brown:[165,42,42],+ cyan:[0,255,255],+ darkblue:[0,0,139],+ darkcyan:[0,139,139],+ darkgrey:[169,169,169],+ darkgreen:[0,100,0],+ darkkhaki:[189,183,107],+ darkmagenta:[139,0,139],+ darkolivegreen:[85,107,47],+ darkorange:[255,140,0],+ darkorchid:[153,50,204],+ darkred:[139,0,0],+ darksalmon:[233,150,122],+ darkviolet:[148,0,211],+ fuchsia:[255,0,255],+ gold:[255,215,0],+ green:[0,128,0],+ indigo:[75,0,130],+ khaki:[240,230,140],+ lightblue:[173,216,230],+ lightcyan:[224,255,255],+ lightgreen:[144,238,144],+ lightgrey:[211,211,211],+ lightpink:[255,182,193],+ lightyellow:[255,255,224],+ lime:[0,255,0],+ magenta:[255,0,255],+ maroon:[128,0,0],+ navy:[0,0,128],+ olive:[128,128,0],+ orange:[255,165,0],+ pink:[255,192,203],+ purple:[128,0,128],+ violet:[128,0,128],+ red:[255,0,0],+ silver:[192,192,192],+ white:[255,255,255],+ yellow:[255,255,0]+ };+})(jQuery);
@@ -0,0 +1,1 @@+(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);
@@ -0,0 +1,117 @@+/*!+ * jQuery Cookie Plugin v1.4.1+ * https://github.com/carhartl/jquery-cookie+ *+ * Copyright 2013 Klaus Hartl+ * Released under the MIT license+ */+(function (factory) {+ if (typeof define === 'function' && define.amd) {+ // AMD+ define(['jquery'], factory);+ } else if (typeof exports === 'object') {+ // CommonJS+ factory(require('jquery'));+ } else {+ // Browser globals+ factory(jQuery);+ }+}(function ($) {++ var pluses = /\+/g;++ function encode(s) {+ return config.raw ? s : encodeURIComponent(s);+ }++ function decode(s) {+ return config.raw ? s : decodeURIComponent(s);+ }++ function stringifyCookieValue(value) {+ return encode(config.json ? JSON.stringify(value) : String(value));+ }++ function parseCookieValue(s) {+ if (s.indexOf('"') === 0) {+ // This is a quoted cookie as according to RFC2068, unescape...+ s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');+ }++ try {+ // Replace server-side written pluses with spaces.+ // If we can't decode the cookie, ignore it, it's unusable.+ // If we can't parse the cookie, ignore it, it's unusable.+ s = decodeURIComponent(s.replace(pluses, ' '));+ return config.json ? JSON.parse(s) : s;+ } catch(e) {}+ }++ function read(s, converter) {+ var value = config.raw ? s : parseCookieValue(s);+ return $.isFunction(converter) ? converter(value) : value;+ }++ var config = $.cookie = function (key, value, options) {++ // Write++ if (value !== undefined && !$.isFunction(value)) {+ options = $.extend({}, config.defaults, options);++ if (typeof options.expires === 'number') {+ var days = options.expires, t = options.expires = new Date();+ t.setTime(+t + days * 864e+5);+ }++ return (document.cookie = [+ encode(key), '=', stringifyCookieValue(value),+ options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE+ options.path ? '; path=' + options.path : '',+ options.domain ? '; domain=' + options.domain : '',+ options.secure ? '; secure' : ''+ ].join(''));+ }++ // Read++ var result = key ? undefined : {};++ // To prevent the for loop in the first place assign an empty array+ // in case there are no cookies at all. Also prevents odd result when+ // calling $.cookie().+ var cookies = document.cookie ? document.cookie.split('; ') : [];++ for (var i = 0, l = cookies.length; i < l; i++) {+ var parts = cookies[i].split('=');+ var name = decode(parts.shift());+ var cookie = parts.join('=');++ if (key && key === name) {+ // If second argument (value) is a function it's a converter...+ result = read(cookie, value);+ break;+ }++ // Prevent storing a cookie that we couldn't decode.+ if (!key && (cookie = read(cookie)) !== undefined) {+ result[name] = cookie;+ }+ }++ return result;+ };++ config.defaults = {};++ $.removeCookie = function (key, options) {+ if ($.cookie(key) === undefined) {+ return false;+ }++ // Must not alter options, thus extending a fresh object...+ $.cookie(key, '', $.extend({}, options, { expires: -1 }));+ return !$.cookie(key);+ };++}));
@@ -0,0 +1,345 @@+/* Flot plugin for drawing all elements of a plot on the canvas.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++Flot normally produces certain elements, like axis labels and the legend, using+HTML elements. This permits greater interactivity and customization, and often+looks better, due to cross-browser canvas text inconsistencies and limitations.++It can also be desirable to render the plot entirely in canvas, particularly+if the goal is to save it as an image, or if Flot is being used in a context+where the HTML DOM does not exist, as is the case within Node.js. This plugin+switches out Flot's standard drawing operations for canvas-only replacements.++Currently the plugin supports only axis labels, but it will eventually allow+every element of the plot to be rendered directly to canvas.++The plugin supports these options:++{+ canvas: boolean+}++The "canvas" option controls whether full canvas drawing is enabled, making it+possible to toggle on and off. This is useful when a plot uses HTML text in the+browser, but needs to redraw with canvas text when exporting as an image.++*/++(function($) {++ var options = {+ canvas: true+ };++ var render, getTextInfo, addText;++ // Cache the prototype hasOwnProperty for faster access++ var hasOwnProperty = Object.prototype.hasOwnProperty;++ function init(plot, classes) {++ var Canvas = classes.Canvas;++ // We only want to replace the functions once; the second time around+ // we would just get our new function back. This whole replacing of+ // prototype functions is a disaster, and needs to be changed ASAP.++ if (render == null) {+ getTextInfo = Canvas.prototype.getTextInfo,+ addText = Canvas.prototype.addText,+ render = Canvas.prototype.render;+ }++ // Finishes rendering the canvas, including overlaid text++ Canvas.prototype.render = function() {++ if (!plot.getOptions().canvas) {+ return render.call(this);+ }++ var context = this.context,+ cache = this._textCache;++ // For each text layer, render elements marked as active++ context.save();+ context.textBaseline = "middle";++ for (var layerKey in cache) {+ if (hasOwnProperty.call(cache, layerKey)) {+ var layerCache = cache[layerKey];+ for (var styleKey in layerCache) {+ if (hasOwnProperty.call(layerCache, styleKey)) {+ var styleCache = layerCache[styleKey],+ updateStyles = true;+ for (var key in styleCache) {+ if (hasOwnProperty.call(styleCache, key)) {++ var info = styleCache[key],+ positions = info.positions,+ lines = info.lines;++ // Since every element at this level of the cache have the+ // same font and fill styles, we can just change them once+ // using the values from the first element.++ if (updateStyles) {+ context.fillStyle = info.font.color;+ context.font = info.font.definition;+ updateStyles = false;+ }++ for (var i = 0, position; position = positions[i]; i++) {+ if (position.active) {+ for (var j = 0, line; line = position.lines[j]; j++) {+ context.fillText(lines[j].text, line[0], line[1]);+ }+ } else {+ positions.splice(i--, 1);+ }+ }++ if (positions.length == 0) {+ delete styleCache[key];+ }+ }+ }+ }+ }+ }+ }++ context.restore();+ };++ // Creates (if necessary) and returns a text info object.+ //+ // When the canvas option is set, the object looks like this:+ //+ // {+ // width: Width of the text's bounding box.+ // height: Height of the text's bounding box.+ // positions: Array of positions at which this text is drawn.+ // lines: [{+ // height: Height of this line.+ // widths: Width of this line.+ // text: Text on this line.+ // }],+ // font: {+ // definition: Canvas font property string.+ // color: Color of the text.+ // },+ // }+ //+ // The positions array contains objects that look like this:+ //+ // {+ // active: Flag indicating whether the text should be visible.+ // lines: Array of [x, y] coordinates at which to draw the line.+ // x: X coordinate at which to draw the text.+ // y: Y coordinate at which to draw the text.+ // }++ Canvas.prototype.getTextInfo = function(layer, text, font, angle, width) {++ if (!plot.getOptions().canvas) {+ return getTextInfo.call(this, layer, text, font, angle, width);+ }++ var textStyle, layerCache, styleCache, info;++ // Cast the value to a string, in case we were given a number++ text = "" + text;++ // If the font is a font-spec object, generate a CSS definition++ if (typeof font === "object") {+ textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px " + font.family;+ } else {+ textStyle = font;+ }++ // Retrieve (or create) the cache for the text's layer and styles++ layerCache = this._textCache[layer];++ if (layerCache == null) {+ layerCache = this._textCache[layer] = {};+ }++ styleCache = layerCache[textStyle];++ if (styleCache == null) {+ styleCache = layerCache[textStyle] = {};+ }++ info = styleCache[text];++ if (info == null) {++ var context = this.context;++ // If the font was provided as CSS, create a div with those+ // classes and examine it to generate a canvas font spec.++ if (typeof font !== "object") {++ var element = $("<div> </div>")+ .css("position", "absolute")+ .addClass(typeof font === "string" ? font : null)+ .appendTo(this.getTextLayer(layer));++ font = {+ lineHeight: element.height(),+ style: element.css("font-style"),+ variant: element.css("font-variant"),+ weight: element.css("font-weight"),+ family: element.css("font-family"),+ color: element.css("color")+ };++ // Setting line-height to 1, without units, sets it equal+ // to the font-size, even if the font-size is abstract,+ // like 'smaller'. This enables us to read the real size+ // via the element's height, working around browsers that+ // return the literal 'smaller' value.++ font.size = element.css("line-height", 1).height();++ element.remove();+ }++ textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px " + font.family;++ // Create a new info object, initializing the dimensions to+ // zero so we can count them up line-by-line.++ info = styleCache[text] = {+ width: 0,+ height: 0,+ positions: [],+ lines: [],+ font: {+ definition: textStyle,+ color: font.color+ }+ };++ context.save();+ context.font = textStyle;++ // Canvas can't handle multi-line strings; break on various+ // newlines, including HTML brs, to build a list of lines.+ // Note that we could split directly on regexps, but IE < 9 is+ // broken; revisit when we drop IE 7/8 support.++ var lines = (text + "").replace(/<br ?\/?>|\r\n|\r/g, "\n").split("\n");++ for (var i = 0; i < lines.length; ++i) {++ var lineText = lines[i],+ measured = context.measureText(lineText);++ info.width = Math.max(measured.width, info.width);+ info.height += font.lineHeight;++ info.lines.push({+ text: lineText,+ width: measured.width,+ height: font.lineHeight+ });+ }++ context.restore();+ }++ return info;+ };++ // Adds a text string to the canvas text overlay.++ Canvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {++ if (!plot.getOptions().canvas) {+ return addText.call(this, layer, x, y, text, font, angle, width, halign, valign);+ }++ var info = this.getTextInfo(layer, text, font, angle, width),+ positions = info.positions,+ lines = info.lines;++ // Text is drawn with baseline 'middle', which we need to account+ // for by adding half a line's height to the y position.++ y += info.height / lines.length / 2;++ // Tweak the initial y-position to match vertical alignment++ if (valign == "middle") {+ y = Math.round(y - info.height / 2);+ } else if (valign == "bottom") {+ y = Math.round(y - info.height);+ } else {+ y = Math.round(y);+ }++ // FIXME: LEGACY BROWSER FIX+ // AFFECTS: Opera < 12.00++ // Offset the y coordinate, since Opera is off pretty+ // consistently compared to the other browsers.++ if (!!(window.opera && window.opera.version().split(".")[0] < 12)) {+ y -= 2;+ }++ // Determine whether this text already exists at this position.+ // If so, mark it for inclusion in the next render pass.++ for (var i = 0, position; position = positions[i]; i++) {+ if (position.x == x && position.y == y) {+ position.active = true;+ return;+ }+ }++ // If the text doesn't exist at this position, create a new entry++ position = {+ active: true,+ lines: [],+ x: x,+ y: y+ };++ positions.push(position);++ // Fill in the x & y positions of each line, adjusting them+ // individually for horizontal alignment.++ for (var i = 0, line; line = lines[i]; i++) {+ if (halign == "center") {+ position.lines.push([Math.round(x - line.width / 2), y]);+ } else if (halign == "right") {+ position.lines.push([Math.round(x - line.width), y]);+ } else {+ position.lines.push([Math.round(x), y]);+ }+ y += line.height;+ }+ };+ }++ $.plot.plugins.push({+ init: init,+ options: options,+ name: "canvas",+ version: "1.0"+ });++})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={canvas:true};var render,getTextInfo,addText;var hasOwnProperty=Object.prototype.hasOwnProperty;function init(plot,classes){var Canvas=classes.Canvas;if(render==null){getTextInfo=Canvas.prototype.getTextInfo,addText=Canvas.prototype.addText,render=Canvas.prototype.render}Canvas.prototype.render=function(){if(!plot.getOptions().canvas){return render.call(this)}var context=this.context,cache=this._textCache;context.save();context.textBaseline="middle";for(var layerKey in cache){if(hasOwnProperty.call(cache,layerKey)){var layerCache=cache[layerKey];for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey],updateStyles=true;for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var info=styleCache[key],positions=info.positions,lines=info.lines;if(updateStyles){context.fillStyle=info.font.color;context.font=info.font.definition;updateStyles=false}for(var i=0,position;position=positions[i];i++){if(position.active){for(var j=0,line;line=position.lines[j];j++){context.fillText(lines[j].text,line[0],line[1])}}else{positions.splice(i--,1)}}if(positions.length==0){delete styleCache[key]}}}}}}}context.restore()};Canvas.prototype.getTextInfo=function(layer,text,font,angle,width){if(!plot.getOptions().canvas){return getTextInfo.call(this,layer,text,font,angle,width)}var textStyle,layerCache,styleCache,info;text=""+text;if(typeof font==="object"){textStyle=font.style+" "+font.variant+" "+font.weight+" "+font.size+"px "+font.family}else{textStyle=font}layerCache=this._textCache[layer];if(layerCache==null){layerCache=this._textCache[layer]={}}styleCache=layerCache[textStyle];if(styleCache==null){styleCache=layerCache[textStyle]={}}info=styleCache[text];if(info==null){var context=this.context;if(typeof font!=="object"){var element=$("<div> </div>").css("position","absolute").addClass(typeof font==="string"?font:null).appendTo(this.getTextLayer(layer));font={lineHeight:element.height(),style:element.css("font-style"),variant:element.css("font-variant"),weight:element.css("font-weight"),family:element.css("font-family"),color:element.css("color")};font.size=element.css("line-height",1).height();element.remove()}textStyle=font.style+" "+font.variant+" "+font.weight+" "+font.size+"px "+font.family;info=styleCache[text]={width:0,height:0,positions:[],lines:[],font:{definition:textStyle,color:font.color}};context.save();context.font=textStyle;var lines=(text+"").replace(/<br ?\/?>|\r\n|\r/g,"\n").split("\n");for(var i=0;i<lines.length;++i){var lineText=lines[i],measured=context.measureText(lineText);info.width=Math.max(measured.width,info.width);info.height+=font.lineHeight;info.lines.push({text:lineText,width:measured.width,height:font.lineHeight})}context.restore()}return info};Canvas.prototype.addText=function(layer,x,y,text,font,angle,width,halign,valign){if(!plot.getOptions().canvas){return addText.call(this,layer,x,y,text,font,angle,width,halign,valign)}var info=this.getTextInfo(layer,text,font,angle,width),positions=info.positions,lines=info.lines;y+=info.height/lines.length/2;if(valign=="middle"){y=Math.round(y-info.height/2)}else if(valign=="bottom"){y=Math.round(y-info.height)}else{y=Math.round(y)}if(!!(window.opera&&window.opera.version().split(".")[0]<12)){y-=2}for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=true;return}}position={active:true,lines:[],x:x,y:y};positions.push(position);for(var i=0,line;line=lines[i];i++){if(halign=="center"){position.lines.push([Math.round(x-line.width/2),y])}else if(halign=="right"){position.lines.push([Math.round(x-line.width),y])}else{position.lines.push([Math.round(x),y])}y+=line.height}}}$.plot.plugins.push({init:init,options:options,name:"canvas",version:"1.0"})})(jQuery);
@@ -0,0 +1,190 @@+/* Flot plugin for plotting textual data or categories.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++Consider a dataset like [["February", 34], ["March", 20], ...]. This plugin+allows you to plot such a dataset directly.++To enable it, you must specify mode: "categories" on the axis with the textual+labels, e.g.++ $.plot("#placeholder", data, { xaxis: { mode: "categories" } });++By default, the labels are ordered as they are met in the data series. If you+need a different ordering, you can specify "categories" on the axis options+and list the categories there:++ xaxis: {+ mode: "categories",+ categories: ["February", "March", "April"]+ }++If you need to customize the distances between the categories, you can specify+"categories" as an object mapping labels to values++ xaxis: {+ mode: "categories",+ categories: { "February": 1, "March": 3, "April": 4 }+ }++If you don't specify all categories, the remaining categories will be numbered+from the max value plus 1 (with a spacing of 1 between each).++Internally, the plugin works by transforming the input data through an auto-+generated mapping where the first category becomes 0, the second 1, etc.+Hence, a point like ["February", 34] becomes [0, 34] internally in Flot (this+is visible in hover and click events that return numbers rather than the+category labels). The plugin also overrides the tick generator to spit out the+categories as ticks instead of the values.++If you need to map a value back to its label, the mapping is always accessible+as "categories" on the axis object, e.g. plot.getAxes().xaxis.categories.++*/++(function ($) {+ var options = {+ xaxis: {+ categories: null+ },+ yaxis: {+ categories: null+ }+ };+ + function processRawData(plot, series, data, datapoints) {+ // if categories are enabled, we need to disable+ // auto-transformation to numbers so the strings are intact+ // for later processing++ var xCategories = series.xaxis.options.mode == "categories",+ yCategories = series.yaxis.options.mode == "categories";+ + if (!(xCategories || yCategories))+ return;++ var format = datapoints.format;++ if (!format) {+ // FIXME: auto-detection should really not be defined here+ var s = series;+ format = [];+ format.push({ x: true, number: true, required: true });+ format.push({ y: true, number: true, required: true });++ if (s.bars.show || (s.lines.show && s.lines.fill)) {+ var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));+ format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });+ if (s.bars.horizontal) {+ delete format[format.length - 1].y;+ format[format.length - 1].x = true;+ }+ }+ + datapoints.format = format;+ }++ for (var m = 0; m < format.length; ++m) {+ if (format[m].x && xCategories)+ format[m].number = false;+ + if (format[m].y && yCategories)+ format[m].number = false;+ }+ }++ function getNextIndex(categories) {+ var index = -1;+ + for (var v in categories)+ if (categories[v] > index)+ index = categories[v];++ return index + 1;+ }++ function categoriesTickGenerator(axis) {+ var res = [];+ for (var label in axis.categories) {+ var v = axis.categories[label];+ if (v >= axis.min && v <= axis.max)+ res.push([v, label]);+ }++ res.sort(function (a, b) { return a[0] - b[0]; });++ return res;+ }+ + function setupCategoriesForAxis(series, axis, datapoints) {+ if (series[axis].options.mode != "categories")+ return;+ + if (!series[axis].categories) {+ // parse options+ var c = {}, o = series[axis].options.categories || {};+ if ($.isArray(o)) {+ for (var i = 0; i < o.length; ++i)+ c[o[i]] = i;+ }+ else {+ for (var v in o)+ c[v] = o[v];+ }+ + series[axis].categories = c;+ }++ // fix ticks+ if (!series[axis].options.ticks)+ series[axis].options.ticks = categoriesTickGenerator;++ transformPointsOnAxis(datapoints, axis, series[axis].categories);+ }+ + function transformPointsOnAxis(datapoints, axis, categories) {+ // go through the points, transforming them+ var points = datapoints.points,+ ps = datapoints.pointsize,+ format = datapoints.format,+ formatColumn = axis.charAt(0),+ index = getNextIndex(categories);++ for (var i = 0; i < points.length; i += ps) {+ if (points[i] == null)+ continue;+ + for (var m = 0; m < ps; ++m) {+ var val = points[i + m];++ if (val == null || !format[m][formatColumn])+ continue;++ if (!(val in categories)) {+ categories[val] = index;+ ++index;+ }+ + points[i + m] = categories[val];+ }+ }+ }++ function processDatapoints(plot, series, datapoints) {+ setupCategoriesForAxis(series, "xaxis", datapoints);+ setupCategoriesForAxis(series, "yaxis", datapoints);+ }++ function init(plot) {+ plot.hooks.processRawData.push(processRawData);+ plot.hooks.processDatapoints.push(processDatapoints);+ }+ + $.plot.plugins.push({+ init: init,+ options: options,+ name: 'categories',+ version: '1.0'+ });+})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={xaxis:{categories:null},yaxis:{categories:null}};function processRawData(plot,series,data,datapoints){var xCategories=series.xaxis.options.mode=="categories",yCategories=series.yaxis.options.mode=="categories";if(!(xCategories||yCategories))return;var format=datapoints.format;if(!format){var s=series;format=[];format.push({x:true,number:true,required:true});format.push({y:true,number:true,required:true});if(s.bars.show||s.lines.show&&s.lines.fill){var autoscale=!!(s.bars.show&&s.bars.zero||s.lines.show&&s.lines.zero);format.push({y:true,number:true,required:false,defaultValue:0,autoscale:autoscale});if(s.bars.horizontal){delete format[format.length-1].y;format[format.length-1].x=true}}datapoints.format=format}for(var m=0;m<format.length;++m){if(format[m].x&&xCategories)format[m].number=false;if(format[m].y&&yCategories)format[m].number=false}}function getNextIndex(categories){var index=-1;for(var v in categories)if(categories[v]>index)index=categories[v];return index+1}function categoriesTickGenerator(axis){var res=[];for(var label in axis.categories){var v=axis.categories[label];if(v>=axis.min&&v<=axis.max)res.push([v,label])}res.sort(function(a,b){return a[0]-b[0]});return res}function setupCategoriesForAxis(series,axis,datapoints){if(series[axis].options.mode!="categories")return;if(!series[axis].categories){var c={},o=series[axis].options.categories||{};if($.isArray(o)){for(var i=0;i<o.length;++i)c[o[i]]=i}else{for(var v in o)c[v]=o[v]}series[axis].categories=c}if(!series[axis].options.ticks)series[axis].options.ticks=categoriesTickGenerator;transformPointsOnAxis(datapoints,axis,series[axis].categories)}function transformPointsOnAxis(datapoints,axis,categories){var points=datapoints.points,ps=datapoints.pointsize,format=datapoints.format,formatColumn=axis.charAt(0),index=getNextIndex(categories);for(var i=0;i<points.length;i+=ps){if(points[i]==null)continue;for(var m=0;m<ps;++m){var val=points[i+m];if(val==null||!format[m][formatColumn])continue;if(!(val in categories)){categories[val]=index;++index}points[i+m]=categories[val]}}}function processDatapoints(plot,series,datapoints){setupCategoriesForAxis(series,"xaxis",datapoints);setupCategoriesForAxis(series,"yaxis",datapoints)}function init(plot){plot.hooks.processRawData.push(processRawData);plot.hooks.processDatapoints.push(processDatapoints)}$.plot.plugins.push({init:init,options:options,name:"categories",version:"1.0"})})(jQuery);
@@ -0,0 +1,176 @@+/* Flot plugin for showing crosshairs when the mouse hovers over the plot.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The plugin supports these options:++ crosshair: {+ mode: null or "x" or "y" or "xy"+ color: color+ lineWidth: number+ }++Set the mode to one of "x", "y" or "xy". The "x" mode enables a vertical+crosshair that lets you trace the values on the x axis, "y" enables a+horizontal crosshair and "xy" enables them both. "color" is the color of the+crosshair (default is "rgba(170, 0, 0, 0.80)"), "lineWidth" is the width of+the drawn lines (default is 1).++The plugin also adds four public methods:++ - setCrosshair( pos )++ Set the position of the crosshair. Note that this is cleared if the user+ moves the mouse. "pos" is in coordinates of the plot and should be on the+ form { x: xpos, y: ypos } (you can use x2/x3/... if you're using multiple+ axes), which is coincidentally the same format as what you get from a+ "plothover" event. If "pos" is null, the crosshair is cleared.++ - clearCrosshair()++ Clear the crosshair.++ - lockCrosshair(pos)++ Cause the crosshair to lock to the current location, no longer updating if+ the user moves the mouse. Optionally supply a position (passed on to+ setCrosshair()) to move it to.++ Example usage:++ var myFlot = $.plot( $("#graph"), ..., { crosshair: { mode: "x" } } };+ $("#graph").bind( "plothover", function ( evt, position, item ) {+ if ( item ) {+ // Lock the crosshair to the data point being hovered+ myFlot.lockCrosshair({+ x: item.datapoint[ 0 ],+ y: item.datapoint[ 1 ]+ });+ } else {+ // Return normal crosshair operation+ myFlot.unlockCrosshair();+ }+ });++ - unlockCrosshair()++ Free the crosshair to move again after locking it.+*/++(function ($) {+ var options = {+ crosshair: {+ mode: null, // one of null, "x", "y" or "xy",+ color: "rgba(170, 0, 0, 0.80)",+ lineWidth: 1+ }+ };+ + function init(plot) {+ // position of crosshair in pixels+ var crosshair = { x: -1, y: -1, locked: false };++ plot.setCrosshair = function setCrosshair(pos) {+ if (!pos)+ crosshair.x = -1;+ else {+ var o = plot.p2c(pos);+ crosshair.x = Math.max(0, Math.min(o.left, plot.width()));+ crosshair.y = Math.max(0, Math.min(o.top, plot.height()));+ }+ + plot.triggerRedrawOverlay();+ };+ + plot.clearCrosshair = plot.setCrosshair; // passes null for pos+ + plot.lockCrosshair = function lockCrosshair(pos) {+ if (pos)+ plot.setCrosshair(pos);+ crosshair.locked = true;+ };++ plot.unlockCrosshair = function unlockCrosshair() {+ crosshair.locked = false;+ };++ function onMouseOut(e) {+ if (crosshair.locked)+ return;++ if (crosshair.x != -1) {+ crosshair.x = -1;+ plot.triggerRedrawOverlay();+ }+ }++ function onMouseMove(e) {+ if (crosshair.locked)+ return;+ + if (plot.getSelection && plot.getSelection()) {+ crosshair.x = -1; // hide the crosshair while selecting+ return;+ }+ + var offset = plot.offset();+ crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width()));+ crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height()));+ plot.triggerRedrawOverlay();+ }+ + plot.hooks.bindEvents.push(function (plot, eventHolder) {+ if (!plot.getOptions().crosshair.mode)+ return;++ eventHolder.mouseout(onMouseOut);+ eventHolder.mousemove(onMouseMove);+ });++ plot.hooks.drawOverlay.push(function (plot, ctx) {+ var c = plot.getOptions().crosshair;+ if (!c.mode)+ return;++ var plotOffset = plot.getPlotOffset();+ + ctx.save();+ ctx.translate(plotOffset.left, plotOffset.top);++ if (crosshair.x != -1) {+ var adj = plot.getOptions().crosshair.lineWidth % 2 ? 0.5 : 0;++ ctx.strokeStyle = c.color;+ ctx.lineWidth = c.lineWidth;+ ctx.lineJoin = "round";++ ctx.beginPath();+ if (c.mode.indexOf("x") != -1) {+ var drawX = Math.floor(crosshair.x) + adj;+ ctx.moveTo(drawX, 0);+ ctx.lineTo(drawX, plot.height());+ }+ if (c.mode.indexOf("y") != -1) {+ var drawY = Math.floor(crosshair.y) + adj;+ ctx.moveTo(0, drawY);+ ctx.lineTo(plot.width(), drawY);+ }+ ctx.stroke();+ }+ ctx.restore();+ });++ plot.hooks.shutdown.push(function (plot, eventHolder) {+ eventHolder.unbind("mouseout", onMouseOut);+ eventHolder.unbind("mousemove", onMouseMove);+ });+ }+ + $.plot.plugins.push({+ init: init,+ options: options,+ name: 'crosshair',+ version: '1.0'+ });+})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={crosshair:{mode:null,color:"rgba(170, 0, 0, 0.80)",lineWidth:1}};function init(plot){var crosshair={x:-1,y:-1,locked:false};plot.setCrosshair=function setCrosshair(pos){if(!pos)crosshair.x=-1;else{var o=plot.p2c(pos);crosshair.x=Math.max(0,Math.min(o.left,plot.width()));crosshair.y=Math.max(0,Math.min(o.top,plot.height()))}plot.triggerRedrawOverlay()};plot.clearCrosshair=plot.setCrosshair;plot.lockCrosshair=function lockCrosshair(pos){if(pos)plot.setCrosshair(pos);crosshair.locked=true};plot.unlockCrosshair=function unlockCrosshair(){crosshair.locked=false};function onMouseOut(e){if(crosshair.locked)return;if(crosshair.x!=-1){crosshair.x=-1;plot.triggerRedrawOverlay()}}function onMouseMove(e){if(crosshair.locked)return;if(plot.getSelection&&plot.getSelection()){crosshair.x=-1;return}var offset=plot.offset();crosshair.x=Math.max(0,Math.min(e.pageX-offset.left,plot.width()));crosshair.y=Math.max(0,Math.min(e.pageY-offset.top,plot.height()));plot.triggerRedrawOverlay()}plot.hooks.bindEvents.push(function(plot,eventHolder){if(!plot.getOptions().crosshair.mode)return;eventHolder.mouseout(onMouseOut);eventHolder.mousemove(onMouseMove)});plot.hooks.drawOverlay.push(function(plot,ctx){var c=plot.getOptions().crosshair;if(!c.mode)return;var plotOffset=plot.getPlotOffset();ctx.save();ctx.translate(plotOffset.left,plotOffset.top);if(crosshair.x!=-1){var adj=plot.getOptions().crosshair.lineWidth%2?.5:0;ctx.strokeStyle=c.color;ctx.lineWidth=c.lineWidth;ctx.lineJoin="round";ctx.beginPath();if(c.mode.indexOf("x")!=-1){var drawX=Math.floor(crosshair.x)+adj;ctx.moveTo(drawX,0);ctx.lineTo(drawX,plot.height())}if(c.mode.indexOf("y")!=-1){var drawY=Math.floor(crosshair.y)+adj;ctx.moveTo(0,drawY);ctx.lineTo(plot.width(),drawY)}ctx.stroke()}ctx.restore()});plot.hooks.shutdown.push(function(plot,eventHolder){eventHolder.unbind("mouseout",onMouseOut);eventHolder.unbind("mousemove",onMouseMove)})}$.plot.plugins.push({init:init,options:options,name:"crosshair",version:"1.0"})})(jQuery);
@@ -0,0 +1,353 @@+/* Flot plugin for plotting error bars.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++Error bars are used to show standard deviation and other statistical+properties in a plot.++* Created by Rui Pereira - rui (dot) pereira (at) gmail (dot) com++This plugin allows you to plot error-bars over points. Set "errorbars" inside+the points series to the axis name over which there will be error values in+your data array (*even* if you do not intend to plot them later, by setting+"show: null" on xerr/yerr).++The plugin supports these options:++ series: {+ points: {+ errorbars: "x" or "y" or "xy",+ xerr: {+ show: null/false or true,+ asymmetric: null/false or true,+ upperCap: null or "-" or function,+ lowerCap: null or "-" or function,+ color: null or color,+ radius: null or number+ },+ yerr: { same options as xerr }+ }+ }++Each data point array is expected to be of the type:++ "x" [ x, y, xerr ]+ "y" [ x, y, yerr ]+ "xy" [ x, y, xerr, yerr ]++Where xerr becomes xerr_lower,xerr_upper for the asymmetric error case, and+equivalently for yerr. Eg., a datapoint for the "xy" case with symmetric+error-bars on X and asymmetric on Y would be:++ [ x, y, xerr, yerr_lower, yerr_upper ]++By default no end caps are drawn. Setting upperCap and/or lowerCap to "-" will+draw a small cap perpendicular to the error bar. They can also be set to a+user-defined drawing function, with (ctx, x, y, radius) as parameters, as eg.++ function drawSemiCircle( ctx, x, y, radius ) {+ ctx.beginPath();+ ctx.arc( x, y, radius, 0, Math.PI, false );+ ctx.moveTo( x - radius, y );+ ctx.lineTo( x + radius, y );+ ctx.stroke();+ }++Color and radius both default to the same ones of the points series if not+set. The independent radius parameter on xerr/yerr is useful for the case when+we may want to add error-bars to a line, without showing the interconnecting+points (with radius: 0), and still showing end caps on the error-bars.+shadowSize and lineWidth are derived as well from the points series.++*/++(function ($) {+ var options = {+ series: {+ points: {+ errorbars: null, //should be 'x', 'y' or 'xy'+ xerr: { err: 'x', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null},+ yerr: { err: 'y', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null}+ }+ }+ };++ function processRawData(plot, series, data, datapoints){+ if (!series.points.errorbars)+ return;++ // x,y values+ var format = [+ { x: true, number: true, required: true },+ { y: true, number: true, required: true }+ ];++ var errors = series.points.errorbars;+ // error bars - first X then Y+ if (errors == 'x' || errors == 'xy') {+ // lower / upper error+ if (series.points.xerr.asymmetric) {+ format.push({ x: true, number: true, required: true });+ format.push({ x: true, number: true, required: true });+ } else+ format.push({ x: true, number: true, required: true });+ }+ if (errors == 'y' || errors == 'xy') {+ // lower / upper error+ if (series.points.yerr.asymmetric) {+ format.push({ y: true, number: true, required: true });+ format.push({ y: true, number: true, required: true });+ } else+ format.push({ y: true, number: true, required: true });+ }+ datapoints.format = format;+ }++ function parseErrors(series, i){++ var points = series.datapoints.points;++ // read errors from points array+ var exl = null,+ exu = null,+ eyl = null,+ eyu = null;+ var xerr = series.points.xerr,+ yerr = series.points.yerr;++ var eb = series.points.errorbars;+ // error bars - first X+ if (eb == 'x' || eb == 'xy') {+ if (xerr.asymmetric) {+ exl = points[i + 2];+ exu = points[i + 3];+ if (eb == 'xy')+ if (yerr.asymmetric){+ eyl = points[i + 4];+ eyu = points[i + 5];+ } else eyl = points[i + 4];+ } else {+ exl = points[i + 2];+ if (eb == 'xy')+ if (yerr.asymmetric) {+ eyl = points[i + 3];+ eyu = points[i + 4];+ } else eyl = points[i + 3];+ }+ // only Y+ } else if (eb == 'y')+ if (yerr.asymmetric) {+ eyl = points[i + 2];+ eyu = points[i + 3];+ } else eyl = points[i + 2];++ // symmetric errors?+ if (exu == null) exu = exl;+ if (eyu == null) eyu = eyl;++ var errRanges = [exl, exu, eyl, eyu];+ // nullify if not showing+ if (!xerr.show){+ errRanges[0] = null;+ errRanges[1] = null;+ }+ if (!yerr.show){+ errRanges[2] = null;+ errRanges[3] = null;+ }+ return errRanges;+ }++ function drawSeriesErrors(plot, ctx, s){++ var points = s.datapoints.points,+ ps = s.datapoints.pointsize,+ ax = [s.xaxis, s.yaxis],+ radius = s.points.radius,+ err = [s.points.xerr, s.points.yerr];++ //sanity check, in case some inverted axis hack is applied to flot+ var invertX = false;+ if (ax[0].p2c(ax[0].max) < ax[0].p2c(ax[0].min)) {+ invertX = true;+ var tmp = err[0].lowerCap;+ err[0].lowerCap = err[0].upperCap;+ err[0].upperCap = tmp;+ }++ var invertY = false;+ if (ax[1].p2c(ax[1].min) < ax[1].p2c(ax[1].max)) {+ invertY = true;+ var tmp = err[1].lowerCap;+ err[1].lowerCap = err[1].upperCap;+ err[1].upperCap = tmp;+ }++ for (var i = 0; i < s.datapoints.points.length; i += ps) {++ //parse+ var errRanges = parseErrors(s, i);++ //cycle xerr & yerr+ for (var e = 0; e < err.length; e++){++ var minmax = [ax[e].min, ax[e].max];++ //draw this error?+ if (errRanges[e * err.length]){++ //data coordinates+ var x = points[i],+ y = points[i + 1];++ //errorbar ranges+ var upper = [x, y][e] + errRanges[e * err.length + 1],+ lower = [x, y][e] - errRanges[e * err.length];++ //points outside of the canvas+ if (err[e].err == 'x')+ if (y > ax[1].max || y < ax[1].min || upper < ax[0].min || lower > ax[0].max)+ continue;+ if (err[e].err == 'y')+ if (x > ax[0].max || x < ax[0].min || upper < ax[1].min || lower > ax[1].max)+ continue;++ // prevent errorbars getting out of the canvas+ var drawUpper = true,+ drawLower = true;++ if (upper > minmax[1]) {+ drawUpper = false;+ upper = minmax[1];+ }+ if (lower < minmax[0]) {+ drawLower = false;+ lower = minmax[0];+ }++ //sanity check, in case some inverted axis hack is applied to flot+ if ((err[e].err == 'x' && invertX) || (err[e].err == 'y' && invertY)) {+ //swap coordinates+ var tmp = lower;+ lower = upper;+ upper = tmp;+ tmp = drawLower;+ drawLower = drawUpper;+ drawUpper = tmp;+ tmp = minmax[0];+ minmax[0] = minmax[1];+ minmax[1] = tmp;+ }++ // convert to pixels+ x = ax[0].p2c(x),+ y = ax[1].p2c(y),+ upper = ax[e].p2c(upper);+ lower = ax[e].p2c(lower);+ minmax[0] = ax[e].p2c(minmax[0]);+ minmax[1] = ax[e].p2c(minmax[1]);++ //same style as points by default+ var lw = err[e].lineWidth ? err[e].lineWidth : s.points.lineWidth,+ sw = s.points.shadowSize != null ? s.points.shadowSize : s.shadowSize;++ //shadow as for points+ if (lw > 0 && sw > 0) {+ var w = sw / 2;+ ctx.lineWidth = w;+ ctx.strokeStyle = "rgba(0,0,0,0.1)";+ drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w + w/2, minmax);++ ctx.strokeStyle = "rgba(0,0,0,0.2)";+ drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w/2, minmax);+ }++ ctx.strokeStyle = err[e].color? err[e].color: s.color;+ ctx.lineWidth = lw;+ //draw it+ drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, 0, minmax);+ }+ }+ }+ }++ function drawError(ctx,err,x,y,upper,lower,drawUpper,drawLower,radius,offset,minmax){++ //shadow offset+ y += offset;+ upper += offset;+ lower += offset;++ // error bar - avoid plotting over circles+ if (err.err == 'x'){+ if (upper > x + radius) drawPath(ctx, [[upper,y],[Math.max(x + radius,minmax[0]),y]]);+ else drawUpper = false;+ if (lower < x - radius) drawPath(ctx, [[Math.min(x - radius,minmax[1]),y],[lower,y]] );+ else drawLower = false;+ }+ else {+ if (upper < y - radius) drawPath(ctx, [[x,upper],[x,Math.min(y - radius,minmax[0])]] );+ else drawUpper = false;+ if (lower > y + radius) drawPath(ctx, [[x,Math.max(y + radius,minmax[1])],[x,lower]] );+ else drawLower = false;+ }++ //internal radius value in errorbar, allows to plot radius 0 points and still keep proper sized caps+ //this is a way to get errorbars on lines without visible connecting dots+ radius = err.radius != null? err.radius: radius;++ // upper cap+ if (drawUpper) {+ if (err.upperCap == '-'){+ if (err.err=='x') drawPath(ctx, [[upper,y - radius],[upper,y + radius]] );+ else drawPath(ctx, [[x - radius,upper],[x + radius,upper]] );+ } else if ($.isFunction(err.upperCap)){+ if (err.err=='x') err.upperCap(ctx, upper, y, radius);+ else err.upperCap(ctx, x, upper, radius);+ }+ }+ // lower cap+ if (drawLower) {+ if (err.lowerCap == '-'){+ if (err.err=='x') drawPath(ctx, [[lower,y - radius],[lower,y + radius]] );+ else drawPath(ctx, [[x - radius,lower],[x + radius,lower]] );+ } else if ($.isFunction(err.lowerCap)){+ if (err.err=='x') err.lowerCap(ctx, lower, y, radius);+ else err.lowerCap(ctx, x, lower, radius);+ }+ }+ }++ function drawPath(ctx, pts){+ ctx.beginPath();+ ctx.moveTo(pts[0][0], pts[0][1]);+ for (var p=1; p < pts.length; p++)+ ctx.lineTo(pts[p][0], pts[p][1]);+ ctx.stroke();+ }++ function draw(plot, ctx){+ var plotOffset = plot.getPlotOffset();++ ctx.save();+ ctx.translate(plotOffset.left, plotOffset.top);+ $.each(plot.getData(), function (i, s) {+ if (s.points.errorbars && (s.points.xerr.show || s.points.yerr.show))+ drawSeriesErrors(plot, ctx, s);+ });+ ctx.restore();+ }++ function init(plot) {+ plot.hooks.processRawData.push(processRawData);+ plot.hooks.draw.push(draw);+ }++ $.plot.plugins.push({+ init: init,+ options: options,+ name: 'errorbars',+ version: '1.0'+ });+})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={series:{points:{errorbars:null,xerr:{err:"x",show:null,asymmetric:null,upperCap:null,lowerCap:null,color:null,radius:null},yerr:{err:"y",show:null,asymmetric:null,upperCap:null,lowerCap:null,color:null,radius:null}}}};function processRawData(plot,series,data,datapoints){if(!series.points.errorbars)return;var format=[{x:true,number:true,required:true},{y:true,number:true,required:true}];var errors=series.points.errorbars;if(errors=="x"||errors=="xy"){if(series.points.xerr.asymmetric){format.push({x:true,number:true,required:true});format.push({x:true,number:true,required:true})}else format.push({x:true,number:true,required:true})}if(errors=="y"||errors=="xy"){if(series.points.yerr.asymmetric){format.push({y:true,number:true,required:true});format.push({y:true,number:true,required:true})}else format.push({y:true,number:true,required:true})}datapoints.format=format}function parseErrors(series,i){var points=series.datapoints.points;var exl=null,exu=null,eyl=null,eyu=null;var xerr=series.points.xerr,yerr=series.points.yerr;var eb=series.points.errorbars;if(eb=="x"||eb=="xy"){if(xerr.asymmetric){exl=points[i+2];exu=points[i+3];if(eb=="xy")if(yerr.asymmetric){eyl=points[i+4];eyu=points[i+5]}else eyl=points[i+4]}else{exl=points[i+2];if(eb=="xy")if(yerr.asymmetric){eyl=points[i+3];eyu=points[i+4]}else eyl=points[i+3]}}else if(eb=="y")if(yerr.asymmetric){eyl=points[i+2];eyu=points[i+3]}else eyl=points[i+2];if(exu==null)exu=exl;if(eyu==null)eyu=eyl;var errRanges=[exl,exu,eyl,eyu];if(!xerr.show){errRanges[0]=null;errRanges[1]=null}if(!yerr.show){errRanges[2]=null;errRanges[3]=null}return errRanges}function drawSeriesErrors(plot,ctx,s){var points=s.datapoints.points,ps=s.datapoints.pointsize,ax=[s.xaxis,s.yaxis],radius=s.points.radius,err=[s.points.xerr,s.points.yerr];var invertX=false;if(ax[0].p2c(ax[0].max)<ax[0].p2c(ax[0].min)){invertX=true;var tmp=err[0].lowerCap;err[0].lowerCap=err[0].upperCap;err[0].upperCap=tmp}var invertY=false;if(ax[1].p2c(ax[1].min)<ax[1].p2c(ax[1].max)){invertY=true;var tmp=err[1].lowerCap;err[1].lowerCap=err[1].upperCap;err[1].upperCap=tmp}for(var i=0;i<s.datapoints.points.length;i+=ps){var errRanges=parseErrors(s,i);for(var e=0;e<err.length;e++){var minmax=[ax[e].min,ax[e].max];if(errRanges[e*err.length]){var x=points[i],y=points[i+1];var upper=[x,y][e]+errRanges[e*err.length+1],lower=[x,y][e]-errRanges[e*err.length];if(err[e].err=="x")if(y>ax[1].max||y<ax[1].min||upper<ax[0].min||lower>ax[0].max)continue;if(err[e].err=="y")if(x>ax[0].max||x<ax[0].min||upper<ax[1].min||lower>ax[1].max)continue;var drawUpper=true,drawLower=true;if(upper>minmax[1]){drawUpper=false;upper=minmax[1]}if(lower<minmax[0]){drawLower=false;lower=minmax[0]}if(err[e].err=="x"&&invertX||err[e].err=="y"&&invertY){var tmp=lower;lower=upper;upper=tmp;tmp=drawLower;drawLower=drawUpper;drawUpper=tmp;tmp=minmax[0];minmax[0]=minmax[1];minmax[1]=tmp}x=ax[0].p2c(x),y=ax[1].p2c(y),upper=ax[e].p2c(upper);lower=ax[e].p2c(lower);minmax[0]=ax[e].p2c(minmax[0]);minmax[1]=ax[e].p2c(minmax[1]);var lw=err[e].lineWidth?err[e].lineWidth:s.points.lineWidth,sw=s.points.shadowSize!=null?s.points.shadowSize:s.shadowSize;if(lw>0&&sw>0){var w=sw/2;ctx.lineWidth=w;ctx.strokeStyle="rgba(0,0,0,0.1)";drawError(ctx,err[e],x,y,upper,lower,drawUpper,drawLower,radius,w+w/2,minmax);ctx.strokeStyle="rgba(0,0,0,0.2)";drawError(ctx,err[e],x,y,upper,lower,drawUpper,drawLower,radius,w/2,minmax)}ctx.strokeStyle=err[e].color?err[e].color:s.color;ctx.lineWidth=lw;drawError(ctx,err[e],x,y,upper,lower,drawUpper,drawLower,radius,0,minmax)}}}}function drawError(ctx,err,x,y,upper,lower,drawUpper,drawLower,radius,offset,minmax){y+=offset;upper+=offset;lower+=offset;if(err.err=="x"){if(upper>x+radius)drawPath(ctx,[[upper,y],[Math.max(x+radius,minmax[0]),y]]);else drawUpper=false;if(lower<x-radius)drawPath(ctx,[[Math.min(x-radius,minmax[1]),y],[lower,y]]);else drawLower=false}else{if(upper<y-radius)drawPath(ctx,[[x,upper],[x,Math.min(y-radius,minmax[0])]]);else drawUpper=false;if(lower>y+radius)drawPath(ctx,[[x,Math.max(y+radius,minmax[1])],[x,lower]]);else drawLower=false}radius=err.radius!=null?err.radius:radius;if(drawUpper){if(err.upperCap=="-"){if(err.err=="x")drawPath(ctx,[[upper,y-radius],[upper,y+radius]]);else drawPath(ctx,[[x-radius,upper],[x+radius,upper]])}else if($.isFunction(err.upperCap)){if(err.err=="x")err.upperCap(ctx,upper,y,radius);else err.upperCap(ctx,x,upper,radius)}}if(drawLower){if(err.lowerCap=="-"){if(err.err=="x")drawPath(ctx,[[lower,y-radius],[lower,y+radius]]);else drawPath(ctx,[[x-radius,lower],[x+radius,lower]])}else if($.isFunction(err.lowerCap)){if(err.err=="x")err.lowerCap(ctx,lower,y,radius);else err.lowerCap(ctx,x,lower,radius)}}}function drawPath(ctx,pts){ctx.beginPath();ctx.moveTo(pts[0][0],pts[0][1]);for(var p=1;p<pts.length;p++)ctx.lineTo(pts[p][0],pts[p][1]);ctx.stroke()}function draw(plot,ctx){var plotOffset=plot.getPlotOffset();ctx.save();ctx.translate(plotOffset.left,plotOffset.top);$.each(plot.getData(),function(i,s){if(s.points.errorbars&&(s.points.xerr.show||s.points.yerr.show))drawSeriesErrors(plot,ctx,s)});ctx.restore()}function init(plot){plot.hooks.processRawData.push(processRawData);plot.hooks.draw.push(draw)}$.plot.plugins.push({init:init,options:options,name:"errorbars",version:"1.0"})})(jQuery);
@@ -0,0 +1,226 @@+/* Flot plugin for computing bottoms for filled line and bar charts.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The case: you've got two series that you want to fill the area between. In Flot+terms, you need to use one as the fill bottom of the other. You can specify the+bottom of each data point as the third coordinate manually, or you can use this+plugin to compute it for you.++In order to name the other series, you need to give it an id, like this:++ var dataset = [+ { data: [ ... ], id: "foo" } , // use default bottom+ { data: [ ... ], fillBetween: "foo" }, // use first dataset as bottom+ ];++ $.plot($("#placeholder"), dataset, { lines: { show: true, fill: true }});++As a convenience, if the id given is a number that doesn't appear as an id in+the series, it is interpreted as the index in the array instead (so fillBetween:+0 can also mean the first series).++Internally, the plugin modifies the datapoints in each series. For line series,+extra data points might be inserted through interpolation. Note that at points+where the bottom line is not defined (due to a null point or start/end of line),+the current line will show a gap too. The algorithm comes from the+jquery.flot.stack.js plugin, possibly some code could be shared.++*/++(function ( $ ) {++ var options = {+ series: {+ fillBetween: null // or number+ }+ };++ function init( plot ) {++ function findBottomSeries( s, allseries ) {++ var i;++ for ( i = 0; i < allseries.length; ++i ) {+ if ( allseries[ i ].id === s.fillBetween ) {+ return allseries[ i ];+ }+ }++ if ( typeof s.fillBetween === "number" ) {+ if ( s.fillBetween < 0 || s.fillBetween >= allseries.length ) {+ return null;+ }+ return allseries[ s.fillBetween ];+ }++ return null;+ }++ function computeFillBottoms( plot, s, datapoints ) {++ if ( s.fillBetween == null ) {+ return;+ }++ var other = findBottomSeries( s, plot.getData() );++ if ( !other ) {+ return;+ }++ var ps = datapoints.pointsize,+ points = datapoints.points,+ otherps = other.datapoints.pointsize,+ otherpoints = other.datapoints.points,+ newpoints = [],+ px, py, intery, qx, qy, bottom,+ withlines = s.lines.show,+ withbottom = ps > 2 && datapoints.format[2].y,+ withsteps = withlines && s.lines.steps,+ fromgap = true,+ i = 0,+ j = 0,+ l, m;++ while ( true ) {++ if ( i >= points.length ) {+ break;+ }++ l = newpoints.length;++ if ( points[ i ] == null ) {++ // copy gaps++ for ( m = 0; m < ps; ++m ) {+ newpoints.push( points[ i + m ] );+ }++ i += ps;++ } else if ( j >= otherpoints.length ) {++ // for lines, we can't use the rest of the points++ if ( !withlines ) {+ for ( m = 0; m < ps; ++m ) {+ newpoints.push( points[ i + m ] );+ }+ }++ i += ps;++ } else if ( otherpoints[ j ] == null ) {++ // oops, got a gap++ for ( m = 0; m < ps; ++m ) {+ newpoints.push( null );+ }++ fromgap = true;+ j += otherps;++ } else {++ // cases where we actually got two points++ px = points[ i ];+ py = points[ i + 1 ];+ qx = otherpoints[ j ];+ qy = otherpoints[ j + 1 ];+ bottom = 0;++ if ( px === qx ) {++ for ( m = 0; m < ps; ++m ) {+ newpoints.push( points[ i + m ] );+ }++ //newpoints[ l + 1 ] += qy;+ bottom = qy;++ i += ps;+ j += otherps;++ } else if ( px > qx ) {++ // we got past point below, might need to+ // insert interpolated extra point++ if ( withlines && i > 0 && points[ i - ps ] != null ) {+ intery = py + ( points[ i - ps + 1 ] - py ) * ( qx - px ) / ( points[ i - ps ] - px );+ newpoints.push( qx );+ newpoints.push( intery );+ for ( m = 2; m < ps; ++m ) {+ newpoints.push( points[ i + m ] );+ }+ bottom = qy;+ }++ j += otherps;++ } else { // px < qx++ // if we come from a gap, we just skip this point++ if ( fromgap && withlines ) {+ i += ps;+ continue;+ }++ for ( m = 0; m < ps; ++m ) {+ newpoints.push( points[ i + m ] );+ }++ // we might be able to interpolate a point below,+ // this can give us a better y++ if ( withlines && j > 0 && otherpoints[ j - otherps ] != null ) {+ bottom = qy + ( otherpoints[ j - otherps + 1 ] - qy ) * ( px - qx ) / ( otherpoints[ j - otherps ] - qx );+ }++ //newpoints[l + 1] += bottom;++ i += ps;+ }++ fromgap = false;++ if ( l !== newpoints.length && withbottom ) {+ newpoints[ l + 2 ] = bottom;+ }+ }++ // maintain the line steps invariant++ if ( withsteps && l !== newpoints.length && l > 0 &&+ newpoints[ l ] !== null &&+ newpoints[ l ] !== newpoints[ l - ps ] &&+ newpoints[ l + 1 ] !== newpoints[ l - ps + 1 ] ) {+ for (m = 0; m < ps; ++m) {+ newpoints[ l + ps + m ] = newpoints[ l + m ];+ }+ newpoints[ l + 1 ] = newpoints[ l - ps + 1 ];+ }+ }++ datapoints.points = newpoints;+ }++ plot.hooks.processDatapoints.push( computeFillBottoms );+ }++ $.plot.plugins.push({+ init: init,+ options: options,+ name: "fillbetween",+ version: "1.0"+ });++})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={series:{fillBetween:null}};function init(plot){function findBottomSeries(s,allseries){var i;for(i=0;i<allseries.length;++i){if(allseries[i].id===s.fillBetween){return allseries[i]}}if(typeof s.fillBetween==="number"){if(s.fillBetween<0||s.fillBetween>=allseries.length){return null}return allseries[s.fillBetween]}return null}function computeFillBottoms(plot,s,datapoints){if(s.fillBetween==null){return}var other=findBottomSeries(s,plot.getData());if(!other){return}var ps=datapoints.pointsize,points=datapoints.points,otherps=other.datapoints.pointsize,otherpoints=other.datapoints.points,newpoints=[],px,py,intery,qx,qy,bottom,withlines=s.lines.show,withbottom=ps>2&&datapoints.format[2].y,withsteps=withlines&&s.lines.steps,fromgap=true,i=0,j=0,l,m;while(true){if(i>=points.length){break}l=newpoints.length;if(points[i]==null){for(m=0;m<ps;++m){newpoints.push(points[i+m])}i+=ps}else if(j>=otherpoints.length){if(!withlines){for(m=0;m<ps;++m){newpoints.push(points[i+m])}}i+=ps}else if(otherpoints[j]==null){for(m=0;m<ps;++m){newpoints.push(null)}fromgap=true;j+=otherps}else{px=points[i];py=points[i+1];qx=otherpoints[j];qy=otherpoints[j+1];bottom=0;if(px===qx){for(m=0;m<ps;++m){newpoints.push(points[i+m])}bottom=qy;i+=ps;j+=otherps}else if(px>qx){if(withlines&&i>0&&points[i-ps]!=null){intery=py+(points[i-ps+1]-py)*(qx-px)/(points[i-ps]-px);newpoints.push(qx);newpoints.push(intery);for(m=2;m<ps;++m){newpoints.push(points[i+m])}bottom=qy}j+=otherps}else{if(fromgap&&withlines){i+=ps;continue}for(m=0;m<ps;++m){newpoints.push(points[i+m])}if(withlines&&j>0&&otherpoints[j-otherps]!=null){bottom=qy+(otherpoints[j-otherps+1]-qy)*(px-qx)/(otherpoints[j-otherps]-qx)}i+=ps}fromgap=false;if(l!==newpoints.length&&withbottom){newpoints[l+2]=bottom}}if(withsteps&&l!==newpoints.length&&l>0&&newpoints[l]!==null&&newpoints[l]!==newpoints[l-ps]&&newpoints[l+1]!==newpoints[l-ps+1]){for(m=0;m<ps;++m){newpoints[l+ps+m]=newpoints[l+m]}newpoints[l+1]=newpoints[l-ps+1]}}datapoints.points=newpoints}plot.hooks.processDatapoints.push(computeFillBottoms)}$.plot.plugins.push({init:init,options:options,name:"fillbetween",version:"1.0"})})(jQuery);
@@ -0,0 +1,241 @@+/* Flot plugin for plotting images.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The data syntax is [ [ image, x1, y1, x2, y2 ], ... ] where (x1, y1) and+(x2, y2) are where you intend the two opposite corners of the image to end up+in the plot. Image must be a fully loaded Javascript image (you can make one+with new Image()). If the image is not complete, it's skipped when plotting.++There are two helpers included for retrieving images. The easiest work the way+that you put in URLs instead of images in the data, like this:++ [ "myimage.png", 0, 0, 10, 10 ]++Then call $.plot.image.loadData( data, options, callback ) where data and+options are the same as you pass in to $.plot. This loads the images, replaces+the URLs in the data with the corresponding images and calls "callback" when+all images are loaded (or failed loading). In the callback, you can then call+$.plot with the data set. See the included example.++A more low-level helper, $.plot.image.load(urls, callback) is also included.+Given a list of URLs, it calls callback with an object mapping from URL to+Image object when all images are loaded or have failed loading.++The plugin supports these options:++ series: {+ images: {+ show: boolean+ anchor: "corner" or "center"+ alpha: [ 0, 1 ]+ }+ }++They can be specified for a specific series:++ $.plot( $("#placeholder"), [{+ data: [ ... ],+ images: { ... }+ ])++Note that because the data format is different from usual data points, you+can't use images with anything else in a specific data series.++Setting "anchor" to "center" causes the pixels in the image to be anchored at+the corner pixel centers inside of at the pixel corners, effectively letting+half a pixel stick out to each side in the plot.++A possible future direction could be support for tiling for large images (like+Google Maps).++*/++(function ($) {+ var options = {+ series: {+ images: {+ show: false,+ alpha: 1,+ anchor: "corner" // or "center"+ }+ }+ };++ $.plot.image = {};++ $.plot.image.loadDataImages = function (series, options, callback) {+ var urls = [], points = [];++ var defaultShow = options.series.images.show;+ + $.each(series, function (i, s) {+ if (!(defaultShow || s.images.show))+ return;+ + if (s.data)+ s = s.data;++ $.each(s, function (i, p) {+ if (typeof p[0] == "string") {+ urls.push(p[0]);+ points.push(p);+ }+ });+ });++ $.plot.image.load(urls, function (loadedImages) {+ $.each(points, function (i, p) {+ var url = p[0];+ if (loadedImages[url])+ p[0] = loadedImages[url];+ });++ callback();+ });+ }+ + $.plot.image.load = function (urls, callback) {+ var missing = urls.length, loaded = {};+ if (missing == 0)+ callback({});++ $.each(urls, function (i, url) {+ var handler = function () {+ --missing;+ + loaded[url] = this;+ + if (missing == 0)+ callback(loaded);+ };++ $('<img />').load(handler).error(handler).attr('src', url);+ });+ };+ + function drawSeries(plot, ctx, series) {+ var plotOffset = plot.getPlotOffset();+ + if (!series.images || !series.images.show)+ return;+ + var points = series.datapoints.points,+ ps = series.datapoints.pointsize;+ + for (var i = 0; i < points.length; i += ps) {+ var img = points[i],+ x1 = points[i + 1], y1 = points[i + 2],+ x2 = points[i + 3], y2 = points[i + 4],+ xaxis = series.xaxis, yaxis = series.yaxis,+ tmp;++ // actually we should check img.complete, but it+ // appears to be a somewhat unreliable indicator in+ // IE6 (false even after load event)+ if (!img || img.width <= 0 || img.height <= 0)+ continue;++ if (x1 > x2) {+ tmp = x2;+ x2 = x1;+ x1 = tmp;+ }+ if (y1 > y2) {+ tmp = y2;+ y2 = y1;+ y1 = tmp;+ }+ + // if the anchor is at the center of the pixel, expand the + // image by 1/2 pixel in each direction+ if (series.images.anchor == "center") {+ tmp = 0.5 * (x2-x1) / (img.width - 1);+ x1 -= tmp;+ x2 += tmp;+ tmp = 0.5 * (y2-y1) / (img.height - 1);+ y1 -= tmp;+ y2 += tmp;+ }+ + // clip+ if (x1 == x2 || y1 == y2 ||+ x1 >= xaxis.max || x2 <= xaxis.min ||+ y1 >= yaxis.max || y2 <= yaxis.min)+ continue;++ var sx1 = 0, sy1 = 0, sx2 = img.width, sy2 = img.height;+ if (x1 < xaxis.min) {+ sx1 += (sx2 - sx1) * (xaxis.min - x1) / (x2 - x1);+ x1 = xaxis.min;+ }++ if (x2 > xaxis.max) {+ sx2 += (sx2 - sx1) * (xaxis.max - x2) / (x2 - x1);+ x2 = xaxis.max;+ }++ if (y1 < yaxis.min) {+ sy2 += (sy1 - sy2) * (yaxis.min - y1) / (y2 - y1);+ y1 = yaxis.min;+ }++ if (y2 > yaxis.max) {+ sy1 += (sy1 - sy2) * (yaxis.max - y2) / (y2 - y1);+ y2 = yaxis.max;+ }+ + x1 = xaxis.p2c(x1);+ x2 = xaxis.p2c(x2);+ y1 = yaxis.p2c(y1);+ y2 = yaxis.p2c(y2);+ + // the transformation may have swapped us+ if (x1 > x2) {+ tmp = x2;+ x2 = x1;+ x1 = tmp;+ }+ if (y1 > y2) {+ tmp = y2;+ y2 = y1;+ y1 = tmp;+ }++ tmp = ctx.globalAlpha;+ ctx.globalAlpha *= series.images.alpha;+ ctx.drawImage(img,+ sx1, sy1, sx2 - sx1, sy2 - sy1,+ x1 + plotOffset.left, y1 + plotOffset.top,+ x2 - x1, y2 - y1);+ ctx.globalAlpha = tmp;+ }+ }++ function processRawData(plot, series, data, datapoints) {+ if (!series.images.show)+ return;++ // format is Image, x1, y1, x2, y2 (opposite corners)+ datapoints.format = [+ { required: true },+ { x: true, number: true, required: true },+ { y: true, number: true, required: true },+ { x: true, number: true, required: true },+ { y: true, number: true, required: true }+ ];+ }+ + function init(plot) {+ plot.hooks.processRawData.push(processRawData);+ plot.hooks.drawSeries.push(drawSeries);+ }+ + $.plot.plugins.push({+ init: init,+ options: options,+ name: 'image',+ version: '1.1'+ });+})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={series:{images:{show:false,alpha:1,anchor:"corner"}}};$.plot.image={};$.plot.image.loadDataImages=function(series,options,callback){var urls=[],points=[];var defaultShow=options.series.images.show;$.each(series,function(i,s){if(!(defaultShow||s.images.show))return;if(s.data)s=s.data;$.each(s,function(i,p){if(typeof p[0]=="string"){urls.push(p[0]);points.push(p)}})});$.plot.image.load(urls,function(loadedImages){$.each(points,function(i,p){var url=p[0];if(loadedImages[url])p[0]=loadedImages[url]});callback()})};$.plot.image.load=function(urls,callback){var missing=urls.length,loaded={};if(missing==0)callback({});$.each(urls,function(i,url){var handler=function(){--missing;loaded[url]=this;if(missing==0)callback(loaded)};$("<img />").load(handler).error(handler).attr("src",url)})};function drawSeries(plot,ctx,series){var plotOffset=plot.getPlotOffset();if(!series.images||!series.images.show)return;var points=series.datapoints.points,ps=series.datapoints.pointsize;for(var i=0;i<points.length;i+=ps){var img=points[i],x1=points[i+1],y1=points[i+2],x2=points[i+3],y2=points[i+4],xaxis=series.xaxis,yaxis=series.yaxis,tmp;if(!img||img.width<=0||img.height<=0)continue;if(x1>x2){tmp=x2;x2=x1;x1=tmp}if(y1>y2){tmp=y2;y2=y1;y1=tmp}if(series.images.anchor=="center"){tmp=.5*(x2-x1)/(img.width-1);x1-=tmp;x2+=tmp;tmp=.5*(y2-y1)/(img.height-1);y1-=tmp;y2+=tmp}if(x1==x2||y1==y2||x1>=xaxis.max||x2<=xaxis.min||y1>=yaxis.max||y2<=yaxis.min)continue;var sx1=0,sy1=0,sx2=img.width,sy2=img.height;if(x1<xaxis.min){sx1+=(sx2-sx1)*(xaxis.min-x1)/(x2-x1);x1=xaxis.min}if(x2>xaxis.max){sx2+=(sx2-sx1)*(xaxis.max-x2)/(x2-x1);x2=xaxis.max}if(y1<yaxis.min){sy2+=(sy1-sy2)*(yaxis.min-y1)/(y2-y1);y1=yaxis.min}if(y2>yaxis.max){sy1+=(sy1-sy2)*(yaxis.max-y2)/(y2-y1);y2=yaxis.max}x1=xaxis.p2c(x1);x2=xaxis.p2c(x2);y1=yaxis.p2c(y1);y2=yaxis.p2c(y2);if(x1>x2){tmp=x2;x2=x1;x1=tmp}if(y1>y2){tmp=y2;y2=y1;y1=tmp}tmp=ctx.globalAlpha;ctx.globalAlpha*=series.images.alpha;ctx.drawImage(img,sx1,sy1,sx2-sx1,sy2-sy1,x1+plotOffset.left,y1+plotOffset.top,x2-x1,y2-y1);ctx.globalAlpha=tmp}}function processRawData(plot,series,data,datapoints){if(!series.images.show)return;datapoints.format=[{required:true},{x:true,number:true,required:true},{y:true,number:true,required:true},{x:true,number:true,required:true},{y:true,number:true,required:true}]}function init(plot){plot.hooks.processRawData.push(processRawData);plot.hooks.drawSeries.push(drawSeries)}$.plot.plugins.push({init:init,options:options,name:"image",version:"1.1"})})(jQuery);
@@ -0,0 +1,3168 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/++// first an inline dependency, jquery.colorhelpers.js, we inline it here+// for convenience++/* Plugin for jQuery for working with colors.+ *+ * Version 1.1.+ *+ * Inspiration from jQuery color animation plugin by John Resig.+ *+ * Released under the MIT license by Ole Laursen, October 2009.+ *+ * Examples:+ *+ * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()+ * var c = $.color.extract($("#mydiv"), 'background-color');+ * console.log(c.r, c.g, c.b, c.a);+ * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"+ *+ * Note that .scale() and .add() return the same modified object+ * instead of making a new one.+ *+ * V. 1.1: Fix error handling so e.g. parsing an empty string does+ * produce a color rather than just crashing.+ */+(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);++// the actual Flot code+(function($) {++ // Cache the prototype hasOwnProperty for faster access++ var hasOwnProperty = Object.prototype.hasOwnProperty;++ // A shim to provide 'detach' to jQuery versions prior to 1.4. Using a DOM+ // operation produces the same effect as detach, i.e. removing the element+ // without touching its jQuery data.++ // Do not merge this into Flot 0.9, since it requires jQuery 1.4.4+.++ if (!$.fn.detach) {+ $.fn.detach = function() {+ return this.each(function() {+ if (this.parentNode) {+ this.parentNode.removeChild( this );+ }+ });+ };+ }++ ///////////////////////////////////////////////////////////////////////////+ // The Canvas object is a wrapper around an HTML5 <canvas> tag.+ //+ // @constructor+ // @param {string} cls List of classes to apply to the canvas.+ // @param {element} container Element onto which to append the canvas.+ //+ // Requiring a container is a little iffy, but unfortunately canvas+ // operations don't work unless the canvas is attached to the DOM.++ function Canvas(cls, container) {++ var element = container.children("." + cls)[0];++ if (element == null) {++ element = document.createElement("canvas");+ element.className = cls;++ $(element).css({ direction: "ltr", position: "absolute", left: 0, top: 0 })+ .appendTo(container);++ // If HTML5 Canvas isn't available, fall back to [Ex|Flash]canvas++ if (!element.getContext) {+ if (window.G_vmlCanvasManager) {+ element = window.G_vmlCanvasManager.initElement(element);+ } else {+ throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.");+ }+ }+ }++ this.element = element;++ var context = this.context = element.getContext("2d");++ // Determine the screen's ratio of physical to device-independent+ // pixels. This is the ratio between the canvas width that the browser+ // advertises and the number of pixels actually present in that space.++ // The iPhone 4, for example, has a device-independent width of 320px,+ // but its screen is actually 640px wide. It therefore has a pixel+ // ratio of 2, while most normal devices have a ratio of 1.++ var devicePixelRatio = window.devicePixelRatio || 1,+ backingStoreRatio =+ context.webkitBackingStorePixelRatio ||+ context.mozBackingStorePixelRatio ||+ context.msBackingStorePixelRatio ||+ context.oBackingStorePixelRatio ||+ context.backingStorePixelRatio || 1;++ this.pixelRatio = devicePixelRatio / backingStoreRatio;++ // Size the canvas to match the internal dimensions of its container++ this.resize(container.width(), container.height());++ // Collection of HTML div layers for text overlaid onto the canvas++ this.textContainer = null;+ this.text = {};++ // Cache of text fragments and metrics, so we can avoid expensively+ // re-calculating them when the plot is re-rendered in a loop.++ this._textCache = {};+ }++ // Resizes the canvas to the given dimensions.+ //+ // @param {number} width New width of the canvas, in pixels.+ // @param {number} width New height of the canvas, in pixels.++ Canvas.prototype.resize = function(width, height) {++ if (width <= 0 || height <= 0) {+ throw new Error("Invalid dimensions for plot, width = " + width + ", height = " + height);+ }++ var element = this.element,+ context = this.context,+ pixelRatio = this.pixelRatio;++ // Resize the canvas, increasing its density based on the display's+ // pixel ratio; basically giving it more pixels without increasing the+ // size of its element, to take advantage of the fact that retina+ // displays have that many more pixels in the same advertised space.++ // Resizing should reset the state (excanvas seems to be buggy though)++ if (this.width != width) {+ element.width = width * pixelRatio;+ element.style.width = width + "px";+ this.width = width;+ }++ if (this.height != height) {+ element.height = height * pixelRatio;+ element.style.height = height + "px";+ this.height = height;+ }++ // Save the context, so we can reset in case we get replotted. The+ // restore ensure that we're really back at the initial state, and+ // should be safe even if we haven't saved the initial state yet.++ context.restore();+ context.save();++ // Scale the coordinate space to match the display density; so even though we+ // may have twice as many pixels, we still want lines and other drawing to+ // appear at the same size; the extra pixels will just make them crisper.++ context.scale(pixelRatio, pixelRatio);+ };++ // Clears the entire canvas area, not including any overlaid HTML text++ Canvas.prototype.clear = function() {+ this.context.clearRect(0, 0, this.width, this.height);+ };++ // Finishes rendering the canvas, including managing the text overlay.++ Canvas.prototype.render = function() {++ var cache = this._textCache;++ // For each text layer, add elements marked as active that haven't+ // already been rendered, and remove those that are no longer active.++ for (var layerKey in cache) {+ if (hasOwnProperty.call(cache, layerKey)) {++ var layer = this.getTextLayer(layerKey),+ layerCache = cache[layerKey];++ layer.hide();++ for (var styleKey in layerCache) {+ if (hasOwnProperty.call(layerCache, styleKey)) {+ var styleCache = layerCache[styleKey];+ for (var key in styleCache) {+ if (hasOwnProperty.call(styleCache, key)) {++ var positions = styleCache[key].positions;++ for (var i = 0, position; position = positions[i]; i++) {+ if (position.active) {+ if (!position.rendered) {+ layer.append(position.element);+ position.rendered = true;+ }+ } else {+ positions.splice(i--, 1);+ if (position.rendered) {+ position.element.detach();+ }+ }+ }++ if (positions.length == 0) {+ delete styleCache[key];+ }+ }+ }+ }+ }++ layer.show();+ }+ }+ };++ // Creates (if necessary) and returns the text overlay container.+ //+ // @param {string} classes String of space-separated CSS classes used to+ // uniquely identify the text layer.+ // @return {object} The jQuery-wrapped text-layer div.++ Canvas.prototype.getTextLayer = function(classes) {++ var layer = this.text[classes];++ // Create the text layer if it doesn't exist++ if (layer == null) {++ // Create the text layer container, if it doesn't exist++ if (this.textContainer == null) {+ this.textContainer = $("<div class='flot-text'></div>")+ .css({+ position: "absolute",+ top: 0,+ left: 0,+ bottom: 0,+ right: 0,+ 'font-size': "smaller",+ color: "#545454"+ })+ .insertAfter(this.element);+ }++ layer = this.text[classes] = $("<div></div>")+ .addClass(classes)+ .css({+ position: "absolute",+ top: 0,+ left: 0,+ bottom: 0,+ right: 0+ })+ .appendTo(this.textContainer);+ }++ return layer;+ };++ // Creates (if necessary) and returns a text info object.+ //+ // The object looks like this:+ //+ // {+ // width: Width of the text's wrapper div.+ // height: Height of the text's wrapper div.+ // element: The jQuery-wrapped HTML div containing the text.+ // positions: Array of positions at which this text is drawn.+ // }+ //+ // The positions array contains objects that look like this:+ //+ // {+ // active: Flag indicating whether the text should be visible.+ // rendered: Flag indicating whether the text is currently visible.+ // element: The jQuery-wrapped HTML div containing the text.+ // x: X coordinate at which to draw the text.+ // y: Y coordinate at which to draw the text.+ // }+ //+ // Each position after the first receives a clone of the original element.+ //+ // The idea is that that the width, height, and general 'identity' of the+ // text is constant no matter where it is placed; the placements are a+ // secondary property.+ //+ // Canvas maintains a cache of recently-used text info objects; getTextInfo+ // either returns the cached element or creates a new entry.+ //+ // @param {string} layer A string of space-separated CSS classes uniquely+ // identifying the layer containing this text.+ // @param {string} text Text string to retrieve info for.+ // @param {(string|object)=} font Either a string of space-separated CSS+ // classes or a font-spec object, defining the text's font and style.+ // @param {number=} angle Angle at which to rotate the text, in degrees.+ // Angle is currently unused, it will be implemented in the future.+ // @param {number=} width Maximum width of the text before it wraps.+ // @return {object} a text info object.++ Canvas.prototype.getTextInfo = function(layer, text, font, angle, width) {++ var textStyle, layerCache, styleCache, info;++ // Cast the value to a string, in case we were given a number or such++ text = "" + text;++ // If the font is a font-spec object, generate a CSS font definition++ if (typeof font === "object") {+ textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px/" + font.lineHeight + "px " + font.family;+ } else {+ textStyle = font;+ }++ // Retrieve (or create) the cache for the text's layer and styles++ layerCache = this._textCache[layer];++ if (layerCache == null) {+ layerCache = this._textCache[layer] = {};+ }++ styleCache = layerCache[textStyle];++ if (styleCache == null) {+ styleCache = layerCache[textStyle] = {};+ }++ info = styleCache[text];++ // If we can't find a matching element in our cache, create a new one++ if (info == null) {++ var element = $("<div></div>").html(text)+ .css({+ position: "absolute",+ 'max-width': width,+ top: -9999+ })+ .appendTo(this.getTextLayer(layer));++ if (typeof font === "object") {+ element.css({+ font: textStyle,+ color: font.color+ });+ } else if (typeof font === "string") {+ element.addClass(font);+ }++ info = styleCache[text] = {+ width: element.outerWidth(true),+ height: element.outerHeight(true),+ element: element,+ positions: []+ };++ element.detach();+ }++ return info;+ };++ // Adds a text string to the canvas text overlay.+ //+ // The text isn't drawn immediately; it is marked as rendering, which will+ // result in its addition to the canvas on the next render pass.+ //+ // @param {string} layer A string of space-separated CSS classes uniquely+ // identifying the layer containing this text.+ // @param {number} x X coordinate at which to draw the text.+ // @param {number} y Y coordinate at which to draw the text.+ // @param {string} text Text string to draw.+ // @param {(string|object)=} font Either a string of space-separated CSS+ // classes or a font-spec object, defining the text's font and style.+ // @param {number=} angle Angle at which to rotate the text, in degrees.+ // Angle is currently unused, it will be implemented in the future.+ // @param {number=} width Maximum width of the text before it wraps.+ // @param {string=} halign Horizontal alignment of the text; either "left",+ // "center" or "right".+ // @param {string=} valign Vertical alignment of the text; either "top",+ // "middle" or "bottom".++ Canvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {++ var info = this.getTextInfo(layer, text, font, angle, width),+ positions = info.positions;++ // Tweak the div's position to match the text's alignment++ if (halign == "center") {+ x -= info.width / 2;+ } else if (halign == "right") {+ x -= info.width;+ }++ if (valign == "middle") {+ y -= info.height / 2;+ } else if (valign == "bottom") {+ y -= info.height;+ }++ // Determine whether this text already exists at this position.+ // If so, mark it for inclusion in the next render pass.++ for (var i = 0, position; position = positions[i]; i++) {+ if (position.x == x && position.y == y) {+ position.active = true;+ return;+ }+ }++ // If the text doesn't exist at this position, create a new entry++ // For the very first position we'll re-use the original element,+ // while for subsequent ones we'll clone it.++ position = {+ active: true,+ rendered: false,+ element: positions.length ? info.element.clone() : info.element,+ x: x,+ y: y+ };++ positions.push(position);++ // Move the element to its final position within the container++ position.element.css({+ top: Math.round(y),+ left: Math.round(x),+ 'text-align': halign // In case the text wraps+ });+ };++ // Removes one or more text strings from the canvas text overlay.+ //+ // If no parameters are given, all text within the layer is removed.+ //+ // Note that the text is not immediately removed; it is simply marked as+ // inactive, which will result in its removal on the next render pass.+ // This avoids the performance penalty for 'clear and redraw' behavior,+ // where we potentially get rid of all text on a layer, but will likely+ // add back most or all of it later, as when redrawing axes, for example.+ //+ // @param {string} layer A string of space-separated CSS classes uniquely+ // identifying the layer containing this text.+ // @param {number=} x X coordinate of the text.+ // @param {number=} y Y coordinate of the text.+ // @param {string=} text Text string to remove.+ // @param {(string|object)=} font Either a string of space-separated CSS+ // classes or a font-spec object, defining the text's font and style.+ // @param {number=} angle Angle at which the text is rotated, in degrees.+ // Angle is currently unused, it will be implemented in the future.++ Canvas.prototype.removeText = function(layer, x, y, text, font, angle) {+ if (text == null) {+ var layerCache = this._textCache[layer];+ if (layerCache != null) {+ for (var styleKey in layerCache) {+ if (hasOwnProperty.call(layerCache, styleKey)) {+ var styleCache = layerCache[styleKey];+ for (var key in styleCache) {+ if (hasOwnProperty.call(styleCache, key)) {+ var positions = styleCache[key].positions;+ for (var i = 0, position; position = positions[i]; i++) {+ position.active = false;+ }+ }+ }+ }+ }+ }+ } else {+ var positions = this.getTextInfo(layer, text, font, angle).positions;+ for (var i = 0, position; position = positions[i]; i++) {+ if (position.x == x && position.y == y) {+ position.active = false;+ }+ }+ }+ };++ ///////////////////////////////////////////////////////////////////////////+ // The top-level container for the entire plot.++ function Plot(placeholder, data_, options_, plugins) {+ // data is on the form:+ // [ series1, series2 ... ]+ // where series is either just the data as [ [x1, y1], [x2, y2], ... ]+ // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... }++ var series = [],+ options = {+ // the color theme used for graphs+ colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],+ legend: {+ show: true,+ noColumns: 1, // number of colums in legend table+ labelFormatter: null, // fn: string -> string+ labelBoxBorderColor: "#ccc", // border color for the little label boxes+ container: null, // container (as jQuery object) to put legend in, null means default on top of graph+ position: "ne", // position of default legend container within plot+ margin: 5, // distance from grid edge to default legend container within plot+ backgroundColor: null, // null means auto-detect+ backgroundOpacity: 0.85, // set to 0 to avoid background+ sorted: null // default to no legend sorting+ },+ xaxis: {+ show: null, // null = auto-detect, true = always, false = never+ position: "bottom", // or "top"+ mode: null, // null or "time"+ font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: "italic", weight: "bold", family: "sans-serif", variant: "small-caps" }+ color: null, // base color, labels, ticks+ tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)"+ transform: null, // null or f: number -> number to transform axis+ inverseTransform: null, // if transform is set, this should be the inverse function+ min: null, // min. value to show, null means set automatically+ max: null, // max. value to show, null means set automatically+ autoscaleMargin: null, // margin in % to add if auto-setting min/max+ ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks+ tickFormatter: null, // fn: number -> string+ labelWidth: null, // size of tick labels in pixels+ labelHeight: null,+ reserveSpace: null, // whether to reserve space even if axis isn't shown+ tickLength: null, // size in pixels of ticks, or "full" for whole line+ alignTicksWithAxis: null, // axis number or null for no sync+ tickDecimals: null, // no. of decimals, null means auto+ tickSize: null, // number or [number, "unit"]+ minTickSize: null // number or [number, "unit"]+ },+ yaxis: {+ autoscaleMargin: 0.02,+ position: "left" // or "right"+ },+ xaxes: [],+ yaxes: [],+ series: {+ points: {+ show: false,+ radius: 3,+ lineWidth: 2, // in pixels+ fill: true,+ fillColor: "#ffffff",+ symbol: "circle" // or callback+ },+ lines: {+ // we don't put in show: false so we can see+ // whether lines were actively disabled+ lineWidth: 2, // in pixels+ fill: false,+ fillColor: null,+ steps: false+ // Omit 'zero', so we can later default its value to+ // match that of the 'fill' option.+ },+ bars: {+ show: false,+ lineWidth: 2, // in pixels+ barWidth: 1, // in units of the x axis+ fill: true,+ fillColor: null,+ align: "left", // "left", "right", or "center"+ horizontal: false,+ zero: true+ },+ shadowSize: 3,+ highlightColor: null+ },+ grid: {+ show: true,+ aboveData: false,+ color: "#545454", // primary color used for outline and labels+ backgroundColor: null, // null for transparent, else color+ borderColor: null, // set if different from the grid color+ tickColor: null, // color for the ticks, e.g. "rgba(0,0,0,0.15)"+ margin: 0, // distance from the canvas edge to the grid+ labelMargin: 5, // in pixels+ axisMargin: 8, // in pixels+ borderWidth: 2, // in pixels+ minBorderMargin: null, // in pixels, null means taken from points radius+ markings: null, // array of ranges or fn: axes -> array of ranges+ markingsColor: "#f4f4f4",+ markingsLineWidth: 2,+ // interactive stuff+ clickable: false,+ hoverable: false,+ autoHighlight: true, // highlight in case mouse is near+ mouseActiveRadius: 10 // how far the mouse can be away to activate an item+ },+ interaction: {+ redrawOverlayInterval: 1000/60 // time between updates, -1 means in same flow+ },+ hooks: {}+ },+ surface = null, // the canvas for the plot itself+ overlay = null, // canvas for interactive stuff on top of plot+ eventHolder = null, // jQuery object that events should be bound to+ ctx = null, octx = null,+ xaxes = [], yaxes = [],+ plotOffset = { left: 0, right: 0, top: 0, bottom: 0},+ plotWidth = 0, plotHeight = 0,+ hooks = {+ processOptions: [],+ processRawData: [],+ processDatapoints: [],+ processOffset: [],+ drawBackground: [],+ drawSeries: [],+ draw: [],+ bindEvents: [],+ drawOverlay: [],+ shutdown: []+ },+ plot = this;++ // public functions+ plot.setData = setData;+ plot.setupGrid = setupGrid;+ plot.draw = draw;+ plot.getPlaceholder = function() { return placeholder; };+ plot.getCanvas = function() { return surface.element; };+ plot.getPlotOffset = function() { return plotOffset; };+ plot.width = function () { return plotWidth; };+ plot.height = function () { return plotHeight; };+ plot.offset = function () {+ var o = eventHolder.offset();+ o.left += plotOffset.left;+ o.top += plotOffset.top;+ return o;+ };+ plot.getData = function () { return series; };+ plot.getAxes = function () {+ var res = {}, i;+ $.each(xaxes.concat(yaxes), function (_, axis) {+ if (axis)+ res[axis.direction + (axis.n != 1 ? axis.n : "") + "axis"] = axis;+ });+ return res;+ };+ plot.getXAxes = function () { return xaxes; };+ plot.getYAxes = function () { return yaxes; };+ plot.c2p = canvasToAxisCoords;+ plot.p2c = axisToCanvasCoords;+ plot.getOptions = function () { return options; };+ plot.highlight = highlight;+ plot.unhighlight = unhighlight;+ plot.triggerRedrawOverlay = triggerRedrawOverlay;+ plot.pointOffset = function(point) {+ return {+ left: parseInt(xaxes[axisNumber(point, "x") - 1].p2c(+point.x) + plotOffset.left, 10),+ top: parseInt(yaxes[axisNumber(point, "y") - 1].p2c(+point.y) + plotOffset.top, 10)+ };+ };+ plot.shutdown = shutdown;+ plot.destroy = function () {+ shutdown();+ placeholder.removeData("plot").empty();++ series = [];+ options = null;+ surface = null;+ overlay = null;+ eventHolder = null;+ ctx = null;+ octx = null;+ xaxes = [];+ yaxes = [];+ hooks = null;+ highlights = [];+ plot = null;+ };+ plot.resize = function () {+ var width = placeholder.width(),+ height = placeholder.height();+ surface.resize(width, height);+ overlay.resize(width, height);+ };++ // public attributes+ plot.hooks = hooks;++ // initialize+ initPlugins(plot);+ parseOptions(options_);+ setupCanvases();+ setData(data_);+ setupGrid();+ draw();+ bindEvents();+++ function executeHooks(hook, args) {+ args = [plot].concat(args);+ for (var i = 0; i < hook.length; ++i)+ hook[i].apply(this, args);+ }++ function initPlugins() {++ // References to key classes, allowing plugins to modify them++ var classes = {+ Canvas: Canvas+ };++ for (var i = 0; i < plugins.length; ++i) {+ var p = plugins[i];+ p.init(plot, classes);+ if (p.options)+ $.extend(true, options, p.options);+ }+ }++ function parseOptions(opts) {++ $.extend(true, options, opts);++ // $.extend merges arrays, rather than replacing them. When less+ // colors are provided than the size of the default palette, we+ // end up with those colors plus the remaining defaults, which is+ // not expected behavior; avoid it by replacing them here.++ if (opts && opts.colors) {+ options.colors = opts.colors;+ }++ if (options.xaxis.color == null)+ options.xaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();+ if (options.yaxis.color == null)+ options.yaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();++ if (options.xaxis.tickColor == null) // grid.tickColor for back-compatibility+ options.xaxis.tickColor = options.grid.tickColor || options.xaxis.color;+ if (options.yaxis.tickColor == null) // grid.tickColor for back-compatibility+ options.yaxis.tickColor = options.grid.tickColor || options.yaxis.color;++ if (options.grid.borderColor == null)+ options.grid.borderColor = options.grid.color;+ if (options.grid.tickColor == null)+ options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();++ // Fill in defaults for axis options, including any unspecified+ // font-spec fields, if a font-spec was provided.++ // If no x/y axis options were provided, create one of each anyway,+ // since the rest of the code assumes that they exist.++ var i, axisOptions, axisCount,+ fontSize = placeholder.css("font-size"),+ fontSizeDefault = fontSize ? +fontSize.replace("px", "") : 13,+ fontDefaults = {+ style: placeholder.css("font-style"),+ size: Math.round(0.8 * fontSizeDefault),+ variant: placeholder.css("font-variant"),+ weight: placeholder.css("font-weight"),+ family: placeholder.css("font-family")+ };++ axisCount = options.xaxes.length || 1;+ for (i = 0; i < axisCount; ++i) {++ axisOptions = options.xaxes[i];+ if (axisOptions && !axisOptions.tickColor) {+ axisOptions.tickColor = axisOptions.color;+ }++ axisOptions = $.extend(true, {}, options.xaxis, axisOptions);+ options.xaxes[i] = axisOptions;++ if (axisOptions.font) {+ axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);+ if (!axisOptions.font.color) {+ axisOptions.font.color = axisOptions.color;+ }+ if (!axisOptions.font.lineHeight) {+ axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);+ }+ }+ }++ axisCount = options.yaxes.length || 1;+ for (i = 0; i < axisCount; ++i) {++ axisOptions = options.yaxes[i];+ if (axisOptions && !axisOptions.tickColor) {+ axisOptions.tickColor = axisOptions.color;+ }++ axisOptions = $.extend(true, {}, options.yaxis, axisOptions);+ options.yaxes[i] = axisOptions;++ if (axisOptions.font) {+ axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);+ if (!axisOptions.font.color) {+ axisOptions.font.color = axisOptions.color;+ }+ if (!axisOptions.font.lineHeight) {+ axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);+ }+ }+ }++ // backwards compatibility, to be removed in future+ if (options.xaxis.noTicks && options.xaxis.ticks == null)+ options.xaxis.ticks = options.xaxis.noTicks;+ if (options.yaxis.noTicks && options.yaxis.ticks == null)+ options.yaxis.ticks = options.yaxis.noTicks;+ if (options.x2axis) {+ options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);+ options.xaxes[1].position = "top";+ // Override the inherit to allow the axis to auto-scale+ if (options.x2axis.min == null) {+ options.xaxes[1].min = null;+ }+ if (options.x2axis.max == null) {+ options.xaxes[1].max = null;+ }+ }+ if (options.y2axis) {+ options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);+ options.yaxes[1].position = "right";+ // Override the inherit to allow the axis to auto-scale+ if (options.y2axis.min == null) {+ options.yaxes[1].min = null;+ }+ if (options.y2axis.max == null) {+ options.yaxes[1].max = null;+ }+ }+ if (options.grid.coloredAreas)+ options.grid.markings = options.grid.coloredAreas;+ if (options.grid.coloredAreasColor)+ options.grid.markingsColor = options.grid.coloredAreasColor;+ if (options.lines)+ $.extend(true, options.series.lines, options.lines);+ if (options.points)+ $.extend(true, options.series.points, options.points);+ if (options.bars)+ $.extend(true, options.series.bars, options.bars);+ if (options.shadowSize != null)+ options.series.shadowSize = options.shadowSize;+ if (options.highlightColor != null)+ options.series.highlightColor = options.highlightColor;++ // save options on axes for future reference+ for (i = 0; i < options.xaxes.length; ++i)+ getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];+ for (i = 0; i < options.yaxes.length; ++i)+ getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];++ // add hooks from options+ for (var n in hooks)+ if (options.hooks[n] && options.hooks[n].length)+ hooks[n] = hooks[n].concat(options.hooks[n]);++ executeHooks(hooks.processOptions, [options]);+ }++ function setData(d) {+ series = parseData(d);+ fillInSeriesOptions();+ processData();+ }++ function parseData(d) {+ var res = [];+ for (var i = 0; i < d.length; ++i) {+ var s = $.extend(true, {}, options.series);++ if (d[i].data != null) {+ s.data = d[i].data; // move the data instead of deep-copy+ delete d[i].data;++ $.extend(true, s, d[i]);++ d[i].data = s.data;+ }+ else+ s.data = d[i];+ res.push(s);+ }++ return res;+ }++ function axisNumber(obj, coord) {+ var a = obj[coord + "axis"];+ if (typeof a == "object") // if we got a real axis, extract number+ a = a.n;+ if (typeof a != "number")+ a = 1; // default to first axis+ return a;+ }++ function allAxes() {+ // return flat array without annoying null entries+ return $.grep(xaxes.concat(yaxes), function (a) { return a; });+ }++ function canvasToAxisCoords(pos) {+ // return an object with x/y corresponding to all used axes+ var res = {}, i, axis;+ for (i = 0; i < xaxes.length; ++i) {+ axis = xaxes[i];+ if (axis && axis.used)+ res["x" + axis.n] = axis.c2p(pos.left);+ }++ for (i = 0; i < yaxes.length; ++i) {+ axis = yaxes[i];+ if (axis && axis.used)+ res["y" + axis.n] = axis.c2p(pos.top);+ }++ if (res.x1 !== undefined)+ res.x = res.x1;+ if (res.y1 !== undefined)+ res.y = res.y1;++ return res;+ }++ function axisToCanvasCoords(pos) {+ // get canvas coords from the first pair of x/y found in pos+ var res = {}, i, axis, key;++ for (i = 0; i < xaxes.length; ++i) {+ axis = xaxes[i];+ if (axis && axis.used) {+ key = "x" + axis.n;+ if (pos[key] == null && axis.n == 1)+ key = "x";++ if (pos[key] != null) {+ res.left = axis.p2c(pos[key]);+ break;+ }+ }+ }++ for (i = 0; i < yaxes.length; ++i) {+ axis = yaxes[i];+ if (axis && axis.used) {+ key = "y" + axis.n;+ if (pos[key] == null && axis.n == 1)+ key = "y";++ if (pos[key] != null) {+ res.top = axis.p2c(pos[key]);+ break;+ }+ }+ }++ return res;+ }++ function getOrCreateAxis(axes, number) {+ if (!axes[number - 1])+ axes[number - 1] = {+ n: number, // save the number for future reference+ direction: axes == xaxes ? "x" : "y",+ options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)+ };++ return axes[number - 1];+ }++ function fillInSeriesOptions() {++ var neededColors = series.length, maxIndex = -1, i;++ // Subtract the number of series that already have fixed colors or+ // color indexes from the number that we still need to generate.++ for (i = 0; i < series.length; ++i) {+ var sc = series[i].color;+ if (sc != null) {+ neededColors--;+ if (typeof sc == "number" && sc > maxIndex) {+ maxIndex = sc;+ }+ }+ }++ // If any of the series have fixed color indexes, then we need to+ // generate at least as many colors as the highest index.++ if (neededColors <= maxIndex) {+ neededColors = maxIndex + 1;+ }++ // Generate all the colors, using first the option colors and then+ // variations on those colors once they're exhausted.++ var c, colors = [], colorPool = options.colors,+ colorPoolSize = colorPool.length, variation = 0;++ for (i = 0; i < neededColors; i++) {++ c = $.color.parse(colorPool[i % colorPoolSize] || "#666");++ // Each time we exhaust the colors in the pool we adjust+ // a scaling factor used to produce more variations on+ // those colors. The factor alternates negative/positive+ // to produce lighter/darker colors.++ // Reset the variation after every few cycles, or else+ // it will end up producing only white or black colors.++ if (i % colorPoolSize == 0 && i) {+ if (variation >= 0) {+ if (variation < 0.5) {+ variation = -variation - 0.2;+ } else variation = 0;+ } else variation = -variation;+ }++ colors[i] = c.scale('rgb', 1 + variation);+ }++ // Finalize the series options, filling in their colors++ var colori = 0, s;+ for (i = 0; i < series.length; ++i) {+ s = series[i];++ // assign colors+ if (s.color == null) {+ s.color = colors[colori].toString();+ ++colori;+ }+ else if (typeof s.color == "number")+ s.color = colors[s.color].toString();++ // turn on lines automatically in case nothing is set+ if (s.lines.show == null) {+ var v, show = true;+ for (v in s)+ if (s[v] && s[v].show) {+ show = false;+ break;+ }+ if (show)+ s.lines.show = true;+ }++ // If nothing was provided for lines.zero, default it to match+ // lines.fill, since areas by default should extend to zero.++ if (s.lines.zero == null) {+ s.lines.zero = !!s.lines.fill;+ }++ // setup axes+ s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, "x"));+ s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, "y"));+ }+ }++ function processData() {+ var topSentry = Number.POSITIVE_INFINITY,+ bottomSentry = Number.NEGATIVE_INFINITY,+ fakeInfinity = Number.MAX_VALUE,+ i, j, k, m, length,+ s, points, ps, x, y, axis, val, f, p,+ data, format;++ function updateAxis(axis, min, max) {+ if (min < axis.datamin && min != -fakeInfinity)+ axis.datamin = min;+ if (max > axis.datamax && max != fakeInfinity)+ axis.datamax = max;+ }++ $.each(allAxes(), function (_, axis) {+ // init axis+ axis.datamin = topSentry;+ axis.datamax = bottomSentry;+ axis.used = false;+ });++ for (i = 0; i < series.length; ++i) {+ s = series[i];+ s.datapoints = { points: [] };++ executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);+ }++ // first pass: clean and copy data+ for (i = 0; i < series.length; ++i) {+ s = series[i];++ data = s.data;+ format = s.datapoints.format;++ if (!format) {+ format = [];+ // find out how to copy+ format.push({ x: true, number: true, required: true });+ format.push({ y: true, number: true, required: true });++ if (s.bars.show || (s.lines.show && s.lines.fill)) {+ var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));+ format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });+ if (s.bars.horizontal) {+ delete format[format.length - 1].y;+ format[format.length - 1].x = true;+ }+ }++ s.datapoints.format = format;+ }++ if (s.datapoints.pointsize != null)+ continue; // already filled in++ s.datapoints.pointsize = format.length;++ ps = s.datapoints.pointsize;+ points = s.datapoints.points;++ var insertSteps = s.lines.show && s.lines.steps;+ s.xaxis.used = s.yaxis.used = true;++ for (j = k = 0; j < data.length; ++j, k += ps) {+ p = data[j];++ var nullify = p == null;+ if (!nullify) {+ for (m = 0; m < ps; ++m) {+ val = p[m];+ f = format[m];++ if (f) {+ if (f.number && val != null) {+ val = +val; // convert to number+ if (isNaN(val))+ val = null;+ else if (val == Infinity)+ val = fakeInfinity;+ else if (val == -Infinity)+ val = -fakeInfinity;+ }++ if (val == null) {+ if (f.required)+ nullify = true;++ if (f.defaultValue != null)+ val = f.defaultValue;+ }+ }++ points[k + m] = val;+ }+ }++ if (nullify) {+ for (m = 0; m < ps; ++m) {+ val = points[k + m];+ if (val != null) {+ f = format[m];+ // extract min/max info+ if (f.autoscale !== false) {+ if (f.x) {+ updateAxis(s.xaxis, val, val);+ }+ if (f.y) {+ updateAxis(s.yaxis, val, val);+ }+ }+ }+ points[k + m] = null;+ }+ }+ else {+ // a little bit of line specific stuff that+ // perhaps shouldn't be here, but lacking+ // better means...+ if (insertSteps && k > 0+ && points[k - ps] != null+ && points[k - ps] != points[k]+ && points[k - ps + 1] != points[k + 1]) {+ // copy the point to make room for a middle point+ for (m = 0; m < ps; ++m)+ points[k + ps + m] = points[k + m];++ // middle point has same y+ points[k + 1] = points[k - ps + 1];++ // we've added a point, better reflect that+ k += ps;+ }+ }+ }+ }++ // give the hooks a chance to run+ for (i = 0; i < series.length; ++i) {+ s = series[i];++ executeHooks(hooks.processDatapoints, [ s, s.datapoints]);+ }++ // second pass: find datamax/datamin for auto-scaling+ for (i = 0; i < series.length; ++i) {+ s = series[i];+ points = s.datapoints.points;+ ps = s.datapoints.pointsize;+ format = s.datapoints.format;++ var xmin = topSentry, ymin = topSentry,+ xmax = bottomSentry, ymax = bottomSentry;++ for (j = 0; j < points.length; j += ps) {+ if (points[j] == null)+ continue;++ for (m = 0; m < ps; ++m) {+ val = points[j + m];+ f = format[m];+ if (!f || f.autoscale === false || val == fakeInfinity || val == -fakeInfinity)+ continue;++ if (f.x) {+ if (val < xmin)+ xmin = val;+ if (val > xmax)+ xmax = val;+ }+ if (f.y) {+ if (val < ymin)+ ymin = val;+ if (val > ymax)+ ymax = val;+ }+ }+ }++ if (s.bars.show) {+ // make sure we got room for the bar on the dancing floor+ var delta;++ switch (s.bars.align) {+ case "left":+ delta = 0;+ break;+ case "right":+ delta = -s.bars.barWidth;+ break;+ default:+ delta = -s.bars.barWidth / 2;+ }++ if (s.bars.horizontal) {+ ymin += delta;+ ymax += delta + s.bars.barWidth;+ }+ else {+ xmin += delta;+ xmax += delta + s.bars.barWidth;+ }+ }++ updateAxis(s.xaxis, xmin, xmax);+ updateAxis(s.yaxis, ymin, ymax);+ }++ $.each(allAxes(), function (_, axis) {+ if (axis.datamin == topSentry)+ axis.datamin = null;+ if (axis.datamax == bottomSentry)+ axis.datamax = null;+ });+ }++ function setupCanvases() {++ // Make sure the placeholder is clear of everything except canvases+ // from a previous plot in this container that we'll try to re-use.++ placeholder.css("padding", 0) // padding messes up the positioning+ .children().filter(function(){+ return !$(this).hasClass("flot-overlay") && !$(this).hasClass('flot-base');+ }).remove();++ if (placeholder.css("position") == 'static')+ placeholder.css("position", "relative"); // for positioning labels and overlay++ surface = new Canvas("flot-base", placeholder);+ overlay = new Canvas("flot-overlay", placeholder); // overlay canvas for interactive features++ ctx = surface.context;+ octx = overlay.context;++ // define which element we're listening for events on+ eventHolder = $(overlay.element).unbind();++ // If we're re-using a plot object, shut down the old one++ var existing = placeholder.data("plot");++ if (existing) {+ existing.shutdown();+ overlay.clear();+ }++ // save in case we get replotted+ placeholder.data("plot", plot);+ }++ function bindEvents() {+ // bind events+ if (options.grid.hoverable) {+ eventHolder.mousemove(onMouseMove);++ // Use bind, rather than .mouseleave, because we officially+ // still support jQuery 1.2.6, which doesn't define a shortcut+ // for mouseenter or mouseleave. This was a bug/oversight that+ // was fixed somewhere around 1.3.x. We can return to using+ // .mouseleave when we drop support for 1.2.6.++ eventHolder.bind("mouseleave", onMouseLeave);+ }++ if (options.grid.clickable)+ eventHolder.click(onClick);++ executeHooks(hooks.bindEvents, [eventHolder]);+ }++ function shutdown() {+ if (redrawTimeout)+ clearTimeout(redrawTimeout);++ eventHolder.unbind("mousemove", onMouseMove);+ eventHolder.unbind("mouseleave", onMouseLeave);+ eventHolder.unbind("click", onClick);++ executeHooks(hooks.shutdown, [eventHolder]);+ }++ function setTransformationHelpers(axis) {+ // set helper functions on the axis, assumes plot area+ // has been computed already++ function identity(x) { return x; }++ var s, m, t = axis.options.transform || identity,+ it = axis.options.inverseTransform;++ // precompute how much the axis is scaling a point+ // in canvas space+ if (axis.direction == "x") {+ s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));+ m = Math.min(t(axis.max), t(axis.min));+ }+ else {+ s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));+ s = -s;+ m = Math.max(t(axis.max), t(axis.min));+ }++ // data point to canvas coordinate+ if (t == identity) // slight optimization+ axis.p2c = function (p) { return (p - m) * s; };+ else+ axis.p2c = function (p) { return (t(p) - m) * s; };+ // canvas coordinate to data point+ if (!it)+ axis.c2p = function (c) { return m + c / s; };+ else+ axis.c2p = function (c) { return it(m + c / s); };+ }++ function measureTickLabels(axis) {++ var opts = axis.options,+ ticks = axis.ticks || [],+ labelWidth = opts.labelWidth || 0,+ labelHeight = opts.labelHeight || 0,+ maxWidth = labelWidth || (axis.direction == "x" ? Math.floor(surface.width / (ticks.length || 1)) : null),+ legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis",+ layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles,+ font = opts.font || "flot-tick-label tickLabel";++ for (var i = 0; i < ticks.length; ++i) {++ var t = ticks[i];++ if (!t.label)+ continue;++ var info = surface.getTextInfo(layer, t.label, font, null, maxWidth);++ labelWidth = Math.max(labelWidth, info.width);+ labelHeight = Math.max(labelHeight, info.height);+ }++ axis.labelWidth = opts.labelWidth || labelWidth;+ axis.labelHeight = opts.labelHeight || labelHeight;+ }++ function allocateAxisBoxFirstPhase(axis) {+ // find the bounding box of the axis by looking at label+ // widths/heights and ticks, make room by diminishing the+ // plotOffset; this first phase only looks at one+ // dimension per axis, the other dimension depends on the+ // other axes so will have to wait++ var lw = axis.labelWidth,+ lh = axis.labelHeight,+ pos = axis.options.position,+ isXAxis = axis.direction === "x",+ tickLength = axis.options.tickLength,+ axisMargin = options.grid.axisMargin,+ padding = options.grid.labelMargin,+ innermost = true,+ outermost = true,+ first = true,+ found = false;++ // Determine the axis's position in its direction and on its side++ $.each(isXAxis ? xaxes : yaxes, function(i, a) {+ if (a && (a.show || a.reserveSpace)) {+ if (a === axis) {+ found = true;+ } else if (a.options.position === pos) {+ if (found) {+ outermost = false;+ } else {+ innermost = false;+ }+ }+ if (!found) {+ first = false;+ }+ }+ });++ // The outermost axis on each side has no margin++ if (outermost) {+ axisMargin = 0;+ }++ // The ticks for the first axis in each direction stretch across++ if (tickLength == null) {+ tickLength = first ? "full" : 5;+ }++ if (!isNaN(+tickLength))+ padding += +tickLength;++ if (isXAxis) {+ lh += padding;++ if (pos == "bottom") {+ plotOffset.bottom += lh + axisMargin;+ axis.box = { top: surface.height - plotOffset.bottom, height: lh };+ }+ else {+ axis.box = { top: plotOffset.top + axisMargin, height: lh };+ plotOffset.top += lh + axisMargin;+ }+ }+ else {+ lw += padding;++ if (pos == "left") {+ axis.box = { left: plotOffset.left + axisMargin, width: lw };+ plotOffset.left += lw + axisMargin;+ }+ else {+ plotOffset.right += lw + axisMargin;+ axis.box = { left: surface.width - plotOffset.right, width: lw };+ }+ }++ // save for future reference+ axis.position = pos;+ axis.tickLength = tickLength;+ axis.box.padding = padding;+ axis.innermost = innermost;+ }++ function allocateAxisBoxSecondPhase(axis) {+ // now that all axis boxes have been placed in one+ // dimension, we can set the remaining dimension coordinates+ if (axis.direction == "x") {+ axis.box.left = plotOffset.left - axis.labelWidth / 2;+ axis.box.width = surface.width - plotOffset.left - plotOffset.right + axis.labelWidth;+ }+ else {+ axis.box.top = plotOffset.top - axis.labelHeight / 2;+ axis.box.height = surface.height - plotOffset.bottom - plotOffset.top + axis.labelHeight;+ }+ }++ function adjustLayoutForThingsStickingOut() {+ // possibly adjust plot offset to ensure everything stays+ // inside the canvas and isn't clipped off++ var minMargin = options.grid.minBorderMargin,+ axis, i;++ // check stuff from the plot (FIXME: this should just read+ // a value from the series, otherwise it's impossible to+ // customize)+ if (minMargin == null) {+ minMargin = 0;+ for (i = 0; i < series.length; ++i)+ minMargin = Math.max(minMargin, 2 * (series[i].points.radius + series[i].points.lineWidth/2));+ }++ var margins = {+ left: minMargin,+ right: minMargin,+ top: minMargin,+ bottom: minMargin+ };++ // check axis labels, note we don't check the actual+ // labels but instead use the overall width/height to not+ // jump as much around with replots+ $.each(allAxes(), function (_, axis) {+ if (axis.reserveSpace && axis.ticks && axis.ticks.length) {+ if (axis.direction === "x") {+ margins.left = Math.max(margins.left, axis.labelWidth / 2);+ margins.right = Math.max(margins.right, axis.labelWidth / 2);+ } else {+ margins.bottom = Math.max(margins.bottom, axis.labelHeight / 2);+ margins.top = Math.max(margins.top, axis.labelHeight / 2);+ }+ }+ });++ plotOffset.left = Math.ceil(Math.max(margins.left, plotOffset.left));+ plotOffset.right = Math.ceil(Math.max(margins.right, plotOffset.right));+ plotOffset.top = Math.ceil(Math.max(margins.top, plotOffset.top));+ plotOffset.bottom = Math.ceil(Math.max(margins.bottom, plotOffset.bottom));+ }++ function setupGrid() {+ var i, axes = allAxes(), showGrid = options.grid.show;++ // Initialize the plot's offset from the edge of the canvas++ for (var a in plotOffset) {+ var margin = options.grid.margin || 0;+ plotOffset[a] = typeof margin == "number" ? margin : margin[a] || 0;+ }++ executeHooks(hooks.processOffset, [plotOffset]);++ // If the grid is visible, add its border width to the offset++ for (var a in plotOffset) {+ if(typeof(options.grid.borderWidth) == "object") {+ plotOffset[a] += showGrid ? options.grid.borderWidth[a] : 0;+ }+ else {+ plotOffset[a] += showGrid ? options.grid.borderWidth : 0;+ }+ }++ $.each(axes, function (_, axis) {+ var axisOpts = axis.options;+ axis.show = axisOpts.show == null ? axis.used : axisOpts.show;+ axis.reserveSpace = axisOpts.reserveSpace == null ? axis.show : axisOpts.reserveSpace;+ setRange(axis);+ });++ if (showGrid) {++ var allocatedAxes = $.grep(axes, function (axis) {+ return axis.show || axis.reserveSpace;+ });++ $.each(allocatedAxes, function (_, axis) {+ // make the ticks+ setupTickGeneration(axis);+ setTicks(axis);+ snapRangeToTicks(axis, axis.ticks);+ // find labelWidth/Height for axis+ measureTickLabels(axis);+ });++ // with all dimensions calculated, we can compute the+ // axis bounding boxes, start from the outside+ // (reverse order)+ for (i = allocatedAxes.length - 1; i >= 0; --i)+ allocateAxisBoxFirstPhase(allocatedAxes[i]);++ // make sure we've got enough space for things that+ // might stick out+ adjustLayoutForThingsStickingOut();++ $.each(allocatedAxes, function (_, axis) {+ allocateAxisBoxSecondPhase(axis);+ });+ }++ plotWidth = surface.width - plotOffset.left - plotOffset.right;+ plotHeight = surface.height - plotOffset.bottom - plotOffset.top;++ // now we got the proper plot dimensions, we can compute the scaling+ $.each(axes, function (_, axis) {+ setTransformationHelpers(axis);+ });++ if (showGrid) {+ drawAxisLabels();+ }++ insertLegend();+ }++ function setRange(axis) {+ var opts = axis.options,+ min = +(opts.min != null ? opts.min : axis.datamin),+ max = +(opts.max != null ? opts.max : axis.datamax),+ delta = max - min;++ if (delta == 0.0) {+ // degenerate case+ var widen = max == 0 ? 1 : 0.01;++ if (opts.min == null)+ min -= widen;+ // always widen max if we couldn't widen min to ensure we+ // don't fall into min == max which doesn't work+ if (opts.max == null || opts.min != null)+ max += widen;+ }+ else {+ // consider autoscaling+ var margin = opts.autoscaleMargin;+ if (margin != null) {+ if (opts.min == null) {+ min -= delta * margin;+ // make sure we don't go below zero if all values+ // are positive+ if (min < 0 && axis.datamin != null && axis.datamin >= 0)+ min = 0;+ }+ if (opts.max == null) {+ max += delta * margin;+ if (max > 0 && axis.datamax != null && axis.datamax <= 0)+ max = 0;+ }+ }+ }+ axis.min = min;+ axis.max = max;+ }++ function setupTickGeneration(axis) {+ var opts = axis.options;++ // estimate number of ticks+ var noTicks;+ if (typeof opts.ticks == "number" && opts.ticks > 0)+ noTicks = opts.ticks;+ else+ // heuristic based on the model a*sqrt(x) fitted to+ // some data points that seemed reasonable+ noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? surface.width : surface.height);++ var delta = (axis.max - axis.min) / noTicks,+ dec = -Math.floor(Math.log(delta) / Math.LN10),+ maxDec = opts.tickDecimals;++ if (maxDec != null && dec > maxDec) {+ dec = maxDec;+ }++ var magn = Math.pow(10, -dec),+ norm = delta / magn, // norm is between 1.0 and 10.0+ size;++ if (norm < 1.5) {+ size = 1;+ } else if (norm < 3) {+ size = 2;+ // special case for 2.5, requires an extra decimal+ if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {+ size = 2.5;+ ++dec;+ }+ } else if (norm < 7.5) {+ size = 5;+ } else {+ size = 10;+ }++ size *= magn;++ if (opts.minTickSize != null && size < opts.minTickSize) {+ size = opts.minTickSize;+ }++ axis.delta = delta;+ axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);+ axis.tickSize = opts.tickSize || size;++ // Time mode was moved to a plug-in in 0.8, and since so many people use it+ // we'll add an especially friendly reminder to make sure they included it.++ if (opts.mode == "time" && !axis.tickGenerator) {+ throw new Error("Time mode requires the flot.time plugin.");+ }++ // Flot supports base-10 axes; any other mode else is handled by a plug-in,+ // like flot.time.js.++ if (!axis.tickGenerator) {++ axis.tickGenerator = function (axis) {++ var ticks = [],+ start = floorInBase(axis.min, axis.tickSize),+ i = 0,+ v = Number.NaN,+ prev;++ do {+ prev = v;+ v = start + i * axis.tickSize;+ ticks.push(v);+ ++i;+ } while (v < axis.max && v != prev);+ return ticks;+ };++ axis.tickFormatter = function (value, axis) {++ var factor = axis.tickDecimals ? Math.pow(10, axis.tickDecimals) : 1;+ var formatted = "" + Math.round(value * factor) / factor;++ // If tickDecimals was specified, ensure that we have exactly that+ // much precision; otherwise default to the value's own precision.++ if (axis.tickDecimals != null) {+ var decimal = formatted.indexOf(".");+ var precision = decimal == -1 ? 0 : formatted.length - decimal - 1;+ if (precision < axis.tickDecimals) {+ return (precision ? formatted : formatted + ".") + ("" + factor).substr(1, axis.tickDecimals - precision);+ }+ }++ return formatted;+ };+ }++ if ($.isFunction(opts.tickFormatter))+ axis.tickFormatter = function (v, axis) { return "" + opts.tickFormatter(v, axis); };++ if (opts.alignTicksWithAxis != null) {+ var otherAxis = (axis.direction == "x" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];+ if (otherAxis && otherAxis.used && otherAxis != axis) {+ // consider snapping min/max to outermost nice ticks+ var niceTicks = axis.tickGenerator(axis);+ if (niceTicks.length > 0) {+ if (opts.min == null)+ axis.min = Math.min(axis.min, niceTicks[0]);+ if (opts.max == null && niceTicks.length > 1)+ axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);+ }++ axis.tickGenerator = function (axis) {+ // copy ticks, scaled to this axis+ var ticks = [], v, i;+ for (i = 0; i < otherAxis.ticks.length; ++i) {+ v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);+ v = axis.min + v * (axis.max - axis.min);+ ticks.push(v);+ }+ return ticks;+ };++ // we might need an extra decimal since forced+ // ticks don't necessarily fit naturally+ if (!axis.mode && opts.tickDecimals == null) {+ var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1),+ ts = axis.tickGenerator(axis);++ // only proceed if the tick interval rounded+ // with an extra decimal doesn't give us a+ // zero at end+ if (!(ts.length > 1 && /\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))+ axis.tickDecimals = extraDec;+ }+ }+ }+ }++ function setTicks(axis) {+ var oticks = axis.options.ticks, ticks = [];+ if (oticks == null || (typeof oticks == "number" && oticks > 0))+ ticks = axis.tickGenerator(axis);+ else if (oticks) {+ if ($.isFunction(oticks))+ // generate the ticks+ ticks = oticks(axis);+ else+ ticks = oticks;+ }++ // clean up/labelify the supplied ticks, copy them over+ var i, v;+ axis.ticks = [];+ for (i = 0; i < ticks.length; ++i) {+ var label = null;+ var t = ticks[i];+ if (typeof t == "object") {+ v = +t[0];+ if (t.length > 1)+ label = t[1];+ }+ else+ v = +t;+ if (label == null)+ label = axis.tickFormatter(v, axis);+ if (!isNaN(v))+ axis.ticks.push({ v: v, label: label });+ }+ }++ function snapRangeToTicks(axis, ticks) {+ if (axis.options.autoscaleMargin && ticks.length > 0) {+ // snap to ticks+ if (axis.options.min == null)+ axis.min = Math.min(axis.min, ticks[0].v);+ if (axis.options.max == null && ticks.length > 1)+ axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);+ }+ }++ function draw() {++ surface.clear();++ executeHooks(hooks.drawBackground, [ctx]);++ var grid = options.grid;++ // draw background, if any+ if (grid.show && grid.backgroundColor)+ drawBackground();++ if (grid.show && !grid.aboveData) {+ drawGrid();+ }++ for (var i = 0; i < series.length; ++i) {+ executeHooks(hooks.drawSeries, [ctx, series[i]]);+ drawSeries(series[i]);+ }++ executeHooks(hooks.draw, [ctx]);++ if (grid.show && grid.aboveData) {+ drawGrid();+ }++ surface.render();++ // A draw implies that either the axes or data have changed, so we+ // should probably update the overlay highlights as well.++ triggerRedrawOverlay();+ }++ function extractRange(ranges, coord) {+ var axis, from, to, key, axes = allAxes();++ for (var i = 0; i < axes.length; ++i) {+ axis = axes[i];+ if (axis.direction == coord) {+ key = coord + axis.n + "axis";+ if (!ranges[key] && axis.n == 1)+ key = coord + "axis"; // support x1axis as xaxis+ if (ranges[key]) {+ from = ranges[key].from;+ to = ranges[key].to;+ break;+ }+ }+ }++ // backwards-compat stuff - to be removed in future+ if (!ranges[key]) {+ axis = coord == "x" ? xaxes[0] : yaxes[0];+ from = ranges[coord + "1"];+ to = ranges[coord + "2"];+ }++ // auto-reverse as an added bonus+ if (from != null && to != null && from > to) {+ var tmp = from;+ from = to;+ to = tmp;+ }++ return { from: from, to: to, axis: axis };+ }++ function drawBackground() {+ ctx.save();+ ctx.translate(plotOffset.left, plotOffset.top);++ ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)");+ ctx.fillRect(0, 0, plotWidth, plotHeight);+ ctx.restore();+ }++ function drawGrid() {+ var i, axes, bw, bc;++ ctx.save();+ ctx.translate(plotOffset.left, plotOffset.top);++ // draw markings+ var markings = options.grid.markings;+ if (markings) {+ if ($.isFunction(markings)) {+ axes = plot.getAxes();+ // xmin etc. is backwards compatibility, to be+ // removed in the future+ axes.xmin = axes.xaxis.min;+ axes.xmax = axes.xaxis.max;+ axes.ymin = axes.yaxis.min;+ axes.ymax = axes.yaxis.max;++ markings = markings(axes);+ }++ for (i = 0; i < markings.length; ++i) {+ var m = markings[i],+ xrange = extractRange(m, "x"),+ yrange = extractRange(m, "y");++ // fill in missing+ if (xrange.from == null)+ xrange.from = xrange.axis.min;+ if (xrange.to == null)+ xrange.to = xrange.axis.max;+ if (yrange.from == null)+ yrange.from = yrange.axis.min;+ if (yrange.to == null)+ yrange.to = yrange.axis.max;++ // clip+ if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||+ yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)+ continue;++ xrange.from = Math.max(xrange.from, xrange.axis.min);+ xrange.to = Math.min(xrange.to, xrange.axis.max);+ yrange.from = Math.max(yrange.from, yrange.axis.min);+ yrange.to = Math.min(yrange.to, yrange.axis.max);++ var xequal = xrange.from === xrange.to,+ yequal = yrange.from === yrange.to;++ if (xequal && yequal) {+ continue;+ }++ // then draw+ xrange.from = Math.floor(xrange.axis.p2c(xrange.from));+ xrange.to = Math.floor(xrange.axis.p2c(xrange.to));+ yrange.from = Math.floor(yrange.axis.p2c(yrange.from));+ yrange.to = Math.floor(yrange.axis.p2c(yrange.to));++ if (xequal || yequal) {+ var lineWidth = m.lineWidth || options.grid.markingsLineWidth,+ subPixel = lineWidth % 2 ? 0.5 : 0;+ ctx.beginPath();+ ctx.strokeStyle = m.color || options.grid.markingsColor;+ ctx.lineWidth = lineWidth;+ if (xequal) {+ ctx.moveTo(xrange.to + subPixel, yrange.from);+ ctx.lineTo(xrange.to + subPixel, yrange.to);+ } else {+ ctx.moveTo(xrange.from, yrange.to + subPixel);+ ctx.lineTo(xrange.to, yrange.to + subPixel); + }+ ctx.stroke();+ } else {+ ctx.fillStyle = m.color || options.grid.markingsColor;+ ctx.fillRect(xrange.from, yrange.to,+ xrange.to - xrange.from,+ yrange.from - yrange.to);+ }+ }+ }++ // draw the ticks+ axes = allAxes();+ bw = options.grid.borderWidth;++ for (var j = 0; j < axes.length; ++j) {+ var axis = axes[j], box = axis.box,+ t = axis.tickLength, x, y, xoff, yoff;+ if (!axis.show || axis.ticks.length == 0)+ continue;++ ctx.lineWidth = 1;++ // find the edges+ if (axis.direction == "x") {+ x = 0;+ if (t == "full")+ y = (axis.position == "top" ? 0 : plotHeight);+ else+ y = box.top - plotOffset.top + (axis.position == "top" ? box.height : 0);+ }+ else {+ y = 0;+ if (t == "full")+ x = (axis.position == "left" ? 0 : plotWidth);+ else+ x = box.left - plotOffset.left + (axis.position == "left" ? box.width : 0);+ }++ // draw tick bar+ if (!axis.innermost) {+ ctx.strokeStyle = axis.options.color;+ ctx.beginPath();+ xoff = yoff = 0;+ if (axis.direction == "x")+ xoff = plotWidth + 1;+ else+ yoff = plotHeight + 1;++ if (ctx.lineWidth == 1) {+ if (axis.direction == "x") {+ y = Math.floor(y) + 0.5;+ } else {+ x = Math.floor(x) + 0.5;+ }+ }++ ctx.moveTo(x, y);+ ctx.lineTo(x + xoff, y + yoff);+ ctx.stroke();+ }++ // draw ticks++ ctx.strokeStyle = axis.options.tickColor;++ ctx.beginPath();+ for (i = 0; i < axis.ticks.length; ++i) {+ var v = axis.ticks[i].v;++ xoff = yoff = 0;++ if (isNaN(v) || v < axis.min || v > axis.max+ // skip those lying on the axes if we got a border+ || (t == "full"+ && ((typeof bw == "object" && bw[axis.position] > 0) || bw > 0)+ && (v == axis.min || v == axis.max)))+ continue;++ if (axis.direction == "x") {+ x = axis.p2c(v);+ yoff = t == "full" ? -plotHeight : t;++ if (axis.position == "top")+ yoff = -yoff;+ }+ else {+ y = axis.p2c(v);+ xoff = t == "full" ? -plotWidth : t;++ if (axis.position == "left")+ xoff = -xoff;+ }++ if (ctx.lineWidth == 1) {+ if (axis.direction == "x")+ x = Math.floor(x) + 0.5;+ else+ y = Math.floor(y) + 0.5;+ }++ ctx.moveTo(x, y);+ ctx.lineTo(x + xoff, y + yoff);+ }++ ctx.stroke();+ }+++ // draw border+ if (bw) {+ // If either borderWidth or borderColor is an object, then draw the border+ // line by line instead of as one rectangle+ bc = options.grid.borderColor;+ if(typeof bw == "object" || typeof bc == "object") {+ if (typeof bw !== "object") {+ bw = {top: bw, right: bw, bottom: bw, left: bw};+ }+ if (typeof bc !== "object") {+ bc = {top: bc, right: bc, bottom: bc, left: bc};+ }++ if (bw.top > 0) {+ ctx.strokeStyle = bc.top;+ ctx.lineWidth = bw.top;+ ctx.beginPath();+ ctx.moveTo(0 - bw.left, 0 - bw.top/2);+ ctx.lineTo(plotWidth, 0 - bw.top/2);+ ctx.stroke();+ }++ if (bw.right > 0) {+ ctx.strokeStyle = bc.right;+ ctx.lineWidth = bw.right;+ ctx.beginPath();+ ctx.moveTo(plotWidth + bw.right / 2, 0 - bw.top);+ ctx.lineTo(plotWidth + bw.right / 2, plotHeight);+ ctx.stroke();+ }++ if (bw.bottom > 0) {+ ctx.strokeStyle = bc.bottom;+ ctx.lineWidth = bw.bottom;+ ctx.beginPath();+ ctx.moveTo(plotWidth + bw.right, plotHeight + bw.bottom / 2);+ ctx.lineTo(0, plotHeight + bw.bottom / 2);+ ctx.stroke();+ }++ if (bw.left > 0) {+ ctx.strokeStyle = bc.left;+ ctx.lineWidth = bw.left;+ ctx.beginPath();+ ctx.moveTo(0 - bw.left/2, plotHeight + bw.bottom);+ ctx.lineTo(0- bw.left/2, 0);+ ctx.stroke();+ }+ }+ else {+ ctx.lineWidth = bw;+ ctx.strokeStyle = options.grid.borderColor;+ ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);+ }+ }++ ctx.restore();+ }++ function drawAxisLabels() {++ $.each(allAxes(), function (_, axis) {+ var box = axis.box,+ legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis",+ layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles,+ font = axis.options.font || "flot-tick-label tickLabel",+ tick, x, y, halign, valign;++ // Remove text before checking for axis.show and ticks.length;+ // otherwise plugins, like flot-tickrotor, that draw their own+ // tick labels will end up with both theirs and the defaults.++ surface.removeText(layer);++ if (!axis.show || axis.ticks.length == 0)+ return;++ for (var i = 0; i < axis.ticks.length; ++i) {++ tick = axis.ticks[i];+ if (!tick.label || tick.v < axis.min || tick.v > axis.max)+ continue;++ if (axis.direction == "x") {+ halign = "center";+ x = plotOffset.left + axis.p2c(tick.v);+ if (axis.position == "bottom") {+ y = box.top + box.padding;+ } else {+ y = box.top + box.height - box.padding;+ valign = "bottom";+ }+ } else {+ valign = "middle";+ y = plotOffset.top + axis.p2c(tick.v);+ if (axis.position == "left") {+ x = box.left + box.width - box.padding;+ halign = "right";+ } else {+ x = box.left + box.padding;+ }+ }++ surface.addText(layer, x, y, tick.label, font, null, null, halign, valign);+ }+ });+ }++ function drawSeries(series) {+ if (series.lines.show)+ drawSeriesLines(series);+ if (series.bars.show)+ drawSeriesBars(series);+ if (series.points.show)+ drawSeriesPoints(series);+ }++ function drawSeriesLines(series) {+ function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {+ var points = datapoints.points,+ ps = datapoints.pointsize,+ prevx = null, prevy = null;++ ctx.beginPath();+ for (var i = ps; i < points.length; i += ps) {+ var x1 = points[i - ps], y1 = points[i - ps + 1],+ x2 = points[i], y2 = points[i + 1];++ if (x1 == null || x2 == null)+ continue;++ // clip with ymin+ if (y1 <= y2 && y1 < axisy.min) {+ if (y2 < axisy.min)+ continue; // line segment is outside+ // compute new intersection point+ x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;+ y1 = axisy.min;+ }+ else if (y2 <= y1 && y2 < axisy.min) {+ if (y1 < axisy.min)+ continue;+ x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;+ y2 = axisy.min;+ }++ // clip with ymax+ if (y1 >= y2 && y1 > axisy.max) {+ if (y2 > axisy.max)+ continue;+ x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;+ y1 = axisy.max;+ }+ else if (y2 >= y1 && y2 > axisy.max) {+ if (y1 > axisy.max)+ continue;+ x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;+ y2 = axisy.max;+ }++ // clip with xmin+ if (x1 <= x2 && x1 < axisx.min) {+ if (x2 < axisx.min)+ continue;+ y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;+ x1 = axisx.min;+ }+ else if (x2 <= x1 && x2 < axisx.min) {+ if (x1 < axisx.min)+ continue;+ y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;+ x2 = axisx.min;+ }++ // clip with xmax+ if (x1 >= x2 && x1 > axisx.max) {+ if (x2 > axisx.max)+ continue;+ y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;+ x1 = axisx.max;+ }+ else if (x2 >= x1 && x2 > axisx.max) {+ if (x1 > axisx.max)+ continue;+ y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;+ x2 = axisx.max;+ }++ if (x1 != prevx || y1 != prevy)+ ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);++ prevx = x2;+ prevy = y2;+ ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);+ }+ ctx.stroke();+ }++ function plotLineArea(datapoints, axisx, axisy) {+ var points = datapoints.points,+ ps = datapoints.pointsize,+ bottom = Math.min(Math.max(0, axisy.min), axisy.max),+ i = 0, top, areaOpen = false,+ ypos = 1, segmentStart = 0, segmentEnd = 0;++ // we process each segment in two turns, first forward+ // direction to sketch out top, then once we hit the+ // end we go backwards to sketch the bottom+ while (true) {+ if (ps > 0 && i > points.length + ps)+ break;++ i += ps; // ps is negative if going backwards++ var x1 = points[i - ps],+ y1 = points[i - ps + ypos],+ x2 = points[i], y2 = points[i + ypos];++ if (areaOpen) {+ if (ps > 0 && x1 != null && x2 == null) {+ // at turning point+ segmentEnd = i;+ ps = -ps;+ ypos = 2;+ continue;+ }++ if (ps < 0 && i == segmentStart + ps) {+ // done with the reverse sweep+ ctx.fill();+ areaOpen = false;+ ps = -ps;+ ypos = 1;+ i = segmentStart = segmentEnd + ps;+ continue;+ }+ }++ if (x1 == null || x2 == null)+ continue;++ // clip x values++ // clip with xmin+ if (x1 <= x2 && x1 < axisx.min) {+ if (x2 < axisx.min)+ continue;+ y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;+ x1 = axisx.min;+ }+ else if (x2 <= x1 && x2 < axisx.min) {+ if (x1 < axisx.min)+ continue;+ y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;+ x2 = axisx.min;+ }++ // clip with xmax+ if (x1 >= x2 && x1 > axisx.max) {+ if (x2 > axisx.max)+ continue;+ y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;+ x1 = axisx.max;+ }+ else if (x2 >= x1 && x2 > axisx.max) {+ if (x1 > axisx.max)+ continue;+ y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;+ x2 = axisx.max;+ }++ if (!areaOpen) {+ // open area+ ctx.beginPath();+ ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));+ areaOpen = true;+ }++ // now first check the case where both is outside+ if (y1 >= axisy.max && y2 >= axisy.max) {+ ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));+ ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));+ continue;+ }+ else if (y1 <= axisy.min && y2 <= axisy.min) {+ ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));+ ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));+ continue;+ }++ // else it's a bit more complicated, there might+ // be a flat maxed out rectangle first, then a+ // triangular cutout or reverse; to find these+ // keep track of the current x values+ var x1old = x1, x2old = x2;++ // clip the y values, without shortcutting, we+ // go through all cases in turn++ // clip with ymin+ if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {+ x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;+ y1 = axisy.min;+ }+ else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {+ x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;+ y2 = axisy.min;+ }++ // clip with ymax+ if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {+ x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;+ y1 = axisy.max;+ }+ else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {+ x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;+ y2 = axisy.max;+ }++ // if the x value was changed we got a rectangle+ // to fill+ if (x1 != x1old) {+ ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));+ // it goes to (x1, y1), but we fill that below+ }++ // fill triangular section, this sometimes result+ // in redundant points if (x1, y1) hasn't changed+ // from previous line to, but we just ignore that+ ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));+ ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));++ // fill the other rectangle if it's there+ if (x2 != x2old) {+ ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));+ ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));+ }+ }+ }++ ctx.save();+ ctx.translate(plotOffset.left, plotOffset.top);+ ctx.lineJoin = "round";++ var lw = series.lines.lineWidth,+ sw = series.shadowSize;+ // FIXME: consider another form of shadow when filling is turned on+ if (lw > 0 && sw > 0) {+ // draw shadow as a thick and thin line with transparency+ ctx.lineWidth = sw;+ ctx.strokeStyle = "rgba(0,0,0,0.1)";+ // position shadow at angle from the mid of line+ var angle = Math.PI/18;+ plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);+ ctx.lineWidth = sw/2;+ plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);+ }++ ctx.lineWidth = lw;+ ctx.strokeStyle = series.color;+ var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);+ if (fillStyle) {+ ctx.fillStyle = fillStyle;+ plotLineArea(series.datapoints, series.xaxis, series.yaxis);+ }++ if (lw > 0)+ plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);+ ctx.restore();+ }++ function drawSeriesPoints(series) {+ function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {+ var points = datapoints.points, ps = datapoints.pointsize;++ for (var i = 0; i < points.length; i += ps) {+ var x = points[i], y = points[i + 1];+ if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)+ continue;++ ctx.beginPath();+ x = axisx.p2c(x);+ y = axisy.p2c(y) + offset;+ if (symbol == "circle")+ ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);+ else+ symbol(ctx, x, y, radius, shadow);+ ctx.closePath();++ if (fillStyle) {+ ctx.fillStyle = fillStyle;+ ctx.fill();+ }+ ctx.stroke();+ }+ }++ ctx.save();+ ctx.translate(plotOffset.left, plotOffset.top);++ var lw = series.points.lineWidth,+ sw = series.shadowSize,+ radius = series.points.radius,+ symbol = series.points.symbol;++ // If the user sets the line width to 0, we change it to a very + // small value. A line width of 0 seems to force the default of 1.+ // Doing the conditional here allows the shadow setting to still be + // optional even with a lineWidth of 0.++ if( lw == 0 )+ lw = 0.0001;++ if (lw > 0 && sw > 0) {+ // draw shadow in two steps+ var w = sw / 2;+ ctx.lineWidth = w;+ ctx.strokeStyle = "rgba(0,0,0,0.1)";+ plotPoints(series.datapoints, radius, null, w + w/2, true,+ series.xaxis, series.yaxis, symbol);++ ctx.strokeStyle = "rgba(0,0,0,0.2)";+ plotPoints(series.datapoints, radius, null, w/2, true,+ series.xaxis, series.yaxis, symbol);+ }++ ctx.lineWidth = lw;+ ctx.strokeStyle = series.color;+ plotPoints(series.datapoints, radius,+ getFillStyle(series.points, series.color), 0, false,+ series.xaxis, series.yaxis, symbol);+ ctx.restore();+ }++ function drawBar(x, y, b, barLeft, barRight, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {+ var left, right, bottom, top,+ drawLeft, drawRight, drawTop, drawBottom,+ tmp;++ // in horizontal mode, we start the bar from the left+ // instead of from the bottom so it appears to be+ // horizontal rather than vertical+ if (horizontal) {+ drawBottom = drawRight = drawTop = true;+ drawLeft = false;+ left = b;+ right = x;+ top = y + barLeft;+ bottom = y + barRight;++ // account for negative bars+ if (right < left) {+ tmp = right;+ right = left;+ left = tmp;+ drawLeft = true;+ drawRight = false;+ }+ }+ else {+ drawLeft = drawRight = drawTop = true;+ drawBottom = false;+ left = x + barLeft;+ right = x + barRight;+ bottom = b;+ top = y;++ // account for negative bars+ if (top < bottom) {+ tmp = top;+ top = bottom;+ bottom = tmp;+ drawBottom = true;+ drawTop = false;+ }+ }++ // clip+ if (right < axisx.min || left > axisx.max ||+ top < axisy.min || bottom > axisy.max)+ return;++ if (left < axisx.min) {+ left = axisx.min;+ drawLeft = false;+ }++ if (right > axisx.max) {+ right = axisx.max;+ drawRight = false;+ }++ if (bottom < axisy.min) {+ bottom = axisy.min;+ drawBottom = false;+ }++ if (top > axisy.max) {+ top = axisy.max;+ drawTop = false;+ }++ left = axisx.p2c(left);+ bottom = axisy.p2c(bottom);+ right = axisx.p2c(right);+ top = axisy.p2c(top);++ // fill the bar+ if (fillStyleCallback) {+ c.fillStyle = fillStyleCallback(bottom, top);+ c.fillRect(left, top, right - left, bottom - top)+ }++ // draw outline+ if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {+ c.beginPath();++ // FIXME: inline moveTo is buggy with excanvas+ c.moveTo(left, bottom);+ if (drawLeft)+ c.lineTo(left, top);+ else+ c.moveTo(left, top);+ if (drawTop)+ c.lineTo(right, top);+ else+ c.moveTo(right, top);+ if (drawRight)+ c.lineTo(right, bottom);+ else+ c.moveTo(right, bottom);+ if (drawBottom)+ c.lineTo(left, bottom);+ else+ c.moveTo(left, bottom);+ c.stroke();+ }+ }++ function drawSeriesBars(series) {+ function plotBars(datapoints, barLeft, barRight, fillStyleCallback, axisx, axisy) {+ var points = datapoints.points, ps = datapoints.pointsize;++ for (var i = 0; i < points.length; i += ps) {+ if (points[i] == null)+ continue;+ drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);+ }+ }++ ctx.save();+ ctx.translate(plotOffset.left, plotOffset.top);++ // FIXME: figure out a way to add shadows (for instance along the right edge)+ ctx.lineWidth = series.bars.lineWidth;+ ctx.strokeStyle = series.color;++ var barLeft;++ switch (series.bars.align) {+ case "left":+ barLeft = 0;+ break;+ case "right":+ barLeft = -series.bars.barWidth;+ break;+ default:+ barLeft = -series.bars.barWidth / 2;+ }++ var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;+ plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, fillStyleCallback, series.xaxis, series.yaxis);+ ctx.restore();+ }++ function getFillStyle(filloptions, seriesColor, bottom, top) {+ var fill = filloptions.fill;+ if (!fill)+ return null;++ if (filloptions.fillColor)+ return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);++ var c = $.color.parse(seriesColor);+ c.a = typeof fill == "number" ? fill : 0.4;+ c.normalize();+ return c.toString();+ }++ function insertLegend() {++ if (options.legend.container != null) {+ $(options.legend.container).html("");+ } else {+ placeholder.find(".legend").remove();+ }++ if (!options.legend.show) {+ return;+ }++ var fragments = [], entries = [], rowStarted = false,+ lf = options.legend.labelFormatter, s, label;++ // Build a list of legend entries, with each having a label and a color++ for (var i = 0; i < series.length; ++i) {+ s = series[i];+ if (s.label) {+ label = lf ? lf(s.label, s) : s.label;+ if (label) {+ entries.push({+ label: label,+ color: s.color+ });+ }+ }+ }++ // Sort the legend using either the default or a custom comparator++ if (options.legend.sorted) {+ if ($.isFunction(options.legend.sorted)) {+ entries.sort(options.legend.sorted);+ } else if (options.legend.sorted == "reverse") {+ entries.reverse();+ } else {+ var ascending = options.legend.sorted != "descending";+ entries.sort(function(a, b) {+ return a.label == b.label ? 0 : (+ (a.label < b.label) != ascending ? 1 : -1 // Logical XOR+ );+ });+ }+ }++ // Generate markup for the list of entries, in their final order++ for (var i = 0; i < entries.length; ++i) {++ var entry = entries[i];++ if (i % options.legend.noColumns == 0) {+ if (rowStarted)+ fragments.push('</tr>');+ fragments.push('<tr>');+ rowStarted = true;+ }++ fragments.push(+ '<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden"></div></div></td>' ++ '<td class="legendLabel">' + entry.label + '</td>'+ );+ }++ if (rowStarted)+ fragments.push('</tr>');++ if (fragments.length == 0)+ return;++ var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join("") + '</table>';+ if (options.legend.container != null)+ $(options.legend.container).html(table);+ else {+ var pos = "",+ p = options.legend.position,+ m = options.legend.margin;+ if (m[0] == null)+ m = [m, m];+ if (p.charAt(0) == "n")+ pos += 'top:' + (m[1] + plotOffset.top) + 'px;';+ else if (p.charAt(0) == "s")+ pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';+ if (p.charAt(1) == "e")+ pos += 'right:' + (m[0] + plotOffset.right) + 'px;';+ else if (p.charAt(1) == "w")+ pos += 'left:' + (m[0] + plotOffset.left) + 'px;';+ var legend = $('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>').appendTo(placeholder);+ if (options.legend.backgroundOpacity != 0.0) {+ // put in the transparent background+ // separately to avoid blended labels and+ // label boxes+ var c = options.legend.backgroundColor;+ if (c == null) {+ c = options.grid.backgroundColor;+ if (c && typeof c == "string")+ c = $.color.parse(c);+ else+ c = $.color.extract(legend, 'background-color');+ c.a = 1;+ c = c.toString();+ }+ var div = legend.children();+ $('<div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);+ }+ }+ }+++ // interactive features++ var highlights = [],+ redrawTimeout = null;++ // returns the data item the mouse is over, or null if none is found+ function findNearbyItem(mouseX, mouseY, seriesFilter) {+ var maxDistance = options.grid.mouseActiveRadius,+ smallestDistance = maxDistance * maxDistance + 1,+ item = null, foundPoint = false, i, j, ps;++ for (i = series.length - 1; i >= 0; --i) {+ if (!seriesFilter(series[i]))+ continue;++ var s = series[i],+ axisx = s.xaxis,+ axisy = s.yaxis,+ points = s.datapoints.points,+ mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster+ my = axisy.c2p(mouseY),+ maxx = maxDistance / axisx.scale,+ maxy = maxDistance / axisy.scale;++ ps = s.datapoints.pointsize;+ // with inverse transforms, we can't use the maxx/maxy+ // optimization, sadly+ if (axisx.options.inverseTransform)+ maxx = Number.MAX_VALUE;+ if (axisy.options.inverseTransform)+ maxy = Number.MAX_VALUE;++ if (s.lines.show || s.points.show) {+ for (j = 0; j < points.length; j += ps) {+ var x = points[j], y = points[j + 1];+ if (x == null)+ continue;++ // For points and lines, the cursor must be within a+ // certain distance to the data point+ if (x - mx > maxx || x - mx < -maxx ||+ y - my > maxy || y - my < -maxy)+ continue;++ // We have to calculate distances in pixels, not in+ // data units, because the scales of the axes may be different+ var dx = Math.abs(axisx.p2c(x) - mouseX),+ dy = Math.abs(axisy.p2c(y) - mouseY),+ dist = dx * dx + dy * dy; // we save the sqrt++ // use <= to ensure last point takes precedence+ // (last generally means on top of)+ if (dist < smallestDistance) {+ smallestDistance = dist;+ item = [i, j / ps];+ }+ }+ }++ if (s.bars.show && !item) { // no other point can be nearby++ var barLeft, barRight;++ switch (s.bars.align) {+ case "left":+ barLeft = 0;+ break;+ case "right":+ barLeft = -s.bars.barWidth;+ break;+ default:+ barLeft = -s.bars.barWidth / 2;+ }++ barRight = barLeft + s.bars.barWidth;++ for (j = 0; j < points.length; j += ps) {+ var x = points[j], y = points[j + 1], b = points[j + 2];+ if (x == null)+ continue;++ // for a bar graph, the cursor must be inside the bar+ if (series[i].bars.horizontal ?+ (mx <= Math.max(b, x) && mx >= Math.min(b, x) &&+ my >= y + barLeft && my <= y + barRight) :+ (mx >= x + barLeft && mx <= x + barRight &&+ my >= Math.min(b, y) && my <= Math.max(b, y)))+ item = [i, j / ps];+ }+ }+ }++ if (item) {+ i = item[0];+ j = item[1];+ ps = series[i].datapoints.pointsize;++ return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),+ dataIndex: j,+ series: series[i],+ seriesIndex: i };+ }++ return null;+ }++ function onMouseMove(e) {+ if (options.grid.hoverable)+ triggerClickHoverEvent("plothover", e,+ function (s) { return s["hoverable"] != false; });+ }++ function onMouseLeave(e) {+ if (options.grid.hoverable)+ triggerClickHoverEvent("plothover", e,+ function (s) { return false; });+ }++ function onClick(e) {+ triggerClickHoverEvent("plotclick", e,+ function (s) { return s["clickable"] != false; });+ }++ // trigger click or hover event (they send the same parameters+ // so we share their code)+ function triggerClickHoverEvent(eventname, event, seriesFilter) {+ var offset = eventHolder.offset(),+ canvasX = event.pageX - offset.left - plotOffset.left,+ canvasY = event.pageY - offset.top - plotOffset.top,+ pos = canvasToAxisCoords({ left: canvasX, top: canvasY });++ pos.pageX = event.pageX;+ pos.pageY = event.pageY;++ var item = findNearbyItem(canvasX, canvasY, seriesFilter);++ if (item) {+ // fill in mouse pos for any listeners out there+ item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10);+ item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10);+ }++ if (options.grid.autoHighlight) {+ // clear auto-highlights+ for (var i = 0; i < highlights.length; ++i) {+ var h = highlights[i];+ if (h.auto == eventname &&+ !(item && h.series == item.series &&+ h.point[0] == item.datapoint[0] &&+ h.point[1] == item.datapoint[1]))+ unhighlight(h.series, h.point);+ }++ if (item)+ highlight(item.series, item.datapoint, eventname);+ }++ placeholder.trigger(eventname, [ pos, item ]);+ }++ function triggerRedrawOverlay() {+ var t = options.interaction.redrawOverlayInterval;+ if (t == -1) { // skip event queue+ drawOverlay();+ return;+ }++ if (!redrawTimeout)+ redrawTimeout = setTimeout(drawOverlay, t);+ }++ function drawOverlay() {+ redrawTimeout = null;++ // draw highlights+ octx.save();+ overlay.clear();+ octx.translate(plotOffset.left, plotOffset.top);++ var i, hi;+ for (i = 0; i < highlights.length; ++i) {+ hi = highlights[i];++ if (hi.series.bars.show)+ drawBarHighlight(hi.series, hi.point);+ else+ drawPointHighlight(hi.series, hi.point);+ }+ octx.restore();++ executeHooks(hooks.drawOverlay, [octx]);+ }++ function highlight(s, point, auto) {+ if (typeof s == "number")+ s = series[s];++ if (typeof point == "number") {+ var ps = s.datapoints.pointsize;+ point = s.datapoints.points.slice(ps * point, ps * (point + 1));+ }++ var i = indexOfHighlight(s, point);+ if (i == -1) {+ highlights.push({ series: s, point: point, auto: auto });++ triggerRedrawOverlay();+ }+ else if (!auto)+ highlights[i].auto = false;+ }++ function unhighlight(s, point) {+ if (s == null && point == null) {+ highlights = [];+ triggerRedrawOverlay();+ return;+ }++ if (typeof s == "number")+ s = series[s];++ if (typeof point == "number") {+ var ps = s.datapoints.pointsize;+ point = s.datapoints.points.slice(ps * point, ps * (point + 1));+ }++ var i = indexOfHighlight(s, point);+ if (i != -1) {+ highlights.splice(i, 1);++ triggerRedrawOverlay();+ }+ }++ function indexOfHighlight(s, p) {+ for (var i = 0; i < highlights.length; ++i) {+ var h = highlights[i];+ if (h.series == s && h.point[0] == p[0]+ && h.point[1] == p[1])+ return i;+ }+ return -1;+ }++ function drawPointHighlight(series, point) {+ var x = point[0], y = point[1],+ axisx = series.xaxis, axisy = series.yaxis,+ highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString();++ if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)+ return;++ var pointRadius = series.points.radius + series.points.lineWidth / 2;+ octx.lineWidth = pointRadius;+ octx.strokeStyle = highlightColor;+ var radius = 1.5 * pointRadius;+ x = axisx.p2c(x);+ y = axisy.p2c(y);++ octx.beginPath();+ if (series.points.symbol == "circle")+ octx.arc(x, y, radius, 0, 2 * Math.PI, false);+ else+ series.points.symbol(octx, x, y, radius, false);+ octx.closePath();+ octx.stroke();+ }++ function drawBarHighlight(series, point) {+ var highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(),+ fillStyle = highlightColor,+ barLeft;++ switch (series.bars.align) {+ case "left":+ barLeft = 0;+ break;+ case "right":+ barLeft = -series.bars.barWidth;+ break;+ default:+ barLeft = -series.bars.barWidth / 2;+ }++ octx.lineWidth = series.bars.lineWidth;+ octx.strokeStyle = highlightColor;++ drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,+ function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);+ }++ function getColorOrGradient(spec, bottom, top, defaultColor) {+ if (typeof spec == "string")+ return spec;+ else {+ // assume this is a gradient spec; IE currently only+ // supports a simple vertical gradient properly, so that's+ // what we support too+ var gradient = ctx.createLinearGradient(0, top, 0, bottom);++ for (var i = 0, l = spec.colors.length; i < l; ++i) {+ var c = spec.colors[i];+ if (typeof c != "string") {+ var co = $.color.parse(defaultColor);+ if (c.brightness != null)+ co = co.scale('rgb', c.brightness);+ if (c.opacity != null)+ co.a *= c.opacity;+ c = co.toString();+ }+ gradient.addColorStop(i / (l - 1), c);+ }++ return gradient;+ }+ }+ }++ // Add the plot function to the top level of the jQuery object++ $.plot = function(placeholder, data, options) {+ //var t0 = new Date();+ var plot = new Plot($(placeholder), data, options, $.plot.plugins);+ //(window.console ? console.log : alert)("time used (msecs): " + ((new Date()).getTime() - t0.getTime()));+ return plot;+ };++ $.plot.version = "0.8.3";++ $.plot.plugins = [];++ // Also add the plot function as a chainable property++ $.fn.plot = function(data, options) {+ return this.each(function() {+ $.plot(this, data, options);+ });+ };++ // round to nearby lower multiple of base+ function floorInBase(n, base) {+ return base * Math.floor(n / base);+ }++})(jQuery);
@@ -0,0 +1,8 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function($){var hasOwnProperty=Object.prototype.hasOwnProperty;if(!$.fn.detach){$.fn.detach=function(){return this.each(function(){if(this.parentNode){this.parentNode.removeChild(this)}})}}function Canvas(cls,container){var element=container.children("."+cls)[0];if(element==null){element=document.createElement("canvas");element.className=cls;$(element).css({direction:"ltr",position:"absolute",left:0,top:0}).appendTo(container);if(!element.getContext){if(window.G_vmlCanvasManager){element=window.G_vmlCanvasManager.initElement(element)}else{throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.")}}}this.element=element;var context=this.context=element.getContext("2d");var devicePixelRatio=window.devicePixelRatio||1,backingStoreRatio=context.webkitBackingStorePixelRatio||context.mozBackingStorePixelRatio||context.msBackingStorePixelRatio||context.oBackingStorePixelRatio||context.backingStorePixelRatio||1;this.pixelRatio=devicePixelRatio/backingStoreRatio;this.resize(container.width(),container.height());this.textContainer=null;this.text={};this._textCache={}}Canvas.prototype.resize=function(width,height){if(width<=0||height<=0){throw new Error("Invalid dimensions for plot, width = "+width+", height = "+height)}var element=this.element,context=this.context,pixelRatio=this.pixelRatio;if(this.width!=width){element.width=width*pixelRatio;element.style.width=width+"px";this.width=width}if(this.height!=height){element.height=height*pixelRatio;element.style.height=height+"px";this.height=height}context.restore();context.save();context.scale(pixelRatio,pixelRatio)};Canvas.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)};Canvas.prototype.render=function(){var cache=this._textCache;for(var layerKey in cache){if(hasOwnProperty.call(cache,layerKey)){var layer=this.getTextLayer(layerKey),layerCache=cache[layerKey];layer.hide();for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey];for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var positions=styleCache[key].positions;for(var i=0,position;position=positions[i];i++){if(position.active){if(!position.rendered){layer.append(position.element);position.rendered=true}}else{positions.splice(i--,1);if(position.rendered){position.element.detach()}}}if(positions.length==0){delete styleCache[key]}}}}}layer.show()}}};Canvas.prototype.getTextLayer=function(classes){var layer=this.text[classes];if(layer==null){if(this.textContainer==null){this.textContainer=$("<div class='flot-text'></div>").css({position:"absolute",top:0,left:0,bottom:0,right:0,"font-size":"smaller",color:"#545454"}).insertAfter(this.element)}layer=this.text[classes]=$("<div></div>").addClass(classes).css({position:"absolute",top:0,left:0,bottom:0,right:0}).appendTo(this.textContainer)}return layer};Canvas.prototype.getTextInfo=function(layer,text,font,angle,width){var textStyle,layerCache,styleCache,info;text=""+text;if(typeof font==="object"){textStyle=font.style+" "+font.variant+" "+font.weight+" "+font.size+"px/"+font.lineHeight+"px "+font.family}else{textStyle=font}layerCache=this._textCache[layer];if(layerCache==null){layerCache=this._textCache[layer]={}}styleCache=layerCache[textStyle];if(styleCache==null){styleCache=layerCache[textStyle]={}}info=styleCache[text];if(info==null){var element=$("<div></div>").html(text).css({position:"absolute","max-width":width,top:-9999}).appendTo(this.getTextLayer(layer));if(typeof font==="object"){element.css({font:textStyle,color:font.color})}else if(typeof font==="string"){element.addClass(font)}info=styleCache[text]={width:element.outerWidth(true),height:element.outerHeight(true),element:element,positions:[]};element.detach()}return info};Canvas.prototype.addText=function(layer,x,y,text,font,angle,width,halign,valign){var info=this.getTextInfo(layer,text,font,angle,width),positions=info.positions;if(halign=="center"){x-=info.width/2}else if(halign=="right"){x-=info.width}if(valign=="middle"){y-=info.height/2}else if(valign=="bottom"){y-=info.height}for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=true;return}}position={active:true,rendered:false,element:positions.length?info.element.clone():info.element,x:x,y:y};positions.push(position);position.element.css({top:Math.round(y),left:Math.round(x),"text-align":halign})};Canvas.prototype.removeText=function(layer,x,y,text,font,angle){if(text==null){var layerCache=this._textCache[layer];if(layerCache!=null){for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey];for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var positions=styleCache[key].positions;for(var i=0,position;position=positions[i];i++){position.active=false}}}}}}}else{var positions=this.getTextInfo(layer,text,font,angle).positions;for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=false}}}};function Plot(placeholder,data_,options_,plugins){var series=[],options={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:.85,sorted:null},xaxis:{show:null,position:"bottom",mode:null,font:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null},yaxis:{autoscaleMargin:.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false,zero:true},shadowSize:3,highlightColor:null},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,margin:0,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},interaction:{redrawOverlayInterval:1e3/60},hooks:{}},surface=null,overlay=null,eventHolder=null,ctx=null,octx=null,xaxes=[],yaxes=[],plotOffset={left:0,right:0,top:0,bottom:0},plotWidth=0,plotHeight=0,hooks={processOptions:[],processRawData:[],processDatapoints:[],processOffset:[],drawBackground:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},plot=this;plot.setData=setData;plot.setupGrid=setupGrid;plot.draw=draw;plot.getPlaceholder=function(){return placeholder};plot.getCanvas=function(){return surface.element};plot.getPlotOffset=function(){return plotOffset};plot.width=function(){return plotWidth};plot.height=function(){return plotHeight};plot.offset=function(){var o=eventHolder.offset();o.left+=plotOffset.left;o.top+=plotOffset.top;return o};plot.getData=function(){return series};plot.getAxes=function(){var res={},i;$.each(xaxes.concat(yaxes),function(_,axis){if(axis)res[axis.direction+(axis.n!=1?axis.n:"")+"axis"]=axis});return res};plot.getXAxes=function(){return xaxes};plot.getYAxes=function(){return yaxes};plot.c2p=canvasToAxisCoords;plot.p2c=axisToCanvasCoords;plot.getOptions=function(){return options};plot.highlight=highlight;plot.unhighlight=unhighlight;plot.triggerRedrawOverlay=triggerRedrawOverlay;plot.pointOffset=function(point){return{left:parseInt(xaxes[axisNumber(point,"x")-1].p2c(+point.x)+plotOffset.left,10),top:parseInt(yaxes[axisNumber(point,"y")-1].p2c(+point.y)+plotOffset.top,10)}};plot.shutdown=shutdown;plot.destroy=function(){shutdown();placeholder.removeData("plot").empty();series=[];options=null;surface=null;overlay=null;eventHolder=null;ctx=null;octx=null;xaxes=[];yaxes=[];hooks=null;highlights=[];plot=null};plot.resize=function(){var width=placeholder.width(),height=placeholder.height();surface.resize(width,height);overlay.resize(width,height)};plot.hooks=hooks;initPlugins(plot);parseOptions(options_);setupCanvases();setData(data_);setupGrid();draw();bindEvents();function executeHooks(hook,args){args=[plot].concat(args);for(var i=0;i<hook.length;++i)hook[i].apply(this,args)}function initPlugins(){var classes={Canvas:Canvas};for(var i=0;i<plugins.length;++i){var p=plugins[i];p.init(plot,classes);if(p.options)$.extend(true,options,p.options)}}function parseOptions(opts){$.extend(true,options,opts);if(opts&&opts.colors){options.colors=opts.colors}if(options.xaxis.color==null)options.xaxis.color=$.color.parse(options.grid.color).scale("a",.22).toString();if(options.yaxis.color==null)options.yaxis.color=$.color.parse(options.grid.color).scale("a",.22).toString();if(options.xaxis.tickColor==null)options.xaxis.tickColor=options.grid.tickColor||options.xaxis.color;if(options.yaxis.tickColor==null)options.yaxis.tickColor=options.grid.tickColor||options.yaxis.color;if(options.grid.borderColor==null)options.grid.borderColor=options.grid.color;if(options.grid.tickColor==null)options.grid.tickColor=$.color.parse(options.grid.color).scale("a",.22).toString();var i,axisOptions,axisCount,fontSize=placeholder.css("font-size"),fontSizeDefault=fontSize?+fontSize.replace("px",""):13,fontDefaults={style:placeholder.css("font-style"),size:Math.round(.8*fontSizeDefault),variant:placeholder.css("font-variant"),weight:placeholder.css("font-weight"),family:placeholder.css("font-family")};axisCount=options.xaxes.length||1;for(i=0;i<axisCount;++i){axisOptions=options.xaxes[i];if(axisOptions&&!axisOptions.tickColor){axisOptions.tickColor=axisOptions.color}axisOptions=$.extend(true,{},options.xaxis,axisOptions);options.xaxes[i]=axisOptions;if(axisOptions.font){axisOptions.font=$.extend({},fontDefaults,axisOptions.font);if(!axisOptions.font.color){axisOptions.font.color=axisOptions.color}if(!axisOptions.font.lineHeight){axisOptions.font.lineHeight=Math.round(axisOptions.font.size*1.15)}}}axisCount=options.yaxes.length||1;for(i=0;i<axisCount;++i){axisOptions=options.yaxes[i];if(axisOptions&&!axisOptions.tickColor){axisOptions.tickColor=axisOptions.color}axisOptions=$.extend(true,{},options.yaxis,axisOptions);options.yaxes[i]=axisOptions;if(axisOptions.font){axisOptions.font=$.extend({},fontDefaults,axisOptions.font);if(!axisOptions.font.color){axisOptions.font.color=axisOptions.color}if(!axisOptions.font.lineHeight){axisOptions.font.lineHeight=Math.round(axisOptions.font.size*1.15)}}}if(options.xaxis.noTicks&&options.xaxis.ticks==null)options.xaxis.ticks=options.xaxis.noTicks;if(options.yaxis.noTicks&&options.yaxis.ticks==null)options.yaxis.ticks=options.yaxis.noTicks;if(options.x2axis){options.xaxes[1]=$.extend(true,{},options.xaxis,options.x2axis);options.xaxes[1].position="top";if(options.x2axis.min==null){options.xaxes[1].min=null}if(options.x2axis.max==null){options.xaxes[1].max=null}}if(options.y2axis){options.yaxes[1]=$.extend(true,{},options.yaxis,options.y2axis);options.yaxes[1].position="right";if(options.y2axis.min==null){options.yaxes[1].min=null}if(options.y2axis.max==null){options.yaxes[1].max=null}}if(options.grid.coloredAreas)options.grid.markings=options.grid.coloredAreas;if(options.grid.coloredAreasColor)options.grid.markingsColor=options.grid.coloredAreasColor;if(options.lines)$.extend(true,options.series.lines,options.lines);if(options.points)$.extend(true,options.series.points,options.points);if(options.bars)$.extend(true,options.series.bars,options.bars);if(options.shadowSize!=null)options.series.shadowSize=options.shadowSize;if(options.highlightColor!=null)options.series.highlightColor=options.highlightColor;for(i=0;i<options.xaxes.length;++i)getOrCreateAxis(xaxes,i+1).options=options.xaxes[i];for(i=0;i<options.yaxes.length;++i)getOrCreateAxis(yaxes,i+1).options=options.yaxes[i];for(var n in hooks)if(options.hooks[n]&&options.hooks[n].length)hooks[n]=hooks[n].concat(options.hooks[n]);executeHooks(hooks.processOptions,[options])}function setData(d){series=parseData(d);fillInSeriesOptions();processData()}function parseData(d){var res=[];for(var i=0;i<d.length;++i){var s=$.extend(true,{},options.series);if(d[i].data!=null){s.data=d[i].data;delete d[i].data;$.extend(true,s,d[i]);d[i].data=s.data}else s.data=d[i];res.push(s)}return res}function axisNumber(obj,coord){var a=obj[coord+"axis"];if(typeof a=="object")a=a.n;if(typeof a!="number")a=1;return a}function allAxes(){return $.grep(xaxes.concat(yaxes),function(a){return a})}function canvasToAxisCoords(pos){var res={},i,axis;for(i=0;i<xaxes.length;++i){axis=xaxes[i];if(axis&&axis.used)res["x"+axis.n]=axis.c2p(pos.left)}for(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used)res["y"+axis.n]=axis.c2p(pos.top)}if(res.x1!==undefined)res.x=res.x1;if(res.y1!==undefined)res.y=res.y1;return res}function axisToCanvasCoords(pos){var res={},i,axis,key;for(i=0;i<xaxes.length;++i){axis=xaxes[i];if(axis&&axis.used){key="x"+axis.n;if(pos[key]==null&&axis.n==1)key="x";if(pos[key]!=null){res.left=axis.p2c(pos[key]);break}}}for(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used){key="y"+axis.n;if(pos[key]==null&&axis.n==1)key="y";if(pos[key]!=null){res.top=axis.p2c(pos[key]);break}}}return res}function getOrCreateAxis(axes,number){if(!axes[number-1])axes[number-1]={n:number,direction:axes==xaxes?"x":"y",options:$.extend(true,{},axes==xaxes?options.xaxis:options.yaxis)};return axes[number-1]}function fillInSeriesOptions(){var neededColors=series.length,maxIndex=-1,i;for(i=0;i<series.length;++i){var sc=series[i].color;if(sc!=null){neededColors--;if(typeof sc=="number"&&sc>maxIndex){maxIndex=sc}}}if(neededColors<=maxIndex){neededColors=maxIndex+1}var c,colors=[],colorPool=options.colors,colorPoolSize=colorPool.length,variation=0;for(i=0;i<neededColors;i++){c=$.color.parse(colorPool[i%colorPoolSize]||"#666");if(i%colorPoolSize==0&&i){if(variation>=0){if(variation<.5){variation=-variation-.2}else variation=0}else variation=-variation}colors[i]=c.scale("rgb",1+variation)}var colori=0,s;for(i=0;i<series.length;++i){s=series[i];if(s.color==null){s.color=colors[colori].toString();++colori}else if(typeof s.color=="number")s.color=colors[s.color].toString();if(s.lines.show==null){var v,show=true;for(v in s)if(s[v]&&s[v].show){show=false;break}if(show)s.lines.show=true}if(s.lines.zero==null){s.lines.zero=!!s.lines.fill}s.xaxis=getOrCreateAxis(xaxes,axisNumber(s,"x"));s.yaxis=getOrCreateAxis(yaxes,axisNumber(s,"y"))}}function processData(){var topSentry=Number.POSITIVE_INFINITY,bottomSentry=Number.NEGATIVE_INFINITY,fakeInfinity=Number.MAX_VALUE,i,j,k,m,length,s,points,ps,x,y,axis,val,f,p,data,format;function updateAxis(axis,min,max){if(min<axis.datamin&&min!=-fakeInfinity)axis.datamin=min;if(max>axis.datamax&&max!=fakeInfinity)axis.datamax=max}$.each(allAxes(),function(_,axis){axis.datamin=topSentry;axis.datamax=bottomSentry;axis.used=false});for(i=0;i<series.length;++i){s=series[i];s.datapoints={points:[]};executeHooks(hooks.processRawData,[s,s.data,s.datapoints])}for(i=0;i<series.length;++i){s=series[i];data=s.data;format=s.datapoints.format;if(!format){format=[];format.push({x:true,number:true,required:true});format.push({y:true,number:true,required:true});if(s.bars.show||s.lines.show&&s.lines.fill){var autoscale=!!(s.bars.show&&s.bars.zero||s.lines.show&&s.lines.zero);format.push({y:true,number:true,required:false,defaultValue:0,autoscale:autoscale});if(s.bars.horizontal){delete format[format.length-1].y;format[format.length-1].x=true}}s.datapoints.format=format}if(s.datapoints.pointsize!=null)continue;s.datapoints.pointsize=format.length;ps=s.datapoints.pointsize;points=s.datapoints.points;var insertSteps=s.lines.show&&s.lines.steps;s.xaxis.used=s.yaxis.used=true;for(j=k=0;j<data.length;++j,k+=ps){p=data[j];var nullify=p==null;if(!nullify){for(m=0;m<ps;++m){val=p[m];f=format[m];if(f){if(f.number&&val!=null){val=+val;if(isNaN(val))val=null;else if(val==Infinity)val=fakeInfinity;else if(val==-Infinity)val=-fakeInfinity}if(val==null){if(f.required)nullify=true;if(f.defaultValue!=null)val=f.defaultValue}}points[k+m]=val}}if(nullify){for(m=0;m<ps;++m){val=points[k+m];if(val!=null){f=format[m];if(f.autoscale!==false){if(f.x){updateAxis(s.xaxis,val,val)}if(f.y){updateAxis(s.yaxis,val,val)}}}points[k+m]=null}}else{if(insertSteps&&k>0&&points[k-ps]!=null&&points[k-ps]!=points[k]&&points[k-ps+1]!=points[k+1]){for(m=0;m<ps;++m)points[k+ps+m]=points[k+m];points[k+1]=points[k-ps+1];k+=ps}}}}for(i=0;i<series.length;++i){s=series[i];executeHooks(hooks.processDatapoints,[s,s.datapoints])}for(i=0;i<series.length;++i){s=series[i];points=s.datapoints.points;ps=s.datapoints.pointsize;format=s.datapoints.format;var xmin=topSentry,ymin=topSentry,xmax=bottomSentry,ymax=bottomSentry;for(j=0;j<points.length;j+=ps){if(points[j]==null)continue;for(m=0;m<ps;++m){val=points[j+m];f=format[m];if(!f||f.autoscale===false||val==fakeInfinity||val==-fakeInfinity)continue;if(f.x){if(val<xmin)xmin=val;if(val>xmax)xmax=val}if(f.y){if(val<ymin)ymin=val;if(val>ymax)ymax=val}}}if(s.bars.show){var delta;switch(s.bars.align){case"left":delta=0;break;case"right":delta=-s.bars.barWidth;break;default:delta=-s.bars.barWidth/2}if(s.bars.horizontal){ymin+=delta;ymax+=delta+s.bars.barWidth}else{xmin+=delta;xmax+=delta+s.bars.barWidth}}updateAxis(s.xaxis,xmin,xmax);updateAxis(s.yaxis,ymin,ymax)}$.each(allAxes(),function(_,axis){if(axis.datamin==topSentry)axis.datamin=null;if(axis.datamax==bottomSentry)axis.datamax=null})}function setupCanvases(){placeholder.css("padding",0).children().filter(function(){return!$(this).hasClass("flot-overlay")&&!$(this).hasClass("flot-base")}).remove();if(placeholder.css("position")=="static")placeholder.css("position","relative");surface=new Canvas("flot-base",placeholder);overlay=new Canvas("flot-overlay",placeholder);ctx=surface.context;octx=overlay.context;eventHolder=$(overlay.element).unbind();var existing=placeholder.data("plot");if(existing){existing.shutdown();overlay.clear()}placeholder.data("plot",plot)}function bindEvents(){if(options.grid.hoverable){eventHolder.mousemove(onMouseMove);eventHolder.bind("mouseleave",onMouseLeave)}if(options.grid.clickable)eventHolder.click(onClick);executeHooks(hooks.bindEvents,[eventHolder])}function shutdown(){if(redrawTimeout)clearTimeout(redrawTimeout);eventHolder.unbind("mousemove",onMouseMove);eventHolder.unbind("mouseleave",onMouseLeave);eventHolder.unbind("click",onClick);executeHooks(hooks.shutdown,[eventHolder])}function setTransformationHelpers(axis){function identity(x){return x}var s,m,t=axis.options.transform||identity,it=axis.options.inverseTransform;if(axis.direction=="x"){s=axis.scale=plotWidth/Math.abs(t(axis.max)-t(axis.min));m=Math.min(t(axis.max),t(axis.min))}else{s=axis.scale=plotHeight/Math.abs(t(axis.max)-t(axis.min));s=-s;m=Math.max(t(axis.max),t(axis.min))}if(t==identity)axis.p2c=function(p){return(p-m)*s};else axis.p2c=function(p){return(t(p)-m)*s};if(!it)axis.c2p=function(c){return m+c/s};else axis.c2p=function(c){return it(m+c/s)}}function measureTickLabels(axis){var opts=axis.options,ticks=axis.ticks||[],labelWidth=opts.labelWidth||0,labelHeight=opts.labelHeight||0,maxWidth=labelWidth||(axis.direction=="x"?Math.floor(surface.width/(ticks.length||1)):null),legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=opts.font||"flot-tick-label tickLabel";for(var i=0;i<ticks.length;++i){var t=ticks[i];if(!t.label)continue;var info=surface.getTextInfo(layer,t.label,font,null,maxWidth);labelWidth=Math.max(labelWidth,info.width);labelHeight=Math.max(labelHeight,info.height)}axis.labelWidth=opts.labelWidth||labelWidth;axis.labelHeight=opts.labelHeight||labelHeight}function allocateAxisBoxFirstPhase(axis){var lw=axis.labelWidth,lh=axis.labelHeight,pos=axis.options.position,isXAxis=axis.direction==="x",tickLength=axis.options.tickLength,axisMargin=options.grid.axisMargin,padding=options.grid.labelMargin,innermost=true,outermost=true,first=true,found=false;$.each(isXAxis?xaxes:yaxes,function(i,a){if(a&&(a.show||a.reserveSpace)){if(a===axis){found=true}else if(a.options.position===pos){if(found){outermost=false}else{innermost=false}}if(!found){first=false}}});if(outermost){axisMargin=0}if(tickLength==null){tickLength=first?"full":5}if(!isNaN(+tickLength))padding+=+tickLength;if(isXAxis){lh+=padding;if(pos=="bottom"){plotOffset.bottom+=lh+axisMargin;axis.box={top:surface.height-plotOffset.bottom,height:lh}}else{axis.box={top:plotOffset.top+axisMargin,height:lh};plotOffset.top+=lh+axisMargin}}else{lw+=padding;if(pos=="left"){axis.box={left:plotOffset.left+axisMargin,width:lw};plotOffset.left+=lw+axisMargin}else{plotOffset.right+=lw+axisMargin;axis.box={left:surface.width-plotOffset.right,width:lw}}}axis.position=pos;axis.tickLength=tickLength;axis.box.padding=padding;axis.innermost=innermost}function allocateAxisBoxSecondPhase(axis){if(axis.direction=="x"){axis.box.left=plotOffset.left-axis.labelWidth/2;axis.box.width=surface.width-plotOffset.left-plotOffset.right+axis.labelWidth}else{axis.box.top=plotOffset.top-axis.labelHeight/2;axis.box.height=surface.height-plotOffset.bottom-plotOffset.top+axis.labelHeight}}function adjustLayoutForThingsStickingOut(){var minMargin=options.grid.minBorderMargin,axis,i;if(minMargin==null){minMargin=0;for(i=0;i<series.length;++i)minMargin=Math.max(minMargin,2*(series[i].points.radius+series[i].points.lineWidth/2))}var margins={left:minMargin,right:minMargin,top:minMargin,bottom:minMargin};$.each(allAxes(),function(_,axis){if(axis.reserveSpace&&axis.ticks&&axis.ticks.length){if(axis.direction==="x"){margins.left=Math.max(margins.left,axis.labelWidth/2);margins.right=Math.max(margins.right,axis.labelWidth/2)}else{margins.bottom=Math.max(margins.bottom,axis.labelHeight/2);margins.top=Math.max(margins.top,axis.labelHeight/2)}}});plotOffset.left=Math.ceil(Math.max(margins.left,plotOffset.left));plotOffset.right=Math.ceil(Math.max(margins.right,plotOffset.right));plotOffset.top=Math.ceil(Math.max(margins.top,plotOffset.top));plotOffset.bottom=Math.ceil(Math.max(margins.bottom,plotOffset.bottom))}function setupGrid(){var i,axes=allAxes(),showGrid=options.grid.show;for(var a in plotOffset){var margin=options.grid.margin||0;plotOffset[a]=typeof margin=="number"?margin:margin[a]||0}executeHooks(hooks.processOffset,[plotOffset]);for(var a in plotOffset){if(typeof options.grid.borderWidth=="object"){plotOffset[a]+=showGrid?options.grid.borderWidth[a]:0}else{plotOffset[a]+=showGrid?options.grid.borderWidth:0}}$.each(axes,function(_,axis){var axisOpts=axis.options;axis.show=axisOpts.show==null?axis.used:axisOpts.show;axis.reserveSpace=axisOpts.reserveSpace==null?axis.show:axisOpts.reserveSpace;setRange(axis)});if(showGrid){var allocatedAxes=$.grep(axes,function(axis){return axis.show||axis.reserveSpace});$.each(allocatedAxes,function(_,axis){setupTickGeneration(axis);setTicks(axis);snapRangeToTicks(axis,axis.ticks);measureTickLabels(axis)});for(i=allocatedAxes.length-1;i>=0;--i)allocateAxisBoxFirstPhase(allocatedAxes[i]);adjustLayoutForThingsStickingOut();$.each(allocatedAxes,function(_,axis){allocateAxisBoxSecondPhase(axis)})}plotWidth=surface.width-plotOffset.left-plotOffset.right;plotHeight=surface.height-plotOffset.bottom-plotOffset.top;$.each(axes,function(_,axis){setTransformationHelpers(axis)});if(showGrid){drawAxisLabels()}insertLegend()}function setRange(axis){var opts=axis.options,min=+(opts.min!=null?opts.min:axis.datamin),max=+(opts.max!=null?opts.max:axis.datamax),delta=max-min;if(delta==0){var widen=max==0?1:.01;if(opts.min==null)min-=widen;if(opts.max==null||opts.min!=null)max+=widen}else{var margin=opts.autoscaleMargin;if(margin!=null){if(opts.min==null){min-=delta*margin;if(min<0&&axis.datamin!=null&&axis.datamin>=0)min=0}if(opts.max==null){max+=delta*margin;if(max>0&&axis.datamax!=null&&axis.datamax<=0)max=0}}}axis.min=min;axis.max=max}function setupTickGeneration(axis){var opts=axis.options;var noTicks;if(typeof opts.ticks=="number"&&opts.ticks>0)noTicks=opts.ticks;else noTicks=.3*Math.sqrt(axis.direction=="x"?surface.width:surface.height);var delta=(axis.max-axis.min)/noTicks,dec=-Math.floor(Math.log(delta)/Math.LN10),maxDec=opts.tickDecimals;if(maxDec!=null&&dec>maxDec){dec=maxDec}var magn=Math.pow(10,-dec),norm=delta/magn,size;if(norm<1.5){size=1}else if(norm<3){size=2;if(norm>2.25&&(maxDec==null||dec+1<=maxDec)){size=2.5;++dec}}else if(norm<7.5){size=5}else{size=10}size*=magn;if(opts.minTickSize!=null&&size<opts.minTickSize){size=opts.minTickSize}axis.delta=delta;axis.tickDecimals=Math.max(0,maxDec!=null?maxDec:dec);axis.tickSize=opts.tickSize||size;if(opts.mode=="time"&&!axis.tickGenerator){throw new Error("Time mode requires the flot.time plugin.")}if(!axis.tickGenerator){axis.tickGenerator=function(axis){var ticks=[],start=floorInBase(axis.min,axis.tickSize),i=0,v=Number.NaN,prev;do{prev=v;v=start+i*axis.tickSize;ticks.push(v);++i}while(v<axis.max&&v!=prev);return ticks};axis.tickFormatter=function(value,axis){var factor=axis.tickDecimals?Math.pow(10,axis.tickDecimals):1;var formatted=""+Math.round(value*factor)/factor;if(axis.tickDecimals!=null){var decimal=formatted.indexOf(".");var precision=decimal==-1?0:formatted.length-decimal-1;if(precision<axis.tickDecimals){return(precision?formatted:formatted+".")+(""+factor).substr(1,axis.tickDecimals-precision)}}return formatted}}if($.isFunction(opts.tickFormatter))axis.tickFormatter=function(v,axis){return""+opts.tickFormatter(v,axis)};if(opts.alignTicksWithAxis!=null){var otherAxis=(axis.direction=="x"?xaxes:yaxes)[opts.alignTicksWithAxis-1];if(otherAxis&&otherAxis.used&&otherAxis!=axis){var niceTicks=axis.tickGenerator(axis);if(niceTicks.length>0){if(opts.min==null)axis.min=Math.min(axis.min,niceTicks[0]);if(opts.max==null&&niceTicks.length>1)axis.max=Math.max(axis.max,niceTicks[niceTicks.length-1])}axis.tickGenerator=function(axis){var ticks=[],v,i;for(i=0;i<otherAxis.ticks.length;++i){v=(otherAxis.ticks[i].v-otherAxis.min)/(otherAxis.max-otherAxis.min);v=axis.min+v*(axis.max-axis.min);ticks.push(v)}return ticks};if(!axis.mode&&opts.tickDecimals==null){var extraDec=Math.max(0,-Math.floor(Math.log(axis.delta)/Math.LN10)+1),ts=axis.tickGenerator(axis);if(!(ts.length>1&&/\..*0$/.test((ts[1]-ts[0]).toFixed(extraDec))))axis.tickDecimals=extraDec}}}}function setTicks(axis){var oticks=axis.options.ticks,ticks=[];if(oticks==null||typeof oticks=="number"&&oticks>0)ticks=axis.tickGenerator(axis);else if(oticks){if($.isFunction(oticks))ticks=oticks(axis);else ticks=oticks}var i,v;axis.ticks=[];for(i=0;i<ticks.length;++i){var label=null;var t=ticks[i];if(typeof t=="object"){v=+t[0];if(t.length>1)label=t[1]}else v=+t;if(label==null)label=axis.tickFormatter(v,axis);if(!isNaN(v))axis.ticks.push({v:v,label:label})}}function snapRangeToTicks(axis,ticks){if(axis.options.autoscaleMargin&&ticks.length>0){if(axis.options.min==null)axis.min=Math.min(axis.min,ticks[0].v);if(axis.options.max==null&&ticks.length>1)axis.max=Math.max(axis.max,ticks[ticks.length-1].v)}}function draw(){surface.clear();executeHooks(hooks.drawBackground,[ctx]);var grid=options.grid;if(grid.show&&grid.backgroundColor)drawBackground();if(grid.show&&!grid.aboveData){drawGrid()}for(var i=0;i<series.length;++i){executeHooks(hooks.drawSeries,[ctx,series[i]]);drawSeries(series[i])}executeHooks(hooks.draw,[ctx]);if(grid.show&&grid.aboveData){drawGrid()}surface.render();triggerRedrawOverlay()}function extractRange(ranges,coord){var axis,from,to,key,axes=allAxes();for(var i=0;i<axes.length;++i){axis=axes[i];if(axis.direction==coord){key=coord+axis.n+"axis";if(!ranges[key]&&axis.n==1)key=coord+"axis";if(ranges[key]){from=ranges[key].from;to=ranges[key].to;break}}}if(!ranges[key]){axis=coord=="x"?xaxes[0]:yaxes[0];from=ranges[coord+"1"];to=ranges[coord+"2"]}if(from!=null&&to!=null&&from>to){var tmp=from;from=to;to=tmp}return{from:from,to:to,axis:axis}}function drawBackground(){ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.fillStyle=getColorOrGradient(options.grid.backgroundColor,plotHeight,0,"rgba(255, 255, 255, 0)");ctx.fillRect(0,0,plotWidth,plotHeight);ctx.restore()}function drawGrid(){var i,axes,bw,bc;ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var markings=options.grid.markings;if(markings){if($.isFunction(markings)){axes=plot.getAxes();axes.xmin=axes.xaxis.min;axes.xmax=axes.xaxis.max;axes.ymin=axes.yaxis.min;axes.ymax=axes.yaxis.max;markings=markings(axes)}for(i=0;i<markings.length;++i){var m=markings[i],xrange=extractRange(m,"x"),yrange=extractRange(m,"y");if(xrange.from==null)xrange.from=xrange.axis.min;if(xrange.to==null)xrange.to=xrange.axis.max;+if(yrange.from==null)yrange.from=yrange.axis.min;if(yrange.to==null)yrange.to=yrange.axis.max;if(xrange.to<xrange.axis.min||xrange.from>xrange.axis.max||yrange.to<yrange.axis.min||yrange.from>yrange.axis.max)continue;xrange.from=Math.max(xrange.from,xrange.axis.min);xrange.to=Math.min(xrange.to,xrange.axis.max);yrange.from=Math.max(yrange.from,yrange.axis.min);yrange.to=Math.min(yrange.to,yrange.axis.max);var xequal=xrange.from===xrange.to,yequal=yrange.from===yrange.to;if(xequal&&yequal){continue}xrange.from=Math.floor(xrange.axis.p2c(xrange.from));xrange.to=Math.floor(xrange.axis.p2c(xrange.to));yrange.from=Math.floor(yrange.axis.p2c(yrange.from));yrange.to=Math.floor(yrange.axis.p2c(yrange.to));if(xequal||yequal){var lineWidth=m.lineWidth||options.grid.markingsLineWidth,subPixel=lineWidth%2?.5:0;ctx.beginPath();ctx.strokeStyle=m.color||options.grid.markingsColor;ctx.lineWidth=lineWidth;if(xequal){ctx.moveTo(xrange.to+subPixel,yrange.from);ctx.lineTo(xrange.to+subPixel,yrange.to)}else{ctx.moveTo(xrange.from,yrange.to+subPixel);ctx.lineTo(xrange.to,yrange.to+subPixel)}ctx.stroke()}else{ctx.fillStyle=m.color||options.grid.markingsColor;ctx.fillRect(xrange.from,yrange.to,xrange.to-xrange.from,yrange.from-yrange.to)}}}axes=allAxes();bw=options.grid.borderWidth;for(var j=0;j<axes.length;++j){var axis=axes[j],box=axis.box,t=axis.tickLength,x,y,xoff,yoff;if(!axis.show||axis.ticks.length==0)continue;ctx.lineWidth=1;if(axis.direction=="x"){x=0;if(t=="full")y=axis.position=="top"?0:plotHeight;else y=box.top-plotOffset.top+(axis.position=="top"?box.height:0)}else{y=0;if(t=="full")x=axis.position=="left"?0:plotWidth;else x=box.left-plotOffset.left+(axis.position=="left"?box.width:0)}if(!axis.innermost){ctx.strokeStyle=axis.options.color;ctx.beginPath();xoff=yoff=0;if(axis.direction=="x")xoff=plotWidth+1;else yoff=plotHeight+1;if(ctx.lineWidth==1){if(axis.direction=="x"){y=Math.floor(y)+.5}else{x=Math.floor(x)+.5}}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff);ctx.stroke()}ctx.strokeStyle=axis.options.tickColor;ctx.beginPath();for(i=0;i<axis.ticks.length;++i){var v=axis.ticks[i].v;xoff=yoff=0;if(isNaN(v)||v<axis.min||v>axis.max||t=="full"&&(typeof bw=="object"&&bw[axis.position]>0||bw>0)&&(v==axis.min||v==axis.max))continue;if(axis.direction=="x"){x=axis.p2c(v);yoff=t=="full"?-plotHeight:t;if(axis.position=="top")yoff=-yoff}else{y=axis.p2c(v);xoff=t=="full"?-plotWidth:t;if(axis.position=="left")xoff=-xoff}if(ctx.lineWidth==1){if(axis.direction=="x")x=Math.floor(x)+.5;else y=Math.floor(y)+.5}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff)}ctx.stroke()}if(bw){bc=options.grid.borderColor;if(typeof bw=="object"||typeof bc=="object"){if(typeof bw!=="object"){bw={top:bw,right:bw,bottom:bw,left:bw}}if(typeof bc!=="object"){bc={top:bc,right:bc,bottom:bc,left:bc}}if(bw.top>0){ctx.strokeStyle=bc.top;ctx.lineWidth=bw.top;ctx.beginPath();ctx.moveTo(0-bw.left,0-bw.top/2);ctx.lineTo(plotWidth,0-bw.top/2);ctx.stroke()}if(bw.right>0){ctx.strokeStyle=bc.right;ctx.lineWidth=bw.right;ctx.beginPath();ctx.moveTo(plotWidth+bw.right/2,0-bw.top);ctx.lineTo(plotWidth+bw.right/2,plotHeight);ctx.stroke()}if(bw.bottom>0){ctx.strokeStyle=bc.bottom;ctx.lineWidth=bw.bottom;ctx.beginPath();ctx.moveTo(plotWidth+bw.right,plotHeight+bw.bottom/2);ctx.lineTo(0,plotHeight+bw.bottom/2);ctx.stroke()}if(bw.left>0){ctx.strokeStyle=bc.left;ctx.lineWidth=bw.left;ctx.beginPath();ctx.moveTo(0-bw.left/2,plotHeight+bw.bottom);ctx.lineTo(0-bw.left/2,0);ctx.stroke()}}else{ctx.lineWidth=bw;ctx.strokeStyle=options.grid.borderColor;ctx.strokeRect(-bw/2,-bw/2,plotWidth+bw,plotHeight+bw)}}ctx.restore()}function drawAxisLabels(){$.each(allAxes(),function(_,axis){var box=axis.box,legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=axis.options.font||"flot-tick-label tickLabel",tick,x,y,halign,valign;surface.removeText(layer);if(!axis.show||axis.ticks.length==0)return;for(var i=0;i<axis.ticks.length;++i){tick=axis.ticks[i];if(!tick.label||tick.v<axis.min||tick.v>axis.max)continue;if(axis.direction=="x"){halign="center";x=plotOffset.left+axis.p2c(tick.v);if(axis.position=="bottom"){y=box.top+box.padding}else{y=box.top+box.height-box.padding;valign="bottom"}}else{valign="middle";y=plotOffset.top+axis.p2c(tick.v);if(axis.position=="left"){x=box.left+box.width-box.padding;halign="right"}else{x=box.left+box.padding}}surface.addText(layer,x,y,tick.label,font,null,null,halign,valign)}})}function drawSeries(series){if(series.lines.show)drawSeriesLines(series);if(series.bars.show)drawSeriesBars(series);if(series.points.show)drawSeriesPoints(series)}function drawSeriesLines(series){function plotLine(datapoints,xoffset,yoffset,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,prevx=null,prevy=null;ctx.beginPath();for(var i=ps;i<points.length;i+=ps){var x1=points[i-ps],y1=points[i-ps+1],x2=points[i],y2=points[i+1];if(x1==null||x2==null)continue;if(y1<=y2&&y1<axisy.min){if(y2<axisy.min)continue;x1=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.min}else if(y2<=y1&&y2<axisy.min){if(y1<axisy.min)continue;x2=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}if(y1>=y2&&y1>axisy.max){if(y2>axisy.max)continue;x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else if(y2>=y1&&y2>axisy.max){if(y1>axisy.max)continue;x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.max}if(x1<=x2&&x1<axisx.min){if(x2<axisx.min)continue;y1=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else if(x2<=x1&&x2<axisx.min){if(x1<axisx.min)continue;y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}if(x1>=x2&&x1>axisx.max){if(x2>axisx.max)continue;y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.max}else if(x2>=x1&&x2>axisx.max){if(x1>axisx.max)continue;y2=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.max}if(x1!=prevx||y1!=prevy)ctx.moveTo(axisx.p2c(x1)+xoffset,axisy.p2c(y1)+yoffset);prevx=x2;prevy=y2;ctx.lineTo(axisx.p2c(x2)+xoffset,axisy.p2c(y2)+yoffset)}ctx.stroke()}function plotLineArea(datapoints,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,bottom=Math.min(Math.max(0,axisy.min),axisy.max),i=0,top,areaOpen=false,ypos=1,segmentStart=0,segmentEnd=0;while(true){if(ps>0&&i>points.length+ps)break;i+=ps;var x1=points[i-ps],y1=points[i-ps+ypos],x2=points[i],y2=points[i+ypos];if(areaOpen){if(ps>0&&x1!=null&&x2==null){segmentEnd=i;ps=-ps;ypos=2;continue}if(ps<0&&i==segmentStart+ps){ctx.fill();areaOpen=false;ps=-ps;ypos=1;i=segmentStart=segmentEnd+ps;continue}}if(x1==null||x2==null)continue;if(x1<=x2&&x1<axisx.min){if(x2<axisx.min)continue;y1=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else if(x2<=x1&&x2<axisx.min){if(x1<axisx.min)continue;y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}if(x1>=x2&&x1>axisx.max){if(x2>axisx.max)continue;y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.max}else if(x2>=x1&&x2>axisx.max){if(x1>axisx.max)continue;y2=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.max}if(!areaOpen){ctx.beginPath();ctx.moveTo(axisx.p2c(x1),axisy.p2c(bottom));areaOpen=true}if(y1>=axisy.max&&y2>=axisy.max){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.max));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.max));continue}else if(y1<=axisy.min&&y2<=axisy.min){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.min));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.min));continue}var x1old=x1,x2old=x2;if(y1<=y2&&y1<axisy.min&&y2>=axisy.min){x1=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.min}else if(y2<=y1&&y2<axisy.min&&y1>=axisy.min){x2=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}if(y1>=y2&&y1>axisy.max&&y2<=axisy.max){x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else if(y2>=y1&&y2>axisy.max&&y1<=axisy.max){x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.max}if(x1!=x1old){ctx.lineTo(axisx.p2c(x1old),axisy.p2c(y1))}ctx.lineTo(axisx.p2c(x1),axisy.p2c(y1));ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));if(x2!=x2old){ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));ctx.lineTo(axisx.p2c(x2old),axisy.p2c(y2))}}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.lineJoin="round";var lw=series.lines.lineWidth,sw=series.shadowSize;if(lw>0&&sw>0){ctx.lineWidth=sw;ctx.strokeStyle="rgba(0,0,0,0.1)";var angle=Math.PI/18;plotLine(series.datapoints,Math.sin(angle)*(lw/2+sw/2),Math.cos(angle)*(lw/2+sw/2),series.xaxis,series.yaxis);ctx.lineWidth=sw/2;plotLine(series.datapoints,Math.sin(angle)*(lw/2+sw/4),Math.cos(angle)*(lw/2+sw/4),series.xaxis,series.yaxis)}ctx.lineWidth=lw;ctx.strokeStyle=series.color;var fillStyle=getFillStyle(series.lines,series.color,0,plotHeight);if(fillStyle){ctx.fillStyle=fillStyle;plotLineArea(series.datapoints,series.xaxis,series.yaxis)}if(lw>0)plotLine(series.datapoints,0,0,series.xaxis,series.yaxis);ctx.restore()}function drawSeriesPoints(series){function plotPoints(datapoints,radius,fillStyle,offset,shadow,axisx,axisy,symbol){var points=datapoints.points,ps=datapoints.pointsize;for(var i=0;i<points.length;i+=ps){var x=points[i],y=points[i+1];if(x==null||x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max)continue;ctx.beginPath();x=axisx.p2c(x);y=axisy.p2c(y)+offset;if(symbol=="circle")ctx.arc(x,y,radius,0,shadow?Math.PI:Math.PI*2,false);else symbol(ctx,x,y,radius,shadow);ctx.closePath();if(fillStyle){ctx.fillStyle=fillStyle;ctx.fill()}ctx.stroke()}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var lw=series.points.lineWidth,sw=series.shadowSize,radius=series.points.radius,symbol=series.points.symbol;if(lw==0)lw=1e-4;if(lw>0&&sw>0){var w=sw/2;ctx.lineWidth=w;ctx.strokeStyle="rgba(0,0,0,0.1)";plotPoints(series.datapoints,radius,null,w+w/2,true,series.xaxis,series.yaxis,symbol);ctx.strokeStyle="rgba(0,0,0,0.2)";plotPoints(series.datapoints,radius,null,w/2,true,series.xaxis,series.yaxis,symbol)}ctx.lineWidth=lw;ctx.strokeStyle=series.color;plotPoints(series.datapoints,radius,getFillStyle(series.points,series.color),0,false,series.xaxis,series.yaxis,symbol);ctx.restore()}function drawBar(x,y,b,barLeft,barRight,fillStyleCallback,axisx,axisy,c,horizontal,lineWidth){var left,right,bottom,top,drawLeft,drawRight,drawTop,drawBottom,tmp;if(horizontal){drawBottom=drawRight=drawTop=true;drawLeft=false;left=b;right=x;top=y+barLeft;bottom=y+barRight;if(right<left){tmp=right;right=left;left=tmp;drawLeft=true;drawRight=false}}else{drawLeft=drawRight=drawTop=true;drawBottom=false;left=x+barLeft;right=x+barRight;bottom=b;top=y;if(top<bottom){tmp=top;top=bottom;bottom=tmp;drawBottom=true;drawTop=false}}if(right<axisx.min||left>axisx.max||top<axisy.min||bottom>axisy.max)return;if(left<axisx.min){left=axisx.min;drawLeft=false}if(right>axisx.max){right=axisx.max;drawRight=false}if(bottom<axisy.min){bottom=axisy.min;drawBottom=false}if(top>axisy.max){top=axisy.max;drawTop=false}left=axisx.p2c(left);bottom=axisy.p2c(bottom);right=axisx.p2c(right);top=axisy.p2c(top);if(fillStyleCallback){c.fillStyle=fillStyleCallback(bottom,top);c.fillRect(left,top,right-left,bottom-top)}if(lineWidth>0&&(drawLeft||drawRight||drawTop||drawBottom)){c.beginPath();c.moveTo(left,bottom);if(drawLeft)c.lineTo(left,top);else c.moveTo(left,top);if(drawTop)c.lineTo(right,top);else c.moveTo(right,top);if(drawRight)c.lineTo(right,bottom);else c.moveTo(right,bottom);if(drawBottom)c.lineTo(left,bottom);else c.moveTo(left,bottom);c.stroke()}}function drawSeriesBars(series){function plotBars(datapoints,barLeft,barRight,fillStyleCallback,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize;for(var i=0;i<points.length;i+=ps){if(points[i]==null)continue;drawBar(points[i],points[i+1],points[i+2],barLeft,barRight,fillStyleCallback,axisx,axisy,ctx,series.bars.horizontal,series.bars.lineWidth)}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.lineWidth=series.bars.lineWidth;ctx.strokeStyle=series.color;var barLeft;switch(series.bars.align){case"left":barLeft=0;break;case"right":barLeft=-series.bars.barWidth;break;default:barLeft=-series.bars.barWidth/2}var fillStyleCallback=series.bars.fill?function(bottom,top){return getFillStyle(series.bars,series.color,bottom,top)}:null;plotBars(series.datapoints,barLeft,barLeft+series.bars.barWidth,fillStyleCallback,series.xaxis,series.yaxis);ctx.restore()}function getFillStyle(filloptions,seriesColor,bottom,top){var fill=filloptions.fill;if(!fill)return null;if(filloptions.fillColor)return getColorOrGradient(filloptions.fillColor,bottom,top,seriesColor);var c=$.color.parse(seriesColor);c.a=typeof fill=="number"?fill:.4;c.normalize();return c.toString()}function insertLegend(){if(options.legend.container!=null){$(options.legend.container).html("")}else{placeholder.find(".legend").remove()}if(!options.legend.show){return}var fragments=[],entries=[],rowStarted=false,lf=options.legend.labelFormatter,s,label;for(var i=0;i<series.length;++i){s=series[i];if(s.label){label=lf?lf(s.label,s):s.label;if(label){entries.push({label:label,color:s.color})}}}if(options.legend.sorted){if($.isFunction(options.legend.sorted)){entries.sort(options.legend.sorted)}else if(options.legend.sorted=="reverse"){entries.reverse()}else{var ascending=options.legend.sorted!="descending";entries.sort(function(a,b){return a.label==b.label?0:a.label<b.label!=ascending?1:-1})}}for(var i=0;i<entries.length;++i){var entry=entries[i];if(i%options.legend.noColumns==0){if(rowStarted)fragments.push("</tr>");fragments.push("<tr>");rowStarted=true}fragments.push('<td class="legendColorBox"><div style="border:1px solid '+options.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+entry.color+';overflow:hidden"></div></div></td>'+'<td class="legendLabel">'+entry.label+"</td>")}if(rowStarted)fragments.push("</tr>");if(fragments.length==0)return;var table='<table style="font-size:smaller;color:'+options.grid.color+'">'+fragments.join("")+"</table>";if(options.legend.container!=null)$(options.legend.container).html(table);else{var pos="",p=options.legend.position,m=options.legend.margin;if(m[0]==null)m=[m,m];if(p.charAt(0)=="n")pos+="top:"+(m[1]+plotOffset.top)+"px;";else if(p.charAt(0)=="s")pos+="bottom:"+(m[1]+plotOffset.bottom)+"px;";if(p.charAt(1)=="e")pos+="right:"+(m[0]+plotOffset.right)+"px;";else if(p.charAt(1)=="w")pos+="left:"+(m[0]+plotOffset.left)+"px;";var legend=$('<div class="legend">'+table.replace('style="','style="position:absolute;'+pos+";")+"</div>").appendTo(placeholder);if(options.legend.backgroundOpacity!=0){var c=options.legend.backgroundColor;if(c==null){c=options.grid.backgroundColor;if(c&&typeof c=="string")c=$.color.parse(c);else c=$.color.extract(legend,"background-color");c.a=1;c=c.toString()}var div=legend.children();$('<div style="position:absolute;width:'+div.width()+"px;height:"+div.height()+"px;"+pos+"background-color:"+c+';"> </div>').prependTo(legend).css("opacity",options.legend.backgroundOpacity)}}}var highlights=[],redrawTimeout=null;function findNearbyItem(mouseX,mouseY,seriesFilter){var maxDistance=options.grid.mouseActiveRadius,smallestDistance=maxDistance*maxDistance+1,item=null,foundPoint=false,i,j,ps;for(i=series.length-1;i>=0;--i){if(!seriesFilter(series[i]))continue;var s=series[i],axisx=s.xaxis,axisy=s.yaxis,points=s.datapoints.points,mx=axisx.c2p(mouseX),my=axisy.c2p(mouseY),maxx=maxDistance/axisx.scale,maxy=maxDistance/axisy.scale;ps=s.datapoints.pointsize;if(axisx.options.inverseTransform)maxx=Number.MAX_VALUE;if(axisy.options.inverseTransform)maxy=Number.MAX_VALUE;if(s.lines.show||s.points.show){for(j=0;j<points.length;j+=ps){var x=points[j],y=points[j+1];if(x==null)continue;if(x-mx>maxx||x-mx<-maxx||y-my>maxy||y-my<-maxy)continue;var dx=Math.abs(axisx.p2c(x)-mouseX),dy=Math.abs(axisy.p2c(y)-mouseY),dist=dx*dx+dy*dy;if(dist<smallestDistance){smallestDistance=dist;item=[i,j/ps]}}}if(s.bars.show&&!item){var barLeft,barRight;switch(s.bars.align){case"left":barLeft=0;break;case"right":barLeft=-s.bars.barWidth;break;default:barLeft=-s.bars.barWidth/2}barRight=barLeft+s.bars.barWidth;for(j=0;j<points.length;j+=ps){var x=points[j],y=points[j+1],b=points[j+2];if(x==null)continue;if(series[i].bars.horizontal?mx<=Math.max(b,x)&&mx>=Math.min(b,x)&&my>=y+barLeft&&my<=y+barRight:mx>=x+barLeft&&mx<=x+barRight&&my>=Math.min(b,y)&&my<=Math.max(b,y))item=[i,j/ps]}}}if(item){i=item[0];j=item[1];ps=series[i].datapoints.pointsize;return{datapoint:series[i].datapoints.points.slice(j*ps,(j+1)*ps),dataIndex:j,series:series[i],seriesIndex:i}}return null}function onMouseMove(e){if(options.grid.hoverable)triggerClickHoverEvent("plothover",e,function(s){return s["hoverable"]!=false})}function onMouseLeave(e){if(options.grid.hoverable)triggerClickHoverEvent("plothover",e,function(s){return false})}function onClick(e){triggerClickHoverEvent("plotclick",e,function(s){return s["clickable"]!=false})}function triggerClickHoverEvent(eventname,event,seriesFilter){var offset=eventHolder.offset(),canvasX=event.pageX-offset.left-plotOffset.left,canvasY=event.pageY-offset.top-plotOffset.top,pos=canvasToAxisCoords({left:canvasX,top:canvasY});pos.pageX=event.pageX;pos.pageY=event.pageY;var item=findNearbyItem(canvasX,canvasY,seriesFilter);if(item){item.pageX=parseInt(item.series.xaxis.p2c(item.datapoint[0])+offset.left+plotOffset.left,10);item.pageY=parseInt(item.series.yaxis.p2c(item.datapoint[1])+offset.top+plotOffset.top,10)}if(options.grid.autoHighlight){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.auto==eventname&&!(item&&h.series==item.series&&h.point[0]==item.datapoint[0]&&h.point[1]==item.datapoint[1]))unhighlight(h.series,h.point)}if(item)highlight(item.series,item.datapoint,eventname)}placeholder.trigger(eventname,[pos,item])}function triggerRedrawOverlay(){var t=options.interaction.redrawOverlayInterval;if(t==-1){drawOverlay();return}if(!redrawTimeout)redrawTimeout=setTimeout(drawOverlay,t)}function drawOverlay(){redrawTimeout=null;octx.save();overlay.clear();octx.translate(plotOffset.left,plotOffset.top);var i,hi;for(i=0;i<highlights.length;++i){hi=highlights[i];if(hi.series.bars.show)drawBarHighlight(hi.series,hi.point);else drawPointHighlight(hi.series,hi.point)}octx.restore();executeHooks(hooks.drawOverlay,[octx])}function highlight(s,point,auto){if(typeof s=="number")s=series[s];if(typeof point=="number"){var ps=s.datapoints.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=indexOfHighlight(s,point);if(i==-1){highlights.push({series:s,point:point,auto:auto});triggerRedrawOverlay()}else if(!auto)highlights[i].auto=false}function unhighlight(s,point){if(s==null&&point==null){highlights=[];triggerRedrawOverlay();return}if(typeof s=="number")s=series[s];if(typeof point=="number"){var ps=s.datapoints.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=indexOfHighlight(s,point);if(i!=-1){highlights.splice(i,1);triggerRedrawOverlay()}}function indexOfHighlight(s,p){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.series==s&&h.point[0]==p[0]&&h.point[1]==p[1])return i}return-1}function drawPointHighlight(series,point){var x=point[0],y=point[1],axisx=series.xaxis,axisy=series.yaxis,highlightColor=typeof series.highlightColor==="string"?series.highlightColor:$.color.parse(series.color).scale("a",.5).toString();if(x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max)return;var pointRadius=series.points.radius+series.points.lineWidth/2;octx.lineWidth=pointRadius;octx.strokeStyle=highlightColor;var radius=1.5*pointRadius;x=axisx.p2c(x);y=axisy.p2c(y);octx.beginPath();if(series.points.symbol=="circle")octx.arc(x,y,radius,0,2*Math.PI,false);else series.points.symbol(octx,x,y,radius,false);octx.closePath();octx.stroke()}function drawBarHighlight(series,point){var highlightColor=typeof series.highlightColor==="string"?series.highlightColor:$.color.parse(series.color).scale("a",.5).toString(),fillStyle=highlightColor,barLeft;switch(series.bars.align){case"left":barLeft=0;break;case"right":barLeft=-series.bars.barWidth;break;default:barLeft=-series.bars.barWidth/2}octx.lineWidth=series.bars.lineWidth;octx.strokeStyle=highlightColor;drawBar(point[0],point[1],point[2]||0,barLeft,barLeft+series.bars.barWidth,function(){return fillStyle},series.xaxis,series.yaxis,octx,series.bars.horizontal,series.bars.lineWidth)}function getColorOrGradient(spec,bottom,top,defaultColor){if(typeof spec=="string")return spec;else{var gradient=ctx.createLinearGradient(0,top,0,bottom);for(var i=0,l=spec.colors.length;i<l;++i){var c=spec.colors[i];if(typeof c!="string"){var co=$.color.parse(defaultColor);if(c.brightness!=null)co=co.scale("rgb",c.brightness);if(c.opacity!=null)co.a*=c.opacity;c=co.toString()}gradient.addColorStop(i/(l-1),c)}return gradient}}}$.plot=function(placeholder,data,options){var plot=new Plot($(placeholder),data,options,$.plot.plugins);return plot};$.plot.version="0.8.3";$.plot.plugins=[];$.fn.plot=function(data,options){return this.each(function(){$.plot(this,data,options)})};function floorInBase(n,base){return base*Math.floor(n/base)}})(jQuery);
@@ -0,0 +1,346 @@+/* Flot plugin for adding the ability to pan and zoom the plot.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The default behaviour is double click and scrollwheel up/down to zoom in, drag+to pan. The plugin defines plot.zoom({ center }), plot.zoomOut() and+plot.pan( offset ) so you easily can add custom controls. It also fires+"plotpan" and "plotzoom" events, useful for synchronizing plots.++The plugin supports these options:++ zoom: {+ interactive: false+ trigger: "dblclick" // or "click" for single click+ amount: 1.5 // 2 = 200% (zoom in), 0.5 = 50% (zoom out)+ }++ pan: {+ interactive: false+ cursor: "move" // CSS mouse cursor value used when dragging, e.g. "pointer"+ frameRate: 20+ }++ xaxis, yaxis, x2axis, y2axis: {+ zoomRange: null // or [ number, number ] (min range, max range) or false+ panRange: null // or [ number, number ] (min, max) or false+ }++"interactive" enables the built-in drag/click behaviour. If you enable+interactive for pan, then you'll have a basic plot that supports moving+around; the same for zoom.++"amount" specifies the default amount to zoom in (so 1.5 = 150%) relative to+the current viewport.++"cursor" is a standard CSS mouse cursor string used for visual feedback to the+user when dragging.++"frameRate" specifies the maximum number of times per second the plot will+update itself while the user is panning around on it (set to null to disable+intermediate pans, the plot will then not update until the mouse button is+released).++"zoomRange" is the interval in which zooming can happen, e.g. with zoomRange:+[1, 100] the zoom will never scale the axis so that the difference between min+and max is smaller than 1 or larger than 100. You can set either end to null+to ignore, e.g. [1, null]. If you set zoomRange to false, zooming on that axis+will be disabled.++"panRange" confines the panning to stay within a range, e.g. with panRange:+[-10, 20] panning stops at -10 in one end and at 20 in the other. Either can+be null, e.g. [-10, null]. If you set panRange to false, panning on that axis+will be disabled.++Example API usage:++ plot = $.plot(...);++ // zoom default amount in on the pixel ( 10, 20 )+ plot.zoom({ center: { left: 10, top: 20 } });++ // zoom out again+ plot.zoomOut({ center: { left: 10, top: 20 } });++ // zoom 200% in on the pixel (10, 20)+ plot.zoom({ amount: 2, center: { left: 10, top: 20 } });++ // pan 100 pixels to the left and 20 down+ plot.pan({ left: -100, top: 20 })++Here, "center" specifies where the center of the zooming should happen. Note+that this is defined in pixel space, not the space of the data points (you can+use the p2c helpers on the axes in Flot to help you convert between these).++"amount" is the amount to zoom the viewport relative to the current range, so+1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out). You+can set the default in the options.++*/++// First two dependencies, jquery.event.drag.js and+// jquery.mousewheel.js, we put them inline here to save people the+// effort of downloading them.++/*+jquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)+Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt+*/+(function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case"mousedown":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,"mousemove mouseup",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&"mousemove":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY)<l.distance)break;h.target=l.target,k=f(h,"dragstart",j),k!==!1&&(d.dragging=j,d.proxy=h.dragProxy=a(k||j)[0]);case"mousemove":if(d.dragging){if(k=f(h,"drag",j),c.drop&&(c.drop.allowed=k!==!1,c.drop.handler(h)),k!==!1)break;h.type="mouseup"}case"mouseup":b.remove(document,"mousemove mouseup",e),d.dragging&&(c.drop&&c.drop.handler(h),f(h,"dragend",j)),i(j,!0),d.dragging=d.proxy=l.elem=!1}return!0}function f(b,c,d){b.type=c;var e=a.event.dispatch.call(d,b);return e===!1?!1:e||b.result}function g(a){return Math.pow(a,2)}function h(){return d.dragging===!1}function i(a,b){a&&(a.unselectable=b?"off":"on",a.onselectstart=function(){return b},a.style&&(a.style.MozUserSelect=b?"":"none"))}a.fn.drag=function(a,b,c){return b&&this.bind("dragstart",a),c&&this.bind("dragend",c),a?this.bind("drag",b?b:a):this.trigger("drag")};var b=a.event,c=b.special,d=c.drag={not:":input",distance:0,which:1,dragging:!1,setup:function(c){c=a.extend({distance:d.distance,which:d.which,not:d.not},c||{}),c.distance=g(c.distance),b.add(this,"mousedown",e,c),this.attachEvent&&this.attachEvent("ondragstart",h)},teardown:function(){b.remove(this,"mousedown",e),this===d.dragging&&(d.dragging=d.proxy=!1),i(this,!0),this.detachEvent&&this.detachEvent("ondragstart",h)}};c.dragstart=c.dragend={setup:function(){},teardown:function(){}}})(jQuery);++/* jquery.mousewheel.min.js+ * Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)+ * Licensed under the MIT License (LICENSE.txt).+ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.+ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.+ * Thanks to: Seamus Leahy for adding deltaX and deltaY+ *+ * Version: 3.0.6+ *+ * Requires: 1.2.2++ */+(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);+++++(function ($) {+ var options = {+ xaxis: {+ zoomRange: null, // or [number, number] (min range, max range)+ panRange: null // or [number, number] (min, max)+ },+ zoom: {+ interactive: false,+ trigger: "dblclick", // or "click" for single click+ amount: 1.5 // how much to zoom relative to current position, 2 = 200% (zoom in), 0.5 = 50% (zoom out)+ },+ pan: {+ interactive: false,+ cursor: "move",+ frameRate: 20+ }+ };++ function init(plot) {+ function onZoomClick(e, zoomOut) {+ var c = plot.offset();+ c.left = e.pageX - c.left;+ c.top = e.pageY - c.top;+ if (zoomOut)+ plot.zoomOut({ center: c });+ else+ plot.zoom({ center: c });+ }++ function onMouseWheel(e, delta) {+ e.preventDefault();+ onZoomClick(e, delta < 0);+ return false;+ }+ + var prevCursor = 'default', prevPageX = 0, prevPageY = 0,+ panTimeout = null;++ function onDragStart(e) {+ if (e.which != 1) // only accept left-click+ return false;+ var c = plot.getPlaceholder().css('cursor');+ if (c)+ prevCursor = c;+ plot.getPlaceholder().css('cursor', plot.getOptions().pan.cursor);+ prevPageX = e.pageX;+ prevPageY = e.pageY;+ }+ + function onDrag(e) {+ var frameRate = plot.getOptions().pan.frameRate;+ if (panTimeout || !frameRate)+ return;++ panTimeout = setTimeout(function () {+ plot.pan({ left: prevPageX - e.pageX,+ top: prevPageY - e.pageY });+ prevPageX = e.pageX;+ prevPageY = e.pageY;+ + panTimeout = null;+ }, 1 / frameRate * 1000);+ }++ function onDragEnd(e) {+ if (panTimeout) {+ clearTimeout(panTimeout);+ panTimeout = null;+ }+ + plot.getPlaceholder().css('cursor', prevCursor);+ plot.pan({ left: prevPageX - e.pageX,+ top: prevPageY - e.pageY });+ }+ + function bindEvents(plot, eventHolder) {+ var o = plot.getOptions();+ if (o.zoom.interactive) {+ eventHolder[o.zoom.trigger](onZoomClick);+ eventHolder.mousewheel(onMouseWheel);+ }++ if (o.pan.interactive) {+ eventHolder.bind("dragstart", { distance: 10 }, onDragStart);+ eventHolder.bind("drag", onDrag);+ eventHolder.bind("dragend", onDragEnd);+ }+ }++ plot.zoomOut = function (args) {+ if (!args)+ args = {};+ + if (!args.amount)+ args.amount = plot.getOptions().zoom.amount;++ args.amount = 1 / args.amount;+ plot.zoom(args);+ };+ + plot.zoom = function (args) {+ if (!args)+ args = {};+ + var c = args.center,+ amount = args.amount || plot.getOptions().zoom.amount,+ w = plot.width(), h = plot.height();++ if (!c)+ c = { left: w / 2, top: h / 2 };+ + var xf = c.left / w,+ yf = c.top / h,+ minmax = {+ x: {+ min: c.left - xf * w / amount,+ max: c.left + (1 - xf) * w / amount+ },+ y: {+ min: c.top - yf * h / amount,+ max: c.top + (1 - yf) * h / amount+ }+ };++ $.each(plot.getAxes(), function(_, axis) {+ var opts = axis.options,+ min = minmax[axis.direction].min,+ max = minmax[axis.direction].max,+ zr = opts.zoomRange,+ pr = opts.panRange;++ if (zr === false) // no zooming on this axis+ return;+ + min = axis.c2p(min);+ max = axis.c2p(max);+ if (min > max) {+ // make sure min < max+ var tmp = min;+ min = max;+ max = tmp;+ }++ //Check that we are in panRange+ if (pr) {+ if (pr[0] != null && min < pr[0]) {+ min = pr[0];+ }+ if (pr[1] != null && max > pr[1]) {+ max = pr[1];+ }+ }++ var range = max - min;+ if (zr &&+ ((zr[0] != null && range < zr[0] && amount >1) ||+ (zr[1] != null && range > zr[1] && amount <1)))+ return;+ + opts.min = min;+ opts.max = max;+ });+ + plot.setupGrid();+ plot.draw();+ + if (!args.preventEvent)+ plot.getPlaceholder().trigger("plotzoom", [ plot, args ]);+ };++ plot.pan = function (args) {+ var delta = {+ x: +args.left,+ y: +args.top+ };++ if (isNaN(delta.x))+ delta.x = 0;+ if (isNaN(delta.y))+ delta.y = 0;++ $.each(plot.getAxes(), function (_, axis) {+ var opts = axis.options,+ min, max, d = delta[axis.direction];++ min = axis.c2p(axis.p2c(axis.min) + d),+ max = axis.c2p(axis.p2c(axis.max) + d);++ var pr = opts.panRange;+ if (pr === false) // no panning on this axis+ return;+ + if (pr) {+ // check whether we hit the wall+ if (pr[0] != null && pr[0] > min) {+ d = pr[0] - min;+ min += d;+ max += d;+ }+ + if (pr[1] != null && pr[1] < max) {+ d = pr[1] - max;+ min += d;+ max += d;+ }+ }+ + opts.min = min;+ opts.max = max;+ });+ + plot.setupGrid();+ plot.draw();+ + if (!args.preventEvent)+ plot.getPlaceholder().trigger("plotpan", [ plot, args ]);+ };++ function shutdown(plot, eventHolder) {+ eventHolder.unbind(plot.getOptions().zoom.trigger, onZoomClick);+ eventHolder.unbind("mousewheel", onMouseWheel);+ eventHolder.unbind("dragstart", onDragStart);+ eventHolder.unbind("drag", onDrag);+ eventHolder.unbind("dragend", onDragEnd);+ if (panTimeout)+ clearTimeout(panTimeout);+ }+ + plot.hooks.bindEvents.push(bindEvents);+ plot.hooks.shutdown.push(shutdown);+ }+ + $.plot.plugins.push({+ init: init,+ options: options,+ name: 'navigate',+ version: '1.3'+ });+})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case"mousedown":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,"mousemove mouseup",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&"mousemove":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY)<l.distance)break;h.target=l.target,k=f(h,"dragstart",j),k!==!1&&(d.dragging=j,d.proxy=h.dragProxy=a(k||j)[0]);case"mousemove":if(d.dragging){if(k=f(h,"drag",j),c.drop&&(c.drop.allowed=k!==!1,c.drop.handler(h)),k!==!1)break;h.type="mouseup"}case"mouseup":b.remove(document,"mousemove mouseup",e),d.dragging&&(c.drop&&c.drop.handler(h),f(h,"dragend",j)),i(j,!0),d.dragging=d.proxy=l.elem=!1}return!0}function f(b,c,d){b.type=c;var e=a.event.dispatch.call(d,b);return e===!1?!1:e||b.result}function g(a){return Math.pow(a,2)}function h(){return d.dragging===!1}function i(a,b){a&&(a.unselectable=b?"off":"on",a.onselectstart=function(){return b},a.style&&(a.style.MozUserSelect=b?"":"none"))}a.fn.drag=function(a,b,c){return b&&this.bind("dragstart",a),c&&this.bind("dragend",c),a?this.bind("drag",b?b:a):this.trigger("drag")};var b=a.event,c=b.special,d=c.drag={not:":input",distance:0,which:1,dragging:!1,setup:function(c){c=a.extend({distance:d.distance,which:d.which,not:d.not},c||{}),c.distance=g(c.distance),b.add(this,"mousedown",e,c),this.attachEvent&&this.attachEvent("ondragstart",h)},teardown:function(){b.remove(this,"mousedown",e),this===d.dragging&&(d.dragging=d.proxy=!1),i(this,!0),this.detachEvent&&this.detachEvent("ondragstart",h)}};c.dragstart=c.dragend={setup:function(){},teardown:function(){}}})(jQuery);(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);(function($){var options={xaxis:{zoomRange:null,panRange:null},zoom:{interactive:false,trigger:"dblclick",amount:1.5},pan:{interactive:false,cursor:"move",frameRate:20}};function init(plot){function onZoomClick(e,zoomOut){var c=plot.offset();c.left=e.pageX-c.left;c.top=e.pageY-c.top;if(zoomOut)plot.zoomOut({center:c});else plot.zoom({center:c})}function onMouseWheel(e,delta){e.preventDefault();onZoomClick(e,delta<0);return false}var prevCursor="default",prevPageX=0,prevPageY=0,panTimeout=null;function onDragStart(e){if(e.which!=1)return false;var c=plot.getPlaceholder().css("cursor");if(c)prevCursor=c;plot.getPlaceholder().css("cursor",plot.getOptions().pan.cursor);prevPageX=e.pageX;prevPageY=e.pageY}function onDrag(e){var frameRate=plot.getOptions().pan.frameRate;if(panTimeout||!frameRate)return;panTimeout=setTimeout(function(){plot.pan({left:prevPageX-e.pageX,top:prevPageY-e.pageY});prevPageX=e.pageX;prevPageY=e.pageY;panTimeout=null},1/frameRate*1e3)}function onDragEnd(e){if(panTimeout){clearTimeout(panTimeout);panTimeout=null}plot.getPlaceholder().css("cursor",prevCursor);plot.pan({left:prevPageX-e.pageX,top:prevPageY-e.pageY})}function bindEvents(plot,eventHolder){var o=plot.getOptions();if(o.zoom.interactive){eventHolder[o.zoom.trigger](onZoomClick);eventHolder.mousewheel(onMouseWheel)}if(o.pan.interactive){eventHolder.bind("dragstart",{distance:10},onDragStart);eventHolder.bind("drag",onDrag);eventHolder.bind("dragend",onDragEnd)}}plot.zoomOut=function(args){if(!args)args={};if(!args.amount)args.amount=plot.getOptions().zoom.amount;args.amount=1/args.amount;plot.zoom(args)};plot.zoom=function(args){if(!args)args={};var c=args.center,amount=args.amount||plot.getOptions().zoom.amount,w=plot.width(),h=plot.height();if(!c)c={left:w/2,top:h/2};var xf=c.left/w,yf=c.top/h,minmax={x:{min:c.left-xf*w/amount,max:c.left+(1-xf)*w/amount},y:{min:c.top-yf*h/amount,max:c.top+(1-yf)*h/amount}};$.each(plot.getAxes(),function(_,axis){var opts=axis.options,min=minmax[axis.direction].min,max=minmax[axis.direction].max,zr=opts.zoomRange,pr=opts.panRange;if(zr===false)return;min=axis.c2p(min);max=axis.c2p(max);if(min>max){var tmp=min;min=max;max=tmp}if(pr){if(pr[0]!=null&&min<pr[0]){min=pr[0]}if(pr[1]!=null&&max>pr[1]){max=pr[1]}}var range=max-min;if(zr&&(zr[0]!=null&&range<zr[0]&&amount>1||zr[1]!=null&&range>zr[1]&&amount<1))return;opts.min=min;opts.max=max});plot.setupGrid();plot.draw();if(!args.preventEvent)plot.getPlaceholder().trigger("plotzoom",[plot,args])};plot.pan=function(args){var delta={x:+args.left,y:+args.top};if(isNaN(delta.x))delta.x=0;if(isNaN(delta.y))delta.y=0;$.each(plot.getAxes(),function(_,axis){var opts=axis.options,min,max,d=delta[axis.direction];min=axis.c2p(axis.p2c(axis.min)+d),max=axis.c2p(axis.p2c(axis.max)+d);var pr=opts.panRange;if(pr===false)return;if(pr){if(pr[0]!=null&&pr[0]>min){d=pr[0]-min;min+=d;max+=d}if(pr[1]!=null&&pr[1]<max){d=pr[1]-max;min+=d;max+=d}}opts.min=min;opts.max=max});plot.setupGrid();plot.draw();if(!args.preventEvent)plot.getPlaceholder().trigger("plotpan",[plot,args])};function shutdown(plot,eventHolder){eventHolder.unbind(plot.getOptions().zoom.trigger,onZoomClick);eventHolder.unbind("mousewheel",onMouseWheel);eventHolder.unbind("dragstart",onDragStart);eventHolder.unbind("drag",onDrag);eventHolder.unbind("dragend",onDragEnd);if(panTimeout)clearTimeout(panTimeout)}plot.hooks.bindEvents.push(bindEvents);plot.hooks.shutdown.push(shutdown)}$.plot.plugins.push({init:init,options:options,name:"navigate",version:"1.3"})})(jQuery);
@@ -0,0 +1,820 @@+/* Flot plugin for rendering pie charts.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The plugin assumes that each series has a single data value, and that each+value is a positive integer or zero. Negative numbers don't make sense for a+pie chart, and have unpredictable results. The values do NOT need to be+passed in as percentages; the plugin will calculate the total and per-slice+percentages internally.++* Created by Brian Medendorp++* Updated with contributions from btburnett3, Anthony Aragues and Xavi Ivars++The plugin supports these options:++ series: {+ pie: {+ show: true/false+ radius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto'+ innerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect+ startAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result+ tilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show)+ offset: {+ top: integer value to move the pie up or down+ left: integer value to move the pie left or right, or 'auto'+ },+ stroke: {+ color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF')+ width: integer pixel width of the stroke+ },+ label: {+ show: true/false, or 'auto'+ formatter: a user-defined function that modifies the text/style of the label text+ radius: 0-1 for percentage of fullsize, or a specified pixel length+ background: {+ color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000')+ opacity: 0-1+ },+ threshold: 0-1 for the percentage value at which to hide labels (if they're too small)+ },+ combine: {+ threshold: 0-1 for the percentage value at which to combine slices (if they're too small)+ color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined+ label: any text value of what the combined slice should be labeled+ }+ highlight: {+ opacity: 0-1+ }+ }+ }++More detail and specific examples can be found in the included HTML file.++*/++(function($) {++ // Maximum redraw attempts when fitting labels within the plot++ var REDRAW_ATTEMPTS = 10;++ // Factor by which to shrink the pie when fitting labels within the plot++ var REDRAW_SHRINK = 0.95;++ function init(plot) {++ var canvas = null,+ target = null,+ options = null,+ maxRadius = null,+ centerLeft = null,+ centerTop = null,+ processed = false,+ ctx = null;++ // interactive variables++ var highlights = [];++ // add hook to determine if pie plugin in enabled, and then perform necessary operations++ plot.hooks.processOptions.push(function(plot, options) {+ if (options.series.pie.show) {++ options.grid.show = false;++ // set labels.show++ if (options.series.pie.label.show == "auto") {+ if (options.legend.show) {+ options.series.pie.label.show = false;+ } else {+ options.series.pie.label.show = true;+ }+ }++ // set radius++ if (options.series.pie.radius == "auto") {+ if (options.series.pie.label.show) {+ options.series.pie.radius = 3/4;+ } else {+ options.series.pie.radius = 1;+ }+ }++ // ensure sane tilt++ if (options.series.pie.tilt > 1) {+ options.series.pie.tilt = 1;+ } else if (options.series.pie.tilt < 0) {+ options.series.pie.tilt = 0;+ }+ }+ });++ plot.hooks.bindEvents.push(function(plot, eventHolder) {+ var options = plot.getOptions();+ if (options.series.pie.show) {+ if (options.grid.hoverable) {+ eventHolder.unbind("mousemove").mousemove(onMouseMove);+ }+ if (options.grid.clickable) {+ eventHolder.unbind("click").click(onClick);+ }+ }+ });++ plot.hooks.processDatapoints.push(function(plot, series, data, datapoints) {+ var options = plot.getOptions();+ if (options.series.pie.show) {+ processDatapoints(plot, series, data, datapoints);+ }+ });++ plot.hooks.drawOverlay.push(function(plot, octx) {+ var options = plot.getOptions();+ if (options.series.pie.show) {+ drawOverlay(plot, octx);+ }+ });++ plot.hooks.draw.push(function(plot, newCtx) {+ var options = plot.getOptions();+ if (options.series.pie.show) {+ draw(plot, newCtx);+ }+ });++ function processDatapoints(plot, series, datapoints) {+ if (!processed) {+ processed = true;+ canvas = plot.getCanvas();+ target = $(canvas).parent();+ options = plot.getOptions();+ plot.setData(combine(plot.getData()));+ }+ }++ function combine(data) {++ var total = 0,+ combined = 0,+ numCombined = 0,+ color = options.series.pie.combine.color,+ newdata = [];++ // Fix up the raw data from Flot, ensuring the data is numeric++ for (var i = 0; i < data.length; ++i) {++ var value = data[i].data;++ // If the data is an array, we'll assume that it's a standard+ // Flot x-y pair, and are concerned only with the second value.++ // Note how we use the original array, rather than creating a+ // new one; this is more efficient and preserves any extra data+ // that the user may have stored in higher indexes.++ if ($.isArray(value) && value.length == 1) {+ value = value[0];+ }++ if ($.isArray(value)) {+ // Equivalent to $.isNumeric() but compatible with jQuery < 1.7+ if (!isNaN(parseFloat(value[1])) && isFinite(value[1])) {+ value[1] = +value[1];+ } else {+ value[1] = 0;+ }+ } else if (!isNaN(parseFloat(value)) && isFinite(value)) {+ value = [1, +value];+ } else {+ value = [1, 0];+ }++ data[i].data = [value];+ }++ // Sum up all the slices, so we can calculate percentages for each++ for (var i = 0; i < data.length; ++i) {+ total += data[i].data[0][1];+ }++ // Count the number of slices with percentages below the combine+ // threshold; if it turns out to be just one, we won't combine.++ for (var i = 0; i < data.length; ++i) {+ var value = data[i].data[0][1];+ if (value / total <= options.series.pie.combine.threshold) {+ combined += value;+ numCombined++;+ if (!color) {+ color = data[i].color;+ }+ }+ }++ for (var i = 0; i < data.length; ++i) {+ var value = data[i].data[0][1];+ if (numCombined < 2 || value / total > options.series.pie.combine.threshold) {+ newdata.push(+ $.extend(data[i], { /* extend to allow keeping all other original data values+ and using them e.g. in labelFormatter. */+ data: [[1, value]],+ color: data[i].color,+ label: data[i].label,+ angle: value * Math.PI * 2 / total,+ percent: value / (total / 100)+ })+ );+ }+ }++ if (numCombined > 1) {+ newdata.push({+ data: [[1, combined]],+ color: color,+ label: options.series.pie.combine.label,+ angle: combined * Math.PI * 2 / total,+ percent: combined / (total / 100)+ });+ }++ return newdata;+ }++ function draw(plot, newCtx) {++ if (!target) {+ return; // if no series were passed+ }++ var canvasWidth = plot.getPlaceholder().width(),+ canvasHeight = plot.getPlaceholder().height(),+ legendWidth = target.children().filter(".legend").children().width() || 0;++ ctx = newCtx;++ // WARNING: HACK! REWRITE THIS CODE AS SOON AS POSSIBLE!++ // When combining smaller slices into an 'other' slice, we need to+ // add a new series. Since Flot gives plugins no way to modify the+ // list of series, the pie plugin uses a hack where the first call+ // to processDatapoints results in a call to setData with the new+ // list of series, then subsequent processDatapoints do nothing.++ // The plugin-global 'processed' flag is used to control this hack;+ // it starts out false, and is set to true after the first call to+ // processDatapoints.++ // Unfortunately this turns future setData calls into no-ops; they+ // call processDatapoints, the flag is true, and nothing happens.++ // To fix this we'll set the flag back to false here in draw, when+ // all series have been processed, so the next sequence of calls to+ // processDatapoints once again starts out with a slice-combine.+ // This is really a hack; in 0.9 we need to give plugins a proper+ // way to modify series before any processing begins.++ processed = false;++ // calculate maximum radius and center point++ maxRadius = Math.min(canvasWidth, canvasHeight / options.series.pie.tilt) / 2;+ centerTop = canvasHeight / 2 + options.series.pie.offset.top;+ centerLeft = canvasWidth / 2;++ if (options.series.pie.offset.left == "auto") {+ if (options.legend.position.match("w")) {+ centerLeft += legendWidth / 2;+ } else {+ centerLeft -= legendWidth / 2;+ }+ if (centerLeft < maxRadius) {+ centerLeft = maxRadius;+ } else if (centerLeft > canvasWidth - maxRadius) {+ centerLeft = canvasWidth - maxRadius;+ }+ } else {+ centerLeft += options.series.pie.offset.left;+ }++ var slices = plot.getData(),+ attempts = 0;++ // Keep shrinking the pie's radius until drawPie returns true,+ // indicating that all the labels fit, or we try too many times.++ do {+ if (attempts > 0) {+ maxRadius *= REDRAW_SHRINK;+ }+ attempts += 1;+ clear();+ if (options.series.pie.tilt <= 0.8) {+ drawShadow();+ }+ } while (!drawPie() && attempts < REDRAW_ATTEMPTS)++ if (attempts >= REDRAW_ATTEMPTS) {+ clear();+ target.prepend("<div class='error'>Could not draw pie with labels contained inside canvas</div>");+ }++ if (plot.setSeries && plot.insertLegend) {+ plot.setSeries(slices);+ plot.insertLegend();+ }++ // we're actually done at this point, just defining internal functions at this point++ function clear() {+ ctx.clearRect(0, 0, canvasWidth, canvasHeight);+ target.children().filter(".pieLabel, .pieLabelBackground").remove();+ }++ function drawShadow() {++ var shadowLeft = options.series.pie.shadow.left;+ var shadowTop = options.series.pie.shadow.top;+ var edge = 10;+ var alpha = options.series.pie.shadow.alpha;+ var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;++ if (radius >= canvasWidth / 2 - shadowLeft || radius * options.series.pie.tilt >= canvasHeight / 2 - shadowTop || radius <= edge) {+ return; // shadow would be outside canvas, so don't draw it+ }++ ctx.save();+ ctx.translate(shadowLeft,shadowTop);+ ctx.globalAlpha = alpha;+ ctx.fillStyle = "#000";++ // center and rotate to starting position++ ctx.translate(centerLeft,centerTop);+ ctx.scale(1, options.series.pie.tilt);++ //radius -= edge;++ for (var i = 1; i <= edge; i++) {+ ctx.beginPath();+ ctx.arc(0, 0, radius, 0, Math.PI * 2, false);+ ctx.fill();+ radius -= i;+ }++ ctx.restore();+ }++ function drawPie() {++ var startAngle = Math.PI * options.series.pie.startAngle;+ var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;++ // center and rotate to starting position++ ctx.save();+ ctx.translate(centerLeft,centerTop);+ ctx.scale(1, options.series.pie.tilt);+ //ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera++ // draw slices++ ctx.save();+ var currentAngle = startAngle;+ for (var i = 0; i < slices.length; ++i) {+ slices[i].startAngle = currentAngle;+ drawSlice(slices[i].angle, slices[i].color, true);+ }+ ctx.restore();++ // draw slice outlines++ if (options.series.pie.stroke.width > 0) {+ ctx.save();+ ctx.lineWidth = options.series.pie.stroke.width;+ currentAngle = startAngle;+ for (var i = 0; i < slices.length; ++i) {+ drawSlice(slices[i].angle, options.series.pie.stroke.color, false);+ }+ ctx.restore();+ }++ // draw donut hole++ drawDonutHole(ctx);++ ctx.restore();++ // Draw the labels, returning true if they fit within the plot++ if (options.series.pie.label.show) {+ return drawLabels();+ } else return true;++ function drawSlice(angle, color, fill) {++ if (angle <= 0 || isNaN(angle)) {+ return;+ }++ if (fill) {+ ctx.fillStyle = color;+ } else {+ ctx.strokeStyle = color;+ ctx.lineJoin = "round";+ }++ ctx.beginPath();+ if (Math.abs(angle - Math.PI * 2) > 0.000000001) {+ ctx.moveTo(0, 0); // Center of the pie+ }++ //ctx.arc(0, 0, radius, 0, angle, false); // This doesn't work properly in Opera+ ctx.arc(0, 0, radius,currentAngle, currentAngle + angle / 2, false);+ ctx.arc(0, 0, radius,currentAngle + angle / 2, currentAngle + angle, false);+ ctx.closePath();+ //ctx.rotate(angle); // This doesn't work properly in Opera+ currentAngle += angle;++ if (fill) {+ ctx.fill();+ } else {+ ctx.stroke();+ }+ }++ function drawLabels() {++ var currentAngle = startAngle;+ var radius = options.series.pie.label.radius > 1 ? options.series.pie.label.radius : maxRadius * options.series.pie.label.radius;++ for (var i = 0; i < slices.length; ++i) {+ if (slices[i].percent >= options.series.pie.label.threshold * 100) {+ if (!drawLabel(slices[i], currentAngle, i)) {+ return false;+ }+ }+ currentAngle += slices[i].angle;+ }++ return true;++ function drawLabel(slice, startAngle, index) {++ if (slice.data[0][1] == 0) {+ return true;+ }++ // format label text++ var lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter;++ if (lf) {+ text = lf(slice.label, slice);+ } else {+ text = slice.label;+ }++ if (plf) {+ text = plf(text, slice);+ }++ var halfAngle = ((startAngle + slice.angle) + startAngle) / 2;+ var x = centerLeft + Math.round(Math.cos(halfAngle) * radius);+ var y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt;++ var html = "<span class='pieLabel' id='pieLabel" + index + "' style='position:absolute;top:" + y + "px;left:" + x + "px;'>" + text + "</span>";+ target.append(html);++ var label = target.children("#pieLabel" + index);+ var labelTop = (y - label.height() / 2);+ var labelLeft = (x - label.width() / 2);++ label.css("top", labelTop);+ label.css("left", labelLeft);++ // check to make sure that the label is not outside the canvas++ if (0 - labelTop > 0 || 0 - labelLeft > 0 || canvasHeight - (labelTop + label.height()) < 0 || canvasWidth - (labelLeft + label.width()) < 0) {+ return false;+ }++ if (options.series.pie.label.background.opacity != 0) {++ // put in the transparent background separately to avoid blended labels and label boxes++ var c = options.series.pie.label.background.color;++ if (c == null) {+ c = slice.color;+ }++ var pos = "top:" + labelTop + "px;left:" + labelLeft + "px;";+ $("<div class='pieLabelBackground' style='position:absolute;width:" + label.width() + "px;height:" + label.height() + "px;" + pos + "background-color:" + c + ";'></div>")+ .css("opacity", options.series.pie.label.background.opacity)+ .insertBefore(label);+ }++ return true;+ } // end individual label function+ } // end drawLabels function+ } // end drawPie function+ } // end draw function++ // Placed here because it needs to be accessed from multiple locations++ function drawDonutHole(layer) {+ if (options.series.pie.innerRadius > 0) {++ // subtract the center++ layer.save();+ var innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius;+ layer.globalCompositeOperation = "destination-out"; // this does not work with excanvas, but it will fall back to using the stroke color+ layer.beginPath();+ layer.fillStyle = options.series.pie.stroke.color;+ layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);+ layer.fill();+ layer.closePath();+ layer.restore();++ // add inner stroke++ layer.save();+ layer.beginPath();+ layer.strokeStyle = options.series.pie.stroke.color;+ layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);+ layer.stroke();+ layer.closePath();+ layer.restore();++ // TODO: add extra shadow inside hole (with a mask) if the pie is tilted.+ }+ }++ //-- Additional Interactive related functions --++ function isPointInPoly(poly, pt) {+ for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)+ ((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1]))+ && (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0])+ && (c = !c);+ return c;+ }++ function findNearbySlice(mouseX, mouseY) {++ var slices = plot.getData(),+ options = plot.getOptions(),+ radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius,+ x, y;++ for (var i = 0; i < slices.length; ++i) {++ var s = slices[i];++ if (s.pie.show) {++ ctx.save();+ ctx.beginPath();+ ctx.moveTo(0, 0); // Center of the pie+ //ctx.scale(1, options.series.pie.tilt); // this actually seems to break everything when here.+ ctx.arc(0, 0, radius, s.startAngle, s.startAngle + s.angle / 2, false);+ ctx.arc(0, 0, radius, s.startAngle + s.angle / 2, s.startAngle + s.angle, false);+ ctx.closePath();+ x = mouseX - centerLeft;+ y = mouseY - centerTop;++ if (ctx.isPointInPath) {+ if (ctx.isPointInPath(mouseX - centerLeft, mouseY - centerTop)) {+ ctx.restore();+ return {+ datapoint: [s.percent, s.data],+ dataIndex: 0,+ series: s,+ seriesIndex: i+ };+ }+ } else {++ // excanvas for IE doesn;t support isPointInPath, this is a workaround.++ var p1X = radius * Math.cos(s.startAngle),+ p1Y = radius * Math.sin(s.startAngle),+ p2X = radius * Math.cos(s.startAngle + s.angle / 4),+ p2Y = radius * Math.sin(s.startAngle + s.angle / 4),+ p3X = radius * Math.cos(s.startAngle + s.angle / 2),+ p3Y = radius * Math.sin(s.startAngle + s.angle / 2),+ p4X = radius * Math.cos(s.startAngle + s.angle / 1.5),+ p4Y = radius * Math.sin(s.startAngle + s.angle / 1.5),+ p5X = radius * Math.cos(s.startAngle + s.angle),+ p5Y = radius * Math.sin(s.startAngle + s.angle),+ arrPoly = [[0, 0], [p1X, p1Y], [p2X, p2Y], [p3X, p3Y], [p4X, p4Y], [p5X, p5Y]],+ arrPoint = [x, y];++ // TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt?++ if (isPointInPoly(arrPoly, arrPoint)) {+ ctx.restore();+ return {+ datapoint: [s.percent, s.data],+ dataIndex: 0,+ series: s,+ seriesIndex: i+ };+ }+ }++ ctx.restore();+ }+ }++ return null;+ }++ function onMouseMove(e) {+ triggerClickHoverEvent("plothover", e);+ }++ function onClick(e) {+ triggerClickHoverEvent("plotclick", e);+ }++ // trigger click or hover event (they send the same parameters so we share their code)++ function triggerClickHoverEvent(eventname, e) {++ var offset = plot.offset();+ var canvasX = parseInt(e.pageX - offset.left);+ var canvasY = parseInt(e.pageY - offset.top);+ var item = findNearbySlice(canvasX, canvasY);++ if (options.grid.autoHighlight) {++ // clear auto-highlights++ for (var i = 0; i < highlights.length; ++i) {+ var h = highlights[i];+ if (h.auto == eventname && !(item && h.series == item.series)) {+ unhighlight(h.series);+ }+ }+ }++ // highlight the slice++ if (item) {+ highlight(item.series, eventname);+ }++ // trigger any hover bind events++ var pos = { pageX: e.pageX, pageY: e.pageY };+ target.trigger(eventname, [pos, item]);+ }++ function highlight(s, auto) {+ //if (typeof s == "number") {+ // s = series[s];+ //}++ var i = indexOfHighlight(s);++ if (i == -1) {+ highlights.push({ series: s, auto: auto });+ plot.triggerRedrawOverlay();+ } else if (!auto) {+ highlights[i].auto = false;+ }+ }++ function unhighlight(s) {+ if (s == null) {+ highlights = [];+ plot.triggerRedrawOverlay();+ }++ //if (typeof s == "number") {+ // s = series[s];+ //}++ var i = indexOfHighlight(s);++ if (i != -1) {+ highlights.splice(i, 1);+ plot.triggerRedrawOverlay();+ }+ }++ function indexOfHighlight(s) {+ for (var i = 0; i < highlights.length; ++i) {+ var h = highlights[i];+ if (h.series == s)+ return i;+ }+ return -1;+ }++ function drawOverlay(plot, octx) {++ var options = plot.getOptions();++ var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;++ octx.save();+ octx.translate(centerLeft, centerTop);+ octx.scale(1, options.series.pie.tilt);++ for (var i = 0; i < highlights.length; ++i) {+ drawHighlight(highlights[i].series);+ }++ drawDonutHole(octx);++ octx.restore();++ function drawHighlight(series) {++ if (series.angle <= 0 || isNaN(series.angle)) {+ return;+ }++ //octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString();+ octx.fillStyle = "rgba(255, 255, 255, " + options.series.pie.highlight.opacity + ")"; // this is temporary until we have access to parseColor+ octx.beginPath();+ if (Math.abs(series.angle - Math.PI * 2) > 0.000000001) {+ octx.moveTo(0, 0); // Center of the pie+ }+ octx.arc(0, 0, radius, series.startAngle, series.startAngle + series.angle / 2, false);+ octx.arc(0, 0, radius, series.startAngle + series.angle / 2, series.startAngle + series.angle, false);+ octx.closePath();+ octx.fill();+ }+ }+ } // end init (plugin body)++ // define pie specific options and their default values++ var options = {+ series: {+ pie: {+ show: false,+ radius: "auto", // actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value)+ innerRadius: 0, /* for donut */+ startAngle: 3/2,+ tilt: 1,+ shadow: {+ left: 5, // shadow left offset+ top: 15, // shadow top offset+ alpha: 0.02 // shadow alpha+ },+ offset: {+ top: 0,+ left: "auto"+ },+ stroke: {+ color: "#fff",+ width: 1+ },+ label: {+ show: "auto",+ formatter: function(label, slice) {+ return "<div style='font-size:x-small;text-align:center;padding:2px;color:" + slice.color + ";'>" + label + "<br/>" + Math.round(slice.percent) + "%</div>";+ }, // formatter function+ radius: 1, // radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value)+ background: {+ color: null,+ opacity: 0+ },+ threshold: 0 // percentage at which to hide the label (i.e. the slice is too narrow)+ },+ combine: {+ threshold: -1, // percentage at which to combine little slices into one larger slice+ color: null, // color to give the new slice (auto-generated if null)+ label: "Other" // label to give the new slice+ },+ highlight: {+ //color: "#fff", // will add this functionality once parseColor is available+ opacity: 0.5+ }+ }+ }+ };++ $.plot.plugins.push({+ init: init,+ options: options,+ name: "pie",+ version: "1.1"+ });++})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var REDRAW_ATTEMPTS=10;var REDRAW_SHRINK=.95;function init(plot){var canvas=null,target=null,options=null,maxRadius=null,centerLeft=null,centerTop=null,processed=false,ctx=null;var highlights=[];plot.hooks.processOptions.push(function(plot,options){if(options.series.pie.show){options.grid.show=false;if(options.series.pie.label.show=="auto"){if(options.legend.show){options.series.pie.label.show=false}else{options.series.pie.label.show=true}}if(options.series.pie.radius=="auto"){if(options.series.pie.label.show){options.series.pie.radius=3/4}else{options.series.pie.radius=1}}if(options.series.pie.tilt>1){options.series.pie.tilt=1}else if(options.series.pie.tilt<0){options.series.pie.tilt=0}}});plot.hooks.bindEvents.push(function(plot,eventHolder){var options=plot.getOptions();if(options.series.pie.show){if(options.grid.hoverable){eventHolder.unbind("mousemove").mousemove(onMouseMove)}if(options.grid.clickable){eventHolder.unbind("click").click(onClick)}}});plot.hooks.processDatapoints.push(function(plot,series,data,datapoints){var options=plot.getOptions();if(options.series.pie.show){processDatapoints(plot,series,data,datapoints)}});plot.hooks.drawOverlay.push(function(plot,octx){var options=plot.getOptions();if(options.series.pie.show){drawOverlay(plot,octx)}});plot.hooks.draw.push(function(plot,newCtx){var options=plot.getOptions();if(options.series.pie.show){draw(plot,newCtx)}});function processDatapoints(plot,series,datapoints){if(!processed){processed=true;canvas=plot.getCanvas();target=$(canvas).parent();options=plot.getOptions();plot.setData(combine(plot.getData()))}}function combine(data){var total=0,combined=0,numCombined=0,color=options.series.pie.combine.color,newdata=[];for(var i=0;i<data.length;++i){var value=data[i].data;if($.isArray(value)&&value.length==1){value=value[0]}if($.isArray(value)){if(!isNaN(parseFloat(value[1]))&&isFinite(value[1])){value[1]=+value[1]}else{value[1]=0}}else if(!isNaN(parseFloat(value))&&isFinite(value)){value=[1,+value]}else{value=[1,0]}data[i].data=[value]}for(var i=0;i<data.length;++i){total+=data[i].data[0][1]}for(var i=0;i<data.length;++i){var value=data[i].data[0][1];if(value/total<=options.series.pie.combine.threshold){combined+=value;numCombined++;if(!color){color=data[i].color}}}for(var i=0;i<data.length;++i){var value=data[i].data[0][1];if(numCombined<2||value/total>options.series.pie.combine.threshold){newdata.push($.extend(data[i],{data:[[1,value]],color:data[i].color,label:data[i].label,angle:value*Math.PI*2/total,percent:value/(total/100)}))}}if(numCombined>1){newdata.push({data:[[1,combined]],color:color,label:options.series.pie.combine.label,angle:combined*Math.PI*2/total,percent:combined/(total/100)})}return newdata}function draw(plot,newCtx){if(!target){return}var canvasWidth=plot.getPlaceholder().width(),canvasHeight=plot.getPlaceholder().height(),legendWidth=target.children().filter(".legend").children().width()||0;ctx=newCtx;processed=false;maxRadius=Math.min(canvasWidth,canvasHeight/options.series.pie.tilt)/2;centerTop=canvasHeight/2+options.series.pie.offset.top;centerLeft=canvasWidth/2;if(options.series.pie.offset.left=="auto"){if(options.legend.position.match("w")){centerLeft+=legendWidth/2}else{centerLeft-=legendWidth/2}if(centerLeft<maxRadius){centerLeft=maxRadius}else if(centerLeft>canvasWidth-maxRadius){centerLeft=canvasWidth-maxRadius}}else{centerLeft+=options.series.pie.offset.left}var slices=plot.getData(),attempts=0;do{if(attempts>0){maxRadius*=REDRAW_SHRINK}attempts+=1;clear();if(options.series.pie.tilt<=.8){drawShadow()}}while(!drawPie()&&attempts<REDRAW_ATTEMPTS);if(attempts>=REDRAW_ATTEMPTS){clear();target.prepend("<div class='error'>Could not draw pie with labels contained inside canvas</div>")}if(plot.setSeries&&plot.insertLegend){plot.setSeries(slices);plot.insertLegend()}function clear(){ctx.clearRect(0,0,canvasWidth,canvasHeight);target.children().filter(".pieLabel, .pieLabelBackground").remove()}function drawShadow(){var shadowLeft=options.series.pie.shadow.left;var shadowTop=options.series.pie.shadow.top;var edge=10;var alpha=options.series.pie.shadow.alpha;var radius=options.series.pie.radius>1?options.series.pie.radius:maxRadius*options.series.pie.radius;if(radius>=canvasWidth/2-shadowLeft||radius*options.series.pie.tilt>=canvasHeight/2-shadowTop||radius<=edge){return}ctx.save();ctx.translate(shadowLeft,shadowTop);ctx.globalAlpha=alpha;ctx.fillStyle="#000";ctx.translate(centerLeft,centerTop);ctx.scale(1,options.series.pie.tilt);for(var i=1;i<=edge;i++){ctx.beginPath();ctx.arc(0,0,radius,0,Math.PI*2,false);ctx.fill();radius-=i}ctx.restore()}function drawPie(){var startAngle=Math.PI*options.series.pie.startAngle;var radius=options.series.pie.radius>1?options.series.pie.radius:maxRadius*options.series.pie.radius;ctx.save();ctx.translate(centerLeft,centerTop);ctx.scale(1,options.series.pie.tilt);ctx.save();var currentAngle=startAngle;for(var i=0;i<slices.length;++i){slices[i].startAngle=currentAngle;drawSlice(slices[i].angle,slices[i].color,true)}ctx.restore();if(options.series.pie.stroke.width>0){ctx.save();ctx.lineWidth=options.series.pie.stroke.width;currentAngle=startAngle;for(var i=0;i<slices.length;++i){drawSlice(slices[i].angle,options.series.pie.stroke.color,false)}ctx.restore()}drawDonutHole(ctx);ctx.restore();if(options.series.pie.label.show){return drawLabels()}else return true;function drawSlice(angle,color,fill){if(angle<=0||isNaN(angle)){return}if(fill){ctx.fillStyle=color}else{ctx.strokeStyle=color;ctx.lineJoin="round"}ctx.beginPath();if(Math.abs(angle-Math.PI*2)>1e-9){ctx.moveTo(0,0)}ctx.arc(0,0,radius,currentAngle,currentAngle+angle/2,false);ctx.arc(0,0,radius,currentAngle+angle/2,currentAngle+angle,false);ctx.closePath();currentAngle+=angle;if(fill){ctx.fill()}else{ctx.stroke()}}function drawLabels(){var currentAngle=startAngle;var radius=options.series.pie.label.radius>1?options.series.pie.label.radius:maxRadius*options.series.pie.label.radius;for(var i=0;i<slices.length;++i){if(slices[i].percent>=options.series.pie.label.threshold*100){if(!drawLabel(slices[i],currentAngle,i)){return false}}currentAngle+=slices[i].angle}return true;function drawLabel(slice,startAngle,index){if(slice.data[0][1]==0){return true}var lf=options.legend.labelFormatter,text,plf=options.series.pie.label.formatter;if(lf){text=lf(slice.label,slice)}else{text=slice.label}if(plf){text=plf(text,slice)}var halfAngle=(startAngle+slice.angle+startAngle)/2;var x=centerLeft+Math.round(Math.cos(halfAngle)*radius);var y=centerTop+Math.round(Math.sin(halfAngle)*radius)*options.series.pie.tilt;var html="<span class='pieLabel' id='pieLabel"+index+"' style='position:absolute;top:"+y+"px;left:"+x+"px;'>"+text+"</span>";target.append(html);var label=target.children("#pieLabel"+index);var labelTop=y-label.height()/2;var labelLeft=x-label.width()/2;label.css("top",labelTop);label.css("left",labelLeft);if(0-labelTop>0||0-labelLeft>0||canvasHeight-(labelTop+label.height())<0||canvasWidth-(labelLeft+label.width())<0){return false}if(options.series.pie.label.background.opacity!=0){var c=options.series.pie.label.background.color;if(c==null){c=slice.color}var pos="top:"+labelTop+"px;left:"+labelLeft+"px;";$("<div class='pieLabelBackground' style='position:absolute;width:"+label.width()+"px;height:"+label.height()+"px;"+pos+"background-color:"+c+";'></div>").css("opacity",options.series.pie.label.background.opacity).insertBefore(label)}return true}}}}function drawDonutHole(layer){if(options.series.pie.innerRadius>0){layer.save();var innerRadius=options.series.pie.innerRadius>1?options.series.pie.innerRadius:maxRadius*options.series.pie.innerRadius;layer.globalCompositeOperation="destination-out";layer.beginPath();layer.fillStyle=options.series.pie.stroke.color;layer.arc(0,0,innerRadius,0,Math.PI*2,false);layer.fill();layer.closePath();layer.restore();layer.save();layer.beginPath();layer.strokeStyle=options.series.pie.stroke.color;layer.arc(0,0,innerRadius,0,Math.PI*2,false);layer.stroke();layer.closePath();layer.restore()}}function isPointInPoly(poly,pt){for(var c=false,i=-1,l=poly.length,j=l-1;++i<l;j=i)(poly[i][1]<=pt[1]&&pt[1]<poly[j][1]||poly[j][1]<=pt[1]&&pt[1]<poly[i][1])&&pt[0]<(poly[j][0]-poly[i][0])*(pt[1]-poly[i][1])/(poly[j][1]-poly[i][1])+poly[i][0]&&(c=!c);return c}function findNearbySlice(mouseX,mouseY){var slices=plot.getData(),options=plot.getOptions(),radius=options.series.pie.radius>1?options.series.pie.radius:maxRadius*options.series.pie.radius,x,y;for(var i=0;i<slices.length;++i){var s=slices[i];if(s.pie.show){ctx.save();ctx.beginPath();ctx.moveTo(0,0);ctx.arc(0,0,radius,s.startAngle,s.startAngle+s.angle/2,false);ctx.arc(0,0,radius,s.startAngle+s.angle/2,s.startAngle+s.angle,false);ctx.closePath();x=mouseX-centerLeft;y=mouseY-centerTop;if(ctx.isPointInPath){if(ctx.isPointInPath(mouseX-centerLeft,mouseY-centerTop)){ctx.restore();return{datapoint:[s.percent,s.data],dataIndex:0,series:s,seriesIndex:i}}}else{var p1X=radius*Math.cos(s.startAngle),p1Y=radius*Math.sin(s.startAngle),p2X=radius*Math.cos(s.startAngle+s.angle/4),p2Y=radius*Math.sin(s.startAngle+s.angle/4),p3X=radius*Math.cos(s.startAngle+s.angle/2),p3Y=radius*Math.sin(s.startAngle+s.angle/2),p4X=radius*Math.cos(s.startAngle+s.angle/1.5),p4Y=radius*Math.sin(s.startAngle+s.angle/1.5),p5X=radius*Math.cos(s.startAngle+s.angle),p5Y=radius*Math.sin(s.startAngle+s.angle),arrPoly=[[0,0],[p1X,p1Y],[p2X,p2Y],[p3X,p3Y],[p4X,p4Y],[p5X,p5Y]],arrPoint=[x,y];if(isPointInPoly(arrPoly,arrPoint)){ctx.restore();return{datapoint:[s.percent,s.data],dataIndex:0,series:s,seriesIndex:i}}}ctx.restore()}}return null}function onMouseMove(e){triggerClickHoverEvent("plothover",e)}function onClick(e){triggerClickHoverEvent("plotclick",e)}function triggerClickHoverEvent(eventname,e){var offset=plot.offset();var canvasX=parseInt(e.pageX-offset.left);var canvasY=parseInt(e.pageY-offset.top);var item=findNearbySlice(canvasX,canvasY);if(options.grid.autoHighlight){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.auto==eventname&&!(item&&h.series==item.series)){unhighlight(h.series)}}}if(item){highlight(item.series,eventname)}var pos={pageX:e.pageX,pageY:e.pageY};target.trigger(eventname,[pos,item])}function highlight(s,auto){var i=indexOfHighlight(s);if(i==-1){highlights.push({series:s,auto:auto});plot.triggerRedrawOverlay()}else if(!auto){highlights[i].auto=false}}function unhighlight(s){if(s==null){highlights=[];plot.triggerRedrawOverlay()}var i=indexOfHighlight(s);if(i!=-1){highlights.splice(i,1);plot.triggerRedrawOverlay()}}function indexOfHighlight(s){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.series==s)return i}return-1}function drawOverlay(plot,octx){var options=plot.getOptions();var radius=options.series.pie.radius>1?options.series.pie.radius:maxRadius*options.series.pie.radius;octx.save();octx.translate(centerLeft,centerTop);octx.scale(1,options.series.pie.tilt);for(var i=0;i<highlights.length;++i){drawHighlight(highlights[i].series)}drawDonutHole(octx);octx.restore();function drawHighlight(series){if(series.angle<=0||isNaN(series.angle)){return}octx.fillStyle="rgba(255, 255, 255, "+options.series.pie.highlight.opacity+")";octx.beginPath();if(Math.abs(series.angle-Math.PI*2)>1e-9){octx.moveTo(0,0)}octx.arc(0,0,radius,series.startAngle,series.startAngle+series.angle/2,false);octx.arc(0,0,radius,series.startAngle+series.angle/2,series.startAngle+series.angle,false);octx.closePath();octx.fill()}}}var options={series:{pie:{show:false,radius:"auto",innerRadius:0,startAngle:3/2,tilt:1,shadow:{left:5,top:15,alpha:.02},offset:{top:0,left:"auto"},stroke:{color:"#fff",width:1},label:{show:"auto",formatter:function(label,slice){return"<div style='font-size:x-small;text-align:center;padding:2px;color:"+slice.color+";'>"+label+"<br/>"+Math.round(slice.percent)+"%</div>"},radius:1,background:{color:null,opacity:0},threshold:0},combine:{threshold:-1,color:null,label:"Other"},highlight:{opacity:.5}}}};$.plot.plugins.push({init:init,options:options,name:"pie",version:"1.1"})})(jQuery);
@@ -0,0 +1,59 @@+/* Flot plugin for automatically redrawing plots as the placeholder resizes.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++It works by listening for changes on the placeholder div (through the jQuery+resize event plugin) - if the size changes, it will redraw the plot.++There are no options. If you need to disable the plugin for some plots, you+can just fix the size of their placeholders.++*/++/* Inline dependency:+ * jQuery resize event - v1.1 - 3/14/2010+ * http://benalman.com/projects/jquery-resize-plugin/+ *+ * Copyright (c) 2010 "Cowboy" Ben Alman+ * Dual licensed under the MIT and GPL licenses.+ * http://benalman.com/about/license/+ */+(function($,e,t){"$:nomunge";var i=[],n=$.resize=$.extend($.resize,{}),a,r=false,s="setTimeout",u="resize",m=u+"-special-event",o="pendingDelay",l="activeDelay",f="throttleWindow";n[o]=200;n[l]=20;n[f]=true;$.event.special[u]={setup:function(){if(!n[f]&&this[s]){return false}var e=$(this);i.push(this);e.data(m,{w:e.width(),h:e.height()});if(i.length===1){a=t;h()}},teardown:function(){if(!n[f]&&this[s]){return false}var e=$(this);for(var t=i.length-1;t>=0;t--){if(i[t]==this){i.splice(t,1);break}}e.removeData(m);if(!i.length){if(r){cancelAnimationFrame(a)}else{clearTimeout(a)}a=null}},add:function(e){if(!n[f]&&this[s]){return false}var i;function a(e,n,a){var r=$(this),s=r.data(m)||{};s.w=n!==t?n:r.width();s.h=a!==t?a:r.height();i.apply(this,arguments)}if($.isFunction(e)){i=e;return a}else{i=e.handler;e.handler=a}}};function h(t){if(r===true){r=t||1}for(var s=i.length-1;s>=0;s--){var l=$(i[s]);if(l[0]==e||l.is(":visible")){var f=l.width(),c=l.height(),d=l.data(m);if(d&&(f!==d.w||c!==d.h)){l.trigger(u,[d.w=f,d.h=c]);r=t||true}}else{d=l.data(m);d.w=0;d.h=0}}if(a!==null){if(r&&(t==null||t-r<1e3)){a=e.requestAnimationFrame(h)}else{a=setTimeout(h,n[o]);r=false}}}if(!e.requestAnimationFrame){e.requestAnimationFrame=function(){return e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(t,i){return e.setTimeout(function(){t((new Date).getTime())},n[l])}}()}if(!e.cancelAnimationFrame){e.cancelAnimationFrame=function(){return e.webkitCancelRequestAnimationFrame||e.mozCancelRequestAnimationFrame||e.oCancelRequestAnimationFrame||e.msCancelRequestAnimationFrame||clearTimeout}()}})(jQuery,this);++(function ($) {+ var options = { }; // no options++ function init(plot) {+ function onResize() {+ var placeholder = plot.getPlaceholder();++ // somebody might have hidden us and we can't plot+ // when we don't have the dimensions+ if (placeholder.width() == 0 || placeholder.height() == 0)+ return;++ plot.resize();+ plot.setupGrid();+ plot.draw();+ }+ + function bindEvents(plot, eventHolder) {+ plot.getPlaceholder().resize(onResize);+ }++ function shutdown(plot, eventHolder) {+ plot.getPlaceholder().unbind("resize", onResize);+ }+ + plot.hooks.bindEvents.push(bindEvents);+ plot.hooks.shutdown.push(shutdown);+ }+ + $.plot.plugins.push({+ init: init,+ options: options,+ name: 'resize',+ version: '1.0'+ });+})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($,e,t){"$:nomunge";var i=[],n=$.resize=$.extend($.resize,{}),a,r=false,s="setTimeout",u="resize",m=u+"-special-event",o="pendingDelay",l="activeDelay",f="throttleWindow";n[o]=200;n[l]=20;n[f]=true;$.event.special[u]={setup:function(){if(!n[f]&&this[s]){return false}var e=$(this);i.push(this);e.data(m,{w:e.width(),h:e.height()});if(i.length===1){a=t;h()}},teardown:function(){if(!n[f]&&this[s]){return false}var e=$(this);for(var t=i.length-1;t>=0;t--){if(i[t]==this){i.splice(t,1);break}}e.removeData(m);if(!i.length){if(r){cancelAnimationFrame(a)}else{clearTimeout(a)}a=null}},add:function(e){if(!n[f]&&this[s]){return false}var i;function a(e,n,a){var r=$(this),s=r.data(m)||{};s.w=n!==t?n:r.width();s.h=a!==t?a:r.height();i.apply(this,arguments)}if($.isFunction(e)){i=e;return a}else{i=e.handler;e.handler=a}}};function h(t){if(r===true){r=t||1}for(var s=i.length-1;s>=0;s--){var l=$(i[s]);if(l[0]==e||l.is(":visible")){var f=l.width(),c=l.height(),d=l.data(m);if(d&&(f!==d.w||c!==d.h)){l.trigger(u,[d.w=f,d.h=c]);r=t||true}}else{d=l.data(m);d.w=0;d.h=0}}if(a!==null){if(r&&(t==null||t-r<1e3)){a=e.requestAnimationFrame(h)}else{a=setTimeout(h,n[o]);r=false}}}if(!e.requestAnimationFrame){e.requestAnimationFrame=function(){return e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(t,i){return e.setTimeout(function(){t((new Date).getTime())},n[l])}}()}if(!e.cancelAnimationFrame){e.cancelAnimationFrame=function(){return e.webkitCancelRequestAnimationFrame||e.mozCancelRequestAnimationFrame||e.oCancelRequestAnimationFrame||e.msCancelRequestAnimationFrame||clearTimeout}()}})(jQuery,this);(function($){var options={};function init(plot){function onResize(){var placeholder=plot.getPlaceholder();if(placeholder.width()==0||placeholder.height()==0)return;plot.resize();plot.setupGrid();plot.draw()}function bindEvents(plot,eventHolder){plot.getPlaceholder().resize(onResize)}function shutdown(plot,eventHolder){plot.getPlaceholder().unbind("resize",onResize)}plot.hooks.bindEvents.push(bindEvents);plot.hooks.shutdown.push(shutdown)}$.plot.plugins.push({init:init,options:options,name:"resize",version:"1.0"})})(jQuery);
@@ -0,0 +1,360 @@+/* Flot plugin for selecting regions of a plot.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The plugin supports these options:++selection: {+ mode: null or "x" or "y" or "xy",+ color: color,+ shape: "round" or "miter" or "bevel",+ minSize: number of pixels+}++Selection support is enabled by setting the mode to one of "x", "y" or "xy".+In "x" mode, the user will only be able to specify the x range, similarly for+"y" mode. For "xy", the selection becomes a rectangle where both ranges can be+specified. "color" is color of the selection (if you need to change the color+later on, you can get to it with plot.getOptions().selection.color). "shape"+is the shape of the corners of the selection.++"minSize" is the minimum size a selection can be in pixels. This value can+be customized to determine the smallest size a selection can be and still+have the selection rectangle be displayed. When customizing this value, the+fact that it refers to pixels, not axis units must be taken into account.+Thus, for example, if there is a bar graph in time mode with BarWidth set to 1+minute, setting "minSize" to 1 will not make the minimum selection size 1+minute, but rather 1 pixel. Note also that setting "minSize" to 0 will prevent+"plotunselected" events from being fired when the user clicks the mouse without+dragging.++When selection support is enabled, a "plotselected" event will be emitted on+the DOM element you passed into the plot function. The event handler gets a+parameter with the ranges selected on the axes, like this:++ placeholder.bind( "plotselected", function( event, ranges ) {+ alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to)+ // similar for yaxis - with multiple axes, the extra ones are in+ // x2axis, x3axis, ...+ });++The "plotselected" event is only fired when the user has finished making the+selection. A "plotselecting" event is fired during the process with the same+parameters as the "plotselected" event, in case you want to know what's+happening while it's happening,++A "plotunselected" event with no arguments is emitted when the user clicks the+mouse to remove the selection. As stated above, setting "minSize" to 0 will+destroy this behavior.++The plugin allso adds the following methods to the plot object:++- setSelection( ranges, preventEvent )++ Set the selection rectangle. The passed in ranges is on the same form as+ returned in the "plotselected" event. If the selection mode is "x", you+ should put in either an xaxis range, if the mode is "y" you need to put in+ an yaxis range and both xaxis and yaxis if the selection mode is "xy", like+ this:++ setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } });++ setSelection will trigger the "plotselected" event when called. If you don't+ want that to happen, e.g. if you're inside a "plotselected" handler, pass+ true as the second parameter. If you are using multiple axes, you can+ specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of+ xaxis, the plugin picks the first one it sees.++- clearSelection( preventEvent )++ Clear the selection rectangle. Pass in true to avoid getting a+ "plotunselected" event.++- getSelection()++ Returns the current selection in the same format as the "plotselected"+ event. If there's currently no selection, the function returns null.++*/++(function ($) {+ function init(plot) {+ var selection = {+ first: { x: -1, y: -1}, second: { x: -1, y: -1},+ show: false,+ active: false+ };++ // FIXME: The drag handling implemented here should be+ // abstracted out, there's some similar code from a library in+ // the navigation plugin, this should be massaged a bit to fit+ // the Flot cases here better and reused. Doing this would+ // make this plugin much slimmer.+ var savedhandlers = {};++ var mouseUpHandler = null;+ + function onMouseMove(e) {+ if (selection.active) {+ updateSelection(e);+ + plot.getPlaceholder().trigger("plotselecting", [ getSelection() ]);+ }+ }++ function onMouseDown(e) {+ if (e.which != 1) // only accept left-click+ return;+ + // cancel out any text selections+ document.body.focus();++ // prevent text selection and drag in old-school browsers+ if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) {+ savedhandlers.onselectstart = document.onselectstart;+ document.onselectstart = function () { return false; };+ }+ if (document.ondrag !== undefined && savedhandlers.ondrag == null) {+ savedhandlers.ondrag = document.ondrag;+ document.ondrag = function () { return false; };+ }++ setSelectionPos(selection.first, e);++ selection.active = true;++ // this is a bit silly, but we have to use a closure to be+ // able to whack the same handler again+ mouseUpHandler = function (e) { onMouseUp(e); };+ + $(document).one("mouseup", mouseUpHandler);+ }++ function onMouseUp(e) {+ mouseUpHandler = null;+ + // revert drag stuff for old-school browsers+ if (document.onselectstart !== undefined)+ document.onselectstart = savedhandlers.onselectstart;+ if (document.ondrag !== undefined)+ document.ondrag = savedhandlers.ondrag;++ // no more dragging+ selection.active = false;+ updateSelection(e);++ if (selectionIsSane())+ triggerSelectedEvent();+ else {+ // this counts as a clear+ plot.getPlaceholder().trigger("plotunselected", [ ]);+ plot.getPlaceholder().trigger("plotselecting", [ null ]);+ }++ return false;+ }++ function getSelection() {+ if (!selectionIsSane())+ return null;+ + if (!selection.show) return null;++ var r = {}, c1 = selection.first, c2 = selection.second;+ $.each(plot.getAxes(), function (name, axis) {+ if (axis.used) {+ var p1 = axis.c2p(c1[axis.direction]), p2 = axis.c2p(c2[axis.direction]); + r[name] = { from: Math.min(p1, p2), to: Math.max(p1, p2) };+ }+ });+ return r;+ }++ function triggerSelectedEvent() {+ var r = getSelection();++ plot.getPlaceholder().trigger("plotselected", [ r ]);++ // backwards-compat stuff, to be removed in future+ if (r.xaxis && r.yaxis)+ plot.getPlaceholder().trigger("selected", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]);+ }++ function clamp(min, value, max) {+ return value < min ? min: (value > max ? max: value);+ }++ function setSelectionPos(pos, e) {+ var o = plot.getOptions();+ var offset = plot.getPlaceholder().offset();+ var plotOffset = plot.getPlotOffset();+ pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width());+ pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height());++ if (o.selection.mode == "y")+ pos.x = pos == selection.first ? 0 : plot.width();++ if (o.selection.mode == "x")+ pos.y = pos == selection.first ? 0 : plot.height();+ }++ function updateSelection(pos) {+ if (pos.pageX == null)+ return;++ setSelectionPos(selection.second, pos);+ if (selectionIsSane()) {+ selection.show = true;+ plot.triggerRedrawOverlay();+ }+ else+ clearSelection(true);+ }++ function clearSelection(preventEvent) {+ if (selection.show) {+ selection.show = false;+ plot.triggerRedrawOverlay();+ if (!preventEvent)+ plot.getPlaceholder().trigger("plotunselected", [ ]);+ }+ }++ // function taken from markings support in Flot+ function extractRange(ranges, coord) {+ var axis, from, to, key, axes = plot.getAxes();++ for (var k in axes) {+ axis = axes[k];+ if (axis.direction == coord) {+ key = coord + axis.n + "axis";+ if (!ranges[key] && axis.n == 1)+ key = coord + "axis"; // support x1axis as xaxis+ if (ranges[key]) {+ from = ranges[key].from;+ to = ranges[key].to;+ break;+ }+ }+ }++ // backwards-compat stuff - to be removed in future+ if (!ranges[key]) {+ axis = coord == "x" ? plot.getXAxes()[0] : plot.getYAxes()[0];+ from = ranges[coord + "1"];+ to = ranges[coord + "2"];+ }++ // auto-reverse as an added bonus+ if (from != null && to != null && from > to) {+ var tmp = from;+ from = to;+ to = tmp;+ }+ + return { from: from, to: to, axis: axis };+ }+ + function setSelection(ranges, preventEvent) {+ var axis, range, o = plot.getOptions();++ if (o.selection.mode == "y") {+ selection.first.x = 0;+ selection.second.x = plot.width();+ }+ else {+ range = extractRange(ranges, "x");++ selection.first.x = range.axis.p2c(range.from);+ selection.second.x = range.axis.p2c(range.to);+ }++ if (o.selection.mode == "x") {+ selection.first.y = 0;+ selection.second.y = plot.height();+ }+ else {+ range = extractRange(ranges, "y");++ selection.first.y = range.axis.p2c(range.from);+ selection.second.y = range.axis.p2c(range.to);+ }++ selection.show = true;+ plot.triggerRedrawOverlay();+ if (!preventEvent && selectionIsSane())+ triggerSelectedEvent();+ }++ function selectionIsSane() {+ var minSize = plot.getOptions().selection.minSize;+ return Math.abs(selection.second.x - selection.first.x) >= minSize &&+ Math.abs(selection.second.y - selection.first.y) >= minSize;+ }++ plot.clearSelection = clearSelection;+ plot.setSelection = setSelection;+ plot.getSelection = getSelection;++ plot.hooks.bindEvents.push(function(plot, eventHolder) {+ var o = plot.getOptions();+ if (o.selection.mode != null) {+ eventHolder.mousemove(onMouseMove);+ eventHolder.mousedown(onMouseDown);+ }+ });+++ plot.hooks.drawOverlay.push(function (plot, ctx) {+ // draw selection+ if (selection.show && selectionIsSane()) {+ var plotOffset = plot.getPlotOffset();+ var o = plot.getOptions();++ ctx.save();+ ctx.translate(plotOffset.left, plotOffset.top);++ var c = $.color.parse(o.selection.color);++ ctx.strokeStyle = c.scale('a', 0.8).toString();+ ctx.lineWidth = 1;+ ctx.lineJoin = o.selection.shape;+ ctx.fillStyle = c.scale('a', 0.4).toString();++ var x = Math.min(selection.first.x, selection.second.x) + 0.5,+ y = Math.min(selection.first.y, selection.second.y) + 0.5,+ w = Math.abs(selection.second.x - selection.first.x) - 1,+ h = Math.abs(selection.second.y - selection.first.y) - 1;++ ctx.fillRect(x, y, w, h);+ ctx.strokeRect(x, y, w, h);++ ctx.restore();+ }+ });+ + plot.hooks.shutdown.push(function (plot, eventHolder) {+ eventHolder.unbind("mousemove", onMouseMove);+ eventHolder.unbind("mousedown", onMouseDown);+ + if (mouseUpHandler)+ $(document).unbind("mouseup", mouseUpHandler);+ });++ }++ $.plot.plugins.push({+ init: init,+ options: {+ selection: {+ mode: null, // one of null, "x", "y" or "xy"+ color: "#e8cfac",+ shape: "round", // one of "round", "miter", or "bevel"+ minSize: 5 // minimum number of pixels+ }+ },+ name: 'selection',+ version: '1.1'+ });+})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){function init(plot){var selection={first:{x:-1,y:-1},second:{x:-1,y:-1},show:false,active:false};var savedhandlers={};var mouseUpHandler=null;function onMouseMove(e){if(selection.active){updateSelection(e);plot.getPlaceholder().trigger("plotselecting",[getSelection()])}}function onMouseDown(e){if(e.which!=1)return;document.body.focus();if(document.onselectstart!==undefined&&savedhandlers.onselectstart==null){savedhandlers.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!==undefined&&savedhandlers.ondrag==null){savedhandlers.ondrag=document.ondrag;document.ondrag=function(){return false}}setSelectionPos(selection.first,e);selection.active=true;mouseUpHandler=function(e){onMouseUp(e)};$(document).one("mouseup",mouseUpHandler)}function onMouseUp(e){mouseUpHandler=null;if(document.onselectstart!==undefined)document.onselectstart=savedhandlers.onselectstart;if(document.ondrag!==undefined)document.ondrag=savedhandlers.ondrag;selection.active=false;updateSelection(e);if(selectionIsSane())triggerSelectedEvent();else{plot.getPlaceholder().trigger("plotunselected",[]);plot.getPlaceholder().trigger("plotselecting",[null])}return false}function getSelection(){if(!selectionIsSane())return null;if(!selection.show)return null;var r={},c1=selection.first,c2=selection.second;$.each(plot.getAxes(),function(name,axis){if(axis.used){var p1=axis.c2p(c1[axis.direction]),p2=axis.c2p(c2[axis.direction]);r[name]={from:Math.min(p1,p2),to:Math.max(p1,p2)}}});return r}function triggerSelectedEvent(){var r=getSelection();plot.getPlaceholder().trigger("plotselected",[r]);if(r.xaxis&&r.yaxis)plot.getPlaceholder().trigger("selected",[{x1:r.xaxis.from,y1:r.yaxis.from,x2:r.xaxis.to,y2:r.yaxis.to}])}function clamp(min,value,max){return value<min?min:value>max?max:value}function setSelectionPos(pos,e){var o=plot.getOptions();var offset=plot.getPlaceholder().offset();var plotOffset=plot.getPlotOffset();pos.x=clamp(0,e.pageX-offset.left-plotOffset.left,plot.width());pos.y=clamp(0,e.pageY-offset.top-plotOffset.top,plot.height());if(o.selection.mode=="y")pos.x=pos==selection.first?0:plot.width();if(o.selection.mode=="x")pos.y=pos==selection.first?0:plot.height()}function updateSelection(pos){if(pos.pageX==null)return;setSelectionPos(selection.second,pos);if(selectionIsSane()){selection.show=true;plot.triggerRedrawOverlay()}else clearSelection(true)}function clearSelection(preventEvent){if(selection.show){selection.show=false;plot.triggerRedrawOverlay();if(!preventEvent)plot.getPlaceholder().trigger("plotunselected",[])}}function extractRange(ranges,coord){var axis,from,to,key,axes=plot.getAxes();for(var k in axes){axis=axes[k];if(axis.direction==coord){key=coord+axis.n+"axis";if(!ranges[key]&&axis.n==1)key=coord+"axis";if(ranges[key]){from=ranges[key].from;to=ranges[key].to;break}}}if(!ranges[key]){axis=coord=="x"?plot.getXAxes()[0]:plot.getYAxes()[0];from=ranges[coord+"1"];to=ranges[coord+"2"]}if(from!=null&&to!=null&&from>to){var tmp=from;from=to;to=tmp}return{from:from,to:to,axis:axis}}function setSelection(ranges,preventEvent){var axis,range,o=plot.getOptions();if(o.selection.mode=="y"){selection.first.x=0;selection.second.x=plot.width()}else{range=extractRange(ranges,"x");selection.first.x=range.axis.p2c(range.from);selection.second.x=range.axis.p2c(range.to)}if(o.selection.mode=="x"){selection.first.y=0;selection.second.y=plot.height()}else{range=extractRange(ranges,"y");selection.first.y=range.axis.p2c(range.from);selection.second.y=range.axis.p2c(range.to)}selection.show=true;plot.triggerRedrawOverlay();if(!preventEvent&&selectionIsSane())triggerSelectedEvent()}function selectionIsSane(){var minSize=plot.getOptions().selection.minSize;return Math.abs(selection.second.x-selection.first.x)>=minSize&&Math.abs(selection.second.y-selection.first.y)>=minSize}plot.clearSelection=clearSelection;plot.setSelection=setSelection;plot.getSelection=getSelection;plot.hooks.bindEvents.push(function(plot,eventHolder){var o=plot.getOptions();if(o.selection.mode!=null){eventHolder.mousemove(onMouseMove);eventHolder.mousedown(onMouseDown)}});plot.hooks.drawOverlay.push(function(plot,ctx){if(selection.show&&selectionIsSane()){var plotOffset=plot.getPlotOffset();var o=plot.getOptions();ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var c=$.color.parse(o.selection.color);ctx.strokeStyle=c.scale("a",.8).toString();ctx.lineWidth=1;ctx.lineJoin=o.selection.shape;ctx.fillStyle=c.scale("a",.4).toString();var x=Math.min(selection.first.x,selection.second.x)+.5,y=Math.min(selection.first.y,selection.second.y)+.5,w=Math.abs(selection.second.x-selection.first.x)-1,h=Math.abs(selection.second.y-selection.first.y)-1;ctx.fillRect(x,y,w,h);ctx.strokeRect(x,y,w,h);ctx.restore()}});plot.hooks.shutdown.push(function(plot,eventHolder){eventHolder.unbind("mousemove",onMouseMove);eventHolder.unbind("mousedown",onMouseDown);if(mouseUpHandler)$(document).unbind("mouseup",mouseUpHandler)})}$.plot.plugins.push({init:init,options:{selection:{mode:null,color:"#e8cfac",shape:"round",minSize:5}},name:"selection",version:"1.1"})})(jQuery);
@@ -0,0 +1,188 @@+/* Flot plugin for stacking data sets rather than overlyaing them.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The plugin assumes the data is sorted on x (or y if stacking horizontally).+For line charts, it is assumed that if a line has an undefined gap (from a+null point), then the line above it should have the same gap - insert zeros+instead of "null" if you want another behaviour. This also holds for the start+and end of the chart. Note that stacking a mix of positive and negative values+in most instances doesn't make sense (so it looks weird).++Two or more series are stacked when their "stack" attribute is set to the same+key (which can be any number or string or just "true"). To specify the default+stack, you can set the stack option like this:++ series: {+ stack: null/false, true, or a key (number/string)+ }++You can also specify it for a single series, like this:++ $.plot( $("#placeholder"), [{+ data: [ ... ],+ stack: true+ }])++The stacking order is determined by the order of the data series in the array+(later series end up on top of the previous).++Internally, the plugin modifies the datapoints in each series, adding an+offset to the y value. For line series, extra data points are inserted through+interpolation. If there's a second y value, it's also adjusted (e.g for bar+charts or filled areas).++*/++(function ($) {+ var options = {+ series: { stack: null } // or number/string+ };+ + function init(plot) {+ function findMatchingSeries(s, allseries) {+ var res = null;+ for (var i = 0; i < allseries.length; ++i) {+ if (s == allseries[i])+ break;+ + if (allseries[i].stack == s.stack)+ res = allseries[i];+ }+ + return res;+ }+ + function stackData(plot, s, datapoints) {+ if (s.stack == null || s.stack === false)+ return;++ var other = findMatchingSeries(s, plot.getData());+ if (!other)+ return;++ var ps = datapoints.pointsize,+ points = datapoints.points,+ otherps = other.datapoints.pointsize,+ otherpoints = other.datapoints.points,+ newpoints = [],+ px, py, intery, qx, qy, bottom,+ withlines = s.lines.show,+ horizontal = s.bars.horizontal,+ withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y),+ withsteps = withlines && s.lines.steps,+ fromgap = true,+ keyOffset = horizontal ? 1 : 0,+ accumulateOffset = horizontal ? 0 : 1,+ i = 0, j = 0, l, m;++ while (true) {+ if (i >= points.length)+ break;++ l = newpoints.length;++ if (points[i] == null) {+ // copy gaps+ for (m = 0; m < ps; ++m)+ newpoints.push(points[i + m]);+ i += ps;+ }+ else if (j >= otherpoints.length) {+ // for lines, we can't use the rest of the points+ if (!withlines) {+ for (m = 0; m < ps; ++m)+ newpoints.push(points[i + m]);+ }+ i += ps;+ }+ else if (otherpoints[j] == null) {+ // oops, got a gap+ for (m = 0; m < ps; ++m)+ newpoints.push(null);+ fromgap = true;+ j += otherps;+ }+ else {+ // cases where we actually got two points+ px = points[i + keyOffset];+ py = points[i + accumulateOffset];+ qx = otherpoints[j + keyOffset];+ qy = otherpoints[j + accumulateOffset];+ bottom = 0;++ if (px == qx) {+ for (m = 0; m < ps; ++m)+ newpoints.push(points[i + m]);++ newpoints[l + accumulateOffset] += qy;+ bottom = qy;+ + i += ps;+ j += otherps;+ }+ else if (px > qx) {+ // we got past point below, might need to+ // insert interpolated extra point+ if (withlines && i > 0 && points[i - ps] != null) {+ intery = py + (points[i - ps + accumulateOffset] - py) * (qx - px) / (points[i - ps + keyOffset] - px);+ newpoints.push(qx);+ newpoints.push(intery + qy);+ for (m = 2; m < ps; ++m)+ newpoints.push(points[i + m]);+ bottom = qy; + }++ j += otherps;+ }+ else { // px < qx+ if (fromgap && withlines) {+ // if we come from a gap, we just skip this point+ i += ps;+ continue;+ }+ + for (m = 0; m < ps; ++m)+ newpoints.push(points[i + m]);+ + // we might be able to interpolate a point below,+ // this can give us a better y+ if (withlines && j > 0 && otherpoints[j - otherps] != null)+ bottom = qy + (otherpoints[j - otherps + accumulateOffset] - qy) * (px - qx) / (otherpoints[j - otherps + keyOffset] - qx);++ newpoints[l + accumulateOffset] += bottom;+ + i += ps;+ }++ fromgap = false;+ + if (l != newpoints.length && withbottom)+ newpoints[l + 2] += bottom;+ }++ // maintain the line steps invariant+ if (withsteps && l != newpoints.length && l > 0+ && newpoints[l] != null+ && newpoints[l] != newpoints[l - ps]+ && newpoints[l + 1] != newpoints[l - ps + 1]) {+ for (m = 0; m < ps; ++m)+ newpoints[l + ps + m] = newpoints[l + m];+ newpoints[l + 1] = newpoints[l - ps + 1];+ }+ }++ datapoints.points = newpoints;+ }+ + plot.hooks.processDatapoints.push(stackData);+ }+ + $.plot.plugins.push({+ init: init,+ options: options,+ name: 'stack',+ version: '1.2'+ });+})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={series:{stack:null}};function init(plot){function findMatchingSeries(s,allseries){var res=null;for(var i=0;i<allseries.length;++i){if(s==allseries[i])break;if(allseries[i].stack==s.stack)res=allseries[i]}return res}function stackData(plot,s,datapoints){if(s.stack==null||s.stack===false)return;var other=findMatchingSeries(s,plot.getData());if(!other)return;var ps=datapoints.pointsize,points=datapoints.points,otherps=other.datapoints.pointsize,otherpoints=other.datapoints.points,newpoints=[],px,py,intery,qx,qy,bottom,withlines=s.lines.show,horizontal=s.bars.horizontal,withbottom=ps>2&&(horizontal?datapoints.format[2].x:datapoints.format[2].y),withsteps=withlines&&s.lines.steps,fromgap=true,keyOffset=horizontal?1:0,accumulateOffset=horizontal?0:1,i=0,j=0,l,m;while(true){if(i>=points.length)break;l=newpoints.length;if(points[i]==null){for(m=0;m<ps;++m)newpoints.push(points[i+m]);i+=ps}else if(j>=otherpoints.length){if(!withlines){for(m=0;m<ps;++m)newpoints.push(points[i+m])}i+=ps}else if(otherpoints[j]==null){for(m=0;m<ps;++m)newpoints.push(null);fromgap=true;j+=otherps}else{px=points[i+keyOffset];py=points[i+accumulateOffset];qx=otherpoints[j+keyOffset];qy=otherpoints[j+accumulateOffset];bottom=0;if(px==qx){for(m=0;m<ps;++m)newpoints.push(points[i+m]);newpoints[l+accumulateOffset]+=qy;bottom=qy;i+=ps;j+=otherps}else if(px>qx){if(withlines&&i>0&&points[i-ps]!=null){intery=py+(points[i-ps+accumulateOffset]-py)*(qx-px)/(points[i-ps+keyOffset]-px);newpoints.push(qx);newpoints.push(intery+qy);for(m=2;m<ps;++m)newpoints.push(points[i+m]);bottom=qy}j+=otherps}else{if(fromgap&&withlines){i+=ps;continue}for(m=0;m<ps;++m)newpoints.push(points[i+m]);if(withlines&&j>0&&otherpoints[j-otherps]!=null)bottom=qy+(otherpoints[j-otherps+accumulateOffset]-qy)*(px-qx)/(otherpoints[j-otherps+keyOffset]-qx);newpoints[l+accumulateOffset]+=bottom;i+=ps}fromgap=false;if(l!=newpoints.length&&withbottom)newpoints[l+2]+=bottom}if(withsteps&&l!=newpoints.length&&l>0&&newpoints[l]!=null&&newpoints[l]!=newpoints[l-ps]&&newpoints[l+1]!=newpoints[l-ps+1]){for(m=0;m<ps;++m)newpoints[l+ps+m]=newpoints[l+m];newpoints[l+1]=newpoints[l-ps+1]}}datapoints.points=newpoints}plot.hooks.processDatapoints.push(stackData)}$.plot.plugins.push({init:init,options:options,name:"stack",version:"1.2"})})(jQuery);
@@ -0,0 +1,71 @@+/* Flot plugin that adds some extra symbols for plotting points.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The symbols are accessed as strings through the standard symbol options:++ series: {+ points: {+ symbol: "square" // or "diamond", "triangle", "cross"+ }+ }++*/++(function ($) {+ function processRawData(plot, series, datapoints) {+ // we normalize the area of each symbol so it is approximately the+ // same as a circle of the given radius++ var handlers = {+ square: function (ctx, x, y, radius, shadow) {+ // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2+ var size = radius * Math.sqrt(Math.PI) / 2;+ ctx.rect(x - size, y - size, size + size, size + size);+ },+ diamond: function (ctx, x, y, radius, shadow) {+ // pi * r^2 = 2s^2 => s = r * sqrt(pi/2)+ var size = radius * Math.sqrt(Math.PI / 2);+ ctx.moveTo(x - size, y);+ ctx.lineTo(x, y - size);+ ctx.lineTo(x + size, y);+ ctx.lineTo(x, y + size);+ ctx.lineTo(x - size, y);+ },+ triangle: function (ctx, x, y, radius, shadow) {+ // pi * r^2 = 1/2 * s^2 * sin (pi / 3) => s = r * sqrt(2 * pi / sin(pi / 3))+ var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3));+ var height = size * Math.sin(Math.PI / 3);+ ctx.moveTo(x - size/2, y + height/2);+ ctx.lineTo(x + size/2, y + height/2);+ if (!shadow) {+ ctx.lineTo(x, y - height/2);+ ctx.lineTo(x - size/2, y + height/2);+ }+ },+ cross: function (ctx, x, y, radius, shadow) {+ // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2+ var size = radius * Math.sqrt(Math.PI) / 2;+ ctx.moveTo(x - size, y - size);+ ctx.lineTo(x + size, y + size);+ ctx.moveTo(x - size, y + size);+ ctx.lineTo(x + size, y - size);+ }+ };++ var s = series.points.symbol;+ if (handlers[s])+ series.points.symbol = handlers[s];+ }+ + function init(plot) {+ plot.hooks.processDatapoints.push(processRawData);+ }+ + $.plot.plugins.push({+ init: init,+ name: 'symbols',+ version: '1.0'+ });+})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){function processRawData(plot,series,datapoints){var handlers={square:function(ctx,x,y,radius,shadow){var size=radius*Math.sqrt(Math.PI)/2;ctx.rect(x-size,y-size,size+size,size+size)},diamond:function(ctx,x,y,radius,shadow){var size=radius*Math.sqrt(Math.PI/2);ctx.moveTo(x-size,y);ctx.lineTo(x,y-size);ctx.lineTo(x+size,y);ctx.lineTo(x,y+size);ctx.lineTo(x-size,y)},triangle:function(ctx,x,y,radius,shadow){var size=radius*Math.sqrt(2*Math.PI/Math.sin(Math.PI/3));var height=size*Math.sin(Math.PI/3);ctx.moveTo(x-size/2,y+height/2);ctx.lineTo(x+size/2,y+height/2);if(!shadow){ctx.lineTo(x,y-height/2);ctx.lineTo(x-size/2,y+height/2)}},cross:function(ctx,x,y,radius,shadow){var size=radius*Math.sqrt(Math.PI)/2;ctx.moveTo(x-size,y-size);ctx.lineTo(x+size,y+size);ctx.moveTo(x-size,y+size);ctx.lineTo(x+size,y-size)}};var s=series.points.symbol;if(handlers[s])series.points.symbol=handlers[s]}function init(plot){plot.hooks.processDatapoints.push(processRawData)}$.plot.plugins.push({init:init,name:"symbols",version:"1.0"})})(jQuery);
@@ -0,0 +1,142 @@+/* Flot plugin for thresholding data.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++The plugin supports these options:++ series: {+ threshold: {+ below: number+ color: colorspec+ }+ }++It can also be applied to a single series, like this:++ $.plot( $("#placeholder"), [{+ data: [ ... ],+ threshold: { ... }+ }])++An array can be passed for multiple thresholding, like this:++ threshold: [{+ below: number1+ color: color1+ },{+ below: number2+ color: color2+ }]++These multiple threshold objects can be passed in any order since they are+sorted by the processing function.++The data points below "below" are drawn with the specified color. This makes+it easy to mark points below 0, e.g. for budget data.++Internally, the plugin works by splitting the data into two series, above and+below the threshold. The extra series below the threshold will have its label+cleared and the special "originSeries" attribute set to the original series.+You may need to check for this in hover events.++*/++(function ($) {+ var options = {+ series: { threshold: null } // or { below: number, color: color spec}+ };+ + function init(plot) {+ function thresholdData(plot, s, datapoints, below, color) {+ var ps = datapoints.pointsize, i, x, y, p, prevp,+ thresholded = $.extend({}, s); // note: shallow copy++ thresholded.datapoints = { points: [], pointsize: ps, format: datapoints.format };+ thresholded.label = null;+ thresholded.color = color;+ thresholded.threshold = null;+ thresholded.originSeries = s;+ thresholded.data = [];+ + var origpoints = datapoints.points,+ addCrossingPoints = s.lines.show;++ var threspoints = [];+ var newpoints = [];+ var m;++ for (i = 0; i < origpoints.length; i += ps) {+ x = origpoints[i];+ y = origpoints[i + 1];++ prevp = p;+ if (y < below)+ p = threspoints;+ else+ p = newpoints;++ if (addCrossingPoints && prevp != p && x != null+ && i > 0 && origpoints[i - ps] != null) {+ var interx = x + (below - y) * (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]);+ prevp.push(interx);+ prevp.push(below);+ for (m = 2; m < ps; ++m)+ prevp.push(origpoints[i + m]);+ + p.push(null); // start new segment+ p.push(null);+ for (m = 2; m < ps; ++m)+ p.push(origpoints[i + m]);+ p.push(interx);+ p.push(below);+ for (m = 2; m < ps; ++m)+ p.push(origpoints[i + m]);+ }++ p.push(x);+ p.push(y);+ for (m = 2; m < ps; ++m)+ p.push(origpoints[i + m]);+ }++ datapoints.points = newpoints;+ thresholded.datapoints.points = threspoints;+ + if (thresholded.datapoints.points.length > 0) {+ var origIndex = $.inArray(s, plot.getData());+ // Insert newly-generated series right after original one (to prevent it from becoming top-most)+ plot.getData().splice(origIndex + 1, 0, thresholded);+ }+ + // FIXME: there are probably some edge cases left in bars+ }+ + function processThresholds(plot, s, datapoints) {+ if (!s.threshold)+ return;+ + if (s.threshold instanceof Array) {+ s.threshold.sort(function(a, b) {+ return a.below - b.below;+ });+ + $(s.threshold).each(function(i, th) {+ thresholdData(plot, s, datapoints, th.below, th.color);+ });+ }+ else {+ thresholdData(plot, s, datapoints, s.threshold.below, s.threshold.color);+ }+ }+ + plot.hooks.processDatapoints.push(processThresholds);+ }+ + $.plot.plugins.push({+ init: init,+ options: options,+ name: 'threshold',+ version: '1.2'+ });+})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={series:{threshold:null}};function init(plot){function thresholdData(plot,s,datapoints,below,color){var ps=datapoints.pointsize,i,x,y,p,prevp,thresholded=$.extend({},s);thresholded.datapoints={points:[],pointsize:ps,format:datapoints.format};thresholded.label=null;thresholded.color=color;thresholded.threshold=null;thresholded.originSeries=s;thresholded.data=[];var origpoints=datapoints.points,addCrossingPoints=s.lines.show;var threspoints=[];var newpoints=[];var m;for(i=0;i<origpoints.length;i+=ps){x=origpoints[i];y=origpoints[i+1];prevp=p;if(y<below)p=threspoints;else p=newpoints;if(addCrossingPoints&&prevp!=p&&x!=null&&i>0&&origpoints[i-ps]!=null){var interx=x+(below-y)*(x-origpoints[i-ps])/(y-origpoints[i-ps+1]);prevp.push(interx);prevp.push(below);for(m=2;m<ps;++m)prevp.push(origpoints[i+m]);p.push(null);p.push(null);for(m=2;m<ps;++m)p.push(origpoints[i+m]);p.push(interx);p.push(below);for(m=2;m<ps;++m)p.push(origpoints[i+m])}p.push(x);p.push(y);for(m=2;m<ps;++m)p.push(origpoints[i+m])}datapoints.points=newpoints;thresholded.datapoints.points=threspoints;if(thresholded.datapoints.points.length>0){var origIndex=$.inArray(s,plot.getData());plot.getData().splice(origIndex+1,0,thresholded)}}function processThresholds(plot,s,datapoints){if(!s.threshold)return;if(s.threshold instanceof Array){s.threshold.sort(function(a,b){return a.below-b.below});$(s.threshold).each(function(i,th){thresholdData(plot,s,datapoints,th.below,th.color)})}else{thresholdData(plot,s,datapoints,s.threshold.below,s.threshold.color)}}plot.hooks.processDatapoints.push(processThresholds)}$.plot.plugins.push({init:init,options:options,name:"threshold",version:"1.2"})})(jQuery);
@@ -0,0 +1,432 @@+/* Pretty handling of time axes.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++Set axis.mode to "time" to enable. See the section "Time series data" in+API.txt for details.++*/++(function($) {++ var options = {+ xaxis: {+ timezone: null, // "browser" for local to the client or timezone for timezone-js+ timeformat: null, // format string to use+ twelveHourClock: false, // 12 or 24 time in time mode+ monthNames: null // list of names of months+ }+ };++ // round to nearby lower multiple of base++ function floorInBase(n, base) {+ return base * Math.floor(n / base);+ }++ // Returns a string with the date d formatted according to fmt.+ // A subset of the Open Group's strftime format is supported.++ function formatDate(d, fmt, monthNames, dayNames) {++ if (typeof d.strftime == "function") {+ return d.strftime(fmt);+ }++ var leftPad = function(n, pad) {+ n = "" + n;+ pad = "" + (pad == null ? "0" : pad);+ return n.length == 1 ? pad + n : n;+ };++ var r = [];+ var escape = false;+ var hours = d.getHours();+ var isAM = hours < 12;++ if (monthNames == null) {+ monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];+ }++ if (dayNames == null) {+ dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];+ }++ var hours12;++ if (hours > 12) {+ hours12 = hours - 12;+ } else if (hours == 0) {+ hours12 = 12;+ } else {+ hours12 = hours;+ }++ for (var i = 0; i < fmt.length; ++i) {++ var c = fmt.charAt(i);++ if (escape) {+ switch (c) {+ case 'a': c = "" + dayNames[d.getDay()]; break;+ case 'b': c = "" + monthNames[d.getMonth()]; break;+ case 'd': c = leftPad(d.getDate()); break;+ case 'e': c = leftPad(d.getDate(), " "); break;+ case 'h': // For back-compat with 0.7; remove in 1.0+ case 'H': c = leftPad(hours); break;+ case 'I': c = leftPad(hours12); break;+ case 'l': c = leftPad(hours12, " "); break;+ case 'm': c = leftPad(d.getMonth() + 1); break;+ case 'M': c = leftPad(d.getMinutes()); break;+ // quarters not in Open Group's strftime specification+ case 'q':+ c = "" + (Math.floor(d.getMonth() / 3) + 1); break;+ case 'S': c = leftPad(d.getSeconds()); break;+ case 'y': c = leftPad(d.getFullYear() % 100); break;+ case 'Y': c = "" + d.getFullYear(); break;+ case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break;+ case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break;+ case 'w': c = "" + d.getDay(); break;+ }+ r.push(c);+ escape = false;+ } else {+ if (c == "%") {+ escape = true;+ } else {+ r.push(c);+ }+ }+ }++ return r.join("");+ }++ // To have a consistent view of time-based data independent of which time+ // zone the client happens to be in we need a date-like object independent+ // of time zones. This is done through a wrapper that only calls the UTC+ // versions of the accessor methods.++ function makeUtcWrapper(d) {++ function addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) {+ sourceObj[sourceMethod] = function() {+ return targetObj[targetMethod].apply(targetObj, arguments);+ };+ };++ var utc = {+ date: d+ };++ // support strftime, if found++ if (d.strftime != undefined) {+ addProxyMethod(utc, "strftime", d, "strftime");+ }++ addProxyMethod(utc, "getTime", d, "getTime");+ addProxyMethod(utc, "setTime", d, "setTime");++ var props = ["Date", "Day", "FullYear", "Hours", "Milliseconds", "Minutes", "Month", "Seconds"];++ for (var p = 0; p < props.length; p++) {+ addProxyMethod(utc, "get" + props[p], d, "getUTC" + props[p]);+ addProxyMethod(utc, "set" + props[p], d, "setUTC" + props[p]);+ }++ return utc;+ };++ // select time zone strategy. This returns a date-like object tied to the+ // desired timezone++ function dateGenerator(ts, opts) {+ if (opts.timezone == "browser") {+ return new Date(ts);+ } else if (!opts.timezone || opts.timezone == "utc") {+ return makeUtcWrapper(new Date(ts));+ } else if (typeof timezoneJS != "undefined" && typeof timezoneJS.Date != "undefined") {+ var d = new timezoneJS.Date();+ // timezone-js is fickle, so be sure to set the time zone before+ // setting the time.+ d.setTimezone(opts.timezone);+ d.setTime(ts);+ return d;+ } else {+ return makeUtcWrapper(new Date(ts));+ }+ }+ + // map of app. size of time units in milliseconds++ var timeUnitSize = {+ "second": 1000,+ "minute": 60 * 1000,+ "hour": 60 * 60 * 1000,+ "day": 24 * 60 * 60 * 1000,+ "month": 30 * 24 * 60 * 60 * 1000,+ "quarter": 3 * 30 * 24 * 60 * 60 * 1000,+ "year": 365.2425 * 24 * 60 * 60 * 1000+ };++ // the allowed tick sizes, after 1 year we use+ // an integer algorithm++ var baseSpec = [+ [1, "second"], [2, "second"], [5, "second"], [10, "second"],+ [30, "second"], + [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],+ [30, "minute"], + [1, "hour"], [2, "hour"], [4, "hour"],+ [8, "hour"], [12, "hour"],+ [1, "day"], [2, "day"], [3, "day"],+ [0.25, "month"], [0.5, "month"], [1, "month"],+ [2, "month"]+ ];++ // we don't know which variant(s) we'll need yet, but generating both is+ // cheap++ var specMonths = baseSpec.concat([[3, "month"], [6, "month"],+ [1, "year"]]);+ var specQuarters = baseSpec.concat([[1, "quarter"], [2, "quarter"],+ [1, "year"]]);++ function init(plot) {+ plot.hooks.processOptions.push(function (plot, options) {+ $.each(plot.getAxes(), function(axisName, axis) {++ var opts = axis.options;++ if (opts.mode == "time") {+ axis.tickGenerator = function(axis) {++ var ticks = [];+ var d = dateGenerator(axis.min, opts);+ var minSize = 0;++ // make quarter use a possibility if quarters are+ // mentioned in either of these options++ var spec = (opts.tickSize && opts.tickSize[1] ===+ "quarter") ||+ (opts.minTickSize && opts.minTickSize[1] ===+ "quarter") ? specQuarters : specMonths;++ if (opts.minTickSize != null) {+ if (typeof opts.tickSize == "number") {+ minSize = opts.tickSize;+ } else {+ minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];+ }+ }++ for (var i = 0; i < spec.length - 1; ++i) {+ if (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]]+ + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2+ && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {+ break;+ }+ }++ var size = spec[i][0];+ var unit = spec[i][1];++ // special-case the possibility of several years++ if (unit == "year") {++ // if given a minTickSize in years, just use it,+ // ensuring that it's an integer++ if (opts.minTickSize != null && opts.minTickSize[1] == "year") {+ size = Math.floor(opts.minTickSize[0]);+ } else {++ var magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10));+ var norm = (axis.delta / timeUnitSize.year) / magn;++ if (norm < 1.5) {+ size = 1;+ } else if (norm < 3) {+ size = 2;+ } else if (norm < 7.5) {+ size = 5;+ } else {+ size = 10;+ }++ size *= magn;+ }++ // minimum size for years is 1++ if (size < 1) {+ size = 1;+ }+ }++ axis.tickSize = opts.tickSize || [size, unit];+ var tickSize = axis.tickSize[0];+ unit = axis.tickSize[1];++ var step = tickSize * timeUnitSize[unit];++ if (unit == "second") {+ d.setSeconds(floorInBase(d.getSeconds(), tickSize));+ } else if (unit == "minute") {+ d.setMinutes(floorInBase(d.getMinutes(), tickSize));+ } else if (unit == "hour") {+ d.setHours(floorInBase(d.getHours(), tickSize));+ } else if (unit == "month") {+ d.setMonth(floorInBase(d.getMonth(), tickSize));+ } else if (unit == "quarter") {+ d.setMonth(3 * floorInBase(d.getMonth() / 3,+ tickSize));+ } else if (unit == "year") {+ d.setFullYear(floorInBase(d.getFullYear(), tickSize));+ }++ // reset smaller components++ d.setMilliseconds(0);++ if (step >= timeUnitSize.minute) {+ d.setSeconds(0);+ }+ if (step >= timeUnitSize.hour) {+ d.setMinutes(0);+ }+ if (step >= timeUnitSize.day) {+ d.setHours(0);+ }+ if (step >= timeUnitSize.day * 4) {+ d.setDate(1);+ }+ if (step >= timeUnitSize.month * 2) {+ d.setMonth(floorInBase(d.getMonth(), 3));+ }+ if (step >= timeUnitSize.quarter * 2) {+ d.setMonth(floorInBase(d.getMonth(), 6));+ }+ if (step >= timeUnitSize.year) {+ d.setMonth(0);+ }++ var carry = 0;+ var v = Number.NaN;+ var prev;++ do {++ prev = v;+ v = d.getTime();+ ticks.push(v);++ if (unit == "month" || unit == "quarter") {+ if (tickSize < 1) {++ // a bit complicated - we'll divide the+ // month/quarter up but we need to take+ // care of fractions so we don't end up in+ // the middle of a day++ d.setDate(1);+ var start = d.getTime();+ d.setMonth(d.getMonth() ++ (unit == "quarter" ? 3 : 1));+ var end = d.getTime();+ d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);+ carry = d.getHours();+ d.setHours(0);+ } else {+ d.setMonth(d.getMonth() ++ tickSize * (unit == "quarter" ? 3 : 1));+ }+ } else if (unit == "year") {+ d.setFullYear(d.getFullYear() + tickSize);+ } else {+ d.setTime(v + step);+ }+ } while (v < axis.max && v != prev);++ return ticks;+ };++ axis.tickFormatter = function (v, axis) {++ var d = dateGenerator(v, axis.options);++ // first check global format++ if (opts.timeformat != null) {+ return formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames);+ }++ // possibly use quarters if quarters are mentioned in+ // any of these places++ var useQuarters = (axis.options.tickSize &&+ axis.options.tickSize[1] == "quarter") ||+ (axis.options.minTickSize &&+ axis.options.minTickSize[1] == "quarter");++ var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];+ var span = axis.max - axis.min;+ var suffix = (opts.twelveHourClock) ? " %p" : "";+ var hourCode = (opts.twelveHourClock) ? "%I" : "%H";+ var fmt;++ if (t < timeUnitSize.minute) {+ fmt = hourCode + ":%M:%S" + suffix;+ } else if (t < timeUnitSize.day) {+ if (span < 2 * timeUnitSize.day) {+ fmt = hourCode + ":%M" + suffix;+ } else {+ fmt = "%b %d " + hourCode + ":%M" + suffix;+ }+ } else if (t < timeUnitSize.month) {+ fmt = "%b %d";+ } else if ((useQuarters && t < timeUnitSize.quarter) ||+ (!useQuarters && t < timeUnitSize.year)) {+ if (span < timeUnitSize.year) {+ fmt = "%b";+ } else {+ fmt = "%b %Y";+ }+ } else if (useQuarters && t < timeUnitSize.year) {+ if (span < timeUnitSize.year) {+ fmt = "Q%q";+ } else {+ fmt = "Q%q %Y";+ }+ } else {+ fmt = "%Y";+ }++ var rt = formatDate(d, fmt, opts.monthNames, opts.dayNames);++ return rt;+ };+ }+ });+ });+ }++ $.plot.plugins.push({+ init: init,+ options: options,+ name: 'time',+ version: '1.0'+ });++ // Time-axis support used to be in Flot core, which exposed the+ // formatDate function on the plot object. Various plugins depend+ // on the function, so we need to re-expose it here.++ $.plot.formatDate = formatDate;+ $.plot.dateGenerator = dateGenerator;++})(jQuery);
@@ -0,0 +1,7 @@+/* Javascript plotting library for jQuery, version 0.8.3.++Copyright (c) 2007-2014 IOLA and Ole Laursen.+Licensed under the MIT license.++*/+(function($){var options={xaxis:{timezone:null,timeformat:null,twelveHourClock:false,monthNames:null}};function floorInBase(n,base){return base*Math.floor(n/base)}function formatDate(d,fmt,monthNames,dayNames){if(typeof d.strftime=="function"){return d.strftime(fmt)}var leftPad=function(n,pad){n=""+n;pad=""+(pad==null?"0":pad);return n.length==1?pad+n:n};var r=[];var escape=false;var hours=d.getHours();var isAM=hours<12;if(monthNames==null){monthNames=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}if(dayNames==null){dayNames=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]}var hours12;if(hours>12){hours12=hours-12}else if(hours==0){hours12=12}else{hours12=hours}for(var i=0;i<fmt.length;++i){var c=fmt.charAt(i);if(escape){switch(c){case"a":c=""+dayNames[d.getDay()];break;case"b":c=""+monthNames[d.getMonth()];break;case"d":c=leftPad(d.getDate());break;case"e":c=leftPad(d.getDate()," ");break;case"h":case"H":c=leftPad(hours);break;case"I":c=leftPad(hours12);break;case"l":c=leftPad(hours12," ");break;case"m":c=leftPad(d.getMonth()+1);break;case"M":c=leftPad(d.getMinutes());break;case"q":c=""+(Math.floor(d.getMonth()/3)+1);break;case"S":c=leftPad(d.getSeconds());break;case"y":c=leftPad(d.getFullYear()%100);break;case"Y":c=""+d.getFullYear();break;case"p":c=isAM?""+"am":""+"pm";break;case"P":c=isAM?""+"AM":""+"PM";break;case"w":c=""+d.getDay();break}r.push(c);escape=false}else{if(c=="%"){escape=true}else{r.push(c)}}}return r.join("")}function makeUtcWrapper(d){function addProxyMethod(sourceObj,sourceMethod,targetObj,targetMethod){sourceObj[sourceMethod]=function(){return targetObj[targetMethod].apply(targetObj,arguments)}}var utc={date:d};if(d.strftime!=undefined){addProxyMethod(utc,"strftime",d,"strftime")}addProxyMethod(utc,"getTime",d,"getTime");addProxyMethod(utc,"setTime",d,"setTime");var props=["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds"];for(var p=0;p<props.length;p++){addProxyMethod(utc,"get"+props[p],d,"getUTC"+props[p]);addProxyMethod(utc,"set"+props[p],d,"setUTC"+props[p])}return utc}function dateGenerator(ts,opts){if(opts.timezone=="browser"){return new Date(ts)}else if(!opts.timezone||opts.timezone=="utc"){return makeUtcWrapper(new Date(ts))}else if(typeof timezoneJS!="undefined"&&typeof timezoneJS.Date!="undefined"){var d=new timezoneJS.Date;d.setTimezone(opts.timezone);d.setTime(ts);return d}else{return makeUtcWrapper(new Date(ts))}}var timeUnitSize={second:1e3,minute:60*1e3,hour:60*60*1e3,day:24*60*60*1e3,month:30*24*60*60*1e3,quarter:3*30*24*60*60*1e3,year:365.2425*24*60*60*1e3};var baseSpec=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[.25,"month"],[.5,"month"],[1,"month"],[2,"month"]];var specMonths=baseSpec.concat([[3,"month"],[6,"month"],[1,"year"]]);var specQuarters=baseSpec.concat([[1,"quarter"],[2,"quarter"],[1,"year"]]);function init(plot){plot.hooks.processOptions.push(function(plot,options){$.each(plot.getAxes(),function(axisName,axis){var opts=axis.options;if(opts.mode=="time"){axis.tickGenerator=function(axis){var ticks=[];var d=dateGenerator(axis.min,opts);var minSize=0;var spec=opts.tickSize&&opts.tickSize[1]==="quarter"||opts.minTickSize&&opts.minTickSize[1]==="quarter"?specQuarters:specMonths;if(opts.minTickSize!=null){if(typeof opts.tickSize=="number"){minSize=opts.tickSize}else{minSize=opts.minTickSize[0]*timeUnitSize[opts.minTickSize[1]]}}for(var i=0;i<spec.length-1;++i){if(axis.delta<(spec[i][0]*timeUnitSize[spec[i][1]]+spec[i+1][0]*timeUnitSize[spec[i+1][1]])/2&&spec[i][0]*timeUnitSize[spec[i][1]]>=minSize){break}}var size=spec[i][0];var unit=spec[i][1];if(unit=="year"){if(opts.minTickSize!=null&&opts.minTickSize[1]=="year"){size=Math.floor(opts.minTickSize[0])}else{var magn=Math.pow(10,Math.floor(Math.log(axis.delta/timeUnitSize.year)/Math.LN10));var norm=axis.delta/timeUnitSize.year/magn;if(norm<1.5){size=1}else if(norm<3){size=2}else if(norm<7.5){size=5}else{size=10}size*=magn}if(size<1){size=1}}axis.tickSize=opts.tickSize||[size,unit];var tickSize=axis.tickSize[0];unit=axis.tickSize[1];var step=tickSize*timeUnitSize[unit];if(unit=="second"){d.setSeconds(floorInBase(d.getSeconds(),tickSize))}else if(unit=="minute"){d.setMinutes(floorInBase(d.getMinutes(),tickSize))}else if(unit=="hour"){d.setHours(floorInBase(d.getHours(),tickSize))}else if(unit=="month"){d.setMonth(floorInBase(d.getMonth(),tickSize))}else if(unit=="quarter"){d.setMonth(3*floorInBase(d.getMonth()/3,tickSize))}else if(unit=="year"){d.setFullYear(floorInBase(d.getFullYear(),tickSize))}d.setMilliseconds(0);if(step>=timeUnitSize.minute){d.setSeconds(0)}if(step>=timeUnitSize.hour){d.setMinutes(0)}if(step>=timeUnitSize.day){d.setHours(0)}if(step>=timeUnitSize.day*4){d.setDate(1)}if(step>=timeUnitSize.month*2){d.setMonth(floorInBase(d.getMonth(),3))}if(step>=timeUnitSize.quarter*2){d.setMonth(floorInBase(d.getMonth(),6))}if(step>=timeUnitSize.year){d.setMonth(0)}var carry=0;var v=Number.NaN;var prev;do{prev=v;v=d.getTime();ticks.push(v);if(unit=="month"||unit=="quarter"){if(tickSize<1){d.setDate(1);var start=d.getTime();d.setMonth(d.getMonth()+(unit=="quarter"?3:1));var end=d.getTime();d.setTime(v+carry*timeUnitSize.hour+(end-start)*tickSize);carry=d.getHours();d.setHours(0)}else{d.setMonth(d.getMonth()+tickSize*(unit=="quarter"?3:1))}}else if(unit=="year"){d.setFullYear(d.getFullYear()+tickSize)}else{d.setTime(v+step)}}while(v<axis.max&&v!=prev);return ticks};axis.tickFormatter=function(v,axis){var d=dateGenerator(v,axis.options);if(opts.timeformat!=null){return formatDate(d,opts.timeformat,opts.monthNames,opts.dayNames)}var useQuarters=axis.options.tickSize&&axis.options.tickSize[1]=="quarter"||axis.options.minTickSize&&axis.options.minTickSize[1]=="quarter";var t=axis.tickSize[0]*timeUnitSize[axis.tickSize[1]];var span=axis.max-axis.min;var suffix=opts.twelveHourClock?" %p":"";var hourCode=opts.twelveHourClock?"%I":"%H";var fmt;if(t<timeUnitSize.minute){fmt=hourCode+":%M:%S"+suffix}else if(t<timeUnitSize.day){if(span<2*timeUnitSize.day){fmt=hourCode+":%M"+suffix}else{fmt="%b %d "+hourCode+":%M"+suffix}}else if(t<timeUnitSize.month){fmt="%b %d"}else if(useQuarters&&t<timeUnitSize.quarter||!useQuarters&&t<timeUnitSize.year){if(span<timeUnitSize.year){fmt="%b"}else{fmt="%b %Y"}}else if(useQuarters&&t<timeUnitSize.year){if(span<timeUnitSize.year){fmt="Q%q"}else{fmt="Q%q %Y"}}else{fmt="%Y"}var rt=formatDate(d,fmt,opts.monthNames,opts.dayNames);return rt}}})})}$.plot.plugins.push({init:init,options:options,name:"time",version:"1.0"});$.plot.formatDate=formatDate;$.plot.dateGenerator=dateGenerator})(jQuery);
@@ -0,0 +1,409 @@+/*+ * jquery.flot.tooltip+ * + * description: easy-to-use tooltips for Flot charts+ * version: 0.7.1+ * author: Krzysztof Urbas @krzysu [myviews.pl]+ * website: https://github.com/krzysu/flot.tooltip+ * + * build on 2014-06-22+ * released under MIT License, 2012+*/ +// IE8 polyfill for Array.indexOf+if (!Array.prototype.indexOf) {+ Array.prototype.indexOf = function (searchElement, fromIndex) {+ if ( this === undefined || this === null ) {+ throw new TypeError( '"this" is null or not defined' );+ }+ var length = this.length >>> 0; // Hack to convert object.length to a UInt32+ fromIndex = +fromIndex || 0;+ if (Math.abs(fromIndex) === Infinity) {+ fromIndex = 0;+ }+ if (fromIndex < 0) {+ fromIndex += length;+ if (fromIndex < 0) {+ fromIndex = 0;+ }+ }++ for (;fromIndex < length; fromIndex++) {+ if (this[fromIndex] === searchElement) {+ return fromIndex;+ }+ }++ return -1;+ };+}++(function ($) {++ // plugin options, default values+ var defaultOptions = {+ tooltip: false,+ tooltipOpts: {+ content: "%s | X: %x | Y: %y",+ // allowed templates are:+ // %s -> series label,+ // %lx -> x axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels),+ // %ly -> y axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels),+ // %x -> X value,+ // %y -> Y value,+ // %x.2 -> precision of X value,+ // %p -> percent+ xDateFormat: null,+ yDateFormat: null,+ monthNames: null,+ dayNames: null,+ shifts: {+ x: 10,+ y: 20+ },+ defaultTheme: true,++ // callbacks+ onHover: function(flotItem, $tooltipEl) {}+ }+ };++ // object+ var FlotTooltip = function(plot) {++ // variables+ this.tipPosition = {x: 0, y: 0};++ this.init(plot);+ };++ // main plugin function+ FlotTooltip.prototype.init = function(plot) {++ var that = this;++ // detect other flot plugins+ var plotPluginsLength = $.plot.plugins.length;+ this.plotPlugins = [];++ if (plotPluginsLength) {+ for (var p = 0; p < plotPluginsLength; p++) {+ this.plotPlugins.push($.plot.plugins[p].name);+ }+ }++ plot.hooks.bindEvents.push(function (plot, eventHolder) {++ // get plot options+ that.plotOptions = plot.getOptions();++ // if not enabled return+ if (that.plotOptions.tooltip === false || typeof that.plotOptions.tooltip === 'undefined') return;++ // shortcut to access tooltip options+ that.tooltipOptions = that.plotOptions.tooltipOpts;++ // create tooltip DOM element+ var $tip = that.getDomElement();++ // bind event+ $( plot.getPlaceholder() ).bind("plothover", plothover);++ $(eventHolder).bind('mousemove', mouseMove);+ });++ plot.hooks.shutdown.push(function (plot, eventHolder){+ $(plot.getPlaceholder()).unbind("plothover", plothover);+ $(eventHolder).unbind("mousemove", mouseMove);+ });++ function mouseMove(e){+ var pos = {};+ pos.x = e.pageX;+ pos.y = e.pageY;+ that.updateTooltipPosition(pos);+ }++ function plothover(event, pos, item) {+ var $tip = that.getDomElement();+ if (item) {+ var tipText;++ // convert tooltip content template to real tipText+ tipText = that.stringFormat(that.tooltipOptions.content, item);++ $tip.html( tipText );+ that.updateTooltipPosition({ x: pos.pageX, y: pos.pageY });+ $tip.css({+ left: that.tipPosition.x + that.tooltipOptions.shifts.x,+ top: that.tipPosition.y + that.tooltipOptions.shifts.y+ })+ .show();++ // run callback+ if(typeof that.tooltipOptions.onHover === 'function') {+ that.tooltipOptions.onHover(item, $tip);+ }+ }+ else {+ $tip.hide().html('');+ }+ }+ };++ /**+ * get or create tooltip DOM element+ * @return jQuery object+ */+ FlotTooltip.prototype.getDomElement = function() {+ var $tip = $('#flotTip');++ if( $tip.length === 0 ){+ $tip = $('<div />').attr('id', 'flotTip');+ $tip.appendTo('body').hide().css({position: 'absolute'});++ if(this.tooltipOptions.defaultTheme) {+ $tip.css({+ 'background': '#fff',+ 'z-index': '1040',+ 'padding': '0.4em 0.6em',+ 'border-radius': '0.5em',+ 'font-size': '0.8em',+ 'border': '1px solid #111',+ 'display': 'none',+ 'white-space': 'nowrap'+ });+ }+ }++ return $tip;+ };++ // as the name says+ FlotTooltip.prototype.updateTooltipPosition = function(pos) {+ var $tip = $('#flotTip');++ var totalTipWidth = $tip.outerWidth() + this.tooltipOptions.shifts.x;+ var totalTipHeight = $tip.outerHeight() + this.tooltipOptions.shifts.y;+ if ((pos.x - $(window).scrollLeft()) > ($(window).innerWidth() - totalTipWidth)) {+ pos.x -= totalTipWidth;+ }+ if ((pos.y - $(window).scrollTop()) > ($(window).innerHeight() - totalTipHeight)) {+ pos.y -= totalTipHeight;+ }+ this.tipPosition.x = pos.x;+ this.tipPosition.y = pos.y;+ };++ /**+ * core function, create tooltip content+ * @param {string} content - template with tooltip content+ * @param {object} item - Flot item+ * @return {string} real tooltip content for current item+ */+ FlotTooltip.prototype.stringFormat = function(content, item) {++ var percentPattern = /%p\.{0,1}(\d{0,})/;+ var seriesPattern = /%s/;+ var xLabelPattern = /%lx/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded+ var yLabelPattern = /%ly/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded+ var xPattern = /%x\.{0,1}(\d{0,})/;+ var yPattern = /%y\.{0,1}(\d{0,})/;+ var xPatternWithoutPrecision = "%x";+ var yPatternWithoutPrecision = "%y";+ var customTextPattern = "%ct";++ var x, y, customText;++ // for threshold plugin we need to read data from different place+ if (typeof item.series.threshold !== "undefined") {+ x = item.datapoint[0];+ y = item.datapoint[1];+ customText = item.datapoint[2];+ } else if (typeof item.series.lines !== "undefined" && item.series.lines.steps) {+ x = item.series.datapoints.points[item.dataIndex * 2];+ y = item.series.datapoints.points[item.dataIndex * 2 + 1];+ // TODO: where to find custom text in this variant?+ customText = "";+ } else {+ x = item.series.data[item.dataIndex][0];+ y = item.series.data[item.dataIndex][1];+ customText = item.series.data[item.dataIndex][2];+ }++ // I think this is only in case of threshold plugin+ if (item.series.label === null && item.series.originSeries) {+ item.series.label = item.series.originSeries.label;+ }++ // if it is a function callback get the content string+ if( typeof(content) === 'function' ) {+ content = content(item.series.label, x, y, item);+ }++ // percent match for pie charts+ if( typeof (item.series.percent) !== 'undefined' ) {+ content = this.adjustValPrecision(percentPattern, content, item.series.percent);+ }++ // series match+ if( typeof(item.series.label) !== 'undefined' ) {+ content = content.replace(seriesPattern, item.series.label);+ }+ else {+ //remove %s if label is undefined+ content = content.replace(seriesPattern, "");+ }++ // x axis label match+ if( this.hasAxisLabel('xaxis', item) ) {+ content = content.replace(xLabelPattern, item.series.xaxis.options.axisLabel);+ }+ else {+ //remove %lx if axis label is undefined or axislabels plugin not present+ content = content.replace(xLabelPattern, "");+ }++ // y axis label match+ if( this.hasAxisLabel('yaxis', item) ) {+ content = content.replace(yLabelPattern, item.series.yaxis.options.axisLabel);+ }+ else {+ //remove %ly if axis label is undefined or axislabels plugin not present+ content = content.replace(yLabelPattern, "");+ }++ // time mode axes with custom dateFormat+ if(this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) {+ content = content.replace(xPattern, this.timestampToDate(x, this.tooltipOptions.xDateFormat, item.series.xaxis.options));+ }++ if(this.isTimeMode('yaxis', item) && this.isYDateFormat(item)) {+ content = content.replace(yPattern, this.timestampToDate(y, this.tooltipOptions.yDateFormat, item.series.yaxis.options));+ }++ // set precision if defined+ if(typeof x === 'number') {+ content = this.adjustValPrecision(xPattern, content, x);+ }+ if(typeof y === 'number') {+ content = this.adjustValPrecision(yPattern, content, y);+ }++ // change x from number to given label, if given+ if(typeof item.series.xaxis.ticks !== 'undefined') {++ var ticks;+ if(this.hasRotatedXAxisTicks(item)) {+ // xaxis.ticks will be an empty array if tickRotor is being used, but the values are available in rotatedTicks+ ticks = 'rotatedTicks';+ }+ else {+ ticks = 'ticks';+ }++ // see https://github.com/krzysu/flot.tooltip/issues/65+ var tickIndex = item.dataIndex + item.seriesIndex;++ if(item.series.xaxis[ticks].length > tickIndex && !this.isTimeMode('xaxis', item)) {+ var valueX = (this.isCategoriesMode('xaxis', item)) ? item.series.xaxis[ticks][tickIndex].label : item.series.xaxis[ticks][tickIndex].v;+ if (valueX === x) {+ content = content.replace(xPattern, item.series.xaxis[ticks][tickIndex].label);+ }+ }+ }++ // change y from number to given label, if given+ if(typeof item.series.yaxis.ticks !== 'undefined') {+ for (var index in item.series.yaxis.ticks) {+ if (item.series.yaxis.ticks.hasOwnProperty(index)) {+ var valueY = (this.isCategoriesMode('yaxis', item)) ? item.series.yaxis.ticks[index].label : item.series.yaxis.ticks[index].v;+ if (valueY === y) {+ content = content.replace(yPattern, item.series.yaxis.ticks[index].label);+ }+ }+ }+ }++ // if no value customization, use tickFormatter by default+ if(typeof item.series.xaxis.tickFormatter !== 'undefined') {+ //escape dollar+ content = content.replace(xPatternWithoutPrecision, item.series.xaxis.tickFormatter(x, item.series.xaxis).replace(/\$/g, '$$'));+ }+ if(typeof item.series.yaxis.tickFormatter !== 'undefined') {+ //escape dollar+ content = content.replace(yPatternWithoutPrecision, item.series.yaxis.tickFormatter(y, item.series.yaxis).replace(/\$/g, '$$'));+ }++ if(customText) {+ content = content.replace(customTextPattern, customText);+ }++ return content;+ };++ // helpers just for readability+ FlotTooltip.prototype.isTimeMode = function(axisName, item) {+ return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'time');+ };++ FlotTooltip.prototype.isXDateFormat = function(item) {+ return (typeof this.tooltipOptions.xDateFormat !== 'undefined' && this.tooltipOptions.xDateFormat !== null);+ };++ FlotTooltip.prototype.isYDateFormat = function(item) {+ return (typeof this.tooltipOptions.yDateFormat !== 'undefined' && this.tooltipOptions.yDateFormat !== null);+ };++ FlotTooltip.prototype.isCategoriesMode = function(axisName, item) {+ return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'categories');+ };++ //+ FlotTooltip.prototype.timestampToDate = function(tmst, dateFormat, options) {+ var theDate = $.plot.dateGenerator(tmst, options);+ return $.plot.formatDate(theDate, dateFormat, this.tooltipOptions.monthNames, this.tooltipOptions.dayNames);+ };++ //+ FlotTooltip.prototype.adjustValPrecision = function(pattern, content, value) {++ var precision;+ var matchResult = content.match(pattern);+ if( matchResult !== null ) {+ if(RegExp.$1 !== '') {+ precision = RegExp.$1;+ value = value.toFixed(precision);++ // only replace content if precision exists, in other case use thickformater+ content = content.replace(pattern, value);+ }+ }+ return content;+ };++ // other plugins detection below++ // check if flot-axislabels plugin (https://github.com/markrcote/flot-axislabels) is used and that an axis label is given+ FlotTooltip.prototype.hasAxisLabel = function(axisName, item) {+ return (this.plotPlugins.indexOf('axisLabels') !== -1 && typeof item.series[axisName].options.axisLabel !== 'undefined' && item.series[axisName].options.axisLabel.length > 0);+ };++ // check whether flot-tickRotor, a plugin which allows rotation of X-axis ticks, is being used+ FlotTooltip.prototype.hasRotatedXAxisTicks = function(item) {+ return ($.grep($.plot.plugins, function(p){ return p.name === "tickRotor"; }).length === 1 && typeof item.series.xaxis.rotatedTicks !== 'undefined');+ };++ //+ var init = function(plot) {+ new FlotTooltip(plot);+ };++ // define Flot plugin+ $.plot.plugins.push({+ init: init,+ options: defaultOptions,+ name: 'tooltip',+ version: '0.6.7'+ });++})(jQuery);
@@ -0,0 +1,12 @@+/*+ * jquery.flot.tooltip+ * + * description: easy-to-use tooltips for Flot charts+ * version: 0.7.1+ * author: Krzysztof Urbas @krzysu [myviews.pl]+ * website: https://github.com/krzysu/flot.tooltip+ * + * build on 2014-06-22+ * released under MIT License, 2012+*/ +Array.prototype.indexOf||(Array.prototype.indexOf=function(t,i){if(void 0===this||null===this)throw new TypeError('"this" is null or not defined');var e=this.length>>>0;for(i=+i||0,1/0===Math.abs(i)&&(i=0),0>i&&(i+=e,0>i&&(i=0));e>i;i++)if(this[i]===t)return i;return-1}),function(t){var i={tooltip:!1,tooltipOpts:{content:"%s | X: %x | Y: %y",xDateFormat:null,yDateFormat:null,monthNames:null,dayNames:null,shifts:{x:10,y:20},defaultTheme:!0,onHover:function(){}}},e=function(t){this.tipPosition={x:0,y:0},this.init(t)};e.prototype.init=function(i){function e(t){var i={};i.x=t.pageX,i.y=t.pageY,o.updateTooltipPosition(i)}function s(t,i,e){var s=o.getDomElement();if(e){var a;a=o.stringFormat(o.tooltipOptions.content,e),s.html(a),o.updateTooltipPosition({x:i.pageX,y:i.pageY}),s.css({left:o.tipPosition.x+o.tooltipOptions.shifts.x,top:o.tipPosition.y+o.tooltipOptions.shifts.y}).show(),"function"==typeof o.tooltipOptions.onHover&&o.tooltipOptions.onHover(e,s)}else s.hide().html("")}var o=this,a=t.plot.plugins.length;if(this.plotPlugins=[],a)for(var n=0;a>n;n++)this.plotPlugins.push(t.plot.plugins[n].name);i.hooks.bindEvents.push(function(i,a){o.plotOptions=i.getOptions(),o.plotOptions.tooltip!==!1&&void 0!==o.plotOptions.tooltip&&(o.tooltipOptions=o.plotOptions.tooltipOpts,o.getDomElement(),t(i.getPlaceholder()).bind("plothover",s),t(a).bind("mousemove",e))}),i.hooks.shutdown.push(function(i,o){t(i.getPlaceholder()).unbind("plothover",s),t(o).unbind("mousemove",e)})},e.prototype.getDomElement=function(){var i=t("#flotTip");return 0===i.length&&(i=t("<div />").attr("id","flotTip"),i.appendTo("body").hide().css({position:"absolute"}),this.tooltipOptions.defaultTheme&&i.css({background:"#fff","z-index":"1040",padding:"0.4em 0.6em","border-radius":"0.5em","font-size":"0.8em",border:"1px solid #111",display:"none","white-space":"nowrap"})),i},e.prototype.updateTooltipPosition=function(i){var e=t("#flotTip"),s=e.outerWidth()+this.tooltipOptions.shifts.x,o=e.outerHeight()+this.tooltipOptions.shifts.y;i.x-t(window).scrollLeft()>t(window).innerWidth()-s&&(i.x-=s),i.y-t(window).scrollTop()>t(window).innerHeight()-o&&(i.y-=o),this.tipPosition.x=i.x,this.tipPosition.y=i.y},e.prototype.stringFormat=function(t,i){var e,s,o,a=/%p\.{0,1}(\d{0,})/,n=/%s/,r=/%lx/,p=/%ly/,l=/%x\.{0,1}(\d{0,})/,d=/%y\.{0,1}(\d{0,})/,x="%x",h="%y",u="%ct";if(i.series.threshold!==void 0?(e=i.datapoint[0],s=i.datapoint[1],o=i.datapoint[2]):i.series.lines!==void 0&&i.series.lines.steps?(e=i.series.datapoints.points[2*i.dataIndex],s=i.series.datapoints.points[2*i.dataIndex+1],o=""):(e=i.series.data[i.dataIndex][0],s=i.series.data[i.dataIndex][1],o=i.series.data[i.dataIndex][2]),null===i.series.label&&i.series.originSeries&&(i.series.label=i.series.originSeries.label),"function"==typeof t&&(t=t(i.series.label,e,s,i)),i.series.percent!==void 0&&(t=this.adjustValPrecision(a,t,i.series.percent)),t=i.series.label!==void 0?t.replace(n,i.series.label):t.replace(n,""),t=this.hasAxisLabel("xaxis",i)?t.replace(r,i.series.xaxis.options.axisLabel):t.replace(r,""),t=this.hasAxisLabel("yaxis",i)?t.replace(p,i.series.yaxis.options.axisLabel):t.replace(p,""),this.isTimeMode("xaxis",i)&&this.isXDateFormat(i)&&(t=t.replace(l,this.timestampToDate(e,this.tooltipOptions.xDateFormat,i.series.xaxis.options))),this.isTimeMode("yaxis",i)&&this.isYDateFormat(i)&&(t=t.replace(d,this.timestampToDate(s,this.tooltipOptions.yDateFormat,i.series.yaxis.options))),"number"==typeof e&&(t=this.adjustValPrecision(l,t,e)),"number"==typeof s&&(t=this.adjustValPrecision(d,t,s)),i.series.xaxis.ticks!==void 0){var c;c=this.hasRotatedXAxisTicks(i)?"rotatedTicks":"ticks";var m=i.dataIndex+i.seriesIndex;if(i.series.xaxis[c].length>m&&!this.isTimeMode("xaxis",i)){var f=this.isCategoriesMode("xaxis",i)?i.series.xaxis[c][m].label:i.series.xaxis[c][m].v;f===e&&(t=t.replace(l,i.series.xaxis[c][m].label))}}if(i.series.yaxis.ticks!==void 0)for(var y in i.series.yaxis.ticks)if(i.series.yaxis.ticks.hasOwnProperty(y)){var v=this.isCategoriesMode("yaxis",i)?i.series.yaxis.ticks[y].label:i.series.yaxis.ticks[y].v;v===s&&(t=t.replace(d,i.series.yaxis.ticks[y].label))}return i.series.xaxis.tickFormatter!==void 0&&(t=t.replace(x,i.series.xaxis.tickFormatter(e,i.series.xaxis).replace(/\$/g,"$$"))),i.series.yaxis.tickFormatter!==void 0&&(t=t.replace(h,i.series.yaxis.tickFormatter(s,i.series.yaxis).replace(/\$/g,"$$"))),o&&(t=t.replace(u,o)),t},e.prototype.isTimeMode=function(t,i){return i.series[t].options.mode!==void 0&&"time"===i.series[t].options.mode},e.prototype.isXDateFormat=function(){return this.tooltipOptions.xDateFormat!==void 0&&null!==this.tooltipOptions.xDateFormat},e.prototype.isYDateFormat=function(){return this.tooltipOptions.yDateFormat!==void 0&&null!==this.tooltipOptions.yDateFormat},e.prototype.isCategoriesMode=function(t,i){return i.series[t].options.mode!==void 0&&"categories"===i.series[t].options.mode},e.prototype.timestampToDate=function(i,e,s){var o=t.plot.dateGenerator(i,s);return t.plot.formatDate(o,e,this.tooltipOptions.monthNames,this.tooltipOptions.dayNames)},e.prototype.adjustValPrecision=function(t,i,e){var s,o=i.match(t);return null!==o&&""!==RegExp.$1&&(s=RegExp.$1,e=e.toFixed(s),i=i.replace(t,e)),i},e.prototype.hasAxisLabel=function(t,i){return-1!==this.plotPlugins.indexOf("axisLabels")&&i.series[t].options.axisLabel!==void 0&&i.series[t].options.axisLabel.length>0},e.prototype.hasRotatedXAxisTicks=function(i){return 1===t.grep(t.plot.plugins,function(t){return"tickRotor"===t.name}).length&&i.series.xaxis.rotatedTicks!==void 0};var s=function(t){new e(t)};t.plot.plugins.push({init:s,options:i,name:"tooltip",version:"0.6.7"})}(jQuery);
@@ -0,0 +1,102 @@+/*+ * jQuery Hotkeys Plugin+ * Copyright 2010, John Resig+ * Dual licensed under the MIT or GPL Version 2 licenses.+ *+ * Based upon the plugin by Tzury Bar Yochay:+ * http://github.com/tzuryby/hotkeys+ *+ * Original idea by:+ * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/+*/++/*+ * One small change is: now keys are passed by object { keys: '...' }+ * Might be useful, when you want to pass some other data to your handler+ */++(function(jQuery){++ jQuery.hotkeys = {+ version: "0.8",++ specialKeys: {+ 8: "backspace", 9: "tab", 10: "return", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause",+ 20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home",+ 37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del", 59: ";", 61: "=",+ 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7",+ 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/",+ 112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8",+ 120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 173: "-", 186: ";", 187: "=",+ 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'"+ },++ shiftNums: {+ "`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&",+ "8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<",+ ".": ">", "/": "?", "\\": "|"+ }+ };++ function keyHandler( handleObj ) {+ if ( typeof handleObj.data === "string" ) {+ handleObj.data = { keys: handleObj.data };+ }++ // Only care when a possible input has been specified+ if ( !handleObj.data || !handleObj.data.keys || typeof handleObj.data.keys !== "string" ) {+ return;+ }++ var origHandler = handleObj.handler,+ keys = handleObj.data.keys.toLowerCase().split(" "),+ textAcceptingInputTypes = ["text", "password", "number", "email", "url", "range", "date", "month", "week",+ "time", "datetime", "datetime-local", "search", "color", "tel"];++ handleObj.handler = function( event ) {+ // Don't fire in text-accepting inputs that we didn't directly bind to+ if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) ||+ jQuery.inArray(event.target.type, textAcceptingInputTypes) > -1 ) ) {+ return;+ }++ var special = jQuery.hotkeys.specialKeys[ event.keyCode ],+ character = String.fromCharCode( event.which ).toLowerCase(),+ modif = "", possible = {};++ jQuery.each([ "alt", "ctrl", "meta", "shift" ], function(index, specialKey) {+ if (event[specialKey + 'Key'] && special !== specialKey) {+ modif += specialKey + '+';+ }+ });+++ modif = modif.replace('alt+ctrl+meta+shift', 'hyper');++ if ( special ) {+ possible[ modif + special ] = true;+ }++ if ( character ) {+ possible[ modif + character ] = true;+ possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true;++ // "$" can be triggered as "Shift+4" or "Shift+$" or just "$"+ if ( modif === "shift+" ) {+ possible[ jQuery.hotkeys.shiftNums[ character ] ] = true;+ }+ }++ for ( var i = 0, l = keys.length; i < l; i++ ) {+ if ( possible[ keys[i] ] ) {+ return origHandler.apply( this, arguments );+ }+ }+ };+ }++ jQuery.each([ "keydown", "keyup", "keypress" ], function() {+ jQuery.event.special[ this ] = { add: keyHandler };+ });++})( this.jQuery );
@@ -0,0 +1,4 @@+/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)+},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))+},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
@@ -0,0 +1,181 @@+// JQuery URL Parser+// Written by Mark Perkins, mark@allmarkedup.com+// License: http://unlicense.org/ (i.e. do what you want with it!)++jQuery.url = function()+{+ var segments = {};+ + var parsed = {};+ + /**+ * Options object. Only the URI and strictMode values can be changed via the setters below.+ */+ var options = {+ + url : window.location, // default URI is the page in which the script is running+ + strictMode: false, // 'loose' parsing by default+ + key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], // keys available to query + + q: {+ name: "queryKey",+ parser: /(?:^|&|;)([^&=;]*)=?([^&;]*)/g+ },+ + parser: {+ strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, //less intuitive, more accurate to the specs+ loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // more intuitive, fails on relative paths and deviates from specs+ }+ + };+ + /**+ * Deals with the parsing of the URI according to the regex above.+ * Written by Steven Levithan - see credits at top.+ */ + var parseUri = function()+ {+ str = decodeURI( options.url );+ + var m = options.parser[ options.strictMode ? "strict" : "loose" ].exec( str );+ var uri = {};+ var i = 14;++ while ( i-- ) {+ uri[ options.key[i] ] = m[i] || "";+ }++ uri[ options.q.name ] = {};+ uri[ options.key[12] ].replace( options.q.parser, function ( $0, $1, $2 ) {+ if ($1) {+ uri[options.q.name][$1] = $2;+ }+ });++ return uri;+ };++ /**+ * Returns the value of the passed in key from the parsed URI.+ * + * @param string key The key whose value is required+ */ + var key = function( key )+ {+ if ( jQuery.isEmptyObject(parsed) )+ {+ setUp(); // if the URI has not been parsed yet then do this first... + } + if ( key == "base" )+ {+ if ( parsed.port !== null && parsed.port !== "" )+ {+ return parsed.protocol+"://"+parsed.host+":"+parsed.port+"/"; + }+ else+ {+ return parsed.protocol+"://"+parsed.host+"/";+ }+ }+ + return ( parsed[key] === "" ) ? null : parsed[key];+ };+ + /**+ * Returns the value of the required query string parameter.+ * + * @param string item The parameter whose value is required+ */ + var param = function( item )+ {+ if ( jQuery.isEmptyObject(parsed) )+ {+ setUp(); // if the URI has not been parsed yet then do this first... + }+ if ( item === undefined )+ {+ return parsed.queryKey;+ }+ else+ {+ return ( parsed.queryKey[item] === null ) ? null : parsed.queryKey[item];+ }+ };++ /**+ * 'Constructor' (not really!) function.+ * Called whenever the URI changes to kick off re-parsing of the URI and splitting it up into segments. + */ + var setUp = function()+ {+ parsed = parseUri();+ + getSegments(); + };+ + /**+ * Splits up the body of the URI into segments (i.e. sections delimited by '/')+ */+ var getSegments = function()+ {+ var p = parsed.path;+ segments = []; // clear out segments array+ segments = parsed.path.length == 1 ? {} : ( p.charAt( p.length - 1 ) == "/" ? p.substring( 1, p.length - 1 ) : path = p.substring( 1 ) ).split("/");+ };+ + return {+ + /**+ * Sets the parsing mode - either strict or loose. Set to loose by default.+ *+ * @param string mode The mode to set the parser to. Anything apart from a value of 'strict' will set it to loose!+ */+ setMode : function( mode )+ {+ options.strictMode = mode == "strict" ? true : false;+ return this;+ },+ + /**+ * Sets URI to parse if you don't want to to parse the current page's URI.+ * Calling the function with no value for newUri resets it to the current page's URI.+ *+ * @param string newUri The URI to parse.+ */ + setUrl : function( newUri )+ {+ options.url = newUri === undefined ? window.location : newUri;+ setUp();+ return this;+ }, + + /**+ * Returns the value of the specified URI segment. Segments are numbered from 1 to the number of segments.+ * For example the URI http://test.com/about/company/ segment(1) would return 'about'.+ *+ * If no integer is passed into the function it returns the number of segments in the URI.+ *+ * @param int pos The position of the segment to return. Can be empty.+ */ + segment : function( pos )+ {+ if ( jQuery.isEmptyObject(parsed) )+ {+ setUp(); // if the URI has not been parsed yet then do this first... + } + if ( pos === undefined )+ {+ return segments.length;+ }+ return ( segments[pos] === "" || segments[pos] === undefined ) ? null : segments[pos];+ },+ + attr : key, // provides public access to private 'key' function - see above+ + param : param // provides public access to private 'param' function - see above+ + };+ +}();
@@ -0,0 +1,1782 @@+/*!+ * typeahead.js 0.10.4+ * https://github.com/twitter/typeahead.js+ * Copyright 2013-2014 Twitter, Inc. and other contributors; Licensed MIT+ */++(function($) {+ var _ = function() {+ "use strict";+ return {+ isMsie: function() {+ return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;+ },+ isBlankString: function(str) {+ return !str || /^\s*$/.test(str);+ },+ escapeRegExChars: function(str) {+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");+ },+ isString: function(obj) {+ return typeof obj === "string";+ },+ isNumber: function(obj) {+ return typeof obj === "number";+ },+ isArray: $.isArray,+ isFunction: $.isFunction,+ isObject: $.isPlainObject,+ isUndefined: function(obj) {+ return typeof obj === "undefined";+ },+ toStr: function toStr(s) {+ return _.isUndefined(s) || s === null ? "" : s + "";+ },+ bind: $.proxy,+ each: function(collection, cb) {+ $.each(collection, reverseArgs);+ function reverseArgs(index, value) {+ return cb(value, index);+ }+ },+ map: $.map,+ filter: $.grep,+ every: function(obj, test) {+ var result = true;+ if (!obj) {+ return result;+ }+ $.each(obj, function(key, val) {+ if (!(result = test.call(null, val, key, obj))) {+ return false;+ }+ });+ return !!result;+ },+ some: function(obj, test) {+ var result = false;+ if (!obj) {+ return result;+ }+ $.each(obj, function(key, val) {+ if (result = test.call(null, val, key, obj)) {+ return false;+ }+ });+ return !!result;+ },+ mixin: $.extend,+ getUniqueId: function() {+ var counter = 0;+ return function() {+ return counter++;+ };+ }(),+ templatify: function templatify(obj) {+ return $.isFunction(obj) ? obj : template;+ function template() {+ return String(obj);+ }+ },+ defer: function(fn) {+ setTimeout(fn, 0);+ },+ debounce: function(func, wait, immediate) {+ var timeout, result;+ return function() {+ var context = this, args = arguments, later, callNow;+ later = function() {+ timeout = null;+ if (!immediate) {+ result = func.apply(context, args);+ }+ };+ callNow = immediate && !timeout;+ clearTimeout(timeout);+ timeout = setTimeout(later, wait);+ if (callNow) {+ result = func.apply(context, args);+ }+ return result;+ };+ },+ throttle: function(func, wait) {+ var context, args, timeout, result, previous, later;+ previous = 0;+ later = function() {+ previous = new Date();+ timeout = null;+ result = func.apply(context, args);+ };+ return function() {+ var now = new Date(), remaining = wait - (now - previous);+ context = this;+ args = arguments;+ if (remaining <= 0) {+ clearTimeout(timeout);+ timeout = null;+ previous = now;+ result = func.apply(context, args);+ } else if (!timeout) {+ timeout = setTimeout(later, remaining);+ }+ return result;+ };+ },+ noop: function() {}+ };+ }();+ var VERSION = "0.10.4";+ var tokenizers = function() {+ "use strict";+ return {+ nonword: nonword,+ whitespace: whitespace,+ obj: {+ nonword: getObjTokenizer(nonword),+ whitespace: getObjTokenizer(whitespace)+ }+ };+ function whitespace(str) {+ str = _.toStr(str);+ return str ? str.split(/\s+/) : [];+ }+ function nonword(str) {+ str = _.toStr(str);+ return str ? str.split(/\W+/) : [];+ }+ function getObjTokenizer(tokenizer) {+ return function setKey() {+ var args = [].slice.call(arguments, 0);+ return function tokenize(o) {+ var tokens = [];+ _.each(args, function(k) {+ tokens = tokens.concat(tokenizer(_.toStr(o[k])));+ });+ return tokens;+ };+ };+ }+ }();+ var LruCache = function() {+ "use strict";+ function LruCache(maxSize) {+ this.maxSize = _.isNumber(maxSize) ? maxSize : 100;+ this.reset();+ if (this.maxSize <= 0) {+ this.set = this.get = $.noop;+ }+ }+ _.mixin(LruCache.prototype, {+ set: function set(key, val) {+ var tailItem = this.list.tail, node;+ if (this.size >= this.maxSize) {+ this.list.remove(tailItem);+ delete this.hash[tailItem.key];+ }+ if (node = this.hash[key]) {+ node.val = val;+ this.list.moveToFront(node);+ } else {+ node = new Node(key, val);+ this.list.add(node);+ this.hash[key] = node;+ this.size++;+ }+ },+ get: function get(key) {+ var node = this.hash[key];+ if (node) {+ this.list.moveToFront(node);+ return node.val;+ }+ },+ reset: function reset() {+ this.size = 0;+ this.hash = {};+ this.list = new List();+ }+ });+ function List() {+ this.head = this.tail = null;+ }+ _.mixin(List.prototype, {+ add: function add(node) {+ if (this.head) {+ node.next = this.head;+ this.head.prev = node;+ }+ this.head = node;+ this.tail = this.tail || node;+ },+ remove: function remove(node) {+ node.prev ? node.prev.next = node.next : this.head = node.next;+ node.next ? node.next.prev = node.prev : this.tail = node.prev;+ },+ moveToFront: function(node) {+ this.remove(node);+ this.add(node);+ }+ });+ function Node(key, val) {+ this.key = key;+ this.val = val;+ this.prev = this.next = null;+ }+ return LruCache;+ }();+ var PersistentStorage = function() {+ "use strict";+ var ls, methods;+ try {+ ls = window.localStorage;+ ls.setItem("~~~", "!");+ ls.removeItem("~~~");+ } catch (err) {+ ls = null;+ }+ function PersistentStorage(namespace) {+ this.prefix = [ "__", namespace, "__" ].join("");+ this.ttlKey = "__ttl__";+ this.keyMatcher = new RegExp("^" + _.escapeRegExChars(this.prefix));+ }+ if (ls && window.JSON) {+ methods = {+ _prefix: function(key) {+ return this.prefix + key;+ },+ _ttlKey: function(key) {+ return this._prefix(key) + this.ttlKey;+ },+ get: function(key) {+ if (this.isExpired(key)) {+ this.remove(key);+ }+ return decode(ls.getItem(this._prefix(key)));+ },+ set: function(key, val, ttl) {+ if (_.isNumber(ttl)) {+ ls.setItem(this._ttlKey(key), encode(now() + ttl));+ } else {+ ls.removeItem(this._ttlKey(key));+ }+ return ls.setItem(this._prefix(key), encode(val));+ },+ remove: function(key) {+ ls.removeItem(this._ttlKey(key));+ ls.removeItem(this._prefix(key));+ return this;+ },+ clear: function() {+ var i, key, keys = [], len = ls.length;+ for (i = 0; i < len; i++) {+ if ((key = ls.key(i)).match(this.keyMatcher)) {+ keys.push(key.replace(this.keyMatcher, ""));+ }+ }+ for (i = keys.length; i--; ) {+ this.remove(keys[i]);+ }+ return this;+ },+ isExpired: function(key) {+ var ttl = decode(ls.getItem(this._ttlKey(key)));+ return _.isNumber(ttl) && now() > ttl ? true : false;+ }+ };+ } else {+ methods = {+ get: _.noop,+ set: _.noop,+ remove: _.noop,+ clear: _.noop,+ isExpired: _.noop+ };+ }+ _.mixin(PersistentStorage.prototype, methods);+ return PersistentStorage;+ function now() {+ return new Date().getTime();+ }+ function encode(val) {+ return JSON.stringify(_.isUndefined(val) ? null : val);+ }+ function decode(val) {+ return JSON.parse(val);+ }+ }();+ var Transport = function() {+ "use strict";+ var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);+ function Transport(o) {+ o = o || {};+ this.cancelled = false;+ this.lastUrl = null;+ this._send = o.transport ? callbackToDeferred(o.transport) : $.ajax;+ this._get = o.rateLimiter ? o.rateLimiter(this._get) : this._get;+ this._cache = o.cache === false ? new LruCache(0) : sharedCache;+ }+ Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {+ maxPendingRequests = num;+ };+ Transport.resetCache = function resetCache() {+ sharedCache.reset();+ };+ _.mixin(Transport.prototype, {+ _get: function(url, o, cb) {+ var that = this, jqXhr;+ if (this.cancelled || url !== this.lastUrl) {+ return;+ }+ if (jqXhr = pendingRequests[url]) {+ jqXhr.done(done).fail(fail);+ } else if (pendingRequestsCount < maxPendingRequests) {+ pendingRequestsCount++;+ pendingRequests[url] = this._send(url, o).done(done).fail(fail).always(always);+ } else {+ this.onDeckRequestArgs = [].slice.call(arguments, 0);+ }+ function done(resp) {+ cb && cb(null, resp);+ that._cache.set(url, resp);+ }+ function fail() {+ cb && cb(true);+ }+ function always() {+ pendingRequestsCount--;+ delete pendingRequests[url];+ if (that.onDeckRequestArgs) {+ that._get.apply(that, that.onDeckRequestArgs);+ that.onDeckRequestArgs = null;+ }+ }+ },+ get: function(url, o, cb) {+ var resp;+ if (_.isFunction(o)) {+ cb = o;+ o = {};+ }+ this.cancelled = false;+ this.lastUrl = url;+ if (resp = this._cache.get(url)) {+ _.defer(function() {+ cb && cb(null, resp);+ });+ } else {+ this._get(url, o, cb);+ }+ return !!resp;+ },+ cancel: function() {+ this.cancelled = true;+ }+ });+ return Transport;+ function callbackToDeferred(fn) {+ return function customSendWrapper(url, o) {+ var deferred = $.Deferred();+ fn(url, o, onSuccess, onError);+ return deferred;+ function onSuccess(resp) {+ _.defer(function() {+ deferred.resolve(resp);+ });+ }+ function onError(err) {+ _.defer(function() {+ deferred.reject(err);+ });+ }+ };+ }+ }();+ var SearchIndex = function() {+ "use strict";+ function SearchIndex(o) {+ o = o || {};+ if (!o.datumTokenizer || !o.queryTokenizer) {+ $.error("datumTokenizer and queryTokenizer are both required");+ }+ this.datumTokenizer = o.datumTokenizer;+ this.queryTokenizer = o.queryTokenizer;+ this.reset();+ }+ _.mixin(SearchIndex.prototype, {+ bootstrap: function bootstrap(o) {+ this.datums = o.datums;+ this.trie = o.trie;+ },+ add: function(data) {+ var that = this;+ data = _.isArray(data) ? data : [ data ];+ _.each(data, function(datum) {+ var id, tokens;+ id = that.datums.push(datum) - 1;+ tokens = normalizeTokens(that.datumTokenizer(datum));+ _.each(tokens, function(token) {+ var node, chars, ch;+ node = that.trie;+ chars = token.split("");+ while (ch = chars.shift()) {+ node = node.children[ch] || (node.children[ch] = newNode());+ node.ids.push(id);+ }+ });+ });+ },+ get: function get(query) {+ var that = this, tokens, matches;+ tokens = normalizeTokens(this.queryTokenizer(query));+ _.each(tokens, function(token) {+ var node, chars, ch, ids;+ if (matches && matches.length === 0) {+ return false;+ }+ node = that.trie;+ chars = token.split("");+ while (node && (ch = chars.shift())) {+ node = node.children[ch];+ }+ if (node && chars.length === 0) {+ ids = node.ids.slice(0);+ matches = matches ? getIntersection(matches, ids) : ids;+ } else {+ matches = [];+ return false;+ }+ });+ return matches ? _.map(unique(matches), function(id) {+ return that.datums[id];+ }) : [];+ },+ reset: function reset() {+ this.datums = [];+ this.trie = newNode();+ },+ serialize: function serialize() {+ return {+ datums: this.datums,+ trie: this.trie+ };+ }+ });+ return SearchIndex;+ function normalizeTokens(tokens) {+ tokens = _.filter(tokens, function(token) {+ return !!token;+ });+ tokens = _.map(tokens, function(token) {+ return token.toLowerCase();+ });+ return tokens;+ }+ function newNode() {+ return {+ ids: [],+ children: {}+ };+ }+ function unique(array) {+ var seen = {}, uniques = [];+ for (var i = 0, len = array.length; i < len; i++) {+ if (!seen[array[i]]) {+ seen[array[i]] = true;+ uniques.push(array[i]);+ }+ }+ return uniques;+ }+ function getIntersection(arrayA, arrayB) {+ var ai = 0, bi = 0, intersection = [];+ arrayA = arrayA.sort(compare);+ arrayB = arrayB.sort(compare);+ var lenArrayA = arrayA.length, lenArrayB = arrayB.length;+ while (ai < lenArrayA && bi < lenArrayB) {+ if (arrayA[ai] < arrayB[bi]) {+ ai++;+ } else if (arrayA[ai] > arrayB[bi]) {+ bi++;+ } else {+ intersection.push(arrayA[ai]);+ ai++;+ bi++;+ }+ }+ return intersection;+ function compare(a, b) {+ return a - b;+ }+ }+ }();+ var oParser = function() {+ "use strict";+ return {+ local: getLocal,+ prefetch: getPrefetch,+ remote: getRemote+ };+ function getLocal(o) {+ return o.local || null;+ }+ function getPrefetch(o) {+ var prefetch, defaults;+ defaults = {+ url: null,+ thumbprint: "",+ ttl: 24 * 60 * 60 * 1e3,+ filter: null,+ ajax: {}+ };+ if (prefetch = o.prefetch || null) {+ prefetch = _.isString(prefetch) ? {+ url: prefetch+ } : prefetch;+ prefetch = _.mixin(defaults, prefetch);+ prefetch.thumbprint = VERSION + prefetch.thumbprint;+ prefetch.ajax.type = prefetch.ajax.type || "GET";+ prefetch.ajax.dataType = prefetch.ajax.dataType || "json";+ !prefetch.url && $.error("prefetch requires url to be set");+ }+ return prefetch;+ }+ function getRemote(o) {+ var remote, defaults;+ defaults = {+ url: null,+ cache: true,+ wildcard: "%QUERY",+ replace: null,+ rateLimitBy: "debounce",+ rateLimitWait: 300,+ send: null,+ filter: null,+ ajax: {}+ };+ if (remote = o.remote || null) {+ remote = _.isString(remote) ? {+ url: remote+ } : remote;+ remote = _.mixin(defaults, remote);+ remote.rateLimiter = /^throttle$/i.test(remote.rateLimitBy) ? byThrottle(remote.rateLimitWait) : byDebounce(remote.rateLimitWait);+ remote.ajax.type = remote.ajax.type || "GET";+ remote.ajax.dataType = remote.ajax.dataType || "json";+ delete remote.rateLimitBy;+ delete remote.rateLimitWait;+ !remote.url && $.error("remote requires url to be set");+ }+ return remote;+ function byDebounce(wait) {+ return function(fn) {+ return _.debounce(fn, wait);+ };+ }+ function byThrottle(wait) {+ return function(fn) {+ return _.throttle(fn, wait);+ };+ }+ }+ }();+ (function(root) {+ "use strict";+ var old, keys;+ old = root.Bloodhound;+ keys = {+ data: "data",+ protocol: "protocol",+ thumbprint: "thumbprint"+ };+ root.Bloodhound = Bloodhound;+ function Bloodhound(o) {+ if (!o || !o.local && !o.prefetch && !o.remote) {+ $.error("one of local, prefetch, or remote is required");+ }+ this.limit = o.limit || 5;+ this.sorter = getSorter(o.sorter);+ this.dupDetector = o.dupDetector || ignoreDuplicates;+ this.local = oParser.local(o);+ this.prefetch = oParser.prefetch(o);+ this.remote = oParser.remote(o);+ this.cacheKey = this.prefetch ? this.prefetch.cacheKey || this.prefetch.url : null;+ this.index = new SearchIndex({+ datumTokenizer: o.datumTokenizer,+ queryTokenizer: o.queryTokenizer+ });+ this.storage = this.cacheKey ? new PersistentStorage(this.cacheKey) : null;+ }+ Bloodhound.noConflict = function noConflict() {+ root.Bloodhound = old;+ return Bloodhound;+ };+ Bloodhound.tokenizers = tokenizers;+ _.mixin(Bloodhound.prototype, {+ _loadPrefetch: function loadPrefetch(o) {+ var that = this, serialized, deferred;+ if (serialized = this._readFromStorage(o.thumbprint)) {+ this.index.bootstrap(serialized);+ deferred = $.Deferred().resolve();+ } else {+ deferred = $.ajax(o.url, o.ajax).done(handlePrefetchResponse);+ }+ return deferred;+ function handlePrefetchResponse(resp) {+ that.clear();+ that.add(o.filter ? o.filter(resp) : resp);+ that._saveToStorage(that.index.serialize(), o.thumbprint, o.ttl);+ }+ },+ _getFromRemote: function getFromRemote(query, cb) {+ var that = this, url, uriEncodedQuery;+ if (!this.transport) {+ return;+ }+ query = query || "";+ uriEncodedQuery = encodeURIComponent(query);+ url = this.remote.replace ? this.remote.replace(this.remote.url, query) : this.remote.url.replace(this.remote.wildcard, uriEncodedQuery);+ return this.transport.get(url, this.remote.ajax, handleRemoteResponse);+ function handleRemoteResponse(err, resp) {+ err ? cb([]) : cb(that.remote.filter ? that.remote.filter(resp) : resp);+ }+ },+ _cancelLastRemoteRequest: function cancelLastRemoteRequest() {+ this.transport && this.transport.cancel();+ },+ _saveToStorage: function saveToStorage(data, thumbprint, ttl) {+ if (this.storage) {+ this.storage.set(keys.data, data, ttl);+ this.storage.set(keys.protocol, location.protocol, ttl);+ this.storage.set(keys.thumbprint, thumbprint, ttl);+ }+ },+ _readFromStorage: function readFromStorage(thumbprint) {+ var stored = {}, isExpired;+ if (this.storage) {+ stored.data = this.storage.get(keys.data);+ stored.protocol = this.storage.get(keys.protocol);+ stored.thumbprint = this.storage.get(keys.thumbprint);+ }+ isExpired = stored.thumbprint !== thumbprint || stored.protocol !== location.protocol;+ return stored.data && !isExpired ? stored.data : null;+ },+ _initialize: function initialize() {+ var that = this, local = this.local, deferred;+ deferred = this.prefetch ? this._loadPrefetch(this.prefetch) : $.Deferred().resolve();+ local && deferred.done(addLocalToIndex);+ this.transport = this.remote ? new Transport(this.remote) : null;+ return this.initPromise = deferred.promise();+ function addLocalToIndex() {+ that.add(_.isFunction(local) ? local() : local);+ }+ },+ initialize: function initialize(force) {+ return !this.initPromise || force ? this._initialize() : this.initPromise;+ },+ add: function add(data) {+ this.index.add(data);+ },+ get: function get(query, cb) {+ var that = this, matches = [], cacheHit = false;+ matches = this.index.get(query);+ matches = this.sorter(matches).slice(0, this.limit);+ matches.length < this.limit ? cacheHit = this._getFromRemote(query, returnRemoteMatches) : this._cancelLastRemoteRequest();+ if (!cacheHit) {+ (matches.length > 0 || !this.transport) && cb && cb(matches);+ }+ function returnRemoteMatches(remoteMatches) {+ var matchesWithBackfill = matches.slice(0);+ _.each(remoteMatches, function(remoteMatch) {+ var isDuplicate;+ isDuplicate = _.some(matchesWithBackfill, function(match) {+ return that.dupDetector(remoteMatch, match);+ });+ !isDuplicate && matchesWithBackfill.push(remoteMatch);+ return matchesWithBackfill.length < that.limit;+ });+ cb && cb(that.sorter(matchesWithBackfill));+ }+ },+ clear: function clear() {+ this.index.reset();+ },+ clearPrefetchCache: function clearPrefetchCache() {+ this.storage && this.storage.clear();+ },+ clearRemoteCache: function clearRemoteCache() {+ this.transport && Transport.resetCache();+ },+ ttAdapter: function ttAdapter() {+ return _.bind(this.get, this);+ }+ });+ return Bloodhound;+ function getSorter(sortFn) {+ return _.isFunction(sortFn) ? sort : noSort;+ function sort(array) {+ return array.sort(sortFn);+ }+ function noSort(array) {+ return array;+ }+ }+ function ignoreDuplicates() {+ return false;+ }+ })(this);+ var html = function() {+ return {+ wrapper: '<span class="twitter-typeahead"></span>',+ dropdown: '<span class="tt-dropdown-menu"></span>',+ dataset: '<div class="tt-dataset-%CLASS%"></div>',+ suggestions: '<span class="tt-suggestions"></span>',+ suggestion: '<div class="tt-suggestion"></div>'+ };+ }();+ var css = function() {+ "use strict";+ var css = {+ wrapper: {+ position: "relative",+ display: "inline-block"+ },+ hint: {+ position: "absolute",+ top: "0",+ left: "0",+ borderColor: "transparent",+ boxShadow: "none",+ opacity: "1"+ },+ input: {+ position: "relative",+ verticalAlign: "top",+ backgroundColor: "transparent"+ },+ inputWithNoHint: {+ position: "relative",+ verticalAlign: "top"+ },+ dropdown: {+ position: "absolute",+ top: "100%",+ left: "0",+ zIndex: "100",+ display: "none"+ },+ suggestions: {+ display: "block"+ },+ suggestion: {+ whiteSpace: "nowrap",+ cursor: "pointer"+ },+ suggestionChild: {+ whiteSpace: "normal"+ },+ ltr: {+ left: "0",+ right: "auto"+ },+ rtl: {+ left: "auto",+ right: " 0"+ }+ };+ if (_.isMsie()) {+ _.mixin(css.input, {+ backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"+ });+ }+ if (_.isMsie() && _.isMsie() <= 7) {+ _.mixin(css.input, {+ marginTop: "-1px"+ });+ }+ return css;+ }();+ var EventBus = function() {+ "use strict";+ var namespace = "typeahead:";+ function EventBus(o) {+ if (!o || !o.el) {+ $.error("EventBus initialized without el");+ }+ this.$el = $(o.el);+ }+ _.mixin(EventBus.prototype, {+ trigger: function(type) {+ var args = [].slice.call(arguments, 1);+ this.$el.trigger(namespace + type, args);+ }+ });+ return EventBus;+ }();+ var EventEmitter = function() {+ "use strict";+ var splitter = /\s+/, nextTick = getNextTick();+ return {+ onSync: onSync,+ onAsync: onAsync,+ off: off,+ trigger: trigger+ };+ function on(method, types, cb, context) {+ var type;+ if (!cb) {+ return this;+ }+ types = types.split(splitter);+ cb = context ? bindContext(cb, context) : cb;+ this._callbacks = this._callbacks || {};+ while (type = types.shift()) {+ this._callbacks[type] = this._callbacks[type] || {+ sync: [],+ async: []+ };+ this._callbacks[type][method].push(cb);+ }+ return this;+ }+ function onAsync(types, cb, context) {+ return on.call(this, "async", types, cb, context);+ }+ function onSync(types, cb, context) {+ return on.call(this, "sync", types, cb, context);+ }+ function off(types) {+ var type;+ if (!this._callbacks) {+ return this;+ }+ types = types.split(splitter);+ while (type = types.shift()) {+ delete this._callbacks[type];+ }+ return this;+ }+ function trigger(types) {+ var type, callbacks, args, syncFlush, asyncFlush;+ if (!this._callbacks) {+ return this;+ }+ types = types.split(splitter);+ args = [].slice.call(arguments, 1);+ while ((type = types.shift()) && (callbacks = this._callbacks[type])) {+ syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));+ asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));+ syncFlush() && nextTick(asyncFlush);+ }+ return this;+ }+ function getFlush(callbacks, context, args) {+ return flush;+ function flush() {+ var cancelled;+ for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {+ cancelled = callbacks[i].apply(context, args) === false;+ }+ return !cancelled;+ }+ }+ function getNextTick() {+ var nextTickFn;+ if (window.setImmediate) {+ nextTickFn = function nextTickSetImmediate(fn) {+ setImmediate(function() {+ fn();+ });+ };+ } else {+ nextTickFn = function nextTickSetTimeout(fn) {+ setTimeout(function() {+ fn();+ }, 0);+ };+ }+ return nextTickFn;+ }+ function bindContext(fn, context) {+ return fn.bind ? fn.bind(context) : function() {+ fn.apply(context, [].slice.call(arguments, 0));+ };+ }+ }();+ var highlight = function(doc) {+ "use strict";+ var defaults = {+ node: null,+ pattern: null,+ tagName: "strong",+ className: null,+ wordsOnly: false,+ caseSensitive: false+ };+ return function hightlight(o) {+ var regex;+ o = _.mixin({}, defaults, o);+ if (!o.node || !o.pattern) {+ return;+ }+ o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];+ regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);+ traverse(o.node, hightlightTextNode);+ function hightlightTextNode(textNode) {+ var match, patternNode, wrapperNode;+ if (match = regex.exec(textNode.data)) {+ wrapperNode = doc.createElement(o.tagName);+ o.className && (wrapperNode.className = o.className);+ patternNode = textNode.splitText(match.index);+ patternNode.splitText(match[0].length);+ wrapperNode.appendChild(patternNode.cloneNode(true));+ textNode.parentNode.replaceChild(wrapperNode, patternNode);+ }+ return !!match;+ }+ function traverse(el, hightlightTextNode) {+ var childNode, TEXT_NODE_TYPE = 3;+ for (var i = 0; i < el.childNodes.length; i++) {+ childNode = el.childNodes[i];+ if (childNode.nodeType === TEXT_NODE_TYPE) {+ i += hightlightTextNode(childNode) ? 1 : 0;+ } else {+ traverse(childNode, hightlightTextNode);+ }+ }+ }+ };+ function getRegex(patterns, caseSensitive, wordsOnly) {+ var escapedPatterns = [], regexStr;+ for (var i = 0, len = patterns.length; i < len; i++) {+ escapedPatterns.push(_.escapeRegExChars(patterns[i]));+ }+ regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")";+ return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i");+ }+ }(window.document);+ var Input = function() {+ "use strict";+ var specialKeyCodeMap;+ specialKeyCodeMap = {+ 9: "tab",+ 27: "esc",+ 37: "left",+ 39: "right",+ 13: "enter",+ 38: "up",+ 40: "down"+ };+ function Input(o) {+ var that = this, onBlur, onFocus, onKeydown, onInput;+ o = o || {};+ if (!o.input) {+ $.error("input is missing");+ }+ onBlur = _.bind(this._onBlur, this);+ onFocus = _.bind(this._onFocus, this);+ onKeydown = _.bind(this._onKeydown, this);+ onInput = _.bind(this._onInput, this);+ this.$hint = $(o.hint);+ this.$input = $(o.input).on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown);+ if (this.$hint.length === 0) {+ this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;+ }+ if (!_.isMsie()) {+ this.$input.on("input.tt", onInput);+ } else {+ this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) {+ if (specialKeyCodeMap[$e.which || $e.keyCode]) {+ return;+ }+ _.defer(_.bind(that._onInput, that, $e));+ });+ }+ this.query = this.$input.val();+ this.$overflowHelper = buildOverflowHelper(this.$input);+ }+ Input.normalizeQuery = function(str) {+ return (str || "").replace(/^\s*/g, "").replace(/\s{2,}/g, " ");+ };+ _.mixin(Input.prototype, EventEmitter, {+ _onBlur: function onBlur() {+ this.resetInputValue();+ this.trigger("blurred");+ },+ _onFocus: function onFocus() {+ this.trigger("focused");+ },+ _onKeydown: function onKeydown($e) {+ var keyName = specialKeyCodeMap[$e.which || $e.keyCode];+ this._managePreventDefault(keyName, $e);+ if (keyName && this._shouldTrigger(keyName, $e)) {+ this.trigger(keyName + "Keyed", $e);+ }+ },+ _onInput: function onInput() {+ this._checkInputValue();+ },+ _managePreventDefault: function managePreventDefault(keyName, $e) {+ var preventDefault, hintValue, inputValue;+ switch (keyName) {+ case "tab":+ hintValue = this.getHint();+ inputValue = this.getInputValue();+ preventDefault = hintValue && hintValue !== inputValue && !withModifier($e);+ break;++ case "up":+ case "down":+ preventDefault = !withModifier($e);+ break;++ default:+ preventDefault = false;+ }+ preventDefault && $e.preventDefault();+ },+ _shouldTrigger: function shouldTrigger(keyName, $e) {+ var trigger;+ switch (keyName) {+ case "tab":+ trigger = !withModifier($e);+ break;++ default:+ trigger = true;+ }+ return trigger;+ },+ _checkInputValue: function checkInputValue() {+ var inputValue, areEquivalent, hasDifferentWhitespace;+ inputValue = this.getInputValue();+ areEquivalent = areQueriesEquivalent(inputValue, this.query);+ hasDifferentWhitespace = areEquivalent ? this.query.length !== inputValue.length : false;+ this.query = inputValue;+ if (!areEquivalent) {+ this.trigger("queryChanged", this.query);+ } else if (hasDifferentWhitespace) {+ this.trigger("whitespaceChanged", this.query);+ }+ },+ focus: function focus() {+ this.$input.focus();+ },+ blur: function blur() {+ this.$input.blur();+ },+ getQuery: function getQuery() {+ return this.query;+ },+ setQuery: function setQuery(query) {+ this.query = query;+ },+ getInputValue: function getInputValue() {+ return this.$input.val();+ },+ setInputValue: function setInputValue(value, silent) {+ this.$input.val(value);+ silent ? this.clearHint() : this._checkInputValue();+ },+ resetInputValue: function resetInputValue() {+ this.setInputValue(this.query, true);+ },+ getHint: function getHint() {+ return this.$hint.val();+ },+ setHint: function setHint(value) {+ this.$hint.val(value);+ },+ clearHint: function clearHint() {+ this.setHint("");+ },+ clearHintIfInvalid: function clearHintIfInvalid() {+ var val, hint, valIsPrefixOfHint, isValid;+ val = this.getInputValue();+ hint = this.getHint();+ valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;+ isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow();+ !isValid && this.clearHint();+ },+ getLanguageDirection: function getLanguageDirection() {+ return (this.$input.css("direction") || "ltr").toLowerCase();+ },+ hasOverflow: function hasOverflow() {+ var constraint = this.$input.width() - 2;+ this.$overflowHelper.text(this.getInputValue());+ return this.$overflowHelper.width() >= constraint;+ },+ isCursorAtEnd: function() {+ var valueLength, selectionStart, range;+ valueLength = this.$input.val().length;+ selectionStart = this.$input[0].selectionStart;+ if (_.isNumber(selectionStart)) {+ return selectionStart === valueLength;+ } else if (document.selection) {+ range = document.selection.createRange();+ range.moveStart("character", -valueLength);+ return valueLength === range.text.length;+ }+ return true;+ },+ destroy: function destroy() {+ this.$hint.off(".tt");+ this.$input.off(".tt");+ this.$hint = this.$input = this.$overflowHelper = null;+ }+ });+ return Input;+ function buildOverflowHelper($input) {+ return $('<pre aria-hidden="true"></pre>').css({+ position: "absolute",+ visibility: "hidden",+ whiteSpace: "pre",+ fontFamily: $input.css("font-family"),+ fontSize: $input.css("font-size"),+ fontStyle: $input.css("font-style"),+ fontVariant: $input.css("font-variant"),+ fontWeight: $input.css("font-weight"),+ wordSpacing: $input.css("word-spacing"),+ letterSpacing: $input.css("letter-spacing"),+ textIndent: $input.css("text-indent"),+ textRendering: $input.css("text-rendering"),+ textTransform: $input.css("text-transform")+ }).insertAfter($input);+ }+ function areQueriesEquivalent(a, b) {+ return Input.normalizeQuery(a) === Input.normalizeQuery(b);+ }+ function withModifier($e) {+ return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;+ }+ }();+ var Dataset = function() {+ "use strict";+ var datasetKey = "ttDataset", valueKey = "ttValue", datumKey = "ttDatum";+ function Dataset(o) {+ o = o || {};+ o.templates = o.templates || {};+ if (!o.source) {+ $.error("missing source");+ }+ if (o.name && !isValidName(o.name)) {+ $.error("invalid dataset name: " + o.name);+ }+ this.query = null;+ this.highlight = !!o.highlight;+ this.name = o.name || _.getUniqueId();+ this.source = o.source;+ this.displayFn = getDisplayFn(o.display || o.displayKey);+ this.templates = getTemplates(o.templates, this.displayFn);+ this.$el = $(html.dataset.replace("%CLASS%", this.name));+ }+ Dataset.extractDatasetName = function extractDatasetName(el) {+ return $(el).data(datasetKey);+ };+ Dataset.extractValue = function extractDatum(el) {+ return $(el).data(valueKey);+ };+ Dataset.extractDatum = function extractDatum(el) {+ return $(el).data(datumKey);+ };+ _.mixin(Dataset.prototype, EventEmitter, {+ _render: function render(query, suggestions) {+ if (!this.$el) {+ return;+ }+ var that = this, hasSuggestions;+ this.$el.empty();+ hasSuggestions = suggestions && suggestions.length;+ if (!hasSuggestions && this.templates.empty) {+ this.$el.html(getEmptyHtml()).prepend(that.templates.header ? getHeaderHtml() : null).append(that.templates.footer ? getFooterHtml() : null);+ } else if (hasSuggestions) {+ this.$el.html(getSuggestionsHtml()).prepend(that.templates.header ? getHeaderHtml() : null).append(that.templates.footer ? getFooterHtml() : null);+ }+ this.trigger("rendered");+ function getEmptyHtml() {+ return that.templates.empty({+ query: query,+ isEmpty: true+ });+ }+ function getSuggestionsHtml() {+ var $suggestions, nodes;+ $suggestions = $(html.suggestions).css(css.suggestions);+ nodes = _.map(suggestions, getSuggestionNode);+ $suggestions.append.apply($suggestions, nodes);+ that.highlight && highlight({+ className: "tt-highlight",+ node: $suggestions[0],+ pattern: query+ });+ return $suggestions;+ function getSuggestionNode(suggestion) {+ var $el;+ $el = $(html.suggestion).append(that.templates.suggestion(suggestion)).data(datasetKey, that.name).data(valueKey, that.displayFn(suggestion)).data(datumKey, suggestion);+ $el.children().each(function() {+ $(this).css(css.suggestionChild);+ });+ return $el;+ }+ }+ function getHeaderHtml() {+ return that.templates.header({+ query: query,+ isEmpty: !hasSuggestions+ });+ }+ function getFooterHtml() {+ return that.templates.footer({+ query: query,+ isEmpty: !hasSuggestions+ });+ }+ },+ getRoot: function getRoot() {+ return this.$el;+ },+ update: function update(query) {+ var that = this;+ this.query = query;+ this.canceled = false;+ this.source(query, render);+ function render(suggestions) {+ if (!that.canceled && query === that.query) {+ that._render(query, suggestions);+ }+ }+ },+ cancel: function cancel() {+ this.canceled = true;+ },+ clear: function clear() {+ this.cancel();+ this.$el.empty();+ this.trigger("rendered");+ },+ isEmpty: function isEmpty() {+ return this.$el.is(":empty");+ },+ destroy: function destroy() {+ this.$el = null;+ }+ });+ return Dataset;+ function getDisplayFn(display) {+ display = display || "value";+ return _.isFunction(display) ? display : displayFn;+ function displayFn(obj) {+ return obj[display];+ }+ }+ function getTemplates(templates, displayFn) {+ return {+ empty: templates.empty && _.templatify(templates.empty),+ header: templates.header && _.templatify(templates.header),+ footer: templates.footer && _.templatify(templates.footer),+ suggestion: templates.suggestion || suggestionTemplate+ };+ function suggestionTemplate(context) {+ return "<p>" + displayFn(context) + "</p>";+ }+ }+ function isValidName(str) {+ return /^[_a-zA-Z0-9-]+$/.test(str);+ }+ }();+ var Dropdown = function() {+ "use strict";+ function Dropdown(o) {+ var that = this, onSuggestionClick, onSuggestionMouseEnter, onSuggestionMouseLeave;+ o = o || {};+ if (!o.menu) {+ $.error("menu is required");+ }+ this.isOpen = false;+ this.isEmpty = true;+ this.datasets = _.map(o.datasets, initializeDataset);+ onSuggestionClick = _.bind(this._onSuggestionClick, this);+ onSuggestionMouseEnter = _.bind(this._onSuggestionMouseEnter, this);+ onSuggestionMouseLeave = _.bind(this._onSuggestionMouseLeave, this);+ this.$menu = $(o.menu).on("click.tt", ".tt-suggestion", onSuggestionClick).on("mouseenter.tt", ".tt-suggestion", onSuggestionMouseEnter).on("mouseleave.tt", ".tt-suggestion", onSuggestionMouseLeave);+ _.each(this.datasets, function(dataset) {+ that.$menu.append(dataset.getRoot());+ dataset.onSync("rendered", that._onRendered, that);+ });+ }+ _.mixin(Dropdown.prototype, EventEmitter, {+ _onSuggestionClick: function onSuggestionClick($e) {+ this.trigger("suggestionClicked", $($e.currentTarget));+ },+ _onSuggestionMouseEnter: function onSuggestionMouseEnter($e) {+ this._removeCursor();+ this._setCursor($($e.currentTarget), true);+ },+ _onSuggestionMouseLeave: function onSuggestionMouseLeave() {+ this._removeCursor();+ },+ _onRendered: function onRendered() {+ this.isEmpty = _.every(this.datasets, isDatasetEmpty);+ this.isEmpty ? this._hide() : this.isOpen && this._show();+ this.trigger("datasetRendered");+ function isDatasetEmpty(dataset) {+ return dataset.isEmpty();+ }+ },+ _hide: function() {+ this.$menu.hide();+ },+ _show: function() {+ this.$menu.css("display", "block");+ },+ _getSuggestions: function getSuggestions() {+ return this.$menu.find(".tt-suggestion");+ },+ _getCursor: function getCursor() {+ return this.$menu.find(".tt-cursor").first();+ },+ _setCursor: function setCursor($el, silent) {+ $el.first().addClass("tt-cursor");+ !silent && this.trigger("cursorMoved");+ },+ _removeCursor: function removeCursor() {+ this._getCursor().removeClass("tt-cursor");+ },+ _moveCursor: function moveCursor(increment) {+ var $suggestions, $oldCursor, newCursorIndex, $newCursor;+ if (!this.isOpen) {+ return;+ }+ $oldCursor = this._getCursor();+ $suggestions = this._getSuggestions();+ this._removeCursor();+ newCursorIndex = $suggestions.index($oldCursor) + increment;+ newCursorIndex = (newCursorIndex + 1) % ($suggestions.length + 1) - 1;+ if (newCursorIndex === -1) {+ this.trigger("cursorRemoved");+ return;+ } else if (newCursorIndex < -1) {+ newCursorIndex = $suggestions.length - 1;+ }+ this._setCursor($newCursor = $suggestions.eq(newCursorIndex));+ this._ensureVisible($newCursor);+ },+ _ensureVisible: function ensureVisible($el) {+ var elTop, elBottom, menuScrollTop, menuHeight;+ elTop = $el.position().top;+ elBottom = elTop + $el.outerHeight(true);+ menuScrollTop = this.$menu.scrollTop();+ menuHeight = this.$menu.height() + parseInt(this.$menu.css("paddingTop"), 10) + parseInt(this.$menu.css("paddingBottom"), 10);+ if (elTop < 0) {+ this.$menu.scrollTop(menuScrollTop + elTop);+ } else if (menuHeight < elBottom) {+ this.$menu.scrollTop(menuScrollTop + (elBottom - menuHeight));+ }+ },+ close: function close() {+ if (this.isOpen) {+ this.isOpen = false;+ this._removeCursor();+ this._hide();+ this.trigger("closed");+ }+ },+ open: function open() {+ if (!this.isOpen) {+ this.isOpen = true;+ !this.isEmpty && this._show();+ this.trigger("opened");+ }+ },+ setLanguageDirection: function setLanguageDirection(dir) {+ this.$menu.css(dir === "ltr" ? css.ltr : css.rtl);+ },+ moveCursorUp: function moveCursorUp() {+ this._moveCursor(-1);+ },+ moveCursorDown: function moveCursorDown() {+ this._moveCursor(+1);+ },+ getDatumForSuggestion: function getDatumForSuggestion($el) {+ var datum = null;+ if ($el.length) {+ datum = {+ raw: Dataset.extractDatum($el),+ value: Dataset.extractValue($el),+ datasetName: Dataset.extractDatasetName($el)+ };+ }+ return datum;+ },+ getDatumForCursor: function getDatumForCursor() {+ return this.getDatumForSuggestion(this._getCursor().first());+ },+ getDatumForTopSuggestion: function getDatumForTopSuggestion() {+ return this.getDatumForSuggestion(this._getSuggestions().first());+ },+ update: function update(query) {+ _.each(this.datasets, updateDataset);+ function updateDataset(dataset) {+ dataset.update(query);+ }+ },+ empty: function empty() {+ _.each(this.datasets, clearDataset);+ this.isEmpty = true;+ function clearDataset(dataset) {+ dataset.clear();+ }+ },+ isVisible: function isVisible() {+ return this.isOpen && !this.isEmpty;+ },+ destroy: function destroy() {+ this.$menu.off(".tt");+ this.$menu = null;+ _.each(this.datasets, destroyDataset);+ function destroyDataset(dataset) {+ dataset.destroy();+ }+ }+ });+ return Dropdown;+ function initializeDataset(oDataset) {+ return new Dataset(oDataset);+ }+ }();+ var Typeahead = function() {+ "use strict";+ var attrsKey = "ttAttrs";+ function Typeahead(o) {+ var $menu, $input, $hint;+ o = o || {};+ if (!o.input) {+ $.error("missing input");+ }+ this.isActivated = false;+ this.autoselect = !!o.autoselect;+ this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;+ this.$node = buildDom(o.input, o.withHint);+ $menu = this.$node.find(".tt-dropdown-menu");+ $input = this.$node.find(".tt-input");+ $hint = this.$node.find(".tt-hint");+ $input.on("blur.tt", function($e) {+ var active, isActive, hasActive;+ active = document.activeElement;+ isActive = $menu.is(active);+ hasActive = $menu.has(active).length > 0;+ if (_.isMsie() && (isActive || hasActive)) {+ $e.preventDefault();+ $e.stopImmediatePropagation();+ _.defer(function() {+ $input.focus();+ });+ }+ });+ $menu.on("mousedown.tt", function($e) {+ $e.preventDefault();+ });+ this.eventBus = o.eventBus || new EventBus({+ el: $input+ });+ this.dropdown = new Dropdown({+ menu: $menu,+ datasets: o.datasets+ }).onSync("suggestionClicked", this._onSuggestionClicked, this).onSync("cursorMoved", this._onCursorMoved, this).onSync("cursorRemoved", this._onCursorRemoved, this).onSync("opened", this._onOpened, this).onSync("closed", this._onClosed, this).onAsync("datasetRendered", this._onDatasetRendered, this);+ this.input = new Input({+ input: $input,+ hint: $hint+ }).onSync("focused", this._onFocused, this).onSync("blurred", this._onBlurred, this).onSync("enterKeyed", this._onEnterKeyed, this).onSync("tabKeyed", this._onTabKeyed, this).onSync("escKeyed", this._onEscKeyed, this).onSync("upKeyed", this._onUpKeyed, this).onSync("downKeyed", this._onDownKeyed, this).onSync("leftKeyed", this._onLeftKeyed, this).onSync("rightKeyed", this._onRightKeyed, this).onSync("queryChanged", this._onQueryChanged, this).onSync("whitespaceChanged", this._onWhitespaceChanged, this);+ this._setLanguageDirection();+ }+ _.mixin(Typeahead.prototype, {+ _onSuggestionClicked: function onSuggestionClicked(type, $el) {+ var datum;+ if (datum = this.dropdown.getDatumForSuggestion($el)) {+ this._select(datum);+ }+ },+ _onCursorMoved: function onCursorMoved() {+ var datum = this.dropdown.getDatumForCursor();+ this.input.setInputValue(datum.value, true);+ this.eventBus.trigger("cursorchanged", datum.raw, datum.datasetName);+ },+ _onCursorRemoved: function onCursorRemoved() {+ this.input.resetInputValue();+ this._updateHint();+ },+ _onDatasetRendered: function onDatasetRendered() {+ this._updateHint();+ },+ _onOpened: function onOpened() {+ this._updateHint();+ this.eventBus.trigger("opened");+ },+ _onClosed: function onClosed() {+ this.input.clearHint();+ this.eventBus.trigger("closed");+ },+ _onFocused: function onFocused() {+ this.isActivated = true;+ this.dropdown.open();+ },+ _onBlurred: function onBlurred() {+ this.isActivated = false;+ this.dropdown.empty();+ this.dropdown.close();+ },+ _onEnterKeyed: function onEnterKeyed(type, $e) {+ var cursorDatum, topSuggestionDatum;+ cursorDatum = this.dropdown.getDatumForCursor();+ topSuggestionDatum = this.dropdown.getDatumForTopSuggestion();+ if (cursorDatum) {+ this._select(cursorDatum);+ $e.preventDefault();+ } else if (this.autoselect && topSuggestionDatum) {+ this._select(topSuggestionDatum);+ $e.preventDefault();+ }+ },+ _onTabKeyed: function onTabKeyed(type, $e) {+ var datum;+ if (datum = this.dropdown.getDatumForCursor()) {+ this._select(datum);+ $e.preventDefault();+ } else {+ this._autocomplete(true);+ }+ },+ _onEscKeyed: function onEscKeyed() {+ this.dropdown.close();+ this.input.resetInputValue();+ },+ _onUpKeyed: function onUpKeyed() {+ var query = this.input.getQuery();+ this.dropdown.isEmpty && query.length >= this.minLength ? this.dropdown.update(query) : this.dropdown.moveCursorUp();+ this.dropdown.open();+ },+ _onDownKeyed: function onDownKeyed() {+ var query = this.input.getQuery();+ this.dropdown.isEmpty && query.length >= this.minLength ? this.dropdown.update(query) : this.dropdown.moveCursorDown();+ this.dropdown.open();+ },+ _onLeftKeyed: function onLeftKeyed() {+ this.dir === "rtl" && this._autocomplete();+ },+ _onRightKeyed: function onRightKeyed() {+ this.dir === "ltr" && this._autocomplete();+ },+ _onQueryChanged: function onQueryChanged(e, query) {+ this.input.clearHintIfInvalid();+ query.length >= this.minLength ? this.dropdown.update(query) : this.dropdown.empty();+ this.dropdown.open();+ this._setLanguageDirection();+ },+ _onWhitespaceChanged: function onWhitespaceChanged() {+ this._updateHint();+ this.dropdown.open();+ },+ _setLanguageDirection: function setLanguageDirection() {+ var dir;+ if (this.dir !== (dir = this.input.getLanguageDirection())) {+ this.dir = dir;+ this.$node.css("direction", dir);+ this.dropdown.setLanguageDirection(dir);+ }+ },+ _updateHint: function updateHint() {+ var datum, val, query, escapedQuery, frontMatchRegEx, match;+ datum = this.dropdown.getDatumForTopSuggestion();+ if (datum && this.dropdown.isVisible() && !this.input.hasOverflow()) {+ val = this.input.getInputValue();+ query = Input.normalizeQuery(val);+ escapedQuery = _.escapeRegExChars(query);+ frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");+ match = frontMatchRegEx.exec(datum.value);+ match ? this.input.setHint(val + match[1]) : this.input.clearHint();+ } else {+ this.input.clearHint();+ }+ },+ _autocomplete: function autocomplete(laxCursor) {+ var hint, query, isCursorAtEnd, datum;+ hint = this.input.getHint();+ query = this.input.getQuery();+ isCursorAtEnd = laxCursor || this.input.isCursorAtEnd();+ if (hint && query !== hint && isCursorAtEnd) {+ datum = this.dropdown.getDatumForTopSuggestion();+ datum && this.input.setInputValue(datum.value);+ this.eventBus.trigger("autocompleted", datum.raw, datum.datasetName);+ }+ },+ _select: function select(datum) {+ this.input.setQuery(datum.value);+ this.input.setInputValue(datum.value, true);+ this._setLanguageDirection();+ this.eventBus.trigger("selected", datum.raw, datum.datasetName);+ this.dropdown.close();+ _.defer(_.bind(this.dropdown.empty, this.dropdown));+ },+ open: function open() {+ this.dropdown.open();+ },+ close: function close() {+ this.dropdown.close();+ },+ setVal: function setVal(val) {+ val = _.toStr(val);+ if (this.isActivated) {+ this.input.setInputValue(val);+ } else {+ this.input.setQuery(val);+ this.input.setInputValue(val, true);+ }+ this._setLanguageDirection();+ },+ getVal: function getVal() {+ return this.input.getQuery();+ },+ destroy: function destroy() {+ this.input.destroy();+ this.dropdown.destroy();+ destroyDomStructure(this.$node);+ this.$node = null;+ }+ });+ return Typeahead;+ function buildDom(input, withHint) {+ var $input, $wrapper, $dropdown, $hint;+ $input = $(input);+ $wrapper = $(html.wrapper).css(css.wrapper);+ $dropdown = $(html.dropdown).css(css.dropdown);+ $hint = $input.clone().css(css.hint).css(getBackgroundStyles($input));+ $hint.val("").removeData().addClass("tt-hint").removeAttr("id name placeholder required").prop("readonly", true).attr({+ autocomplete: "off",+ spellcheck: "false",+ tabindex: -1+ });+ $input.data(attrsKey, {+ dir: $input.attr("dir"),+ autocomplete: $input.attr("autocomplete"),+ spellcheck: $input.attr("spellcheck"),+ style: $input.attr("style")+ });+ $input.addClass("tt-input").attr({+ autocomplete: "off",+ spellcheck: false+ }).css(withHint ? css.input : css.inputWithNoHint);+ try {+ !$input.attr("dir") && $input.attr("dir", "auto");+ } catch (e) {}+ return $input.wrap($wrapper).parent().prepend(withHint ? $hint : null).append($dropdown);+ }+ function getBackgroundStyles($el) {+ return {+ backgroundAttachment: $el.css("background-attachment"),+ backgroundClip: $el.css("background-clip"),+ backgroundColor: $el.css("background-color"),+ backgroundImage: $el.css("background-image"),+ backgroundOrigin: $el.css("background-origin"),+ backgroundPosition: $el.css("background-position"),+ backgroundRepeat: $el.css("background-repeat"),+ backgroundSize: $el.css("background-size")+ };+ }+ function destroyDomStructure($node) {+ var $input = $node.find(".tt-input");+ _.each($input.data(attrsKey), function(val, key) {+ _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);+ });+ $input.detach().removeData(attrsKey).removeClass("tt-input").insertAfter($node);+ $node.remove();+ }+ }();+ (function() {+ "use strict";+ var old, typeaheadKey, methods;+ old = $.fn.typeahead;+ typeaheadKey = "ttTypeahead";+ methods = {+ initialize: function initialize(o, datasets) {+ datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);+ o = o || {};+ return this.each(attach);+ function attach() {+ var $input = $(this), eventBus, typeahead;+ _.each(datasets, function(d) {+ d.highlight = !!o.highlight;+ });+ typeahead = new Typeahead({+ input: $input,+ eventBus: eventBus = new EventBus({+ el: $input+ }),+ withHint: _.isUndefined(o.hint) ? true : !!o.hint,+ minLength: o.minLength,+ autoselect: o.autoselect,+ datasets: datasets+ });+ $input.data(typeaheadKey, typeahead);+ }+ },+ open: function open() {+ return this.each(openTypeahead);+ function openTypeahead() {+ var $input = $(this), typeahead;+ if (typeahead = $input.data(typeaheadKey)) {+ typeahead.open();+ }+ }+ },+ close: function close() {+ return this.each(closeTypeahead);+ function closeTypeahead() {+ var $input = $(this), typeahead;+ if (typeahead = $input.data(typeaheadKey)) {+ typeahead.close();+ }+ }+ },+ val: function val(newVal) {+ return !arguments.length ? getVal(this.first()) : this.each(setVal);+ function setVal() {+ var $input = $(this), typeahead;+ if (typeahead = $input.data(typeaheadKey)) {+ typeahead.setVal(newVal);+ }+ }+ function getVal($input) {+ var typeahead, query;+ if (typeahead = $input.data(typeaheadKey)) {+ query = typeahead.getVal();+ }+ return query;+ }+ },+ destroy: function destroy() {+ return this.each(unattach);+ function unattach() {+ var $input = $(this), typeahead;+ if (typeahead = $input.data(typeaheadKey)) {+ typeahead.destroy();+ $input.removeData(typeaheadKey);+ }+ }+ }+ };+ $.fn.typeahead = function(method) {+ var tts;+ if (methods[method] && method !== "initialize") {+ tts = this.filter(function() {+ return !!$(this).data(typeaheadKey);+ });+ return methods[method].apply(tts, [].slice.call(arguments, 1));+ } else {+ return methods.initialize.apply(this, arguments);+ }+ };+ $.fn.typeahead.noConflict = function noConflict() {+ $.fn.typeahead = old;+ return this;+ };+ })();+})(window.jQuery);
@@ -0,0 +1,7 @@+/*!+ * typeahead.js 0.10.4+ * https://github.com/twitter/typeahead.js+ * Copyright 2013-2014 Twitter, Inc. and other contributors; Licensed MIT+ */++!function(a){var b=function(){"use strict";return{isMsie:function(){return/(msie|trident)/i.test(navigator.userAgent)?navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]:!1},isBlankString:function(a){return!a||/^\s*$/.test(a)},escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(a){return"string"==typeof a},isNumber:function(a){return"number"==typeof a},isArray:a.isArray,isFunction:a.isFunction,isObject:a.isPlainObject,isUndefined:function(a){return"undefined"==typeof a},toStr:function(a){return b.isUndefined(a)||null===a?"":a+""},bind:a.proxy,each:function(b,c){function d(a,b){return c(b,a)}a.each(b,d)},map:a.map,filter:a.grep,every:function(b,c){var d=!0;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?void 0:!1}),!!d):d},some:function(b,c){var d=!1;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?!1:void 0}),!!d):d},mixin:a.extend,getUniqueId:function(){var a=0;return function(){return a++}}(),templatify:function(b){function c(){return String(b)}return a.isFunction(b)?b:c},defer:function(a){setTimeout(a,0)},debounce:function(a,b,c){var d,e;return function(){var f,g,h=this,i=arguments;return f=function(){d=null,c||(e=a.apply(h,i))},g=c&&!d,clearTimeout(d),d=setTimeout(f,b),g&&(e=a.apply(h,i)),e}},throttle:function(a,b){var c,d,e,f,g,h;return g=0,h=function(){g=new Date,e=null,f=a.apply(c,d)},function(){var i=new Date,j=b-(i-g);return c=this,d=arguments,0>=j?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},noop:function(){}}}(),c="0.10.4",d=function(){"use strict";function a(a){return a=b.toStr(a),a?a.split(/\s+/):[]}function c(a){return a=b.toStr(a),a?a.split(/\W+/):[]}function d(a){return function(){var c=[].slice.call(arguments,0);return function(d){var e=[];return b.each(c,function(c){e=e.concat(a(b.toStr(d[c])))}),e}}}return{nonword:c,whitespace:a,obj:{nonword:d(c),whitespace:d(a)}}}(),e=function(){"use strict";function c(c){this.maxSize=b.isNumber(c)?c:100,this.reset(),this.maxSize<=0&&(this.set=this.get=a.noop)}function d(){this.head=this.tail=null}function e(a,b){this.key=a,this.val=b,this.prev=this.next=null}return b.mixin(c.prototype,{set:function(a,b){var c,d=this.list.tail;this.size>=this.maxSize&&(this.list.remove(d),delete this.hash[d.key]),(c=this.hash[a])?(c.val=b,this.list.moveToFront(c)):(c=new e(a,b),this.list.add(c),this.hash[a]=c,this.size++)},get:function(a){var b=this.hash[a];return b?(this.list.moveToFront(b),b.val):void 0},reset:function(){this.size=0,this.hash={},this.list=new d}}),b.mixin(d.prototype,{add:function(a){this.head&&(a.next=this.head,this.head.prev=a),this.head=a,this.tail=this.tail||a},remove:function(a){a.prev?a.prev.next=a.next:this.head=a.next,a.next?a.next.prev=a.prev:this.tail=a.prev},moveToFront:function(a){this.remove(a),this.add(a)}}),c}(),f=function(){"use strict";function a(a){this.prefix=["__",a,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+b.escapeRegExChars(this.prefix))}function c(){return(new Date).getTime()}function d(a){return JSON.stringify(b.isUndefined(a)?null:a)}function e(a){return JSON.parse(a)}var f,g;try{f=window.localStorage,f.setItem("~~~","!"),f.removeItem("~~~")}catch(h){f=null}return g=f&&window.JSON?{_prefix:function(a){return this.prefix+a},_ttlKey:function(a){return this._prefix(a)+this.ttlKey},get:function(a){return this.isExpired(a)&&this.remove(a),e(f.getItem(this._prefix(a)))},set:function(a,e,g){return b.isNumber(g)?f.setItem(this._ttlKey(a),d(c()+g)):f.removeItem(this._ttlKey(a)),f.setItem(this._prefix(a),d(e))},remove:function(a){return f.removeItem(this._ttlKey(a)),f.removeItem(this._prefix(a)),this},clear:function(){var a,b,c=[],d=f.length;for(a=0;d>a;a++)(b=f.key(a)).match(this.keyMatcher)&&c.push(b.replace(this.keyMatcher,""));for(a=c.length;a--;)this.remove(c[a]);return this},isExpired:function(a){var d=e(f.getItem(this._ttlKey(a)));return b.isNumber(d)&&c()>d?!0:!1}}:{get:b.noop,set:b.noop,remove:b.noop,clear:b.noop,isExpired:b.noop},b.mixin(a.prototype,g),a}(),g=function(){"use strict";function c(b){b=b||{},this.cancelled=!1,this.lastUrl=null,this._send=b.transport?d(b.transport):a.ajax,this._get=b.rateLimiter?b.rateLimiter(this._get):this._get,this._cache=b.cache===!1?new e(0):i}function d(c){return function(d,e){function f(a){b.defer(function(){h.resolve(a)})}function g(a){b.defer(function(){h.reject(a)})}var h=a.Deferred();return c(d,e,f,g),h}}var f=0,g={},h=6,i=new e(10);return c.setMaxPendingRequests=function(a){h=a},c.resetCache=function(){i.reset()},b.mixin(c.prototype,{_get:function(a,b,c){function d(b){c&&c(null,b),k._cache.set(a,b)}function e(){c&&c(!0)}function i(){f--,delete g[a],k.onDeckRequestArgs&&(k._get.apply(k,k.onDeckRequestArgs),k.onDeckRequestArgs=null)}var j,k=this;this.cancelled||a!==this.lastUrl||((j=g[a])?j.done(d).fail(e):h>f?(f++,g[a]=this._send(a,b).done(d).fail(e).always(i)):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(a,c,d){var e;return b.isFunction(c)&&(d=c,c={}),this.cancelled=!1,this.lastUrl=a,(e=this._cache.get(a))?b.defer(function(){d&&d(null,e)}):this._get(a,c,d),!!e},cancel:function(){this.cancelled=!0}}),c}(),h=function(){"use strict";function c(b){b=b||{},b.datumTokenizer&&b.queryTokenizer||a.error("datumTokenizer and queryTokenizer are both required"),this.datumTokenizer=b.datumTokenizer,this.queryTokenizer=b.queryTokenizer,this.reset()}function d(a){return a=b.filter(a,function(a){return!!a}),a=b.map(a,function(a){return a.toLowerCase()})}function e(){return{ids:[],children:{}}}function f(a){for(var b={},c=[],d=0,e=a.length;e>d;d++)b[a[d]]||(b[a[d]]=!0,c.push(a[d]));return c}function g(a,b){function c(a,b){return a-b}var d=0,e=0,f=[];a=a.sort(c),b=b.sort(c);for(var g=a.length,h=b.length;g>d&&h>e;)a[d]<b[e]?d++:a[d]>b[e]?e++:(f.push(a[d]),d++,e++);return f}return b.mixin(c.prototype,{bootstrap:function(a){this.datums=a.datums,this.trie=a.trie},add:function(a){var c=this;a=b.isArray(a)?a:[a],b.each(a,function(a){var f,g;f=c.datums.push(a)-1,g=d(c.datumTokenizer(a)),b.each(g,function(a){var b,d,g;for(b=c.trie,d=a.split("");g=d.shift();)b=b.children[g]||(b.children[g]=e()),b.ids.push(f)})})},get:function(a){var c,e,h=this;return c=d(this.queryTokenizer(a)),b.each(c,function(a){var b,c,d,f;if(e&&0===e.length)return!1;for(b=h.trie,c=a.split("");b&&(d=c.shift());)b=b.children[d];return b&&0===c.length?(f=b.ids.slice(0),void(e=e?g(e,f):f)):(e=[],!1)}),e?b.map(f(e),function(a){return h.datums[a]}):[]},reset:function(){this.datums=[],this.trie=e()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),c}(),i=function(){"use strict";function d(a){return a.local||null}function e(d){var e,f;return f={url:null,thumbprint:"",ttl:864e5,filter:null,ajax:{}},(e=d.prefetch||null)&&(e=b.isString(e)?{url:e}:e,e=b.mixin(f,e),e.thumbprint=c+e.thumbprint,e.ajax.type=e.ajax.type||"GET",e.ajax.dataType=e.ajax.dataType||"json",!e.url&&a.error("prefetch requires url to be set")),e}function f(c){function d(a){return function(c){return b.debounce(c,a)}}function e(a){return function(c){return b.throttle(c,a)}}var f,g;return g={url:null,cache:!0,wildcard:"%QUERY",replace:null,rateLimitBy:"debounce",rateLimitWait:300,send:null,filter:null,ajax:{}},(f=c.remote||null)&&(f=b.isString(f)?{url:f}:f,f=b.mixin(g,f),f.rateLimiter=/^throttle$/i.test(f.rateLimitBy)?e(f.rateLimitWait):d(f.rateLimitWait),f.ajax.type=f.ajax.type||"GET",f.ajax.dataType=f.ajax.dataType||"json",delete f.rateLimitBy,delete f.rateLimitWait,!f.url&&a.error("remote requires url to be set")),f}return{local:d,prefetch:e,remote:f}}();!function(c){"use strict";function e(b){b&&(b.local||b.prefetch||b.remote)||a.error("one of local, prefetch, or remote is required"),this.limit=b.limit||5,this.sorter=j(b.sorter),this.dupDetector=b.dupDetector||k,this.local=i.local(b),this.prefetch=i.prefetch(b),this.remote=i.remote(b),this.cacheKey=this.prefetch?this.prefetch.cacheKey||this.prefetch.url:null,this.index=new h({datumTokenizer:b.datumTokenizer,queryTokenizer:b.queryTokenizer}),this.storage=this.cacheKey?new f(this.cacheKey):null}function j(a){function c(b){return b.sort(a)}function d(a){return a}return b.isFunction(a)?c:d}function k(){return!1}var l,m;return l=c.Bloodhound,m={data:"data",protocol:"protocol",thumbprint:"thumbprint"},c.Bloodhound=e,e.noConflict=function(){return c.Bloodhound=l,e},e.tokenizers=d,b.mixin(e.prototype,{_loadPrefetch:function(b){function c(a){f.clear(),f.add(b.filter?b.filter(a):a),f._saveToStorage(f.index.serialize(),b.thumbprint,b.ttl)}var d,e,f=this;return(d=this._readFromStorage(b.thumbprint))?(this.index.bootstrap(d),e=a.Deferred().resolve()):e=a.ajax(b.url,b.ajax).done(c),e},_getFromRemote:function(a,b){function c(a,c){b(a?[]:f.remote.filter?f.remote.filter(c):c)}var d,e,f=this;if(this.transport)return a=a||"",e=encodeURIComponent(a),d=this.remote.replace?this.remote.replace(this.remote.url,a):this.remote.url.replace(this.remote.wildcard,e),this.transport.get(d,this.remote.ajax,c)},_cancelLastRemoteRequest:function(){this.transport&&this.transport.cancel()},_saveToStorage:function(a,b,c){this.storage&&(this.storage.set(m.data,a,c),this.storage.set(m.protocol,location.protocol,c),this.storage.set(m.thumbprint,b,c))},_readFromStorage:function(a){var b,c={};return this.storage&&(c.data=this.storage.get(m.data),c.protocol=this.storage.get(m.protocol),c.thumbprint=this.storage.get(m.thumbprint)),b=c.thumbprint!==a||c.protocol!==location.protocol,c.data&&!b?c.data:null},_initialize:function(){function c(){e.add(b.isFunction(f)?f():f)}var d,e=this,f=this.local;return d=this.prefetch?this._loadPrefetch(this.prefetch):a.Deferred().resolve(),f&&d.done(c),this.transport=this.remote?new g(this.remote):null,this.initPromise=d.promise()},initialize:function(a){return!this.initPromise||a?this._initialize():this.initPromise},add:function(a){this.index.add(a)},get:function(a,c){function d(a){var d=f.slice(0);b.each(a,function(a){var c;return c=b.some(d,function(b){return e.dupDetector(a,b)}),!c&&d.push(a),d.length<e.limit}),c&&c(e.sorter(d))}var e=this,f=[],g=!1;f=this.index.get(a),f=this.sorter(f).slice(0,this.limit),f.length<this.limit?g=this._getFromRemote(a,d):this._cancelLastRemoteRequest(),g||(f.length>0||!this.transport)&&c&&c(f)},clear:function(){this.index.reset()},clearPrefetchCache:function(){this.storage&&this.storage.clear()},clearRemoteCache:function(){this.transport&&g.resetCache()},ttAdapter:function(){return b.bind(this.get,this)}}),e}(this);var j=function(){return{wrapper:'<span class="twitter-typeahead"></span>',dropdown:'<span class="tt-dropdown-menu"></span>',dataset:'<div class="tt-dataset-%CLASS%"></div>',suggestions:'<span class="tt-suggestions"></span>',suggestion:'<div class="tt-suggestion"></div>'}}(),k=function(){"use strict";var a={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}};return b.isMsie()&&b.mixin(a.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),b.isMsie()&&b.isMsie()<=7&&b.mixin(a.input,{marginTop:"-1px"}),a}(),l=function(){"use strict";function c(b){b&&b.el||a.error("EventBus initialized without el"),this.$el=a(b.el)}var d="typeahead:";return b.mixin(c.prototype,{trigger:function(a){var b=[].slice.call(arguments,1);this.$el.trigger(d+a,b)}}),c}(),m=function(){"use strict";function a(a,b,c,d){var e;if(!c)return this;for(b=b.split(i),c=d?h(c,d):c,this._callbacks=this._callbacks||{};e=b.shift();)this._callbacks[e]=this._callbacks[e]||{sync:[],async:[]},this._callbacks[e][a].push(c);return this}function b(b,c,d){return a.call(this,"async",b,c,d)}function c(b,c,d){return a.call(this,"sync",b,c,d)}function d(a){var b;if(!this._callbacks)return this;for(a=a.split(i);b=a.shift();)delete this._callbacks[b];return this}function e(a){var b,c,d,e,g;if(!this._callbacks)return this;for(a=a.split(i),d=[].slice.call(arguments,1);(b=a.shift())&&(c=this._callbacks[b]);)e=f(c.sync,this,[b].concat(d)),g=f(c.async,this,[b].concat(d)),e()&&j(g);return this}function f(a,b,c){function d(){for(var d,e=0,f=a.length;!d&&f>e;e+=1)d=a[e].apply(b,c)===!1;return!d}return d}function g(){var a;return a=window.setImmediate?function(a){setImmediate(function(){a()})}:function(a){setTimeout(function(){a()},0)}}function h(a,b){return a.bind?a.bind(b):function(){a.apply(b,[].slice.call(arguments,0))}}var i=/\s+/,j=g();return{onSync:c,onAsync:b,off:d,trigger:e}}(),n=function(a){"use strict";function c(a,c,d){for(var e,f=[],g=0,h=a.length;h>g;g++)f.push(b.escapeRegExChars(a[g]));return e=d?"\\b("+f.join("|")+")\\b":"("+f.join("|")+")",c?new RegExp(e):new RegExp(e,"i")}var d={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1};return function(e){function f(b){var c,d,f;return(c=h.exec(b.data))&&(f=a.createElement(e.tagName),e.className&&(f.className=e.className),d=b.splitText(c.index),d.splitText(c[0].length),f.appendChild(d.cloneNode(!0)),b.parentNode.replaceChild(f,d)),!!c}function g(a,b){for(var c,d=3,e=0;e<a.childNodes.length;e++)c=a.childNodes[e],c.nodeType===d?e+=b(c)?1:0:g(c,b)}var h;e=b.mixin({},d,e),e.node&&e.pattern&&(e.pattern=b.isArray(e.pattern)?e.pattern:[e.pattern],h=c(e.pattern,e.caseSensitive,e.wordsOnly),g(e.node,f))}}(window.document),o=function(){"use strict";function c(c){var e,f,h,i,j=this;c=c||{},c.input||a.error("input is missing"),e=b.bind(this._onBlur,this),f=b.bind(this._onFocus,this),h=b.bind(this._onKeydown,this),i=b.bind(this._onInput,this),this.$hint=a(c.hint),this.$input=a(c.input).on("blur.tt",e).on("focus.tt",f).on("keydown.tt",h),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=b.noop),b.isMsie()?this.$input.on("keydown.tt keypress.tt cut.tt paste.tt",function(a){g[a.which||a.keyCode]||b.defer(b.bind(j._onInput,j,a))}):this.$input.on("input.tt",i),this.query=this.$input.val(),this.$overflowHelper=d(this.$input)}function d(b){return a('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:b.css("font-family"),fontSize:b.css("font-size"),fontStyle:b.css("font-style"),fontVariant:b.css("font-variant"),fontWeight:b.css("font-weight"),wordSpacing:b.css("word-spacing"),letterSpacing:b.css("letter-spacing"),textIndent:b.css("text-indent"),textRendering:b.css("text-rendering"),textTransform:b.css("text-transform")}).insertAfter(b)}function e(a,b){return c.normalizeQuery(a)===c.normalizeQuery(b)}function f(a){return a.altKey||a.ctrlKey||a.metaKey||a.shiftKey}var g;return g={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"},c.normalizeQuery=function(a){return(a||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},b.mixin(c.prototype,m,{_onBlur:function(){this.resetInputValue(),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(a){var b=g[a.which||a.keyCode];this._managePreventDefault(b,a),b&&this._shouldTrigger(b,a)&&this.trigger(b+"Keyed",a)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(a,b){var c,d,e;switch(a){case"tab":d=this.getHint(),e=this.getInputValue(),c=d&&d!==e&&!f(b);break;case"up":case"down":c=!f(b);break;default:c=!1}c&&b.preventDefault()},_shouldTrigger:function(a,b){var c;switch(a){case"tab":c=!f(b);break;default:c=!0}return c},_checkInputValue:function(){var a,b,c;a=this.getInputValue(),b=e(a,this.query),c=b?this.query.length!==a.length:!1,this.query=a,b?c&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(a){this.query=a},getInputValue:function(){return this.$input.val()},setInputValue:function(a,b){this.$input.val(a),b?this.clearHint():this._checkInputValue()},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(a){this.$hint.val(a)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var a,b,c,d;a=this.getInputValue(),b=this.getHint(),c=a!==b&&0===b.indexOf(a),d=""!==a&&c&&!this.hasOverflow(),!d&&this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var a=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=a},isCursorAtEnd:function(){var a,c,d;return a=this.$input.val().length,c=this.$input[0].selectionStart,b.isNumber(c)?c===a:document.selection?(d=document.selection.createRange(),d.moveStart("character",-a),a===d.text.length):!0},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$hint=this.$input=this.$overflowHelper=null}}),c}(),p=function(){"use strict";function c(c){c=c||{},c.templates=c.templates||{},c.source||a.error("missing source"),c.name&&!f(c.name)&&a.error("invalid dataset name: "+c.name),this.query=null,this.highlight=!!c.highlight,this.name=c.name||b.getUniqueId(),this.source=c.source,this.displayFn=d(c.display||c.displayKey),this.templates=e(c.templates,this.displayFn),this.$el=a(j.dataset.replace("%CLASS%",this.name))}function d(a){function c(b){return b[a]}return a=a||"value",b.isFunction(a)?a:c}function e(a,c){function d(a){return"<p>"+c(a)+"</p>"}return{empty:a.empty&&b.templatify(a.empty),header:a.header&&b.templatify(a.header),footer:a.footer&&b.templatify(a.footer),suggestion:a.suggestion||d}}function f(a){return/^[_a-zA-Z0-9-]+$/.test(a)}var g="ttDataset",h="ttValue",i="ttDatum";return c.extractDatasetName=function(b){return a(b).data(g)},c.extractValue=function(b){return a(b).data(h)},c.extractDatum=function(b){return a(b).data(i)},b.mixin(c.prototype,m,{_render:function(c,d){function e(){return p.templates.empty({query:c,isEmpty:!0})}function f(){function e(b){var c;return c=a(j.suggestion).append(p.templates.suggestion(b)).data(g,p.name).data(h,p.displayFn(b)).data(i,b),c.children().each(function(){a(this).css(k.suggestionChild)}),c}var f,l;return f=a(j.suggestions).css(k.suggestions),l=b.map(d,e),f.append.apply(f,l),p.highlight&&n({className:"tt-highlight",node:f[0],pattern:c}),f}function l(){return p.templates.header({query:c,isEmpty:!o})}function m(){return p.templates.footer({query:c,isEmpty:!o})}if(this.$el){var o,p=this;this.$el.empty(),o=d&&d.length,!o&&this.templates.empty?this.$el.html(e()).prepend(p.templates.header?l():null).append(p.templates.footer?m():null):o&&this.$el.html(f()).prepend(p.templates.header?l():null).append(p.templates.footer?m():null),this.trigger("rendered")}},getRoot:function(){return this.$el},update:function(a){function b(b){c.canceled||a!==c.query||c._render(a,b)}var c=this;this.query=a,this.canceled=!1,this.source(a,b)},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger("rendered")},isEmpty:function(){return this.$el.is(":empty")},destroy:function(){this.$el=null}}),c}(),q=function(){"use strict";function c(c){var e,f,g,h=this;c=c||{},c.menu||a.error("menu is required"),this.isOpen=!1,this.isEmpty=!0,this.datasets=b.map(c.datasets,d),e=b.bind(this._onSuggestionClick,this),f=b.bind(this._onSuggestionMouseEnter,this),g=b.bind(this._onSuggestionMouseLeave,this),this.$menu=a(c.menu).on("click.tt",".tt-suggestion",e).on("mouseenter.tt",".tt-suggestion",f).on("mouseleave.tt",".tt-suggestion",g),b.each(this.datasets,function(a){h.$menu.append(a.getRoot()),a.onSync("rendered",h._onRendered,h)})}function d(a){return new p(a)}return b.mixin(c.prototype,m,{_onSuggestionClick:function(b){this.trigger("suggestionClicked",a(b.currentTarget))},_onSuggestionMouseEnter:function(b){this._removeCursor(),this._setCursor(a(b.currentTarget),!0)},_onSuggestionMouseLeave:function(){this._removeCursor()},_onRendered:function(){function a(a){return a.isEmpty()}this.isEmpty=b.every(this.datasets,a),this.isEmpty?this._hide():this.isOpen&&this._show(),this.trigger("datasetRendered")},_hide:function(){this.$menu.hide()},_show:function(){this.$menu.css("display","block")},_getSuggestions:function(){return this.$menu.find(".tt-suggestion")},_getCursor:function(){return this.$menu.find(".tt-cursor").first()},_setCursor:function(a,b){a.first().addClass("tt-cursor"),!b&&this.trigger("cursorMoved")},_removeCursor:function(){this._getCursor().removeClass("tt-cursor")},_moveCursor:function(a){var b,c,d,e;if(this.isOpen){if(c=this._getCursor(),b=this._getSuggestions(),this._removeCursor(),d=b.index(c)+a,d=(d+1)%(b.length+1)-1,-1===d)return void this.trigger("cursorRemoved");-1>d&&(d=b.length-1),this._setCursor(e=b.eq(d)),this._ensureVisible(e)}},_ensureVisible:function(a){var b,c,d,e;b=a.position().top,c=b+a.outerHeight(!0),d=this.$menu.scrollTop(),e=this.$menu.height()+parseInt(this.$menu.css("paddingTop"),10)+parseInt(this.$menu.css("paddingBottom"),10),0>b?this.$menu.scrollTop(d+b):c>e&&this.$menu.scrollTop(d+(c-e))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger("opened"))},setLanguageDirection:function(a){this.$menu.css("ltr"===a?k.ltr:k.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(a){var b=null;return a.length&&(b={raw:p.extractDatum(a),value:p.extractValue(a),datasetName:p.extractDatasetName(a)}),b},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},update:function(a){function c(b){b.update(a)}b.each(this.datasets,c)},empty:function(){function a(a){a.clear()}b.each(this.datasets,a),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){function a(a){a.destroy()}this.$menu.off(".tt"),this.$menu=null,b.each(this.datasets,a)}}),c}(),r=function(){"use strict";function c(c){var e,f,g;c=c||{},c.input||a.error("missing input"),this.isActivated=!1,this.autoselect=!!c.autoselect,this.minLength=b.isNumber(c.minLength)?c.minLength:1,this.$node=d(c.input,c.withHint),e=this.$node.find(".tt-dropdown-menu"),f=this.$node.find(".tt-input"),g=this.$node.find(".tt-hint"),f.on("blur.tt",function(a){var c,d,g;c=document.activeElement,d=e.is(c),g=e.has(c).length>0,b.isMsie()&&(d||g)&&(a.preventDefault(),a.stopImmediatePropagation(),b.defer(function(){f.focus()}))}),e.on("mousedown.tt",function(a){a.preventDefault()}),this.eventBus=c.eventBus||new l({el:f}),this.dropdown=new q({menu:e,datasets:c.datasets}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new o({input:f,hint:g}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._setLanguageDirection()}function d(b,c){var d,f,h,i;d=a(b),f=a(j.wrapper).css(k.wrapper),h=a(j.dropdown).css(k.dropdown),i=d.clone().css(k.hint).css(e(d)),i.val("").removeData().addClass("tt-hint").removeAttr("id name placeholder required").prop("readonly",!0).attr({autocomplete:"off",spellcheck:"false",tabindex:-1}),d.data(g,{dir:d.attr("dir"),autocomplete:d.attr("autocomplete"),spellcheck:d.attr("spellcheck"),style:d.attr("style")}),d.addClass("tt-input").attr({autocomplete:"off",spellcheck:!1}).css(c?k.input:k.inputWithNoHint);try{!d.attr("dir")&&d.attr("dir","auto")}catch(l){}return d.wrap(f).parent().prepend(c?i:null).append(h)}function e(a){return{backgroundAttachment:a.css("background-attachment"),backgroundClip:a.css("background-clip"),backgroundColor:a.css("background-color"),backgroundImage:a.css("background-image"),backgroundOrigin:a.css("background-origin"),backgroundPosition:a.css("background-position"),backgroundRepeat:a.css("background-repeat"),backgroundSize:a.css("background-size")}}function f(a){var c=a.find(".tt-input");b.each(c.data(g),function(a,d){b.isUndefined(a)?c.removeAttr(d):c.attr(d,a)}),c.detach().removeData(g).removeClass("tt-input").insertAfter(a),a.remove()}var g="ttAttrs";return b.mixin(c.prototype,{_onSuggestionClicked:function(a,b){var c;(c=this.dropdown.getDatumForSuggestion(b))&&this._select(c)},_onCursorMoved:function(){var a=this.dropdown.getDatumForCursor();this.input.setInputValue(a.value,!0),this.eventBus.trigger("cursorchanged",a.raw,a.datasetName)},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint()},_onDatasetRendered:function(){this._updateHint()},_onOpened:function(){this._updateHint(),this.eventBus.trigger("opened")},_onClosed:function(){this.input.clearHint(),this.eventBus.trigger("closed")},_onFocused:function(){this.isActivated=!0,this.dropdown.open()},_onBlurred:function(){this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()},_onEnterKeyed:function(a,b){var c,d;c=this.dropdown.getDatumForCursor(),d=this.dropdown.getDatumForTopSuggestion(),c?(this._select(c),b.preventDefault()):this.autoselect&&d&&(this._select(d),b.preventDefault())},_onTabKeyed:function(a,b){var c;(c=this.dropdown.getDatumForCursor())?(this._select(c),b.preventDefault()):this._autocomplete(!0)},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var a=this.input.getQuery();this.dropdown.isEmpty&&a.length>=this.minLength?this.dropdown.update(a):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var a=this.input.getQuery();this.dropdown.isEmpty&&a.length>=this.minLength?this.dropdown.update(a):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(a,b){this.input.clearHintIfInvalid(),b.length>=this.minLength?this.dropdown.update(b):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var a;this.dir!==(a=this.input.getLanguageDirection())&&(this.dir=a,this.$node.css("direction",a),this.dropdown.setLanguageDirection(a))},_updateHint:function(){var a,c,d,e,f,g;a=this.dropdown.getDatumForTopSuggestion(),a&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(c=this.input.getInputValue(),d=o.normalizeQuery(c),e=b.escapeRegExChars(d),f=new RegExp("^(?:"+e+")(.+$)","i"),g=f.exec(a.value),g?this.input.setHint(c+g[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(a){var b,c,d,e;b=this.input.getHint(),c=this.input.getQuery(),d=a||this.input.isCursorAtEnd(),b&&c!==b&&d&&(e=this.dropdown.getDatumForTopSuggestion(),e&&this.input.setInputValue(e.value),this.eventBus.trigger("autocompleted",e.raw,e.datasetName))},_select:function(a){this.input.setQuery(a.value),this.input.setInputValue(a.value,!0),this._setLanguageDirection(),this.eventBus.trigger("selected",a.raw,a.datasetName),this.dropdown.close(),b.defer(b.bind(this.dropdown.empty,this.dropdown))},open:function(){this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(a){a=b.toStr(a),this.isActivated?this.input.setInputValue(a):(this.input.setQuery(a),this.input.setInputValue(a,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),f(this.$node),this.$node=null}}),c}();!function(){"use strict";var c,d,e;c=a.fn.typeahead,d="ttTypeahead",e={initialize:function(c,e){function f(){var f,g,h=a(this);b.each(e,function(a){a.highlight=!!c.highlight}),g=new r({input:h,eventBus:f=new l({el:h}),withHint:b.isUndefined(c.hint)?!0:!!c.hint,minLength:c.minLength,autoselect:c.autoselect,datasets:e}),h.data(d,g)}return e=b.isArray(e)?e:[].slice.call(arguments,1),c=c||{},this.each(f)},open:function(){function b(){var b,c=a(this);(b=c.data(d))&&b.open()}return this.each(b)},close:function(){function b(){var b,c=a(this);(b=c.data(d))&&b.close()}return this.each(b)},val:function(b){function c(){var c,e=a(this);(c=e.data(d))&&c.setVal(b)}function e(a){var b,c;return(b=a.data(d))&&(c=b.getVal()),c}return arguments.length?this.each(c):e(this.first())},destroy:function(){function b(){var b,c=a(this);(b=c.data(d))&&(b.destroy(),c.removeData(d))}return this.each(b)}},a.fn.typeahead=function(b){var c;return e[b]&&"initialize"!==b?(c=this.filter(function(){return!!a(this).data(d)}),e[b].apply(c,[].slice.call(arguments,1))):e.initialize.apply(this,arguments)},a.fn.typeahead.noConflict=function(){return a.fn.typeahead=c,this}}()}(window.jQuery);
binary file changed (1849 → absent bytes)
@@ -1,652 +0,0 @@-/*-Version: 3.4.0 Timestamp: Tue May 14 08:27:33 PDT 2013-*/-.select2-container {- margin: 0;- position: relative;- display: inline-block;- /* inline-block for ie7 */- zoom: 1;- *display: inline;- vertical-align: middle;-}--.select2-container,-.select2-drop,-.select2-search,-.select2-search input{- /*- Force border-box so that % widths fit the parent- container without overlap because of margin/padding.-- More Info : http://www.quirksmode.org/css/box.html- */- -webkit-box-sizing: border-box; /* webkit */- -khtml-box-sizing: border-box; /* konqueror */- -moz-box-sizing: border-box; /* firefox */- -ms-box-sizing: border-box; /* ie */- box-sizing: border-box; /* css3 */-}--.select2-container .select2-choice {- display: block;- height: 26px;- padding: 0 0 0 8px;- overflow: hidden;- position: relative;-- border: 1px solid #aaa;- white-space: nowrap;- line-height: 26px;- color: #444;- text-decoration: none;-- -webkit-border-radius: 4px;- -moz-border-radius: 4px;- border-radius: 4px;-- -webkit-background-clip: padding-box;- -moz-background-clip: padding;- background-clip: padding-box;-- -webkit-touch-callout: none;- -webkit-user-select: none;- -khtml-user-select: none;- -moz-user-select: none;- -ms-user-select: none;- user-select: none;-- background-color: #fff;- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.5, white));- background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 50%);- background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 50%);- background-image: -o-linear-gradient(bottom, #eeeeee 0%, #ffffff 50%);- background-image: -ms-linear-gradient(top, #ffffff 0%, #eeeeee 50%);- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);- background-image: linear-gradient(top, #ffffff 0%, #eeeeee 50%);-}--.select2-container.select2-drop-above .select2-choice {- border-bottom-color: #aaa;-- -webkit-border-radius:0 0 4px 4px;- -moz-border-radius:0 0 4px 4px;- border-radius:0 0 4px 4px;-- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.9, white));- background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 90%);- background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 90%);- background-image: -o-linear-gradient(bottom, #eeeeee 0%, white 90%);- background-image: -ms-linear-gradient(top, #eeeeee 0%,#ffffff 90%);- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee',GradientType=0 );- background-image: linear-gradient(top, #eeeeee 0%,#ffffff 90%);-}--.select2-container.select2-allowclear .select2-choice span {- margin-right: 42px;-}--.select2-container .select2-choice span {- margin-right: 26px;- display: block;- overflow: hidden;-- white-space: nowrap;-- -ms-text-overflow: ellipsis;- -o-text-overflow: ellipsis;- text-overflow: ellipsis;-}--.select2-container .select2-choice abbr {- display: none;- width: 12px;- height: 12px;- position: absolute;- right: 24px;- top: 8px;-- font-size: 1px;- text-decoration: none;-- border: 0;- background: url('select2.png') right top no-repeat;- cursor: pointer;- outline: 0;-}--.select2-container.select2-allowclear .select2-choice abbr {- display: inline-block;-}--.select2-container .select2-choice abbr:hover {- background-position: right -11px;- cursor: pointer;-}--.select2-drop-mask {- position: absolute;- left: 0;- top: 0;- z-index: 9998;-}--.select2-drop {- width: 100%;- margin-top:-1px;- position: absolute;- z-index: 9999;- top: 100%;-- background: #fff;- color: #000;- border: 1px solid #aaa;- border-top: 0;-- -webkit-border-radius: 0 0 4px 4px;- -moz-border-radius: 0 0 4px 4px;- border-radius: 0 0 4px 4px;-- -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);- -moz-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);- box-shadow: 0 4px 5px rgba(0, 0, 0, .15);-}--.select2-drop-auto-width {- border-top: 1px solid #aaa;- width: auto;-}--.select2-drop-auto-width .select2-search {- padding-top: 4px;-}--.select2-drop.select2-drop-above {- margin-top: 1px;- border-top: 1px solid #aaa;- border-bottom: 0;-- -webkit-border-radius: 4px 4px 0 0;- -moz-border-radius: 4px 4px 0 0;- border-radius: 4px 4px 0 0;-- -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);- -moz-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);- box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);-}--.select2-container .select2-choice div {- display: inline-block;- width: 18px;- height: 100%;- position: absolute;- right: 0;- top: 0;-- border-left: 1px solid #aaa;- -webkit-border-radius: 0 4px 4px 0;- -moz-border-radius: 0 4px 4px 0;- border-radius: 0 4px 4px 0;-- -webkit-background-clip: padding-box;- -moz-background-clip: padding;- background-clip: padding-box;-- background: #ccc;- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));- background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);- background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);- background-image: -o-linear-gradient(bottom, #ccc 0%, #eee 60%);- background-image: -ms-linear-gradient(top, #cccccc 0%, #eeeeee 60%);- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);- background-image: linear-gradient(top, #cccccc 0%, #eeeeee 60%);-}--.select2-container .select2-choice div b {- display: block;- width: 100%;- height: 100%;- background: url('select2.png') no-repeat 0 1px;-}--.select2-search {- display: inline-block;- width: 100%;- min-height: 26px;- margin: 0;- padding-left: 4px;- padding-right: 4px;-- position: relative;- z-index: 10000;-- white-space: nowrap;-}--.select2-search input {- width: 100%;- height: auto !important;- min-height: 26px;- padding: 4px 20px 4px 5px;- margin: 0;-- outline: 0;- font-family: sans-serif;- font-size: 1em;-- border: 1px solid #aaa;- -webkit-border-radius: 0;- -moz-border-radius: 0;- border-radius: 0;-- -webkit-box-shadow: none;- -moz-box-shadow: none;- box-shadow: none;-- background: #fff url('select2.png') no-repeat 100% -22px;- background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));- background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);- background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);- background: url('select2.png') no-repeat 100% -22px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);- background: url('select2.png') no-repeat 100% -22px, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%);- background: url('select2.png') no-repeat 100% -22px, linear-gradient(top, #ffffff 85%, #eeeeee 99%);-}--.select2-drop.select2-drop-above .select2-search input {- margin-top: 4px;-}--.select2-search input.select2-active {- background: #fff url('select2-spinner.gif') no-repeat 100%;- background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));- background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);- background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);- background: url('select2-spinner.gif') no-repeat 100%, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);- background: url('select2-spinner.gif') no-repeat 100%, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%);- background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(top, #ffffff 85%, #eeeeee 99%);-}--.select2-container-active .select2-choice,-.select2-container-active .select2-choices {- border: 1px solid #5897fb;- outline: none;-- -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);- -moz-box-shadow: 0 0 5px rgba(0,0,0,.3);- box-shadow: 0 0 5px rgba(0,0,0,.3);-}--.select2-dropdown-open .select2-choice {- border-bottom-color: transparent;- -webkit-box-shadow: 0 1px 0 #fff inset;- -moz-box-shadow: 0 1px 0 #fff inset;- box-shadow: 0 1px 0 #fff inset;-- -webkit-border-bottom-left-radius: 0;- -moz-border-radius-bottomleft: 0;- border-bottom-left-radius: 0;-- -webkit-border-bottom-right-radius: 0;- -moz-border-radius-bottomright: 0;- border-bottom-right-radius: 0;-- background-color: #eee;- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, white), color-stop(0.5, #eeeeee));- background-image: -webkit-linear-gradient(center bottom, white 0%, #eeeeee 50%);- background-image: -moz-linear-gradient(center bottom, white 0%, #eeeeee 50%);- background-image: -o-linear-gradient(bottom, white 0%, #eeeeee 50%);- background-image: -ms-linear-gradient(top, #ffffff 0%,#eeeeee 50%);- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff',GradientType=0 );- background-image: linear-gradient(top, #ffffff 0%,#eeeeee 50%);-}--.select2-dropdown-open.select2-drop-above .select2-choice,-.select2-dropdown-open.select2-drop-above .select2-choices {- border: 1px solid #5897fb;- border-top-color: transparent;-- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, white), color-stop(0.5, #eeeeee));- background-image: -webkit-linear-gradient(center top, white 0%, #eeeeee 50%);- background-image: -moz-linear-gradient(center top, white 0%, #eeeeee 50%);- background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);- background-image: -ms-linear-gradient(bottom, #ffffff 0%,#eeeeee 50%);- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff',GradientType=0 );- background-image: linear-gradient(bottom, #ffffff 0%,#eeeeee 50%);-}--.select2-dropdown-open .select2-choice div {- background: transparent;- border-left: none;- filter: none;-}-.select2-dropdown-open .select2-choice div b {- background-position: -18px 1px;-}--/* results */-.select2-results {- max-height: 200px;- padding: 0 0 0 4px;- margin: 4px 4px 4px 0;- position: relative;- overflow-x: hidden;- overflow-y: auto;- -webkit-tap-highlight-color: rgba(0,0,0,0);-}--.select2-results ul.select2-result-sub {- margin: 0;- padding-left: 0;-}--.select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px }-.select2-results ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 40px }-.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 60px }-.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 80px }-.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 100px }-.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 110px }-.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px }--.select2-results li {- list-style: none;- display: list-item;- background-image: none;-}--.select2-results li.select2-result-with-children > .select2-result-label {- font-weight: bold;-}--.select2-results .select2-result-label {- padding: 3px 7px 4px;- margin: 0;- cursor: pointer;-- min-height: 1em;-- -webkit-touch-callout: none;- -webkit-user-select: none;- -khtml-user-select: none;- -moz-user-select: none;- -ms-user-select: none;- user-select: none;-}--.select2-results .select2-highlighted {- background: #3875d7;- color: #fff;-}--.select2-results li em {- background: #feffde;- font-style: normal;-}--.select2-results .select2-highlighted em {- background: transparent;-}--.select2-results .select2-highlighted ul {- background: white;- color: #000;-}---.select2-results .select2-no-results,-.select2-results .select2-searching,-.select2-results .select2-selection-limit {- background: #f4f4f4;- display: list-item;-}--/*-disabled look for disabled choices in the results dropdown-*/-.select2-results .select2-disabled.select2-highlighted {- color: #666;- background: #f4f4f4;- display: list-item;- cursor: default;-}-.select2-results .select2-disabled {- background: #f4f4f4;- display: list-item;- cursor: default;-}--.select2-results .select2-selected {- display: none;-}--.select2-more-results.select2-active {- background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;-}--.select2-more-results {- background: #f4f4f4;- display: list-item;-}--/* disabled styles */--.select2-container.select2-container-disabled .select2-choice {- background-color: #f4f4f4;- background-image: none;- border: 1px solid #ddd;- cursor: default;-}--.select2-container.select2-container-disabled .select2-choice div {- background-color: #f4f4f4;- background-image: none;- border-left: 0;-}--.select2-container.select2-container-disabled .select2-choice abbr {- display: none;-}---/* multiselect */--.select2-container-multi .select2-choices {- height: auto !important;- height: 1%;- margin: 0;- padding: 0;- position: relative;-- border: 1px solid #aaa;- cursor: text;- overflow: hidden;-- background-color: #fff;- background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));- background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%);- background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%);- background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%);- background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%);- background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%);-}--.select2-locked {- padding: 3px 5px 3px 5px !important;-}--.select2-container-multi .select2-choices {- min-height: 26px;-}--.select2-container-multi.select2-container-active .select2-choices {- border: 1px solid #5897fb;- outline: none;-- -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);- -moz-box-shadow: 0 0 5px rgba(0,0,0,.3);- box-shadow: 0 0 5px rgba(0,0,0,.3);-}-.select2-container-multi .select2-choices li {- float: left;- list-style: none;-}-.select2-container-multi .select2-choices .select2-search-field {- margin: 0;- padding: 0;- white-space: nowrap;-}--.select2-container-multi .select2-choices .select2-search-field input {- padding: 5px;- margin: 1px 0;-- font-family: sans-serif;- font-size: 100%;- color: #666;- outline: 0;- border: 0;- -webkit-box-shadow: none;- -moz-box-shadow: none;- box-shadow: none;- background: transparent !important;-}--.select2-container-multi .select2-choices .select2-search-field input.select2-active {- background: #fff url('select2-spinner.gif') no-repeat 100% !important;-}--.select2-default {- color: #999 !important;-}--.select2-container-multi .select2-choices .select2-search-choice {- padding: 3px 5px 3px 18px;- margin: 3px 0 3px 5px;- position: relative;-- line-height: 13px;- color: #333;- cursor: default;- border: 1px solid #aaaaaa;-- -webkit-border-radius: 3px;- -moz-border-radius: 3px;- border-radius: 3px;-- -webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);- -moz-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);- box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);-- -webkit-background-clip: padding-box;- -moz-background-clip: padding;- background-clip: padding-box;-- -webkit-touch-callout: none;- -webkit-user-select: none;- -khtml-user-select: none;- -moz-user-select: none;- -ms-user-select: none;- user-select: none;-- background-color: #e4e4e4;- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0 );- background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));- background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);- background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);- background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);- background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);- background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);-}-.select2-container-multi .select2-choices .select2-search-choice span {- cursor: default;-}-.select2-container-multi .select2-choices .select2-search-choice-focus {- background: #d4d4d4;-}--.select2-search-choice-close {- display: block;- width: 12px;- height: 13px;- position: absolute;- right: 3px;- top: 4px;-- font-size: 1px;- outline: none;- background: url('select2.png') right top no-repeat;-}--.select2-container-multi .select2-search-choice-close {- left: 3px;-}--.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {- background-position: right -11px;-}-.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {- background-position: right -11px;-}--/* disabled styles */-.select2-container-multi.select2-container-disabled .select2-choices{- background-color: #f4f4f4;- background-image: none;- border: 1px solid #ddd;- cursor: default;-}--.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {- padding: 3px 5px 3px 5px;- border: 1px solid #ddd;- background-image: none;- background-color: #f4f4f4;-}--.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none;- background:none;-}-/* end multiselect */---.select2-result-selectable .select2-match,-.select2-result-unselectable .select2-match {- text-decoration: underline;-}--.select2-offscreen, .select2-offscreen:focus {- clip: rect(0 0 0 0);- width: 1px;- height: 1px;- border: 0;- margin: 0;- padding: 0;- overflow: hidden;- position: absolute;- outline: 0;- left: 0px;-}--.select2-display-none {- display: none;-}--.select2-measure-scrollbar {- position: absolute;- top: -10000px;- left: -10000px;- width: 100px;- height: 100px;- overflow: scroll;-}-/* Retina-ize icons */--@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi) {- .select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice div b {- background-image: url('select2x2.png') !important;- background-repeat: no-repeat !important;- background-size: 60px 40px !important;- }- .select2-search input {- background-position: 100% -21px !important;- }-}
@@ -1,3054 +0,0 @@-/*-Copyright 2012 Igor Vaynberg--Version: 3.4.0 Timestamp: Tue May 14 08:27:33 PDT 2013--This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU-General Public License version 2 (the "GPL License"). You may choose either license to govern your-use of this software only upon the condition that you accept all of the terms of either the Apache-License or the GPL License.--You may obtain a copy of the Apache License and the GPL License at:-- http://www.apache.org/licenses/LICENSE-2.0- http://www.gnu.org/licenses/gpl-2.0.html--Unless required by applicable law or agreed to in writing, software distributed under the-Apache License or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR-CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for-the specific language governing permissions and limitations under the Apache License and the GPL License.-*/- (function ($) {- if(typeof $.fn.each2 == "undefined"){- $.fn.extend({- /*- * 4-10 times faster .each replacement- * use it carefully, as it overrides jQuery context of element on each iteration- */- each2 : function (c) {- var j = $([0]), i = -1, l = this.length;- while (- ++i < l- && (j.context = j[0] = this[i])- && c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object- );- return this;- }- });- }-})(jQuery);--(function ($, undefined) {- "use strict";- /*global document, window, jQuery, console */-- if (window.Select2 !== undefined) {- return;- }-- var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer,- lastMousePosition, $document, scrollBarDimensions,-- KEY = {- TAB: 9,- ENTER: 13,- ESC: 27,- SPACE: 32,- LEFT: 37,- UP: 38,- RIGHT: 39,- DOWN: 40,- SHIFT: 16,- CTRL: 17,- ALT: 18,- PAGE_UP: 33,- PAGE_DOWN: 34,- HOME: 36,- END: 35,- BACKSPACE: 8,- DELETE: 46,- isArrow: function (k) {- k = k.which ? k.which : k;- switch (k) {- case KEY.LEFT:- case KEY.RIGHT:- case KEY.UP:- case KEY.DOWN:- return true;- }- return false;- },- isControl: function (e) {- var k = e.which;- switch (k) {- case KEY.SHIFT:- case KEY.CTRL:- case KEY.ALT:- return true;- }-- if (e.metaKey) return true;-- return false;- },- isFunctionKey: function (k) {- k = k.which ? k.which : k;- return k >= 112 && k <= 123;- }- },- MEASURE_SCROLLBAR_TEMPLATE = "<div class='select2-measure-scrollbar'></div>";-- $document = $(document);-- nextUid=(function() { var counter=1; return function() { return counter++; }; }());-- function indexOf(value, array) {- var i = 0, l = array.length;- for (; i < l; i = i + 1) {- if (equal(value, array[i])) return i;- }- return -1;- }-- function measureScrollbar () {- var $template = $( MEASURE_SCROLLBAR_TEMPLATE );- $template.appendTo('body');-- var dim = {- width: $template.width() - $template[0].clientWidth,- height: $template.height() - $template[0].clientHeight- };- $template.remove();-- return dim;- }-- /**- * Compares equality of a and b- * @param a- * @param b- */- function equal(a, b) {- if (a === b) return true;- if (a === undefined || b === undefined) return false;- if (a === null || b === null) return false;- if (a.constructor === String) return a+'' === b+''; // IE requires a+'' instead of just a- if (b.constructor === String) return b+'' === a+''; // IE requires b+'' instead of just b- return false;- }-- /**- * Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty- * strings- * @param string- * @param separator- */- function splitVal(string, separator) {- var val, i, l;- if (string === null || string.length < 1) return [];- val = string.split(separator);- for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]);- return val;- }-- function getSideBorderPadding(element) {- return element.outerWidth(false) - element.width();- }-- function installKeyUpChangeEvent(element) {- var key="keyup-change-value";- element.on("keydown", function () {- if ($.data(element, key) === undefined) {- $.data(element, key, element.val());- }- });- element.on("keyup", function () {- var val= $.data(element, key);- if (val !== undefined && element.val() !== val) {- $.removeData(element, key);- element.trigger("keyup-change");- }- });- }-- $document.on("mousemove", function (e) {- lastMousePosition = {x: e.pageX, y: e.pageY};- });-- /**- * filters mouse events so an event is fired only if the mouse moved.- *- * filters out mouse events that occur when mouse is stationary but- * the elements under the pointer are scrolled.- */- function installFilteredMouseMove(element) {- element.on("mousemove", function (e) {- var lastpos = lastMousePosition;- if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) {- $(e.target).trigger("mousemove-filtered", e);- }- });- }-- /**- * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made- * within the last quietMillis milliseconds.- *- * @param quietMillis number of milliseconds to wait before invoking fn- * @param fn function to be debounced- * @param ctx object to be used as this reference within fn- * @return debounced version of fn- */- function debounce(quietMillis, fn, ctx) {- ctx = ctx || undefined;- var timeout;- return function () {- var args = arguments;- window.clearTimeout(timeout);- timeout = window.setTimeout(function() {- fn.apply(ctx, args);- }, quietMillis);- };- }-- /**- * A simple implementation of a thunk- * @param formula function used to lazily initialize the thunk- * @return {Function}- */- function thunk(formula) {- var evaluated = false,- value;- return function() {- if (evaluated === false) { value = formula(); evaluated = true; }- return value;- };- };-- function installDebouncedScroll(threshold, element) {- var notify = debounce(threshold, function (e) { element.trigger("scroll-debounced", e);});- element.on("scroll", function (e) {- if (indexOf(e.target, element.get()) >= 0) notify(e);- });- }-- function focus($el) {- if ($el[0] === document.activeElement) return;-- /* set the focus in a 0 timeout - that way the focus is set after the processing- of the current event has finished - which seems like the only reliable way- to set focus */- window.setTimeout(function() {- var el=$el[0], pos=$el.val().length, range;-- $el.focus();-- /* make sure el received focus so we do not error out when trying to manipulate the caret.- sometimes modals or others listeners may steal it after its set */- if ($el.is(":visible") && el === document.activeElement) {-- /* after the focus is set move the caret to the end, necessary when we val()- just before setting focus */- if(el.setSelectionRange)- {- el.setSelectionRange(pos, pos);- }- else if (el.createTextRange) {- range = el.createTextRange();- range.collapse(false);- range.select();- }- }- }, 0);- }-- function getCursorInfo(el) {- el = $(el)[0];- var offset = 0;- var length = 0;- if ('selectionStart' in el) {- offset = el.selectionStart;- length = el.selectionEnd - offset;- } else if ('selection' in document) {- el.focus();- var sel = document.selection.createRange();- length = document.selection.createRange().text.length;- sel.moveStart('character', -el.value.length);- offset = sel.text.length - length;- }- return { offset: offset, length: length };- }-- function killEvent(event) {- event.preventDefault();- event.stopPropagation();- }- function killEventImmediately(event) {- event.preventDefault();- event.stopImmediatePropagation();- }-- function measureTextWidth(e) {- if (!sizer){- var style = e[0].currentStyle || window.getComputedStyle(e[0], null);- sizer = $(document.createElement("div")).css({- position: "absolute",- left: "-10000px",- top: "-10000px",- display: "none",- fontSize: style.fontSize,- fontFamily: style.fontFamily,- fontStyle: style.fontStyle,- fontWeight: style.fontWeight,- letterSpacing: style.letterSpacing,- textTransform: style.textTransform,- whiteSpace: "nowrap"- });- sizer.attr("class","select2-sizer");- $("body").append(sizer);- }- sizer.text(e.val());- return sizer.width();- }-- function syncCssClasses(dest, src, adapter) {- var classes, replacements = [], adapted;-- classes = dest.attr("class");- if (classes) {- classes = '' + classes; // for IE which returns object- $(classes.split(" ")).each2(function() {- if (this.indexOf("select2-") === 0) {- replacements.push(this);- }- });- }- classes = src.attr("class");- if (classes) {- classes = '' + classes; // for IE which returns object- $(classes.split(" ")).each2(function() {- if (this.indexOf("select2-") !== 0) {- adapted = adapter(this);- if (adapted) {- replacements.push(this);- }- }- });- }- dest.attr("class", replacements.join(" "));- }--- function markMatch(text, term, markup, escapeMarkup) {- var match=text.toUpperCase().indexOf(term.toUpperCase()),- tl=term.length;-- if (match<0) {- markup.push(escapeMarkup(text));- return;- }-- markup.push(escapeMarkup(text.substring(0, match)));- markup.push("<span class='select2-match'>");- markup.push(escapeMarkup(text.substring(match, match + tl)));- markup.push("</span>");- markup.push(escapeMarkup(text.substring(match + tl, text.length)));- }-- /**- * Produces an ajax-based query function- *- * @param options object containing configuration paramters- * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax- * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax- * @param options.url url for the data- * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url.- * @param options.dataType request data type: ajax, jsonp, other datatatypes supported by jQuery's $.ajax function or the transport function if specified- * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often- * @param options.results a function(remoteData, pageNumber) that converts data returned form the remote request to the format expected by Select2.- * The expected format is an object containing the following keys:- * results array of objects that will be used as choices- * more (optional) boolean indicating whether there are more results available- * Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true}- */- function ajax(options) {- var timeout, // current scheduled but not yet executed request- requestSequence = 0, // sequence used to drop out-of-order responses- handler = null,- quietMillis = options.quietMillis || 100,- ajaxUrl = options.url,- self = this;-- return function (query) {- window.clearTimeout(timeout);- timeout = window.setTimeout(function () {- requestSequence += 1; // increment the sequence- var requestNumber = requestSequence, // this request's sequence number- data = options.data, // ajax data function- url = ajaxUrl, // ajax url string or function- transport = options.transport || $.fn.select2.ajaxDefaults.transport,- // deprecated - to be removed in 4.0 - use params instead- deprecated = {- type: options.type || 'GET', // set type of request (GET or POST)- cache: options.cache || false,- jsonpCallback: options.jsonpCallback||undefined,- dataType: options.dataType||"json"- },- params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated);-- data = data ? data.call(self, query.term, query.page, query.context) : null;- url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url;-- if( null !== handler) { handler.abort(); }-- if (options.params) {- if ($.isFunction(options.params)) {- $.extend(params, options.params.call(self));- } else {- $.extend(params, options.params);- }- }-- $.extend(params, {- url: url,- dataType: options.dataType,- data: data,- success: function (data) {- if (requestNumber < requestSequence) {- return;- }- // TODO - replace query.page with query so users have access to term, page, etc.- var results = options.results(data, query.page);- query.callback(results);- }- });- handler = transport.call(self, params);- }, quietMillis);- };- }-- /**- * Produces a query function that works with a local array- *- * @param options object containing configuration parameters. The options parameter can either be an array or an- * object.- *- * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys.- *- * If the object form is used ti is assumed that it contains 'data' and 'text' keys. The 'data' key should contain- * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text'- * key can either be a String in which case it is expected that each element in the 'data' array has a key with the- * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract- * the text.- */- function local(options) {- var data = options, // data elements- dataText,- tmp,- text = function (item) { return ""+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search-- if ($.isArray(data)) {- tmp = data;- data = { results: tmp };- }-- if ($.isFunction(data) === false) {- tmp = data;- data = function() { return tmp; };- }-- var dataItem = data();- if (dataItem.text) {- text = dataItem.text;- // if text is not a function we assume it to be a key name- if (!$.isFunction(text)) {- dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available- text = function (item) { return item[dataText]; };- }- }-- return function (query) {- var t = query.term, filtered = { results: [] }, process;- if (t === "") {- query.callback(data());- return;- }-- process = function(datum, collection) {- var group, attr;- datum = datum[0];- if (datum.children) {- group = {};- for (attr in datum) {- if (datum.hasOwnProperty(attr)) group[attr]=datum[attr];- }- group.children=[];- $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); });- if (group.children.length || query.matcher(t, text(group), datum)) {- collection.push(group);- }- } else {- if (query.matcher(t, text(datum), datum)) {- collection.push(datum);- }- }- };-- $(data().results).each2(function(i, datum) { process(datum, filtered.results); });- query.callback(filtered);- };- }-- // TODO javadoc- function tags(data) {- var isFunc = $.isFunction(data);- return function (query) {- var t = query.term, filtered = {results: []};- $(isFunc ? data() : data).each(function () {- var isObject = this.text !== undefined,- text = isObject ? this.text : this;- if (t === "" || query.matcher(t, text)) {- filtered.results.push(isObject ? this : {id: this, text: this});- }- });- query.callback(filtered);- };- }-- /**- * Checks if the formatter function should be used.- *- * Throws an error if it is not a function. Returns true if it should be used,- * false if no formatting should be performed.- *- * @param formatter- */- function checkFormatter(formatter, formatterName) {- if ($.isFunction(formatter)) return true;- if (!formatter) return false;- throw new Error("formatterName must be a function or a falsy value");- }-- function evaluate(val) {- return $.isFunction(val) ? val() : val;- }-- function countResults(results) {- var count = 0;- $.each(results, function(i, item) {- if (item.children) {- count += countResults(item.children);- } else {- count++;- }- });- return count;- }-- /**- * Default tokenizer. This function uses breaks the input on substring match of any string from the- * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those- * two options have to be defined in order for the tokenizer to work.- *- * @param input text user has typed so far or pasted into the search field- * @param selection currently selected choices- * @param selectCallback function(choice) callback tho add the choice to selection- * @param opts select2's opts- * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value- */- function defaultTokenizer(input, selection, selectCallback, opts) {- var original = input, // store the original so we can compare and know if we need to tell the search to update its text- dupe = false, // check for whether a token we extracted represents a duplicate selected choice- token, // token- index, // position at which the separator was found- i, l, // looping variables- separator; // the matched separator-- if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined;-- while (true) {- index = -1;-- for (i = 0, l = opts.tokenSeparators.length; i < l; i++) {- separator = opts.tokenSeparators[i];- index = input.indexOf(separator);- if (index >= 0) break;- }-- if (index < 0) break; // did not find any token separator in the input string, bail-- token = input.substring(0, index);- input = input.substring(index + separator.length);-- if (token.length > 0) {- token = opts.createSearchChoice(token, selection);- if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) {- dupe = false;- for (i = 0, l = selection.length; i < l; i++) {- if (equal(opts.id(token), opts.id(selection[i]))) {- dupe = true; break;- }- }-- if (!dupe) selectCallback(token);- }- }- }-- if (original!==input) return input;- }-- /**- * Creates a new class- *- * @param superClass- * @param methods- */- function clazz(SuperClass, methods) {- var constructor = function () {};- constructor.prototype = new SuperClass;- constructor.prototype.constructor = constructor;- constructor.prototype.parent = SuperClass.prototype;- constructor.prototype = $.extend(constructor.prototype, methods);- return constructor;- }-- AbstractSelect2 = clazz(Object, {-- // abstract- bind: function (func) {- var self = this;- return function () {- func.apply(self, arguments);- };- },-- // abstract- init: function (opts) {- var results, search, resultsSelector = ".select2-results", disabled, readonly;-- // prepare options- this.opts = opts = this.prepareOpts(opts);-- this.id=opts.id;-- // destroy if called on an existing component- if (opts.element.data("select2") !== undefined &&- opts.element.data("select2") !== null) {- this.destroy();- }-- this.container = this.createContainer();-- this.containerId="s2id_"+(opts.element.attr("id") || "autogen"+nextUid());- this.containerSelector="#"+this.containerId.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');- this.container.attr("id", this.containerId);-- // cache the body so future lookups are cheap- this.body = thunk(function() { return opts.element.closest("body"); });-- syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);-- this.container.css(evaluate(opts.containerCss));- this.container.addClass(evaluate(opts.containerCssClass));-- this.elementTabIndex = this.opts.element.attr("tabindex");-- // swap container for the element- this.opts.element- .data("select2", this)- .attr("tabindex", "-1")- .before(this.container);- this.container.data("select2", this);-- this.dropdown = this.container.find(".select2-drop");- this.dropdown.addClass(evaluate(opts.dropdownCssClass));- this.dropdown.data("select2", this);-- this.results = results = this.container.find(resultsSelector);- this.search = search = this.container.find("input.select2-input");-- this.resultsPage = 0;- this.context = null;-- // initialize the container- this.initContainer();-- installFilteredMouseMove(this.results);- this.dropdown.on("mousemove-filtered touchstart touchmove touchend", resultsSelector, this.bind(this.highlightUnderEvent));-- installDebouncedScroll(80, this.results);- this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded));-- // do not propagate change event from the search field out of the component- $(this.container).on("change", ".select2-input", function(e) {e.stopPropagation();});- $(this.dropdown).on("change", ".select2-input", function(e) {e.stopPropagation();});-- // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel- if ($.fn.mousewheel) {- results.mousewheel(function (e, delta, deltaX, deltaY) {- var top = results.scrollTop(), height;- if (deltaY > 0 && top - deltaY <= 0) {- results.scrollTop(0);- killEvent(e);- } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) {- results.scrollTop(results.get(0).scrollHeight - results.height());- killEvent(e);- }- });- }-- installKeyUpChangeEvent(search);- search.on("keyup-change input paste", this.bind(this.updateResults));- search.on("focus", function () { search.addClass("select2-focused"); });- search.on("blur", function () { search.removeClass("select2-focused");});-- this.dropdown.on("mouseup", resultsSelector, this.bind(function (e) {- if ($(e.target).closest(".select2-result-selectable").length > 0) {- this.highlightUnderEvent(e);- this.selectHighlighted(e);- }- }));-- // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening- // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's- // dom it will trigger the popup close, which is not what we want- this.dropdown.on("click mouseup mousedown", function (e) { e.stopPropagation(); });-- if ($.isFunction(this.opts.initSelection)) {- // initialize selection based on the current value of the source element- this.initSelection();-- // if the user has provided a function that can set selection based on the value of the source element- // we monitor the change event on the element and trigger it, allowing for two way synchronization- this.monitorSource();- }-- if (opts.maximumInputLength !== null) {- this.search.attr("maxlength", opts.maximumInputLength);- }-- var disabled = opts.element.prop("disabled");- if (disabled === undefined) disabled = false;- this.enable(!disabled);-- var readonly = opts.element.prop("readonly");- if (readonly === undefined) readonly = false;- this.readonly(readonly);-- // Calculate size of scrollbar- scrollBarDimensions = scrollBarDimensions || measureScrollbar();-- this.autofocus = opts.element.prop("autofocus")- opts.element.prop("autofocus", false);- if (this.autofocus) this.focus();- },-- // abstract- destroy: function () {- var select2 = this.opts.element.data("select2");-- if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }-- if (select2 !== undefined) {-- select2.container.remove();- select2.dropdown.remove();- select2.opts.element- .removeClass("select2-offscreen")- .removeData("select2")- .off(".select2")- .attr({"tabindex": this.elementTabIndex})- .prop("autofocus", this.autofocus||false)- .show();- }- },-- // abstract- optionToData: function(element) {- if (element.is("option")) {- return {- id:element.prop("value"),- text:element.text(),- element: element.get(),- css: element.attr("class"),- disabled: element.prop("disabled"),- locked: equal(element.attr("locked"), "locked")- };- } else if (element.is("optgroup")) {- return {- text:element.attr("label"),- children:[],- element: element.get(),- css: element.attr("class")- };- }- },-- // abstract- prepareOpts: function (opts) {- var element, select, idKey, ajaxUrl, self = this;-- element = opts.element;-- if (element.get(0).tagName.toLowerCase() === "select") {- this.select = select = opts.element;- }-- if (select) {- // these options are not allowed when attached to a select because they are picked up off the element itself- $.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function () {- if (this in opts) {- throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a <select> element.");- }- });- }-- opts = $.extend({}, {- populateResults: function(container, results, query) {- var populate, data, result, children, id=this.opts.id;-- populate=function(results, container, depth) {-- var i, l, result, selectable, disabled, compound, node, label, innerContainer, formatted;-- results = opts.sortResults(results, container, query);-- for (i = 0, l = results.length; i < l; i = i + 1) {-- result=results[i];-- disabled = (result.disabled === true);- selectable = (!disabled) && (id(result) !== undefined);-- compound=result.children && result.children.length > 0;-- node=$("<li></li>");- node.addClass("select2-results-dept-"+depth);- node.addClass("select2-result");- node.addClass(selectable ? "select2-result-selectable" : "select2-result-unselectable");- if (disabled) { node.addClass("select2-disabled"); }- if (compound) { node.addClass("select2-result-with-children"); }- node.addClass(self.opts.formatResultCssClass(result));-- label=$(document.createElement("div"));- label.addClass("select2-result-label");-- formatted=opts.formatResult(result, label, query, self.opts.escapeMarkup);- if (formatted!==undefined) {- label.html(formatted);- }-- node.append(label);-- if (compound) {-- innerContainer=$("<ul></ul>");- innerContainer.addClass("select2-result-sub");- populate(result.children, innerContainer, depth+1);- node.append(innerContainer);- }-- node.data("select2-data", result);- container.append(node);- }- };-- populate(results, container, 0);- }- }, $.fn.select2.defaults, opts);-- if (typeof(opts.id) !== "function") {- idKey = opts.id;- opts.id = function (e) { return e[idKey]; };- }-- if ($.isArray(opts.element.data("select2Tags"))) {- if ("tags" in opts) {- throw "tags specified as both an attribute 'data-select2-tags' and in options of Select2 " + opts.element.attr("id");- }- opts.tags=opts.element.data("select2Tags");- }-- if (select) {- opts.query = this.bind(function (query) {- var data = { results: [], more: false },- term = query.term,- children, firstChild, process;-- process=function(element, collection) {- var group;- if (element.is("option")) {- if (query.matcher(term, element.text(), element)) {- collection.push(self.optionToData(element));- }- } else if (element.is("optgroup")) {- group=self.optionToData(element);- element.children().each2(function(i, elm) { process(elm, group.children); });- if (group.children.length>0) {- collection.push(group);- }- }- };-- children=element.children();-- // ignore the placeholder option if there is one- if (this.getPlaceholder() !== undefined && children.length > 0) {- firstChild = children[0];- if ($(firstChild).text() === "") {- children=children.not(firstChild);- }- }-- children.each2(function(i, elm) { process(elm, data.results); });-- query.callback(data);- });- // this is needed because inside val() we construct choices from options and there id is hardcoded- opts.id=function(e) { return e.id; };- opts.formatResultCssClass = function(data) { return data.css; };- } else {- if (!("query" in opts)) {-- if ("ajax" in opts) {- ajaxUrl = opts.element.data("ajax-url");- if (ajaxUrl && ajaxUrl.length > 0) {- opts.ajax.url = ajaxUrl;- }- opts.query = ajax.call(opts.element, opts.ajax);- } else if ("data" in opts) {- opts.query = local(opts.data);- } else if ("tags" in opts) {- opts.query = tags(opts.tags);- if (opts.createSearchChoice === undefined) {- opts.createSearchChoice = function (term) { return {id: term, text: term}; };- }- if (opts.initSelection === undefined) {- opts.initSelection = function (element, callback) {- var data = [];- $(splitVal(element.val(), opts.separator)).each(function () {- var id = this, text = this, tags=opts.tags;- if ($.isFunction(tags)) tags=tags();- $(tags).each(function() { if (equal(this.id, id)) { text = this.text; return false; } });- data.push({id: id, text: text});- });-- callback(data);- };- }- }- }- }- if (typeof(opts.query) !== "function") {- throw "query function not defined for Select2 " + opts.element.attr("id");- }-- return opts;- },-- /**- * Monitor the original element for changes and update select2 accordingly- */- // abstract- monitorSource: function () {- var el = this.opts.element, sync;-- el.on("change.select2", this.bind(function (e) {- if (this.opts.element.data("select2-change-triggered") !== true) {- this.initSelection();- }- }));-- sync = this.bind(function () {-- var enabled, readonly, self = this;-- // sync enabled state-- var disabled = el.prop("disabled");- if (disabled === undefined) disabled = false;- this.enable(!disabled);-- var readonly = el.prop("readonly");- if (readonly === undefined) readonly = false;- this.readonly(readonly);-- syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);- this.container.addClass(evaluate(this.opts.containerCssClass));-- syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);- this.dropdown.addClass(evaluate(this.opts.dropdownCssClass));-- });-- // mozilla and IE- el.on("propertychange.select2 DOMAttrModified.select2", sync);--- // hold onto a reference of the callback to work around a chromium bug- if (this.mutationCallback === undefined) {- this.mutationCallback = function (mutations) {- mutations.forEach(sync);- }- }-- // safari and chrome- if (typeof WebKitMutationObserver !== "undefined") {- if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }- this.propertyObserver = new WebKitMutationObserver(this.mutationCallback);- this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false });- }- },-- // abstract- triggerSelect: function(data) {- var evt = $.Event("select2-selecting", { val: this.id(data), object: data });- this.opts.element.trigger(evt);- return !evt.isDefaultPrevented();- },-- /**- * Triggers the change event on the source element- */- // abstract- triggerChange: function (details) {-- details = details || {};- details= $.extend({}, details, { type: "change", val: this.val() });- // prevents recursive triggering- this.opts.element.data("select2-change-triggered", true);- this.opts.element.trigger(details);- this.opts.element.data("select2-change-triggered", false);-- // some validation frameworks ignore the change event and listen instead to keyup, click for selects- // so here we trigger the click event manually- this.opts.element.click();-- // ValidationEngine ignorea the change event and listens instead to blur- // so here we trigger the blur event manually if so desired- if (this.opts.blurOnChange)- this.opts.element.blur();- },-- //abstract- isInterfaceEnabled: function()- {- return this.enabledInterface === true;- },-- // abstract- enableInterface: function() {- var enabled = this._enabled && !this._readonly,- disabled = !enabled;-- if (enabled === this.enabledInterface) return false;-- this.container.toggleClass("select2-container-disabled", disabled);- this.close();- this.enabledInterface = enabled;-- return true;- },-- // abstract- enable: function(enabled) {- if (enabled === undefined) enabled = true;- if (this._enabled === enabled) return false;- this._enabled = enabled;-- this.opts.element.prop("disabled", !enabled);- this.enableInterface();- return true;- },-- // abstract- readonly: function(enabled) {- if (enabled === undefined) enabled = false;- if (this._readonly === enabled) return false;- this._readonly = enabled;-- this.opts.element.prop("readonly", enabled);- this.enableInterface();- return true;- },-- // abstract- opened: function () {- return this.container.hasClass("select2-dropdown-open");- },-- // abstract- positionDropdown: function() {- var $dropdown = this.dropdown,- offset = this.container.offset(),- height = this.container.outerHeight(false),- width = this.container.outerWidth(false),- dropHeight = $dropdown.outerHeight(false),- viewPortRight = $(window).scrollLeft() + $(window).width(),- viewportBottom = $(window).scrollTop() + $(window).height(),- dropTop = offset.top + height,- dropLeft = offset.left,- enoughRoomBelow = dropTop + dropHeight <= viewportBottom,- enoughRoomAbove = (offset.top - dropHeight) >= this.body().scrollTop(),- dropWidth = $dropdown.outerWidth(false),- enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight,- aboveNow = $dropdown.hasClass("select2-drop-above"),- bodyOffset,- above,- css,- resultsListNode;-- if (this.opts.dropdownAutoWidth) {- resultsListNode = $('.select2-results', $dropdown)[0];- $dropdown.addClass('select2-drop-auto-width');- $dropdown.css('width', '');- // Add scrollbar width to dropdown if vertical scrollbar is present- dropWidth = $dropdown.outerWidth(false) + (resultsListNode.scrollHeight === resultsListNode.clientHeight ? 0 : scrollBarDimensions.width);- dropWidth > width ? width = dropWidth : dropWidth = width;- enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;- }- else {- this.container.removeClass('select2-drop-auto-width');- }-- //console.log("below/ droptop:", dropTop, "dropHeight", dropHeight, "sum", (dropTop+dropHeight)+" viewport bottom", viewportBottom, "enough?", enoughRoomBelow);- //console.log("above/ offset.top", offset.top, "dropHeight", dropHeight, "top", (offset.top-dropHeight), "scrollTop", this.body().scrollTop(), "enough?", enoughRoomAbove);-- // fix positioning when body has an offset and is not position: static-- if (this.body().css('position') !== 'static') {- bodyOffset = this.body().offset();- dropTop -= bodyOffset.top;- dropLeft -= bodyOffset.left;- }-- // always prefer the current above/below alignment, unless there is not enough room-- if (aboveNow) {- above = true;- if (!enoughRoomAbove && enoughRoomBelow) above = false;- } else {- above = false;- if (!enoughRoomBelow && enoughRoomAbove) above = true;- }-- if (!enoughRoomOnRight) {- dropLeft = offset.left + width - dropWidth;- }-- if (above) {- dropTop = offset.top - dropHeight;- this.container.addClass("select2-drop-above");- $dropdown.addClass("select2-drop-above");- }- else {- this.container.removeClass("select2-drop-above");- $dropdown.removeClass("select2-drop-above");- }-- css = $.extend({- top: dropTop,- left: dropLeft,- width: width- }, evaluate(this.opts.dropdownCss));-- $dropdown.css(css);- },-- // abstract- shouldOpen: function() {- var event;-- if (this.opened()) return false;-- if (this._enabled === false || this._readonly === true) return false;-- event = $.Event("select2-opening");- this.opts.element.trigger(event);- return !event.isDefaultPrevented();- },-- // abstract- clearDropdownAlignmentPreference: function() {- // clear the classes used to figure out the preference of where the dropdown should be opened- this.container.removeClass("select2-drop-above");- this.dropdown.removeClass("select2-drop-above");- },-- /**- * Opens the dropdown- *- * @return {Boolean} whether or not dropdown was opened. This method will return false if, for example,- * the dropdown is already open, or if the 'open' event listener on the element called preventDefault().- */- // abstract- open: function () {-- if (!this.shouldOpen()) return false;-- this.opening();-- return true;- },-- /**- * Performs the opening of the dropdown- */- // abstract- opening: function() {- var cid = this.containerId,- scroll = "scroll." + cid,- resize = "resize."+cid,- orient = "orientationchange."+cid,- mask;-- this.container.addClass("select2-dropdown-open").addClass("select2-container-active");-- this.clearDropdownAlignmentPreference();-- if(this.dropdown[0] !== this.body().children().last()[0]) {- this.dropdown.detach().appendTo(this.body());- }-- // create the dropdown mask if doesnt already exist- mask = $("#select2-drop-mask");- if (mask.length == 0) {- mask = $(document.createElement("div"));- mask.attr("id","select2-drop-mask").attr("class","select2-drop-mask");- mask.hide();- mask.appendTo(this.body());- mask.on("mousedown touchstart", function (e) {- var dropdown = $("#select2-drop"), self;- if (dropdown.length > 0) {- self=dropdown.data("select2");- if (self.opts.selectOnBlur) {- self.selectHighlighted({noFocus: true});- }- self.close();- e.preventDefault();- e.stopPropagation();- }- });- }-- // ensure the mask is always right before the dropdown- if (this.dropdown.prev()[0] !== mask[0]) {- this.dropdown.before(mask);- }-- // move the global id to the correct dropdown- $("#select2-drop").removeAttr("id");- this.dropdown.attr("id", "select2-drop");-- // show the elements- mask.css(_makeMaskCss());- mask.show();- this.dropdown.show();- this.positionDropdown();-- this.dropdown.addClass("select2-drop-active");- this.ensureHighlightVisible();-- // attach listeners to events that can change the position of the container and thus require- // the position of the dropdown to be updated as well so it does not come unglued from the container- var that = this;- this.container.parents().add(window).each(function () {- $(this).on(resize+" "+scroll+" "+orient, function (e) {- $("#select2-drop-mask").css(_makeMaskCss());- that.positionDropdown();- });- });-- function _makeMaskCss() {- return {- width : Math.max(document.documentElement.scrollWidth, $(window).width()),- height : Math.max(document.documentElement.scrollHeight, $(window).height())- }- }- },-- // abstract- close: function () {- if (!this.opened()) return;-- var cid = this.containerId,- scroll = "scroll." + cid,- resize = "resize."+cid,- orient = "orientationchange."+cid;-- // unbind event listeners- this.container.parents().add(window).each(function () { $(this).off(scroll).off(resize).off(orient); });-- this.clearDropdownAlignmentPreference();-- $("#select2-drop-mask").hide();- this.dropdown.removeAttr("id"); // only the active dropdown has the select2-drop id- this.dropdown.hide();- this.container.removeClass("select2-dropdown-open");- this.results.empty();--- this.clearSearch();- this.search.removeClass("select2-active");- this.opts.element.trigger($.Event("select2-close"));- },-- // abstract- clearSearch: function () {-- },-- //abstract- getMaximumSelectionSize: function() {- return evaluate(this.opts.maximumSelectionSize);- },-- // abstract- ensureHighlightVisible: function () {- var results = this.results, children, index, child, hb, rb, y, more;-- index = this.highlight();-- if (index < 0) return;-- if (index == 0) {-- // if the first element is highlighted scroll all the way to the top,- // that way any unselectable headers above it will also be scrolled- // into view-- results.scrollTop(0);- return;- }-- children = this.findHighlightableChoices().find('.select2-result-label');-- child = $(children[index]);-- hb = child.offset().top + child.outerHeight(true);-- // if this is the last child lets also make sure select2-more-results is visible- if (index === children.length - 1) {- more = results.find("li.select2-more-results");- if (more.length > 0) {- hb = more.offset().top + more.outerHeight(true);- }- }-- rb = results.offset().top + results.outerHeight(true);- if (hb > rb) {- results.scrollTop(results.scrollTop() + (hb - rb));- }- y = child.offset().top - results.offset().top;-- // make sure the top of the element is visible- if (y < 0 && child.css('display') != 'none' ) {- results.scrollTop(results.scrollTop() + y); // y is negative- }- },-- // abstract- findHighlightableChoices: function() {- return this.results.find(".select2-result-selectable:not(.select2-selected):not(.select2-disabled)");- },-- // abstract- moveHighlight: function (delta) {- var choices = this.findHighlightableChoices(),- index = this.highlight();-- while (index > -1 && index < choices.length) {- index += delta;- var choice = $(choices[index]);- if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled") && !choice.hasClass("select2-selected")) {- this.highlight(index);- break;- }- }- },-- // abstract- highlight: function (index) {- var choices = this.findHighlightableChoices(),- choice,- data;-- if (arguments.length === 0) {- return indexOf(choices.filter(".select2-highlighted")[0], choices.get());- }-- if (index >= choices.length) index = choices.length - 1;- if (index < 0) index = 0;-- this.results.find(".select2-highlighted").removeClass("select2-highlighted");-- choice = $(choices[index]);- choice.addClass("select2-highlighted");-- this.ensureHighlightVisible();-- data = choice.data("select2-data");- if (data) {- this.opts.element.trigger({ type: "select2-highlight", val: this.id(data), choice: data });- }- },-- // abstract- countSelectableResults: function() {- return this.findHighlightableChoices().length;- },-- // abstract- highlightUnderEvent: function (event) {- var el = $(event.target).closest(".select2-result-selectable");- if (el.length > 0 && !el.is(".select2-highlighted")) {- var choices = this.findHighlightableChoices();- this.highlight(choices.index(el));- } else if (el.length == 0) {- // if we are over an unselectable item remove al highlights- this.results.find(".select2-highlighted").removeClass("select2-highlighted");- }- },-- // abstract- loadMoreIfNeeded: function () {- var results = this.results,- more = results.find("li.select2-more-results"),- below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible- offset = -1, // index of first element without data- page = this.resultsPage + 1,- self=this,- term=this.search.val(),- context=this.context;-- if (more.length === 0) return;- below = more.offset().top - results.offset().top - results.height();-- if (below <= this.opts.loadMorePadding) {- more.addClass("select2-active");- this.opts.query({- element: this.opts.element,- term: term,- page: page,- context: context,- matcher: this.opts.matcher,- callback: this.bind(function (data) {-- // ignore a response if the select2 has been closed before it was received- if (!self.opened()) return;--- self.opts.populateResults.call(this, results, data.results, {term: term, page: page, context:context});- self.postprocessResults(data, false, false);-- if (data.more===true) {- more.detach().appendTo(results).text(self.opts.formatLoadMore(page+1));- window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);- } else {- more.remove();- }- self.positionDropdown();- self.resultsPage = page;- self.context = data.context;- })});- }- },-- /**- * Default tokenizer function which does nothing- */- tokenize: function() {-- },-- /**- * @param initial whether or not this is the call to this method right after the dropdown has been opened- */- // abstract- updateResults: function (initial) {- var search = this.search,- results = this.results,- opts = this.opts,- data,- self = this,- input,- term = search.val(),- lastTerm=$.data(this.container, "select2-last-term");-- // prevent duplicate queries against the same term- if (initial !== true && lastTerm && equal(term, lastTerm)) return;-- $.data(this.container, "select2-last-term", term);-- // if the search is currently hidden we do not alter the results- if (initial !== true && (this.showSearchInput === false || !this.opened())) {- return;- }-- function postRender() {- results.scrollTop(0);- search.removeClass("select2-active");- self.positionDropdown();- }-- function render(html) {- results.html(html);- postRender();- }-- var maxSelSize = this.getMaximumSelectionSize();- if (maxSelSize >=1) {- data = this.data();- if ($.isArray(data) && data.length >= maxSelSize && checkFormatter(opts.formatSelectionTooBig, "formatSelectionTooBig")) {- render("<li class='select2-selection-limit'>" + opts.formatSelectionTooBig(maxSelSize) + "</li>");- return;- }- }-- if (search.val().length < opts.minimumInputLength) {- if (checkFormatter(opts.formatInputTooShort, "formatInputTooShort")) {- render("<li class='select2-no-results'>" + opts.formatInputTooShort(search.val(), opts.minimumInputLength) + "</li>");- } else {- render("");- }- if (initial) this.showSearch(true);- return;- }-- if (opts.maximumInputLength && search.val().length > opts.maximumInputLength) {- if (checkFormatter(opts.formatInputTooLong, "formatInputTooLong")) {- render("<li class='select2-no-results'>" + opts.formatInputTooLong(search.val(), opts.maximumInputLength) + "</li>");- } else {- render("");- }- return;- }-- if (opts.formatSearching && this.findHighlightableChoices().length === 0) {- render("<li class='select2-searching'>" + opts.formatSearching() + "</li>");- }-- search.addClass("select2-active");-- // give the tokenizer a chance to pre-process the input- input = this.tokenize();- if (input != undefined && input != null) {- search.val(input);- }-- this.resultsPage = 1;-- opts.query({- element: opts.element,- term: search.val(),- page: this.resultsPage,- context: null,- matcher: opts.matcher,- callback: this.bind(function (data) {- var def; // default choice-- // ignore a response if the select2 has been closed before it was received- if (!this.opened()) {- this.search.removeClass("select2-active");- return;- }-- // save context, if any- this.context = (data.context===undefined) ? null : data.context;- // create a default choice and prepend it to the list- if (this.opts.createSearchChoice && search.val() !== "") {- def = this.opts.createSearchChoice.call(null, search.val(), data.results);- if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) {- if ($(data.results).filter(- function () {- return equal(self.id(this), self.id(def));- }).length === 0) {- data.results.unshift(def);- }- }- }-- if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, "formatNoMatches")) {- render("<li class='select2-no-results'>" + opts.formatNoMatches(search.val()) + "</li>");- return;- }-- results.empty();- self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null});-- if (data.more === true && checkFormatter(opts.formatLoadMore, "formatLoadMore")) {- results.append("<li class='select2-more-results'>" + self.opts.escapeMarkup(opts.formatLoadMore(this.resultsPage)) + "</li>");- window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);- }-- this.postprocessResults(data, initial);-- postRender();-- this.opts.element.trigger({ type: "select2-loaded", data:data });- })});- },-- // abstract- cancel: function () {- this.close();- },-- // abstract- blur: function () {- // if selectOnBlur == true, select the currently highlighted option- if (this.opts.selectOnBlur)- this.selectHighlighted({noFocus: true});-- this.close();- this.container.removeClass("select2-container-active");- // synonymous to .is(':focus'), which is available in jquery >= 1.6- if (this.search[0] === document.activeElement) { this.search.blur(); }- this.clearSearch();- this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");- },-- // abstract- focusSearch: function () {- focus(this.search);- },-- // abstract- selectHighlighted: function (options) {- var index=this.highlight(),- highlighted=this.results.find(".select2-highlighted"),- data = highlighted.closest('.select2-result').data("select2-data");-- if (data) {- this.highlight(index);- this.onSelect(data, options);- }- },-- // abstract- getPlaceholder: function () {- return this.opts.element.attr("placeholder") ||- this.opts.element.attr("data-placeholder") || // jquery 1.4 compat- this.opts.element.data("placeholder") ||- this.opts.placeholder;- },-- /**- * Get the desired width for the container element. This is- * derived first from option `width` passed to select2, then- * the inline 'style' on the original element, and finally- * falls back to the jQuery calculated element width.- */- // abstract- initContainerWidth: function () {- function resolveContainerWidth() {- var style, attrs, matches, i, l;-- if (this.opts.width === "off") {- return null;- } else if (this.opts.width === "element"){- return this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px';- } else if (this.opts.width === "copy" || this.opts.width === "resolve") {- // check if there is inline style on the element that contains width- style = this.opts.element.attr('style');- if (style !== undefined) {- attrs = style.split(';');- for (i = 0, l = attrs.length; i < l; i = i + 1) {- matches = attrs[i].replace(/\s/g, '')- .match(/width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);- if (matches !== null && matches.length >= 1)- return matches[1];- }- }-- // next check if css('width') can resolve a width that is percent based, this is sometimes possible- // when attached to input type=hidden or elements hidden via css- style = this.opts.element.css('width');- if (style && style.length > 0) return style;-- if (this.opts.width === "resolve") {- // finally, fallback on the calculated width of the element- return (this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px');- }-- return null;- } else if ($.isFunction(this.opts.width)) {- return this.opts.width();- } else {- return this.opts.width;- }- };-- var width = resolveContainerWidth.call(this);- if (width !== null) {- this.container.css("width", width);- }- }- });-- SingleSelect2 = clazz(AbstractSelect2, {-- // single-- createContainer: function () {- var container = $(document.createElement("div")).attr({- "class": "select2-container"- }).html([- "<a href='javascript:void(0)' onclick='return false;' class='select2-choice' tabindex='-1'>",- " <span> </span><abbr class='select2-search-choice-close'></abbr>",- " <div><b></b></div>" ,- "</a>",- "<input class='select2-focusser select2-offscreen' type='text'/>",- "<div class='select2-drop select2-display-none'>" ,- " <div class='select2-search'>" ,- " <input type='text' autocomplete='off' autocorrect='off' autocapitilize='off' spellcheck='false' class='select2-input'/>" ,- " </div>" ,- " <ul class='select2-results'>" ,- " </ul>" ,- "</div>"].join(""));- return container;- },-- // single- enableInterface: function() {- if (this.parent.enableInterface.apply(this, arguments)) {- this.focusser.prop("disabled", !this.isInterfaceEnabled());- }- },-- // single- opening: function () {- var el, range;- this.parent.opening.apply(this, arguments);- if (this.showSearchInput !== false) {- // IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range- // all other browsers handle this just fine-- this.search.val(this.focusser.val());- }- this.search.focus();- // in IE we have to move the cursor to the end after focussing, otherwise it will be at the beginning and- // new text will appear *before* focusser.val()- el = this.search.get(0);- if (el.createTextRange) {- range = el.createTextRange();- range.collapse(false);- range.select();- }-- this.focusser.prop("disabled", true).val("");- this.updateResults(true);- this.opts.element.trigger($.Event("select2-open"));- },-- // single- close: function () {- if (!this.opened()) return;- this.parent.close.apply(this, arguments);- this.focusser.removeAttr("disabled");- this.focusser.focus();- },-- // single- focus: function () {- if (this.opened()) {- this.close();- } else {- this.focusser.removeAttr("disabled");- this.focusser.focus();- }- },-- // single- isFocused: function () {- return this.container.hasClass("select2-container-active");- },-- // single- cancel: function () {- this.parent.cancel.apply(this, arguments);- this.focusser.removeAttr("disabled");- this.focusser.focus();- },-- // single- initContainer: function () {-- var selection,- container = this.container,- dropdown = this.dropdown;-- this.showSearch(false);-- this.selection = selection = container.find(".select2-choice");-- this.focusser = container.find(".select2-focusser");-- // rewrite labels from original element to focusser- this.focusser.attr("id", "s2id_autogen"+nextUid());-- $("label[for='" + this.opts.element.attr("id") + "']")- .attr('for', this.focusser.attr('id'));-- this.focusser.attr("tabindex", this.elementTabIndex);-- this.search.on("keydown", this.bind(function (e) {- if (!this.isInterfaceEnabled()) return;-- if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {- // prevent the page from scrolling- killEvent(e);- return;- }-- switch (e.which) {- case KEY.UP:- case KEY.DOWN:- this.moveHighlight((e.which === KEY.UP) ? -1 : 1);- killEvent(e);- return;- case KEY.ENTER:- this.selectHighlighted();- killEvent(e);- return;- case KEY.TAB:- this.selectHighlighted({noFocus: true});- return;- case KEY.ESC:- this.cancel(e);- killEvent(e);- return;- }- }));-- this.search.on("blur", this.bind(function(e) {- // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown.- // without this the search field loses focus which is annoying- if (document.activeElement === this.body().get(0)) {- window.setTimeout(this.bind(function() {- this.search.focus();- }), 0);- }- }));-- this.focusser.on("keydown", this.bind(function (e) {- if (!this.isInterfaceEnabled()) return;-- if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) {- return;- }-- if (this.opts.openOnEnter === false && e.which === KEY.ENTER) {- killEvent(e);- return;- }-- if (e.which == KEY.DOWN || e.which == KEY.UP- || (e.which == KEY.ENTER && this.opts.openOnEnter)) {- this.open();- killEvent(e);- return;- }-- if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) {- if (this.opts.allowClear) {- this.clear();- }- killEvent(e);- return;- }- }));--- installKeyUpChangeEvent(this.focusser);- this.focusser.on("keyup-change input", this.bind(function(e) {- e.stopPropagation();- if (this.opened()) return;- this.open();- }));-- selection.on("mousedown", "abbr", this.bind(function (e) {- if (!this.isInterfaceEnabled()) return;- this.clear();- killEventImmediately(e);- this.close();- this.selection.focus();- }));-- selection.on("mousedown", this.bind(function (e) {-- if (!this.container.hasClass("select2-container-active")) {- this.opts.element.trigger($.Event("select2-focus"));- }-- if (this.opened()) {- this.close();- } else if (this.isInterfaceEnabled()) {- this.open();- }-- killEvent(e);- }));-- dropdown.on("mousedown", this.bind(function() { this.search.focus(); }));-- selection.on("focus", this.bind(function(e) {- killEvent(e);- }));-- this.focusser.on("focus", this.bind(function(){- if (!this.container.hasClass("select2-container-active")) {- this.opts.element.trigger($.Event("select2-focus"));- }- this.container.addClass("select2-container-active");- })).on("blur", this.bind(function() {- if (!this.opened()) {- this.container.removeClass("select2-container-active");- this.opts.element.trigger($.Event("select2-blur"));- }- }));- this.search.on("focus", this.bind(function(){- if (!this.container.hasClass("select2-container-active")) {- this.opts.element.trigger($.Event("select2-focus"));- }- this.container.addClass("select2-container-active");- }));-- this.initContainerWidth();- this.opts.element.addClass("select2-offscreen");- this.setPlaceholder();-- },-- // single- clear: function(triggerChange) {- var data=this.selection.data("select2-data");- if (data) { // guard against queued quick consecutive clicks- this.opts.element.val("");- this.selection.find("span").empty();- this.selection.removeData("select2-data");- this.setPlaceholder();-- if (triggerChange !== false){- this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data });- this.triggerChange({removed:data});- }- }- },-- /**- * Sets selection based on source element's value- */- // single- initSelection: function () {- var selected;- if (this.opts.element.val() === "" && this.opts.element.text() === "") {- this.updateSelection([]);- this.close();- this.setPlaceholder();- } else {- var self = this;- this.opts.initSelection.call(null, this.opts.element, function(selected){- if (selected !== undefined && selected !== null) {- self.updateSelection(selected);- self.close();- self.setPlaceholder();- }- });- }- },-- // single- prepareOpts: function () {- var opts = this.parent.prepareOpts.apply(this, arguments),- self=this;-- if (opts.element.get(0).tagName.toLowerCase() === "select") {- // install the selection initializer- opts.initSelection = function (element, callback) {- var selected = element.find(":selected");- // a single select box always has a value, no need to null check 'selected'- callback(self.optionToData(selected));- };- } else if ("data" in opts) {- // install default initSelection when applied to hidden input and data is local- opts.initSelection = opts.initSelection || function (element, callback) {- var id = element.val();- //search in data by id, storing the actual matching item- var match = null;- opts.query({- matcher: function(term, text, el){- var is_match = equal(id, opts.id(el));- if (is_match) {- match = el;- }- return is_match;- },- callback: !$.isFunction(callback) ? $.noop : function() {- callback(match);- }- });- };- }-- return opts;- },-- // single- getPlaceholder: function() {- // if a placeholder is specified on a single select without the first empty option ignore it- if (this.select) {- if (this.select.find("option").first().text() !== "") {- return undefined;- }- }-- return this.parent.getPlaceholder.apply(this, arguments);- },-- // single- setPlaceholder: function () {- var placeholder = this.getPlaceholder();-- if (this.opts.element.val() === "" && placeholder !== undefined) {-- // check for a first blank option if attached to a select- if (this.select && this.select.find("option:first").text() !== "") return;-- this.selection.find("span").html(this.opts.escapeMarkup(placeholder));-- this.selection.addClass("select2-default");-- this.container.removeClass("select2-allowclear");- }- },-- // single- postprocessResults: function (data, initial, noHighlightUpdate) {- var selected = 0, self = this, showSearchInput = true;-- // find the selected element in the result list-- this.findHighlightableChoices().each2(function (i, elm) {- if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) {- selected = i;- return false;- }- });-- // and highlight it- if (noHighlightUpdate !== false) {- this.highlight(selected);- }-- // show the search box if this is the first we got the results and there are enough of them for search-- if (initial === true && this.showSearchInput === false) {- var min=this.opts.minimumResultsForSearch;- if (min>=0) {- this.showSearch(countResults(data.results)>=min);- }- }-- },-- // single- showSearch: function(showSearchInput) {- this.showSearchInput = showSearchInput;-- this.dropdown.find(".select2-search").toggleClass("select2-search-hidden", !showSearchInput);- this.dropdown.find(".select2-search").toggleClass("select2-offscreen", !showSearchInput);- //add "select2-with-searchbox" to the container if search box is shown- $(this.dropdown, this.container).toggleClass("select2-with-searchbox", showSearchInput);- },-- // single- onSelect: function (data, options) {-- if (!this.triggerSelect(data)) { return; }-- var old = this.opts.element.val(),- oldData = this.data();-- this.opts.element.val(this.id(data));- this.updateSelection(data);-- this.opts.element.trigger({ type: "select2-selected", val: this.id(data), choice: data });-- this.close();-- if (!options || !options.noFocus)- this.selection.focus();-- if (!equal(old, this.id(data))) { this.triggerChange({added:data,removed:oldData}); }- },-- // single- updateSelection: function (data) {-- var container=this.selection.find("span"), formatted;-- this.selection.data("select2-data", data);-- container.empty();- formatted=this.opts.formatSelection(data, container);- if (formatted !== undefined) {- container.append(this.opts.escapeMarkup(formatted));- }-- this.selection.removeClass("select2-default");-- if (this.opts.allowClear && this.getPlaceholder() !== undefined) {- this.container.addClass("select2-allowclear");- }- },-- // single- val: function () {- var val,- triggerChange = false,- data = null,- self = this,- oldData = this.data();-- if (arguments.length === 0) {- return this.opts.element.val();- }-- val = arguments[0];-- if (arguments.length > 1) {- triggerChange = arguments[1];- }-- if (this.select) {- this.select- .val(val)- .find(":selected").each2(function (i, elm) {- data = self.optionToData(elm);- return false;- });- this.updateSelection(data);- this.setPlaceholder();- if (triggerChange) {- this.triggerChange({added: data, removed:oldData});- }- } else {- if (this.opts.initSelection === undefined) {- throw new Error("cannot call val() if initSelection() is not defined");- }- // val is an id. !val is true for [undefined,null,'',0] - 0 is legal- if (!val && val !== 0) {- this.clear(triggerChange);- return;- }- this.opts.element.val(val);- this.opts.initSelection(this.opts.element, function(data){- self.opts.element.val(!data ? "" : self.id(data));- self.updateSelection(data);- self.setPlaceholder();- if (triggerChange) {- self.triggerChange({added: data, removed:oldData});- }- });- }- },-- // single- clearSearch: function () {- this.search.val("");- this.focusser.val("");- },-- // single- data: function(value, triggerChange) {- var data;-- if (arguments.length === 0) {- data = this.selection.data("select2-data");- if (data == undefined) data = null;- return data;- } else {- if (!value || value === "") {- this.clear(triggerChange);- } else {- data = this.data();- this.opts.element.val(!value ? "" : this.id(value));- this.updateSelection(value);- if (triggerChange) {- this.triggerChange({added: value, removed:data});- }- }- }- }- });-- MultiSelect2 = clazz(AbstractSelect2, {-- // multi- createContainer: function () {- var container = $(document.createElement("div")).attr({- "class": "select2-container select2-container-multi"- }).html([- " <ul class='select2-choices'>",- //"<li class='select2-search-choice'><span>California</span><a href="javascript:void(0)" class="select2-search-choice-close"></a></li>" ,- " <li class='select2-search-field'>" ,- " <input type='text' autocomplete='off' autocorrect='off' autocapitilize='off' spellcheck='false' class='select2-input'>" ,- " </li>" ,- "</ul>" ,- "<div class='select2-drop select2-drop-multi select2-display-none'>" ,- " <ul class='select2-results'>" ,- " </ul>" ,- "</div>"].join(""));- return container;- },-- // multi- prepareOpts: function () {- var opts = this.parent.prepareOpts.apply(this, arguments),- self=this;-- // TODO validate placeholder is a string if specified-- if (opts.element.get(0).tagName.toLowerCase() === "select") {- // install sthe selection initializer- opts.initSelection = function (element, callback) {-- var data = [];-- element.find(":selected").each2(function (i, elm) {- data.push(self.optionToData(elm));- });- callback(data);- };- } else if ("data" in opts) {- // install default initSelection when applied to hidden input and data is local- opts.initSelection = opts.initSelection || function (element, callback) {- var ids = splitVal(element.val(), opts.separator);- //search in data by array of ids, storing matching items in a list- var matches = [];- opts.query({- matcher: function(term, text, el){- var is_match = $.grep(ids, function(id) {- return equal(id, opts.id(el));- }).length;- if (is_match) {- matches.push(el);- }- return is_match;- },- callback: !$.isFunction(callback) ? $.noop : function() {- // reorder matches based on the order they appear in the ids array because right now- // they are in the order in which they appear in data array- var ordered = [];- for (var i = 0; i < ids.length; i++) {- var id = ids[i];- for (var j = 0; j < matches.length; j++) {- var match = matches[j];- if (equal(id, opts.id(match))) {- ordered.push(match);- matches.splice(j, 1);- break;- }- }- }- callback(ordered);- }- });- };- }-- return opts;- },-- selectChoice: function (choice) {-- var selected = this.container.find(".select2-search-choice-focus");- if (selected.length && choice && choice[0] == selected[0]) {-- } else {- if (selected.length) {- this.opts.element.trigger("choice-deselected", selected);- }- selected.removeClass("select2-search-choice-focus");- if (choice && choice.length) {- this.close();- choice.addClass("select2-search-choice-focus");- this.opts.element.trigger("choice-selected", choice);- }- }- },-- // multi- initContainer: function () {-- var selector = ".select2-choices", selection;-- this.searchContainer = this.container.find(".select2-search-field");- this.selection = selection = this.container.find(selector);-- var _this = this;- this.selection.on("mousedown", ".select2-search-choice", function (e) {- //killEvent(e);- _this.search[0].focus();- _this.selectChoice($(this));- })- //.sortable({- // items: " > li",- // tolerance: "pointer",- // revert: 100- //});-- // rewrite labels from original element to focusser- this.search.attr("id", "s2id_autogen"+nextUid());- $("label[for='" + this.opts.element.attr("id") + "']")- .attr('for', this.search.attr('id'));-- this.search.on("input paste", this.bind(function() {- if (!this.isInterfaceEnabled()) return;- if (!this.opened()) {- this.open();- }- }));-- this.search.attr("tabindex", this.elementTabIndex);-- this.keydowns = 0;- this.search.on("keydown", this.bind(function (e) {- if (!this.isInterfaceEnabled()) return;-- ++this.keydowns;- var selected = selection.find(".select2-search-choice-focus");- var prev = selected.prev(".select2-search-choice:not(.select2-locked)");- var next = selected.next(".select2-search-choice:not(.select2-locked)");- var pos = getCursorInfo(this.search);-- if (selected.length &&- (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) {- var selectedChoice = selected;- if (e.which == KEY.LEFT && prev.length) {- selectedChoice = prev;- }- else if (e.which == KEY.RIGHT) {- selectedChoice = next.length ? next : null;- }- else if (e.which === KEY.BACKSPACE) {- this.unselect(selected.first());- this.search.width(10);- selectedChoice = prev.length ? prev : next;- } else if (e.which == KEY.DELETE) {- this.unselect(selected.first());- this.search.width(10);- selectedChoice = next.length ? next : null;- } else if (e.which == KEY.ENTER) {- selectedChoice = null;- }-- this.selectChoice(selectedChoice);- killEvent(e);- if (!selectedChoice || !selectedChoice.length) {- this.open();- }- return;- } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1)- || e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) {-- this.selectChoice(selection.find(".select2-search-choice:not(.select2-locked)").last());- killEvent(e);- return;- } else {- this.selectChoice(null);- }-- if (this.opened()) {- switch (e.which) {- case KEY.UP:- case KEY.DOWN:- this.moveHighlight((e.which === KEY.UP) ? -1 : 1);- killEvent(e);- return;- case KEY.ENTER:- this.selectHighlighted();- killEvent(e);- return;- case KEY.TAB:- this.selectHighlighted({noFocus:true});- return;- case KEY.ESC:- this.cancel(e);- killEvent(e);- return;- }- }-- if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e)- || e.which === KEY.BACKSPACE || e.which === KEY.ESC) {- return;- }-- if (e.which === KEY.ENTER) {- if (this.opts.openOnEnter === false) {- return;- } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {- return;- }- }-- this.open();-- if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {- // prevent the page from scrolling- killEvent(e);- }-- if (e.which === KEY.ENTER) {- // prevent form from being submitted- killEvent(e);- }-- }));-- this.search.on("keyup", this.bind(function (e) {- this.keydowns = 0;- this.resizeSearch();- })- );-- this.search.on("blur", this.bind(function(e) {- this.container.removeClass("select2-container-active");- this.search.removeClass("select2-focused");- this.selectChoice(null);- if (!this.opened()) this.clearSearch();- e.stopImmediatePropagation();- this.opts.element.trigger($.Event("select2-blur"));- }));-- this.container.on("mousedown", selector, this.bind(function (e) {- if (!this.isInterfaceEnabled()) return;- if ($(e.target).closest(".select2-search-choice").length > 0) {- // clicked inside a select2 search choice, do not open- return;- }- this.selectChoice(null);- this.clearPlaceholder();- if (!this.container.hasClass("select2-container-active")) {- this.opts.element.trigger($.Event("select2-focus"));- }- this.open();- this.focusSearch();- e.preventDefault();- }));-- this.container.on("focus", selector, this.bind(function () {- if (!this.isInterfaceEnabled()) return;- if (!this.container.hasClass("select2-container-active")) {- this.opts.element.trigger($.Event("select2-focus"));- }- this.container.addClass("select2-container-active");- this.dropdown.addClass("select2-drop-active");- this.clearPlaceholder();- }));-- this.initContainerWidth();- this.opts.element.addClass("select2-offscreen");-- // set the placeholder if necessary- this.clearSearch();- },-- // multi- enableInterface: function() {- if (this.parent.enableInterface.apply(this, arguments)) {- this.search.prop("disabled", !this.isInterfaceEnabled());- }- },-- // multi- initSelection: function () {- var data;- if (this.opts.element.val() === "" && this.opts.element.text() === "") {- this.updateSelection([]);- this.close();- // set the placeholder if necessary- this.clearSearch();- }- if (this.select || this.opts.element.val() !== "") {- var self = this;- this.opts.initSelection.call(null, this.opts.element, function(data){- if (data !== undefined && data !== null) {- self.updateSelection(data);- self.close();- // set the placeholder if necessary- self.clearSearch();- }- });- }- },-- // multi- clearSearch: function () {- var placeholder = this.getPlaceholder(),- maxWidth = this.getMaxSearchWidth();-- if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass("select2-focused") === false) {- this.search.val(placeholder).addClass("select2-default");- // stretch the search box to full width of the container so as much of the placeholder is visible as possible- // we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944- this.search.width(maxWidth > 0 ? maxWidth : this.container.css("width"));- } else {- this.search.val("").width(10);- }- },-- // multi- clearPlaceholder: function () {- if (this.search.hasClass("select2-default")) {- this.search.val("").removeClass("select2-default");- }- },-- // multi- opening: function () {- this.clearPlaceholder(); // should be done before super so placeholder is not used to search- this.resizeSearch();-- this.parent.opening.apply(this, arguments);-- this.focusSearch();-- this.updateResults(true);- this.search.focus();- this.opts.element.trigger($.Event("select2-open"));- },-- // multi- close: function () {- if (!this.opened()) return;- this.parent.close.apply(this, arguments);- },-- // multi- focus: function () {- this.close();- this.search.focus();- //this.opts.element.triggerHandler("focus");- },-- // multi- isFocused: function () {- return this.search.hasClass("select2-focused");- },-- // multi- updateSelection: function (data) {- var ids = [], filtered = [], self = this;-- // filter out duplicates- $(data).each(function () {- if (indexOf(self.id(this), ids) < 0) {- ids.push(self.id(this));- filtered.push(this);- }- });- data = filtered;-- this.selection.find(".select2-search-choice").remove();- $(data).each(function () {- self.addSelectedChoice(this);- });- self.postprocessResults();- },-- // multi- tokenize: function() {- var input = this.search.val();- input = this.opts.tokenizer(input, this.data(), this.bind(this.onSelect), this.opts);- if (input != null && input != undefined) {- this.search.val(input);- if (input.length > 0) {- this.open();- }- }-- },-- // multi- onSelect: function (data, options) {-- if (!this.triggerSelect(data)) { return; }-- this.addSelectedChoice(data);-- this.opts.element.trigger({ type: "selected", val: this.id(data), choice: data });-- if (this.select || !this.opts.closeOnSelect) this.postprocessResults();-- if (this.opts.closeOnSelect) {- this.close();- this.search.width(10);- } else {- if (this.countSelectableResults()>0) {- this.search.width(10);- this.resizeSearch();- if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) {- // if we reached max selection size repaint the results so choices- // are replaced with the max selection reached message- this.updateResults(true);- }- this.positionDropdown();- } else {- // if nothing left to select close- this.close();- this.search.width(10);- }- }-- // since its not possible to select an element that has already been- // added we do not need to check if this is a new element before firing change- this.triggerChange({ added: data });-- if (!options || !options.noFocus)- this.focusSearch();- },-- // multi- cancel: function () {- this.close();- this.focusSearch();- },-- addSelectedChoice: function (data) {- var enableChoice = !data.locked,- enabledItem = $(- "<li class='select2-search-choice'>" +- " <div></div>" +- " <a href='#' onclick='return false;' class='select2-search-choice-close' tabindex='-1'></a>" +- "</li>"),- disabledItem = $(- "<li class='select2-search-choice select2-locked'>" +- "<div></div>" +- "</li>");- var choice = enableChoice ? enabledItem : disabledItem,- id = this.id(data),- val = this.getVal(),- formatted;-- formatted=this.opts.formatSelection(data, choice.find("div"));- if (formatted != undefined) {- choice.find("div").replaceWith("<div title='"+this.opts.escapeMarkup(formatted)+"'>"+this.opts.escapeMarkup(formatted)+"</div>");- }-- if(enableChoice){- choice.find(".select2-search-choice-close")- .on("mousedown", killEvent)- .on("click dblclick", this.bind(function (e) {- if (!this.isInterfaceEnabled()) return;-- $(e.target).closest(".select2-search-choice").fadeOut('fast', this.bind(function(){- this.unselect($(e.target));- this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");- this.close();- this.focusSearch();- })).dequeue();- killEvent(e);- })).on("focus", this.bind(function () {- if (!this.isInterfaceEnabled()) return;- this.container.addClass("select2-container-active");- this.dropdown.addClass("select2-drop-active");- }));- }-- choice.data("select2-data", data);- choice.insertBefore(this.searchContainer);-- val.push(id);- this.setVal(val);- },-- // multi- unselect: function (selected) {- var val = this.getVal(),- data,- index;-- selected = selected.closest(".select2-search-choice");-- if (selected.length === 0) {- throw "Invalid argument: " + selected + ". Must be .select2-search-choice";- }-- data = selected.data("select2-data");-- if (!data) {- // prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued- // and invoked on an element already removed- return;- }-- index = indexOf(this.id(data), val);-- if (index >= 0) {- val.splice(index, 1);- this.setVal(val);- if (this.select) this.postprocessResults();- }- selected.remove();-- this.opts.element.trigger({ type: "removed", val: this.id(data), choice: data });- this.triggerChange({ removed: data });- },-- // multi- postprocessResults: function (data, initial, noHighlightUpdate) {- var val = this.getVal(),- choices = this.results.find(".select2-result"),- compound = this.results.find(".select2-result-with-children"),- self = this;-- choices.each2(function (i, choice) {- var id = self.id(choice.data("select2-data"));- if (indexOf(id, val) >= 0) {- choice.addClass("select2-selected");- // mark all children of the selected parent as selected- choice.find(".select2-result-selectable").addClass("select2-selected");- }- });-- compound.each2(function(i, choice) {- // hide an optgroup if it doesnt have any selectable children- if (!choice.is('.select2-result-selectable')- && choice.find(".select2-result-selectable:not(.select2-selected)").length === 0) {- choice.addClass("select2-selected");- }- });-- if (this.highlight() == -1 && noHighlightUpdate !== false){- self.highlight(0);- }-- //If all results are chosen render formatNoMAtches- if(!this.opts.createSearchChoice && !choices.filter('.select2-result:not(.select2-selected)').length > 0){- this.results.append("<li class='select2-no-results'>" + self.opts.formatNoMatches(self.search.val()) + "</li>");- }-- },-- // multi- getMaxSearchWidth: function() {- return this.selection.width() - getSideBorderPadding(this.search);- },-- // multi- resizeSearch: function () {- var minimumWidth, left, maxWidth, containerLeft, searchWidth,- sideBorderPadding = getSideBorderPadding(this.search);-- minimumWidth = measureTextWidth(this.search) + 10;-- left = this.search.offset().left;-- maxWidth = this.selection.width();- containerLeft = this.selection.offset().left;-- searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding;-- if (searchWidth < minimumWidth) {- searchWidth = maxWidth - sideBorderPadding;- }-- if (searchWidth < 40) {- searchWidth = maxWidth - sideBorderPadding;- }-- if (searchWidth <= 0) {- searchWidth = minimumWidth;- }-- this.search.width(searchWidth);- },-- // multi- getVal: function () {- var val;- if (this.select) {- val = this.select.val();- return val === null ? [] : val;- } else {- val = this.opts.element.val();- return splitVal(val, this.opts.separator);- }- },-- // multi- setVal: function (val) {- var unique;- if (this.select) {- this.select.val(val);- } else {- unique = [];- // filter out duplicates- $(val).each(function () {- if (indexOf(this, unique) < 0) unique.push(this);- });- this.opts.element.val(unique.length === 0 ? "" : unique.join(this.opts.separator));- }- },-- // multi- buildChangeDetails: function (old, current) {- var current = current.slice(0),- old = old.slice(0);-- // remove intersection from each array- for (var i = 0; i < current.length; i++) {- for (var j = 0; j < old.length; j++) {- if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) {- current.splice(i, 1);- i--;- old.splice(j, 1);- j--;- }- }- }-- return {added: current, removed: old};- },--- // multi- val: function (val, triggerChange) {- var oldData, self=this, changeDetails;-- if (arguments.length === 0) {- return this.getVal();- }-- oldData=this.data();- if (!oldData.length) oldData=[];-- // val is an id. !val is true for [undefined,null,'',0] - 0 is legal- if (!val && val !== 0) {- this.opts.element.val("");- this.updateSelection([]);- this.clearSearch();- if (triggerChange) {- this.triggerChange({added: this.data(), removed: oldData});- }- return;- }-- // val is a list of ids- this.setVal(val);-- if (this.select) {- this.opts.initSelection(this.select, this.bind(this.updateSelection));- if (triggerChange) {- this.triggerChange(this.buildChangeDetails(oldData, this.data()));- }- } else {- if (this.opts.initSelection === undefined) {- throw new Error("val() cannot be called if initSelection() is not defined");- }-- this.opts.initSelection(this.opts.element, function(data){- var ids=$(data).map(self.id);- self.setVal(ids);- self.updateSelection(data);- self.clearSearch();- if (triggerChange) {- self.triggerChange(this.buildChangeDetails(oldData, this.data()));- }- });- }- this.clearSearch();- },-- // multi- onSortStart: function() {- if (this.select) {- throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");- }-- // collapse search field into 0 width so its container can be collapsed as well- this.search.width(0);- // hide the container- this.searchContainer.hide();- },-- // multi- onSortEnd:function() {-- var val=[], self=this;-- // show search and move it to the end of the list- this.searchContainer.show();- // make sure the search container is the last item in the list- this.searchContainer.appendTo(this.searchContainer.parent());- // since we collapsed the width in dragStarted, we resize it here- this.resizeSearch();-- // update selection-- this.selection.find(".select2-search-choice").each(function() {- val.push(self.opts.id($(this).data("select2-data")));- });- this.setVal(val);- this.triggerChange();- },-- // multi- data: function(values, triggerChange) {- var self=this, ids, old;- if (arguments.length === 0) {- return this.selection- .find(".select2-search-choice")- .map(function() { return $(this).data("select2-data"); })- .get();- } else {- old = this.data();- if (!values) { values = []; }- ids = $.map(values, function(e) { return self.opts.id(e); });- this.setVal(ids);- this.updateSelection(values);- this.clearSearch();- if (triggerChange) {- this.triggerChange(this.buildChangeDetails(old, this.data()));- }- }- }- });-- $.fn.select2 = function () {-- var args = Array.prototype.slice.call(arguments, 0),- opts,- select2,- value, multiple,- allowedMethods = ["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "onSortStart", "onSortEnd", "enable", "readonly", "positionDropdown", "data"],- valueMethods = ["val", "opened", "isFocused", "container", "data"];-- this.each(function () {- if (args.length === 0 || typeof(args[0]) === "object") {- opts = args.length === 0 ? {} : $.extend({}, args[0]);- opts.element = $(this);-- if (opts.element.get(0).tagName.toLowerCase() === "select") {- multiple = opts.element.prop("multiple");- } else {- multiple = opts.multiple || false;- if ("tags" in opts) {opts.multiple = multiple = true;}- }-- select2 = multiple ? new MultiSelect2() : new SingleSelect2();- select2.init(opts);- } else if (typeof(args[0]) === "string") {-- if (indexOf(args[0], allowedMethods) < 0) {- throw "Unknown method: " + args[0];- }-- value = undefined;- select2 = $(this).data("select2");- if (select2 === undefined) return;- if (args[0] === "container") {- value=select2.container;- } else {- value = select2[args[0]].apply(select2, args.slice(1));- }- if (indexOf(args[0], valueMethods) >= 0) {- return false;- }- } else {- throw "Invalid arguments to select2 plugin: " + args;- }- });- return (value === undefined) ? this : value;- };-- // plugin defaults, accessible to users- $.fn.select2.defaults = {- width: "copy",- loadMorePadding: 0,- closeOnSelect: true,- openOnEnter: true,- containerCss: {},- dropdownCss: {},- containerCssClass: "",- dropdownCssClass: "",- formatResult: function(result, container, query, escapeMarkup) {- var markup=[];- markMatch(result.text, query.term, markup, escapeMarkup);- return markup.join("");- },- formatSelection: function (data, container) {- return data ? data.text : undefined;- },- sortResults: function (results, container, query) {- return results;- },- formatResultCssClass: function(data) {return undefined;},- formatNoMatches: function () { return "No matches found"; },- formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " more character" + (n == 1? "" : "s"); },- formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1? "" : "s"); },- formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); },- formatLoadMore: function (pageNumber) { return "Loading more results..."; },- formatSearching: function () { return "Searching..."; },- minimumResultsForSearch: 0,- minimumInputLength: 0,- maximumInputLength: null,- maximumSelectionSize: 0,- id: function (e) { return e.id; },- matcher: function(term, text) {- return (''+text).toUpperCase().indexOf((''+term).toUpperCase()) >= 0;- },- separator: ",",- tokenSeparators: [],- tokenizer: defaultTokenizer,- escapeMarkup: function (markup) {- var replace_map = {- '\\': '\',- '&': '&',- '<': '<',- '>': '>',- '"': '"',- "'": ''',- "/": '/'- };-- return String(markup).replace(/[&<>"'\/\\]/g, function (match) {- return replace_map[match];- });- },- blurOnChange: false,- selectOnBlur: false,- adaptContainerCssClass: function(c) { return c; },- adaptDropdownCssClass: function(c) { return null; }- };-- $.fn.select2.ajaxDefaults = {- transport: $.ajax,- params: {- type: "GET",- cache: false,- dataType: "json"- }- };-- // exports- window.Select2 = {- query: {- ajax: ajax,- local: local,- tags: tags- }, util: {- debounce: debounce,- markMatch: markMatch- }, "class": {- "abstract": AbstractSelect2,- "single": SingleSelect2,- "multi": MultiSelect2- }- };--}(jQuery));
@@ -1,22 +0,0 @@-/*-Copyright 2012 Igor Vaynberg--Version: 3.4.0 Timestamp: Tue May 14 08:27:33 PDT 2013--This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU-General Public License version 2 (the "GPL License"). You may choose either license to govern your-use of this software only upon the condition that you accept all of the terms of either the Apache-License or the GPL License.--You may obtain a copy of the Apache License and the GPL License at:--http://www.apache.org/licenses/LICENSE-2.0-http://www.gnu.org/licenses/gpl-2.0.html--Unless required by applicable law or agreed to in writing, software distributed under the Apache License-or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,-either express or implied. See the Apache License and the GPL License for the specific language governing-permissions and limitations under the Apache License and the GPL License.-*/-(function(a){a.fn.each2===void 0&&a.fn.extend({each2:function(b){for(var c=a([0]),d=-1,e=this.length;e>++d&&(c.context=c[0]=this[d])&&b.call(c[0],d,c)!==!1;);return this}})})(jQuery),function(a,b){"use strict";function m(a,b){for(var c=0,d=b.length;d>c;c+=1)if(o(a,b[c]))return c;return-1}function n(){var b=a(l);b.appendTo("body");var c={width:b.width()-b[0].clientWidth,height:b.height()-b[0].clientHeight};return b.remove(),c}function o(a,c){return a===c?!0:a===b||c===b?!1:null===a||null===c?!1:a.constructor===String?a+""==c+"":c.constructor===String?c+""==a+"":!1}function p(b,c){var d,e,f;if(null===b||1>b.length)return[];for(d=b.split(c),e=0,f=d.length;f>e;e+=1)d[e]=a.trim(d[e]);return d}function q(a){return a.outerWidth(!1)-a.width()}function r(c){var d="keyup-change-value";c.on("keydown",function(){a.data(c,d)===b&&a.data(c,d,c.val())}),c.on("keyup",function(){var e=a.data(c,d);e!==b&&c.val()!==e&&(a.removeData(c,d),c.trigger("keyup-change"))})}function s(c){c.on("mousemove",function(c){var d=i;(d===b||d.x!==c.pageX||d.y!==c.pageY)&&a(c.target).trigger("mousemove-filtered",c)})}function t(a,c,d){d=d||b;var e;return function(){var b=arguments;window.clearTimeout(e),e=window.setTimeout(function(){c.apply(d,b)},a)}}function u(a){var c,b=!1;return function(){return b===!1&&(c=a(),b=!0),c}}function v(a,b){var c=t(a,function(a){b.trigger("scroll-debounced",a)});b.on("scroll",function(a){m(a.target,b.get())>=0&&c(a)})}function w(a){a[0]!==document.activeElement&&window.setTimeout(function(){var d,b=a[0],c=a.val().length;a.focus(),a.is(":visible")&&b===document.activeElement&&(b.setSelectionRange?b.setSelectionRange(c,c):b.createTextRange&&(d=b.createTextRange(),d.collapse(!1),d.select()))},0)}function x(b){b=a(b)[0];var c=0,d=0;if("selectionStart"in b)c=b.selectionStart,d=b.selectionEnd-c;else if("selection"in document){b.focus();var e=document.selection.createRange();d=document.selection.createRange().text.length,e.moveStart("character",-b.value.length),c=e.text.length-d}return{offset:c,length:d}}function y(a){a.preventDefault(),a.stopPropagation()}function z(a){a.preventDefault(),a.stopImmediatePropagation()}function A(b){if(!h){var c=b[0].currentStyle||window.getComputedStyle(b[0],null);h=a(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:c.fontSize,fontFamily:c.fontFamily,fontStyle:c.fontStyle,fontWeight:c.fontWeight,letterSpacing:c.letterSpacing,textTransform:c.textTransform,whiteSpace:"nowrap"}),h.attr("class","select2-sizer"),a("body").append(h)}return h.text(b.val()),h.width()}function B(b,c,d){var e,g,f=[];e=b.attr("class"),e&&(e=""+e,a(e.split(" ")).each2(function(){0===this.indexOf("select2-")&&f.push(this)})),e=c.attr("class"),e&&(e=""+e,a(e.split(" ")).each2(function(){0!==this.indexOf("select2-")&&(g=d(this),g&&f.push(this))})),b.attr("class",f.join(" "))}function C(a,c,d,e){var f=a.toUpperCase().indexOf(c.toUpperCase()),g=c.length;return 0>f?(d.push(e(a)),b):(d.push(e(a.substring(0,f))),d.push("<span class='select2-match'>"),d.push(e(a.substring(f,f+g))),d.push("</span>"),d.push(e(a.substring(f+g,a.length))),b)}function D(c){var d,e=0,f=null,g=c.quietMillis||100,h=c.url,i=this;return function(j){window.clearTimeout(d),d=window.setTimeout(function(){e+=1;var d=e,g=c.data,k=h,l=c.transport||a.fn.select2.ajaxDefaults.transport,m={type:c.type||"GET",cache:c.cache||!1,jsonpCallback:c.jsonpCallback||b,dataType:c.dataType||"json"},n=a.extend({},a.fn.select2.ajaxDefaults.params,m);g=g?g.call(i,j.term,j.page,j.context):null,k="function"==typeof k?k.call(i,j.term,j.page,j.context):k,null!==f&&f.abort(),c.params&&(a.isFunction(c.params)?a.extend(n,c.params.call(i)):a.extend(n,c.params)),a.extend(n,{url:k,dataType:c.dataType,data:g,success:function(a){if(!(e>d)){var b=c.results(a,j.page);j.callback(b)}}}),f=l.call(i,n)},g)}}function E(c){var e,f,d=c,g=function(a){return""+a.text};a.isArray(d)&&(f=d,d={results:f}),a.isFunction(d)===!1&&(f=d,d=function(){return f});var h=d();return h.text&&(g=h.text,a.isFunction(g)||(e=h.text,g=function(a){return a[e]})),function(c){var h,e=c.term,f={results:[]};return""===e?(c.callback(d()),b):(h=function(b,d){var f,i;if(b=b[0],b.children){f={};for(i in b)b.hasOwnProperty(i)&&(f[i]=b[i]);f.children=[],a(b.children).each2(function(a,b){h(b,f.children)}),(f.children.length||c.matcher(e,g(f),b))&&d.push(f)}else c.matcher(e,g(b),b)&&d.push(b)},a(d().results).each2(function(a,b){h(b,f.results)}),c.callback(f),b)}}function F(c){var d=a.isFunction(c);return function(e){var f=e.term,g={results:[]};a(d?c():c).each(function(){var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c))&&g.results.push(a?this:{id:this,text:this})}),e.callback(g)}}function G(b){if(a.isFunction(b))return!0;if(!b)return!1;throw Error("formatterName must be a function or a falsy value")}function H(b){return a.isFunction(b)?b():b}function I(b){var c=0;return a.each(b,function(a,b){b.children?c+=I(b.children):c++}),c}function J(a,c,d,e){var h,i,j,k,l,f=a,g=!1;if(!e.createSearchChoice||!e.tokenSeparators||1>e.tokenSeparators.length)return b;for(;;){for(i=-1,j=0,k=e.tokenSeparators.length;k>j&&(l=e.tokenSeparators[j],i=a.indexOf(l),!(i>=0));j++);if(0>i)break;if(h=a.substring(0,i),a=a.substring(i+l.length),h.length>0&&(h=e.createSearchChoice(h,c),h!==b&&null!==h&&e.id(h)!==b&&null!==e.id(h))){for(g=!1,j=0,k=c.length;k>j;j++)if(o(e.id(h),e.id(c[j]))){g=!0;break}g||d(h)}}return f!==a?a:b}function K(b,c){var d=function(){};return d.prototype=new b,d.prototype.constructor=d,d.prototype.parent=b.prototype,d.prototype=a.extend(d.prototype,c),d}if(window.Select2===b){var c,d,e,f,g,h,i,j,k,c={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(a){switch(a=a.which?a.which:a){case c.LEFT:case c.RIGHT:case c.UP:case c.DOWN:return!0}return!1},isControl:function(a){var b=a.which;switch(b){case c.SHIFT:case c.CTRL:case c.ALT:return!0}return a.metaKey?!0:!1},isFunctionKey:function(a){return a=a.which?a.which:a,a>=112&&123>=a}},l="<div class='select2-measure-scrollbar'></div>";j=a(document),g=function(){var a=1;return function(){return a++}}(),j.on("mousemove",function(a){i={x:a.pageX,y:a.pageY}}),d=K(Object,{bind:function(a){var b=this;return function(){a.apply(b,arguments)}},init:function(c){var d,e,h,i,f=".select2-results";this.opts=c=this.prepareOpts(c),this.id=c.id,c.element.data("select2")!==b&&null!==c.element.data("select2")&&this.destroy(),this.container=this.createContainer(),this.containerId="s2id_"+(c.element.attr("id")||"autogen"+g()),this.containerSelector="#"+this.containerId.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.body=u(function(){return c.element.closest("body")}),B(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.css(H(c.containerCss)),this.container.addClass(H(c.containerCssClass)),this.elementTabIndex=this.opts.element.attr("tabindex"),this.opts.element.data("select2",this).attr("tabindex","-1").before(this.container),this.container.data("select2",this),this.dropdown=this.container.find(".select2-drop"),this.dropdown.addClass(H(c.dropdownCssClass)),this.dropdown.data("select2",this),this.results=d=this.container.find(f),this.search=e=this.container.find("input.select2-input"),this.resultsPage=0,this.context=null,this.initContainer(),s(this.results),this.dropdown.on("mousemove-filtered touchstart touchmove touchend",f,this.bind(this.highlightUnderEvent)),v(80,this.results),this.dropdown.on("scroll-debounced",f,this.bind(this.loadMoreIfNeeded)),a(this.container).on("change",".select2-input",function(a){a.stopPropagation()}),a(this.dropdown).on("change",".select2-input",function(a){a.stopPropagation()}),a.fn.mousewheel&&d.mousewheel(function(a,b,c,e){var f=d.scrollTop();e>0&&0>=f-e?(d.scrollTop(0),y(a)):0>e&&d.get(0).scrollHeight-d.scrollTop()+e<=d.height()&&(d.scrollTop(d.get(0).scrollHeight-d.height()),y(a))}),r(e),e.on("keyup-change input paste",this.bind(this.updateResults)),e.on("focus",function(){e.addClass("select2-focused")}),e.on("blur",function(){e.removeClass("select2-focused")}),this.dropdown.on("mouseup",f,this.bind(function(b){a(b.target).closest(".select2-result-selectable").length>0&&(this.highlightUnderEvent(b),this.selectHighlighted(b))})),this.dropdown.on("click mouseup mousedown",function(a){a.stopPropagation()}),a.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),null!==c.maximumInputLength&&this.search.attr("maxlength",c.maximumInputLength);var h=c.element.prop("disabled");h===b&&(h=!1),this.enable(!h);var i=c.element.prop("readonly");i===b&&(i=!1),this.readonly(i),k=k||n(),this.autofocus=c.element.prop("autofocus"),c.element.prop("autofocus",!1),this.autofocus&&this.focus()},destroy:function(){var a=this.opts.element.data("select2");this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),a!==b&&(a.container.remove(),a.dropdown.remove(),a.opts.element.removeClass("select2-offscreen").removeData("select2").off(".select2").attr({tabindex:this.elementTabIndex}).prop("autofocus",this.autofocus||!1).show())},optionToData:function(a){return a.is("option")?{id:a.prop("value"),text:a.text(),element:a.get(),css:a.attr("class"),disabled:a.prop("disabled"),locked:o(a.attr("locked"),"locked")}:a.is("optgroup")?{text:a.attr("label"),children:[],element:a.get(),css:a.attr("class")}:b},prepareOpts:function(c){var d,e,f,g,h=this;if(d=c.element,"select"===d.get(0).tagName.toLowerCase()&&(this.select=e=c.element),e&&a.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in c)throw Error("Option '"+this+"' is not allowed for Select2 when attached to a <select> element.")}),c=a.extend({},{populateResults:function(d,e,f){var g,l=this.opts.id;g=function(d,e,i){var j,k,m,n,o,p,q,r,s,t;for(d=c.sortResults(d,e,f),j=0,k=d.length;k>j;j+=1)m=d[j],o=m.disabled===!0,n=!o&&l(m)!==b,p=m.children&&m.children.length>0,q=a("<li></li>"),q.addClass("select2-results-dept-"+i),q.addClass("select2-result"),q.addClass(n?"select2-result-selectable":"select2-result-unselectable"),o&&q.addClass("select2-disabled"),p&&q.addClass("select2-result-with-children"),q.addClass(h.opts.formatResultCssClass(m)),r=a(document.createElement("div")),r.addClass("select2-result-label"),t=c.formatResult(m,r,f,h.opts.escapeMarkup),t!==b&&r.html(t),q.append(r),p&&(s=a("<ul></ul>"),s.addClass("select2-result-sub"),g(m.children,s,i+1),q.append(s)),q.data("select2-data",m),e.append(q)},g(e,d,0)}},a.fn.select2.defaults,c),"function"!=typeof c.id&&(f=c.id,c.id=function(a){return a[f]}),a.isArray(c.element.data("select2Tags"))){if("tags"in c)throw"tags specified as both an attribute 'data-select2-tags' and in options of Select2 "+c.element.attr("id");c.tags=c.element.data("select2Tags")}if(e?(c.query=this.bind(function(c){var g,i,j,e={results:[],more:!1},f=c.term;j=function(a,b){var d;a.is("option")?c.matcher(f,a.text(),a)&&b.push(h.optionToData(a)):a.is("optgroup")&&(d=h.optionToData(a),a.children().each2(function(a,b){j(b,d.children)}),d.children.length>0&&b.push(d))},g=d.children(),this.getPlaceholder()!==b&&g.length>0&&(i=g[0],""===a(i).text()&&(g=g.not(i))),g.each2(function(a,b){j(b,e.results)}),c.callback(e)}),c.id=function(a){return a.id},c.formatResultCssClass=function(a){return a.css}):"query"in c||("ajax"in c?(g=c.element.data("ajax-url"),g&&g.length>0&&(c.ajax.url=g),c.query=D.call(c.element,c.ajax)):"data"in c?c.query=E(c.data):"tags"in c&&(c.query=F(c.tags),c.createSearchChoice===b&&(c.createSearchChoice=function(a){return{id:a,text:a}}),c.initSelection===b&&(c.initSelection=function(d,e){var f=[];a(p(d.val(),c.separator)).each(function(){var d=this,e=this,g=c.tags;a.isFunction(g)&&(g=g()),a(g).each(function(){return o(this.id,d)?(e=this.text,!1):b}),f.push({id:d,text:e})}),e(f)}))),"function"!=typeof c.query)throw"query function not defined for Select2 "+c.element.attr("id");return c},monitorSource:function(){var c,a=this.opts.element;a.on("change.select2",this.bind(function(){this.opts.element.data("select2-change-triggered")!==!0&&this.initSelection()})),c=this.bind(function(){var d,f=a.prop("disabled");f===b&&(f=!1),this.enable(!f);var d=a.prop("readonly");d===b&&(d=!1),this.readonly(d),B(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.addClass(H(this.opts.containerCssClass)),B(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(H(this.opts.dropdownCssClass))}),a.on("propertychange.select2 DOMAttrModified.select2",c),this.mutationCallback===b&&(this.mutationCallback=function(a){a.forEach(c)}),"undefined"!=typeof WebKitMutationObserver&&(this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),this.propertyObserver=new WebKitMutationObserver(this.mutationCallback),this.propertyObserver.observe(a.get(0),{attributes:!0,subtree:!1}))},triggerSelect:function(b){var c=a.Event("select2-selecting",{val:this.id(b),object:b});return this.opts.element.trigger(c),!c.isDefaultPrevented()},triggerChange:function(b){b=b||{},b=a.extend({},b,{type:"change",val:this.val()}),this.opts.element.data("select2-change-triggered",!0),this.opts.element.trigger(b),this.opts.element.data("select2-change-triggered",!1),this.opts.element.click(),this.opts.blurOnChange&&this.opts.element.blur()},isInterfaceEnabled:function(){return this.enabledInterface===!0},enableInterface:function(){var a=this._enabled&&!this._readonly,b=!a;return a===this.enabledInterface?!1:(this.container.toggleClass("select2-container-disabled",b),this.close(),this.enabledInterface=a,!0)},enable:function(a){return a===b&&(a=!0),this._enabled===a?!1:(this._enabled=a,this.opts.element.prop("disabled",!a),this.enableInterface(),!0)},readonly:function(a){return a===b&&(a=!1),this._readonly===a?!1:(this._readonly=a,this.opts.element.prop("readonly",a),this.enableInterface(),!0)},opened:function(){return this.container.hasClass("select2-dropdown-open")},positionDropdown:function(){var q,r,s,t,b=this.dropdown,c=this.container.offset(),d=this.container.outerHeight(!1),e=this.container.outerWidth(!1),f=b.outerHeight(!1),g=a(window).scrollLeft()+a(window).width(),h=a(window).scrollTop()+a(window).height(),i=c.top+d,j=c.left,l=h>=i+f,m=c.top-f>=this.body().scrollTop(),n=b.outerWidth(!1),o=g>=j+n,p=b.hasClass("select2-drop-above");this.opts.dropdownAutoWidth?(t=a(".select2-results",b)[0],b.addClass("select2-drop-auto-width"),b.css("width",""),n=b.outerWidth(!1)+(t.scrollHeight===t.clientHeight?0:k.width),n>e?e=n:n=e,o=g>=j+n):this.container.removeClass("select2-drop-auto-width"),"static"!==this.body().css("position")&&(q=this.body().offset(),i-=q.top,j-=q.left),p?(r=!0,!m&&l&&(r=!1)):(r=!1,!l&&m&&(r=!0)),o||(j=c.left+e-n),r?(i=c.top-f,this.container.addClass("select2-drop-above"),b.addClass("select2-drop-above")):(this.container.removeClass("select2-drop-above"),b.removeClass("select2-drop-above")),s=a.extend({top:i,left:j,width:e},H(this.opts.dropdownCss)),b.css(s)},shouldOpen:function(){var b;return this.opened()?!1:this._enabled===!1||this._readonly===!0?!1:(b=a.Event("select2-opening"),this.opts.element.trigger(b),!b.isDefaultPrevented())},clearDropdownAlignmentPreference:function(){this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")},open:function(){return this.shouldOpen()?(this.opening(),!0):!1},opening:function(){function h(){return{width:Math.max(document.documentElement.scrollWidth,a(window).width()),height:Math.max(document.documentElement.scrollHeight,a(window).height())}}var f,b=this.containerId,c="scroll."+b,d="resize."+b,e="orientationchange."+b;this.container.addClass("select2-dropdown-open").addClass("select2-container-active"),this.clearDropdownAlignmentPreference(),this.dropdown[0]!==this.body().children().last()[0]&&this.dropdown.detach().appendTo(this.body()),f=a("#select2-drop-mask"),0==f.length&&(f=a(document.createElement("div")),f.attr("id","select2-drop-mask").attr("class","select2-drop-mask"),f.hide(),f.appendTo(this.body()),f.on("mousedown touchstart",function(b){var d,c=a("#select2-drop");c.length>0&&(d=c.data("select2"),d.opts.selectOnBlur&&d.selectHighlighted({noFocus:!0}),d.close(),b.preventDefault(),b.stopPropagation())})),this.dropdown.prev()[0]!==f[0]&&this.dropdown.before(f),a("#select2-drop").removeAttr("id"),this.dropdown.attr("id","select2-drop"),f.css(h()),f.show(),this.dropdown.show(),this.positionDropdown(),this.dropdown.addClass("select2-drop-active"),this.ensureHighlightVisible();var g=this;this.container.parents().add(window).each(function(){a(this).on(d+" "+c+" "+e,function(){a("#select2-drop-mask").css(h()),g.positionDropdown()})})},close:function(){if(this.opened()){var b=this.containerId,c="scroll."+b,d="resize."+b,e="orientationchange."+b;this.container.parents().add(window).each(function(){a(this).off(c).off(d).off(e)}),this.clearDropdownAlignmentPreference(),a("#select2-drop-mask").hide(),this.dropdown.removeAttr("id"),this.dropdown.hide(),this.container.removeClass("select2-dropdown-open"),this.results.empty(),this.clearSearch(),this.search.removeClass("select2-active"),this.opts.element.trigger(a.Event("select2-close"))}},clearSearch:function(){},getMaximumSelectionSize:function(){return H(this.opts.maximumSelectionSize)},ensureHighlightVisible:function(){var d,e,f,g,h,i,j,c=this.results;if(e=this.highlight(),!(0>e)){if(0==e)return c.scrollTop(0),b;d=this.findHighlightableChoices().find(".select2-result-label"),f=a(d[e]),g=f.offset().top+f.outerHeight(!0),e===d.length-1&&(j=c.find("li.select2-more-results"),j.length>0&&(g=j.offset().top+j.outerHeight(!0))),h=c.offset().top+c.outerHeight(!0),g>h&&c.scrollTop(c.scrollTop()+(g-h)),i=f.offset().top-c.offset().top,0>i&&"none"!=f.css("display")&&c.scrollTop(c.scrollTop()+i)}},findHighlightableChoices:function(){return this.results.find(".select2-result-selectable:not(.select2-selected):not(.select2-disabled)")},moveHighlight:function(b){for(var c=this.findHighlightableChoices(),d=this.highlight();d>-1&&c.length>d;){d+=b;var e=a(c[d]);if(e.hasClass("select2-result-selectable")&&!e.hasClass("select2-disabled")&&!e.hasClass("select2-selected")){this.highlight(d);break}}},highlight:function(c){var e,f,d=this.findHighlightableChoices();return 0===arguments.length?m(d.filter(".select2-highlighted")[0],d.get()):(c>=d.length&&(c=d.length-1),0>c&&(c=0),this.results.find(".select2-highlighted").removeClass("select2-highlighted"),e=a(d[c]),e.addClass("select2-highlighted"),this.ensureHighlightVisible(),f=e.data("select2-data"),f&&this.opts.element.trigger({type:"select2-highlight",val:this.id(f),choice:f}),b)},countSelectableResults:function(){return this.findHighlightableChoices().length},highlightUnderEvent:function(b){var c=a(b.target).closest(".select2-result-selectable");if(c.length>0&&!c.is(".select2-highlighted")){var d=this.findHighlightableChoices();this.highlight(d.index(c))}else 0==c.length&&this.results.find(".select2-highlighted").removeClass("select2-highlighted")},loadMoreIfNeeded:function(){var c,a=this.results,b=a.find("li.select2-more-results"),e=this.resultsPage+1,f=this,g=this.search.val(),h=this.context;0!==b.length&&(c=b.offset().top-a.offset().top-a.height(),this.opts.loadMorePadding>=c&&(b.addClass("select2-active"),this.opts.query({element:this.opts.element,term:g,page:e,context:h,matcher:this.opts.matcher,callback:this.bind(function(c){f.opened()&&(f.opts.populateResults.call(this,a,c.results,{term:g,page:e,context:h}),f.postprocessResults(c,!1,!1),c.more===!0?(b.detach().appendTo(a).text(f.opts.formatLoadMore(e+1)),window.setTimeout(function(){f.loadMoreIfNeeded()},10)):b.remove(),f.positionDropdown(),f.resultsPage=e,f.context=c.context)})})))},tokenize:function(){},updateResults:function(c){function l(){e.scrollTop(0),d.removeClass("select2-active"),h.positionDropdown()}function m(a){e.html(a),l()}var g,i,d=this.search,e=this.results,f=this.opts,h=this,j=d.val(),k=a.data(this.container,"select2-last-term");if((c===!0||!k||!o(j,k))&&(a.data(this.container,"select2-last-term",j),c===!0||this.showSearchInput!==!1&&this.opened())){var n=this.getMaximumSelectionSize();if(n>=1&&(g=this.data(),a.isArray(g)&&g.length>=n&&G(f.formatSelectionTooBig,"formatSelectionTooBig")))return m("<li class='select2-selection-limit'>"+f.formatSelectionTooBig(n)+"</li>"),b;if(d.val().length<f.minimumInputLength)return G(f.formatInputTooShort,"formatInputTooShort")?m("<li class='select2-no-results'>"+f.formatInputTooShort(d.val(),f.minimumInputLength)+"</li>"):m(""),c&&this.showSearch(!0),b;if(f.maximumInputLength&&d.val().length>f.maximumInputLength)return G(f.formatInputTooLong,"formatInputTooLong")?m("<li class='select2-no-results'>"+f.formatInputTooLong(d.val(),f.maximumInputLength)+"</li>"):m(""),b;f.formatSearching&&0===this.findHighlightableChoices().length&&m("<li class='select2-searching'>"+f.formatSearching()+"</li>"),d.addClass("select2-active"),i=this.tokenize(),i!=b&&null!=i&&d.val(i),this.resultsPage=1,f.query({element:f.element,term:d.val(),page:this.resultsPage,context:null,matcher:f.matcher,callback:this.bind(function(g){var i;return this.opened()?(this.context=g.context===b?null:g.context,this.opts.createSearchChoice&&""!==d.val()&&(i=this.opts.createSearchChoice.call(null,d.val(),g.results),i!==b&&null!==i&&h.id(i)!==b&&null!==h.id(i)&&0===a(g.results).filter(function(){return o(h.id(this),h.id(i))}).length&&g.results.unshift(i)),0===g.results.length&&G(f.formatNoMatches,"formatNoMatches")?(m("<li class='select2-no-results'>"+f.formatNoMatches(d.val())+"</li>"),b):(e.empty(),h.opts.populateResults.call(this,e,g.results,{term:d.val(),page:this.resultsPage,context:null}),g.more===!0&&G(f.formatLoadMore,"formatLoadMore")&&(e.append("<li class='select2-more-results'>"+h.opts.escapeMarkup(f.formatLoadMore(this.resultsPage))+"</li>"),window.setTimeout(function(){h.loadMoreIfNeeded()},10)),this.postprocessResults(g,c),l(),this.opts.element.trigger({type:"select2-loaded",data:g}),b)):(this.search.removeClass("select2-active"),b)})})}},cancel:function(){this.close()},blur:function(){this.opts.selectOnBlur&&this.selectHighlighted({noFocus:!0}),this.close(),this.container.removeClass("select2-container-active"),this.search[0]===document.activeElement&&this.search.blur(),this.clearSearch(),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus")},focusSearch:function(){w(this.search)},selectHighlighted:function(a){var b=this.highlight(),c=this.results.find(".select2-highlighted"),d=c.closest(".select2-result").data("select2-data");d&&(this.highlight(b),this.onSelect(d,a))},getPlaceholder:function(){return this.opts.element.attr("placeholder")||this.opts.element.attr("data-placeholder")||this.opts.element.data("placeholder")||this.opts.placeholder},initContainerWidth:function(){function c(){var c,d,e,f,g;if("off"===this.opts.width)return null;if("element"===this.opts.width)return 0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px";if("copy"===this.opts.width||"resolve"===this.opts.width){if(c=this.opts.element.attr("style"),c!==b)for(d=c.split(";"),f=0,g=d.length;g>f;f+=1)if(e=d[f].replace(/\s/g,"").match(/width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i),null!==e&&e.length>=1)return e[1];return c=this.opts.element.css("width"),c&&c.length>0?c:"resolve"===this.opts.width?0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px":null}return a.isFunction(this.opts.width)?this.opts.width():this.opts.width}var d=c.call(this);null!==d&&this.container.css("width",d)}}),e=K(d,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select2-container"}).html(["<a href='javascript:void(0)' onclick='return false;' class='select2-choice' tabindex='-1'>"," <span> </span><abbr class='select2-search-choice-close'></abbr>"," <div><b></b></div>","</a>","<input class='select2-focusser select2-offscreen' type='text'/>","<div class='select2-drop select2-display-none'>"," <div class='select2-search'>"," <input type='text' autocomplete='off' autocorrect='off' autocapitilize='off' spellcheck='false' class='select2-input'/>"," </div>"," <ul class='select2-results'>"," </ul>","</div>"].join(""));return b},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.focusser.prop("disabled",!this.isInterfaceEnabled())},opening:function(){var b,c;this.parent.opening.apply(this,arguments),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.search.focus(),b=this.search.get(0),b.createTextRange&&(c=b.createTextRange(),c.collapse(!1),c.select()),this.focusser.prop("disabled",!0).val(""),this.updateResults(!0),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&(this.parent.close.apply(this,arguments),this.focusser.removeAttr("disabled"),this.focusser.focus())},focus:function(){this.opened()?this.close():(this.focusser.removeAttr("disabled"),this.focusser.focus())},isFocused:function(){return this.container.hasClass("select2-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.removeAttr("disabled"),this.focusser.focus()},initContainer:function(){var d,e=this.container,f=this.dropdown;this.showSearch(!1),this.selection=d=e.find(".select2-choice"),this.focusser=e.find(".select2-focusser"),this.focusser.attr("id","s2id_autogen"+g()),a("label[for='"+this.opts.element.attr("id")+"']").attr("for",this.focusser.attr("id")),this.focusser.attr("tabindex",this.elementTabIndex),this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()){if(a.which===c.PAGE_UP||a.which===c.PAGE_DOWN)return y(a),b;switch(a.which){case c.UP:case c.DOWN:return this.moveHighlight(a.which===c.UP?-1:1),y(a),b;case c.ENTER:return this.selectHighlighted(),y(a),b;case c.TAB:return this.selectHighlighted({noFocus:!0}),b;case c.ESC:return this.cancel(a),y(a),b}}})),this.search.on("blur",this.bind(function(){document.activeElement===this.body().get(0)&&window.setTimeout(this.bind(function(){this.search.focus()}),0)})),this.focusser.on("keydown",this.bind(function(a){return!this.isInterfaceEnabled()||a.which===c.TAB||c.isControl(a)||c.isFunctionKey(a)||a.which===c.ESC?b:this.opts.openOnEnter===!1&&a.which===c.ENTER?(y(a),b):a.which==c.DOWN||a.which==c.UP||a.which==c.ENTER&&this.opts.openOnEnter?(this.open(),y(a),b):a.which==c.DELETE||a.which==c.BACKSPACE?(this.opts.allowClear&&this.clear(),y(a),b):b})),r(this.focusser),this.focusser.on("keyup-change input",this.bind(function(a){a.stopPropagation(),this.opened()||this.open()})),d.on("mousedown","abbr",this.bind(function(a){this.isInterfaceEnabled()&&(this.clear(),z(a),this.close(),this.selection.focus())})),d.on("mousedown",this.bind(function(b){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.opened()?this.close():this.isInterfaceEnabled()&&this.open(),y(b)})),f.on("mousedown",this.bind(function(){this.search.focus()})),d.on("focus",this.bind(function(a){y(a)})),this.focusser.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})).on("blur",this.bind(function(){this.opened()||(this.container.removeClass("select2-container-active"),this.opts.element.trigger(a.Event("select2-blur")))})),this.search.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})),this.initContainerWidth(),this.opts.element.addClass("select2-offscreen"),this.setPlaceholder()},clear:function(a){var b=this.selection.data("select2-data");b&&(this.opts.element.val(""),this.selection.find("span").empty(),this.selection.removeData("select2-data"),this.setPlaceholder(),a!==!1&&(this.opts.element.trigger({type:"select2-removed",val:this.id(b),choice:b}),this.triggerChange({removed:b})))},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text())this.updateSelection([]),this.close(),this.setPlaceholder();else{var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.setPlaceholder())})}},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=a.find(":selected");b(c.optionToData(d))}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=c.val(),f=null;b.query({matcher:function(a,c,d){var g=o(e,b.id(d));return g&&(f=d),g},callback:a.isFunction(d)?function(){d(f)}:a.noop})}),b},getPlaceholder:function(){return this.select&&""!==this.select.find("option").first().text()?b:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var a=this.getPlaceholder();if(""===this.opts.element.val()&&a!==b){if(this.select&&""!==this.select.find("option:first").text())return;this.selection.find("span").html(this.opts.escapeMarkup(a)),this.selection.addClass("select2-default"),this.container.removeClass("select2-allowclear")}},postprocessResults:function(a,c,d){var e=0,f=this;if(this.findHighlightableChoices().each2(function(a,c){return o(f.id(c.data("select2-data")),f.opts.element.val())?(e=a,!1):b}),d!==!1&&this.highlight(e),c===!0&&this.showSearchInput===!1){var h=this.opts.minimumResultsForSearch;h>=0&&this.showSearch(I(a.results)>=h)}},showSearch:function(b){this.showSearchInput=b,this.dropdown.find(".select2-search").toggleClass("select2-search-hidden",!b),this.dropdown.find(".select2-search").toggleClass("select2-offscreen",!b),a(this.dropdown,this.container).toggleClass("select2-with-searchbox",b)},onSelect:function(a,b){if(this.triggerSelect(a)){var c=this.opts.element.val(),d=this.data();this.opts.element.val(this.id(a)),this.updateSelection(a),this.opts.element.trigger({type:"select2-selected",val:this.id(a),choice:a}),this.close(),b&&b.noFocus||this.selection.focus(),o(c,this.id(a))||this.triggerChange({added:a,removed:d})}},updateSelection:function(a){var d,c=this.selection.find("span");this.selection.data("select2-data",a),c.empty(),d=this.opts.formatSelection(a,c),d!==b&&c.append(this.opts.escapeMarkup(d)),this.selection.removeClass("select2-default"),this.opts.allowClear&&this.getPlaceholder()!==b&&this.container.addClass("select2-allowclear")},val:function(){var a,c=!1,d=null,e=this,f=this.data();if(0===arguments.length)return this.opts.element.val();if(a=arguments[0],arguments.length>1&&(c=arguments[1]),this.select)this.select.val(a).find(":selected").each2(function(a,b){return d=e.optionToData(b),!1}),this.updateSelection(d),this.setPlaceholder(),c&&this.triggerChange({added:d,removed:f});else{if(this.opts.initSelection===b)throw Error("cannot call val() if initSelection() is not defined");if(!a&&0!==a)return this.clear(c),b;this.opts.element.val(a),this.opts.initSelection(this.opts.element,function(a){e.opts.element.val(a?e.id(a):""),e.updateSelection(a),e.setPlaceholder(),c&&e.triggerChange({added:a,removed:f})})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(a,c){var d;return 0===arguments.length?(d=this.selection.data("select2-data"),d==b&&(d=null),d):(a&&""!==a?(d=this.data(),this.opts.element.val(a?this.id(a):""),this.updateSelection(a),c&&this.triggerChange({added:a,removed:d})):this.clear(c),b)}}),f=K(d,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select2-container select2-container-multi"}).html([" <ul class='select2-choices'>"," <li class='select2-search-field'>"," <input type='text' autocomplete='off' autocorrect='off' autocapitilize='off' spellcheck='false' class='select2-input'>"," </li>","</ul>","<div class='select2-drop select2-drop-multi select2-display-none'>"," <ul class='select2-results'>"," </ul>","</div>"].join(""));-return b},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=[];a.find(":selected").each2(function(a,b){d.push(c.optionToData(b))}),b(d)}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=p(c.val(),b.separator),f=[];b.query({matcher:function(c,d,g){var h=a.grep(e,function(a){return o(a,b.id(g))}).length;return h&&f.push(g),h},callback:a.isFunction(d)?function(){for(var a=[],c=0;e.length>c;c++)for(var g=e[c],h=0;f.length>h;h++){var i=f[h];if(o(g,b.id(i))){a.push(i),f.splice(h,1);break}}d(a)}:a.noop})}),b},selectChoice:function(a){var b=this.container.find(".select2-search-choice-focus");b.length&&a&&a[0]==b[0]||(b.length&&this.opts.element.trigger("choice-deselected",b),b.removeClass("select2-search-choice-focus"),a&&a.length&&(this.close(),a.addClass("select2-search-choice-focus"),this.opts.element.trigger("choice-selected",a)))},initContainer:function(){var e,d=".select2-choices";this.searchContainer=this.container.find(".select2-search-field"),this.selection=e=this.container.find(d);var f=this;this.selection.on("mousedown",".select2-search-choice",function(){f.search[0].focus(),f.selectChoice(a(this))}),this.search.attr("id","s2id_autogen"+g()),a("label[for='"+this.opts.element.attr("id")+"']").attr("for",this.search.attr("id")),this.search.on("input paste",this.bind(function(){this.isInterfaceEnabled()&&(this.opened()||this.open())})),this.search.attr("tabindex",this.elementTabIndex),this.keydowns=0,this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()){++this.keydowns;var d=e.find(".select2-search-choice-focus"),f=d.prev(".select2-search-choice:not(.select2-locked)"),g=d.next(".select2-search-choice:not(.select2-locked)"),h=x(this.search);if(d.length&&(a.which==c.LEFT||a.which==c.RIGHT||a.which==c.BACKSPACE||a.which==c.DELETE||a.which==c.ENTER)){var i=d;return a.which==c.LEFT&&f.length?i=f:a.which==c.RIGHT?i=g.length?g:null:a.which===c.BACKSPACE?(this.unselect(d.first()),this.search.width(10),i=f.length?f:g):a.which==c.DELETE?(this.unselect(d.first()),this.search.width(10),i=g.length?g:null):a.which==c.ENTER&&(i=null),this.selectChoice(i),y(a),i&&i.length||this.open(),b}if((a.which===c.BACKSPACE&&1==this.keydowns||a.which==c.LEFT)&&0==h.offset&&!h.length)return this.selectChoice(e.find(".select2-search-choice:not(.select2-locked)").last()),y(a),b;if(this.selectChoice(null),this.opened())switch(a.which){case c.UP:case c.DOWN:return this.moveHighlight(a.which===c.UP?-1:1),y(a),b;case c.ENTER:return this.selectHighlighted(),y(a),b;case c.TAB:return this.selectHighlighted({noFocus:!0}),b;case c.ESC:return this.cancel(a),y(a),b}if(a.which!==c.TAB&&!c.isControl(a)&&!c.isFunctionKey(a)&&a.which!==c.BACKSPACE&&a.which!==c.ESC){if(a.which===c.ENTER){if(this.opts.openOnEnter===!1)return;if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return}this.open(),(a.which===c.PAGE_UP||a.which===c.PAGE_DOWN)&&y(a),a.which===c.ENTER&&y(a)}}})),this.search.on("keyup",this.bind(function(){this.keydowns=0,this.resizeSearch()})),this.search.on("blur",this.bind(function(b){this.container.removeClass("select2-container-active"),this.search.removeClass("select2-focused"),this.selectChoice(null),this.opened()||this.clearSearch(),b.stopImmediatePropagation(),this.opts.element.trigger(a.Event("select2-blur"))})),this.container.on("mousedown",d,this.bind(function(b){this.isInterfaceEnabled()&&(a(b.target).closest(".select2-search-choice").length>0||(this.selectChoice(null),this.clearPlaceholder(),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.open(),this.focusSearch(),b.preventDefault()))})),this.container.on("focus",d,this.bind(function(){this.isInterfaceEnabled()&&(this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"),this.clearPlaceholder())})),this.initContainerWidth(),this.opts.element.addClass("select2-offscreen"),this.clearSearch()},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.search.prop("disabled",!this.isInterfaceEnabled())},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text()&&(this.updateSelection([]),this.close(),this.clearSearch()),this.select||""!==this.opts.element.val()){var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.clearSearch())})}},clearSearch:function(){var a=this.getPlaceholder(),c=this.getMaxSearchWidth();a!==b&&0===this.getVal().length&&this.search.hasClass("select2-focused")===!1?(this.search.val(a).addClass("select2-default"),this.search.width(c>0?c:this.container.css("width"))):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select2-default")&&this.search.val("").removeClass("select2-default")},opening:function(){this.clearPlaceholder(),this.resizeSearch(),this.parent.opening.apply(this,arguments),this.focusSearch(),this.updateResults(!0),this.search.focus(),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus()},isFocused:function(){return this.search.hasClass("select2-focused")},updateSelection:function(b){var c=[],d=[],e=this;a(b).each(function(){0>m(e.id(this),c)&&(c.push(e.id(this)),d.push(this))}),b=d,this.selection.find(".select2-search-choice").remove(),a(b).each(function(){e.addSelectedChoice(this)}),e.postprocessResults()},tokenize:function(){var a=this.search.val();a=this.opts.tokenizer(a,this.data(),this.bind(this.onSelect),this.opts),null!=a&&a!=b&&(this.search.val(a),a.length>0&&this.open())},onSelect:function(a,b){this.triggerSelect(a)&&(this.addSelectedChoice(a),this.opts.element.trigger({type:"selected",val:this.id(a),choice:a}),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.getMaximumSelectionSize()>0&&this.val().length>=this.getMaximumSelectionSize()&&this.updateResults(!0),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:a}),b&&b.noFocus||this.focusSearch())},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(c){var j,d=!c.locked,e=a("<li class='select2-search-choice'> <div></div> <a href='#' onclick='return false;' class='select2-search-choice-close' tabindex='-1'></a></li>"),f=a("<li class='select2-search-choice select2-locked'><div></div></li>"),g=d?e:f,h=this.id(c),i=this.getVal();j=this.opts.formatSelection(c,g.find("div")),j!=b&&g.find("div").replaceWith("<div title='"+this.opts.escapeMarkup(j)+"'>"+this.opts.escapeMarkup(j)+"</div>"),d&&g.find(".select2-search-choice-close").on("mousedown",y).on("click dblclick",this.bind(function(b){this.isInterfaceEnabled()&&(a(b.target).closest(".select2-search-choice").fadeOut("fast",this.bind(function(){this.unselect(a(b.target)),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"),this.close(),this.focusSearch()})).dequeue(),y(b))})).on("focus",this.bind(function(){this.isInterfaceEnabled()&&(this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"))})),g.data("select2-data",c),g.insertBefore(this.searchContainer),i.push(h),this.setVal(i)},unselect:function(a){var c,d,b=this.getVal();if(a=a.closest(".select2-search-choice"),0===a.length)throw"Invalid argument: "+a+". Must be .select2-search-choice";c=a.data("select2-data"),c&&(d=m(this.id(c),b),d>=0&&(b.splice(d,1),this.setVal(b),this.select&&this.postprocessResults()),a.remove(),this.opts.element.trigger({type:"removed",val:this.id(c),choice:c}),this.triggerChange({removed:c}))},postprocessResults:function(a,b,c){var d=this.getVal(),e=this.results.find(".select2-result"),f=this.results.find(".select2-result-with-children"),g=this;e.each2(function(a,b){var c=g.id(b.data("select2-data"));m(c,d)>=0&&(b.addClass("select2-selected"),b.find(".select2-result-selectable").addClass("select2-selected"))}),f.each2(function(a,b){b.is(".select2-result-selectable")||0!==b.find(".select2-result-selectable:not(.select2-selected)").length||b.addClass("select2-selected")}),-1==this.highlight()&&c!==!1&&g.highlight(0),!this.opts.createSearchChoice&&!e.filter(".select2-result:not(.select2-selected)").length>0&&this.results.append("<li class='select2-no-results'>"+g.opts.formatNoMatches(g.search.val())+"</li>")},getMaxSearchWidth:function(){return this.selection.width()-q(this.search)},resizeSearch:function(){var a,b,c,d,e,f=q(this.search);a=A(this.search)+10,b=this.search.offset().left,c=this.selection.width(),d=this.selection.offset().left,e=c-(b-d)-f,a>e&&(e=c-f),40>e&&(e=c-f),0>=e&&(e=a),this.search.width(e)},getVal:function(){var a;return this.select?(a=this.select.val(),null===a?[]:a):(a=this.opts.element.val(),p(a,this.opts.separator))},setVal:function(b){var c;this.select?this.select.val(b):(c=[],a(b).each(function(){0>m(this,c)&&c.push(this)}),this.opts.element.val(0===c.length?"":c.join(this.opts.separator)))},buildChangeDetails:function(a,b){for(var b=b.slice(0),a=a.slice(0),c=0;b.length>c;c++)for(var d=0;a.length>d;d++)o(this.opts.id(b[c]),this.opts.id(a[d]))&&(b.splice(c,1),c--,a.splice(d,1),d--);return{added:b,removed:a}},val:function(c,d){var e,f=this;if(0===arguments.length)return this.getVal();if(e=this.data(),e.length||(e=[]),!c&&0!==c)return this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),d&&this.triggerChange({added:this.data(),removed:e}),b;if(this.setVal(c),this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),d&&this.triggerChange(this.buildChangeDetails(e,this.data()));else{if(this.opts.initSelection===b)throw Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(b){var c=a(b).map(f.id);f.setVal(c),f.updateSelection(b),f.clearSearch(),d&&f.triggerChange(this.buildChangeDetails(e,this.data()))})}this.clearSearch()},onSortStart:function(){if(this.select)throw Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var b=[],c=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select2-search-choice").each(function(){b.push(c.opts.id(a(this).data("select2-data")))}),this.setVal(b),this.triggerChange()},data:function(c,d){var f,g,e=this;return 0===arguments.length?this.selection.find(".select2-search-choice").map(function(){return a(this).data("select2-data")}).get():(g=this.data(),c||(c=[]),f=a.map(c,function(a){return e.opts.id(a)}),this.setVal(f),this.updateSelection(c),this.clearSearch(),d&&this.triggerChange(this.buildChangeDetails(g,this.data())),b)}}),a.fn.select2=function(){var d,g,h,i,c=Array.prototype.slice.call(arguments,0),j=["val","destroy","opened","open","close","focus","isFocused","container","onSortStart","onSortEnd","enable","readonly","positionDropdown","data"],k=["val","opened","isFocused","container","data"];return this.each(function(){if(0===c.length||"object"==typeof c[0])d=0===c.length?{}:a.extend({},c[0]),d.element=a(this),"select"===d.element.get(0).tagName.toLowerCase()?i=d.element.prop("multiple"):(i=d.multiple||!1,"tags"in d&&(d.multiple=i=!0)),g=i?new f:new e,g.init(d);else{if("string"!=typeof c[0])throw"Invalid arguments to select2 plugin: "+c;if(0>m(c[0],j))throw"Unknown method: "+c[0];if(h=b,g=a(this).data("select2"),g===b)return;if(h="container"===c[0]?g.container:g[c[0]].apply(g,c.slice(1)),m(c[0],k)>=0)return!1}}),h===b?this:h},a.fn.select2.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(a,b,c,d){var e=[];return C(a.text,c.term,e,d),e.join("")},formatSelection:function(a){return a?a.text:b},sortResults:function(a){return a},formatResultCssClass:function(){return b},formatNoMatches:function(){return"No matches found"},formatInputTooShort:function(a,b){var c=b-a.length;return"Please enter "+c+" more character"+(1==c?"":"s")},formatInputTooLong:function(a,b){var c=a.length-b;return"Please delete "+c+" character"+(1==c?"":"s")},formatSelectionTooBig:function(a){return"You can only select "+a+" item"+(1==a?"":"s")},formatLoadMore:function(){return"Loading more results..."},formatSearching:function(){return"Searching..."},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(a){return a.id},matcher:function(a,b){return(""+b).toUpperCase().indexOf((""+a).toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:J,escapeMarkup:function(a){var b={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(a+"").replace(/[&<>"'\/\\]/g,function(a){return b[a]})},blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(a){return a},adaptDropdownCssClass:function(){return null}},a.fn.select2.ajaxDefaults={transport:a.ajax,params:{type:"GET",cache:!1,dataType:"json"}},window.Select2={query:{ajax:D,local:E,tags:F},util:{debounce:t,markMatch:C},"class":{"abstract":d,single:e,multi:f}}}}(jQuery);
binary file changed (613 → absent bytes)
@@ -1,291 +0,0 @@-/* hledger web ui styles */--/*------------------------------------------------------------------------------------------*/-/* 1. colours */--/* green */-body { background-color:white; color:black; }-.registerreport .odd { background-color:#ded; }-.transactionsreport .odd { background-color:#eee; }-.filtering { background-color:#ded; }-/* #main { border-color:#ded; } see below */-/* .journalreport td { border-color:thin solid #ded; } see below */--/* white */-/* body { background-color:#fff; } */-/* .registerreport .odd { background-color:#eee; } */-/* .filtering { background-color:#ddd; } */-/* #main { border-color:#eee; } see below */-/* .journalreport td { border-color:thin solid #eee; } see below */--#message { color:red; background-color:#fee; }-#addform input.textinput, #addform .dhx_combo_input, .dhx_combo_list { background-color:#eee; }-#editform textarea { background-color:#eee; }-.negative { color:#800; }-.help { }--.balancereport .inacct { /*background-color:#ddd;*/ font-weight:bold; }-.notinacct, .notinacct :link, .notinacct :visited { color:#888; }-.notinacct .negative { color:#b77; }-.balancereport .numpostings { padding-left:1em; color:#aaa; }-.balancereport td.add.mouseover { background-color:rgba(208,208,208,0.5); }-.balancereport td.journal.mouseover { background-color:rgba(208,208,208,0.5); }-.balancereport td.journal.mouseover .hoverlinks { visibility:visible; }-.balancereport td.account.mouseover { background-color:rgba(208,208,208,0.5); }-.balancereport td.account.mouseover .hoverlinks { visibility:visible; }-.balancereport .hoverlinks { visibility:hidden; }-.balancereport .hoverlinks { margin-left:0em; font-weight:normal; /*font-size:smaller;*/ display:inline-block; text-align:right; }-.balancereport .hoverlinks a { margin-left:0.5em; }--/*------------------------------------------------------------------------------------------*/-/* 2. font families & sizes */-/* overspecified for cross-browser robustness */-body { font-family:helvetica,arial,sans-serif; }-pre { font-family:courier,"courier new",monospace; }-input.textinput, .dhx_combo_input, .dhx_combo_list { font-size:small; }-#editform textarea { font-family:courier,"courier new",monospace; font-size:small; }-.nav2 { font-size:small; }-#searchform { font-size:small; }-.topleftlink { font-size:small; }-.toprightlink { font-size:small; }-#journaldesc { font-size:small; }-.togglelink { font-size:smaller; white-space:nowrap }-.help { font-size:smaller; }-.form { font-size:small; }-.transactionsreport { font-size:small; }-.entriesreport { font-size:small; }-.balancereport { font-size:small; }-.registerreport { font-size:small; }-.showall { font-size:small; }-/* #addformlink { font-size:small; } */-/* #editformlink { font-size:small; } */-#contenttitle { font-size:1.2em; }--/*------------------------------------------------------------------------------------------*/-/* 3. layout */--body { margin:0; }-#content { padding:1em 0 0 0.5em; }---#topbar { padding:2px; }-.topleftlink { float:left; margin-right:1em; padding:2px; }-.toprightlink { float:right; margin-left:1em; padding:2px; }-#topbar h1 { display:inline-block; vertical-align:top; margin:0; }-#journalinfo { vertical-align:middle; margin:0; }-/* #topbar { padding:4px; border-bottom:2px solid #ddd; } */--#message { margin:0.5em;}-.help { font-style: italic; }-.helprow td { padding-bottom:8px; }--#outermain { overflow:auto; }-#main { overflow:auto; padding-left:1em; }--#sidebar { float:left; padding-right:1em; border-right:thin solid #ded; margin-bottom:5em; }--#navlinks { margin-bottom:1em; }-.navlink { }-.navlinkcurrent { font-weight:bold; }-.form { margin:0em; }--#searchformdiv { margin:0 0 1em 0; }-#searchform { margin:0; }-#searchform span { padding:4px; }-#stopfilterlink { font-weight:bold; }-.filtering { font-weight:bold; }--#main .journal { }-#main .register { }-.current { font-weight:bold; }-.date { padding-left:0em; }-.description { padding-left:1em; white-space:normal; }-.account { padding-left:1em; white-space:normal; }-.amount { padding-left:1em; white-space:nowrap; }-.balance { padding-left:1em; padding-right:0.3em; white-space:nowrap; }-.amount, .balance { width:2em; } /* minimise width */-.positive { }--/* table.transactionsreport { border-spacing: 0; } */-/* .transactionsreport td { } */-/* .transactionsreport pre { margin-top:0; } */--/* table.entriesreport { border-spacing: 0; } */-/* .entriesreport td { } */-/* .entriesreport pre { margin-top:0; } */--.balancereport { border-spacing:0; }-.balancereport tr { vertical-align:bottom; border-spacing:0; }-.balancereport .title { white-space:nowrap; }-.balancereport .item { }-.balancereport .depth0 { padding-top:1em; }-.balancereport td { padding:0; }-.totalrule td { border-top:thin solid black; }-.balancereport .account { white-space:nowrap; }--.hidden { display:none; }-table.registerreport { border-spacing:0; }-table.registerreport tr { vertical-align:top; }-table.registerreport td { padding-bottom:0.2em; }-table.registerreport .date { white-space:nowrap; }-table.registerreport tr.posting { font-size:smaller; }-table.registerreport tr.posting .account { padding-left:1.5em; }-table.registerreport tr.posting .amount { padding-right:0.5em; }-tr.firstposting td { }-tr.newday td { border-top: 1px solid #797; }-/* tr.newday .date { font-weight:bold; } */-tr.newmonth td { border-top: 2px solid #464; }-/* tr.newyear td { border-top: 3px solid black; } */-#accountsheading { white-space:nowrap; }---#addform input.textinput, #addform .dhx_combo_input, .dhx_combo_list { padding:4px; }-#addform table { }-#addform #addbuttonrow { text-align:right; }-/* #editform { width:95%; } */-#editform textarea { width:100%; padding:4px; }-#searchform table { border-spacing:0; padding-left:0em; }---/*------------------------------------------------------------------------------------------*/-/* 4. dhtmlx.com auto-completing combo box styles */--.dhx_combo_input{-/* color:#333333; */-/* font-family: Arial; */-/* font-size: 9pt; */-/* border:0px; */-/* padding:2px 2px 2px 2px; */-/* position:absolute; */-/* top:0px; */-}--/* table {border:thin solid red} */-/* div {border:thin solid yellow} */--.dhx_combo_box{- position:relative;- display:inline-block;- /* text-align:left; */- /* height:20px; */- /* _height:22px; */- /* overflow:hidden; */- /* background-color: white; */-}--.dhx_combo_list{- position:absolute;- z-index:230;- overflow-y:auto;- overflow-x:hidden;- white-space:nowrap;- border:1px solid black;- height:50%;- /* background-color: white; */-}--.dhx_combo_list div{- cursor:default;- padding:2px 2px 2px 2px;-}--.dhx_selected_option{- background-color:navy;- color:white;-}--.dhx_combo_img{- /* display:none; */- width:18px;- height:20px;- position:absolute;- top:12px;- right:-10px;-}--.dhx_combo_option_img{- position:relative;- top:1px;- margin:0px;- margin-left:2px;- left:0px;- width:18px; height:18px;-}--/* .combo_dhx_sel{ */-/* .dhx_selected_option{ */-/* background-image: url("../static/images/bg_selection.gif") !important; */-/* background-position: bottom; */-/* background-repeat: repeat-x; */-/* color:black; */-/* } */----/* .dhx_combo_img_rtl{ */-/* position:absolute; */-/* top:0px; */-/* left:1px; */-/* width:17px; */-/* height:20px; */-/* } */-/* .dhx_combo_option_img_rtl{ */-/* float:right; */-/* margin-right :0px; */-/* width:18px; height:18px; */-/* } */--/* .dhx_combo_list_rtl{ */-/* direction: rtl; */-/* unicode-bidi : bidi-override; */-/* position:absolute; */-/* z-index:230; */-/* overflow-y:auto; */-/* overflow-x:hidden; */-/* border:1px solid black; */-/* height:100px; */-/* /\* font-family: Arial; *\/ */-/* font-size: 9pt; */-/* background-color: white; */-/* } */-/* .dhx_combo_list_rtl div{ */-/* direction: rtl; */-/* unicode-bidi : bidi-override; */-/* padding:2px 2px 2px 2px; */-/* } */-/* .dhx_combo_list_rtl div div{ */-/* float :right !important; */-/* cursor:default; */-/* } */-/* .dhx_combo_list_rtl div img{ */-/* float :right !important; */-/* } */-/* .dhx_combo_list_rtl div input{ */-/* float :right !important; */-/* } */--/* .dhx_combo_box.dhx_skyblue{ */-/* border:1px solid #a4bed4; */-/* } */-/* .dhx_combo_box.dhx_skyblue .dhx_combo_input { */-/* font-family:Tahoma; */-/* font-size: 11px; */-/* padding:3px; */-/* } */-/* .dhx_combo_list.dhx_skyblue_list{ */-/* background-color: #eaf2fb; */-/* border:1px solid #a4bed4; */-/* font-family:Tahoma; */-/* font-size: 11px; */-/* } */-/* .dhx_combo_list.dhx_skyblue_list div{ */-/* cursor:default; */-/* padding:3px 4px; */-/* } */-/* .dhx_combo_list_rtl.dhx_skyblue_list{ */-/* background-color: #eaf2fb; */-/* border:1px solid #a4bed4; */-/* font-family:Tahoma; */-/* font-size: 11px; */-/* } */-
@@ -46,3 +46,58 @@ <script> window.attachEvent('onload',function(){CFInstall.check({mode:'overlay'})}) \<![endif]-->++ <div .modal.fade #helpmodal tabindex="-1" role="dialog" aria-labelledby="helpLabel" aria-hidden="true">+ <div .modal-dialog .modal-lg>+ <div .modal-content>+ <div .modal-header>+ <button type="button" .close data-dismiss="modal" aria-hidden="true">×+ <h3 .modal-title #helpLabel>Help+ <div .modal-body>+ <div .row>+ <div .col-xs-6>+ <p>+ <b>Keyboard shortcuts+ <ul>+ <li> <b><tt>h</tt></b> or maybe <b><tt>?</tt></b> - view this help (escape or click to exit)+ <li> <b><tt>j</tt></b> - go to the Journal view (home)+ <li> <b><tt>a</tt></b> - add a transaction (escape to cancel)+ <li> <b><tt>s</tt></b> - toggle sidebar+ <li> <b><tt>f</tt></b> - focus search form ("find")+ <p>+ <b>General+ <ul>+ <li> The Journal view shows general journal entries, representing zero-sum movements of money (or other commodity) between hierarchical accounts+ <li> The sidebar shows the resulting accounts and their final balances+ <li> Parent account balances include subaccount balances+ <li> Multiple currencies in balances are displayed one above the other+ <li> Click account name links to see transactions affecting that account, with running balance+ <li> Click date links to see journal entries on that date+ <div .col-xs-6>+ <p>+ <b>Search+ <ul>+ <li> <b><tt>acct:REGEXP</tt></b> - filter on to/from account+ <li> <b><tt>desc:REGEXP</tt></b> - filter on description+ <li> <b><tt>date:PERIODEXP</tt></b>, <b><tt>date2:PERIODEXP</tt></b> - filter on date or secondary date+ <li> <b><tt>code:REGEXP</tt></b> - filter on transaction's code (eg check number)+ <li> <b><tt>status:*</tt></b>, <b><tt>status:!</tt></b>, <b><tt>status:</tt></b> - filter on transaction's status flag (eg cleared status)+ <!-- <li> <b><tt>empty:BOOL</tt></b> - filter on whether amount is zero -->+ <li> <b><tt>amt:N</tt></b>, <b><tt>amt:<N</tt></b>, <b><tt>amt:>N</tt></b> - filter on the unsigned amount magnitude. Or with a sign before N, filter on the signed value. (Single-commodity amounts only.)+ <li> <b><tt>cur:REGEXP</tt></b> - filter on the currency/commodity symbol (must match all of it). Dollar sign must be written as <tt>\$</tt>+ <li> <b><tt>tag:NAME</tt></b>, <b><tt>tag:NAME=REGEX</tt></b> - filter on tag name, or tag name and value+ <!-- <li> <b><tt>depth:N</tt></b> - filter out accounts below this depth -->+ <li> <b><tt>real:BOOL</tt></b> - filter on postings' real/virtual-ness+ <li> Enclose search patterns containing spaces in single or double quotes+ <li> Prepend <b><tt>not:</tt></b> to negate a search term+ <li> Multiple search terms on different fields are AND'ed, multiple search terms on the same field are OR'ed+ <li> These search terms also work with command-line hledger++ <div .modal #addmodal tabindex="-1" role="dialog" aria-labelledby="addLabel" aria-hidden="true">+ <div .modal-dialog .modal-lg>+ <div .modal-content>+ <div .modal-header>+ <button type="button" .close data-dismiss="modal" aria-hidden="true">×+ <h3 .modal-title #addLabel>Add a transaction+ <div .modal-body>+ ^{addform staticRootUrl vd}