Redux Framework - Version 3.5.9

Version Description

Download this release

Release Info

Developer dovyp
Plugin Icon 128x128 Redux Framework
Version 3.5.9
Comparing to
See all releases

Code changes from version 3.5.8 to 3.5.9

CHANGELOG.md CHANGED
@@ -1,5 +1,62 @@
1
  # Redux Framework Changelog
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  ## 3.5.8
4
  * Fixed: Customizer preview callback working again.
5
 
1
  # Redux Framework Changelog
2
 
3
+ ## 3.5.9
4
+ * Notice: New wp.org release
5
+
6
+ ## 3.5.8.15
7
+ * Fixed: Wordpress 4.4.1 related issues.
8
+
9
+ ## 3.5.8.14
10
+ * Fixed: #2794 - User contributed code from #2716 did not contain isset and caused an index error.
11
+
12
+ ## 3.5.8.13
13
+ * Modified: Added tons of wp_remote_get handlings to stop bringing down site if Redux is down.
14
+ * Modified: When some items appear or not. Making devs lives easier. ;)
15
+
16
+ ## 3.5.8.12
17
+ * Updated: parsedown.php vendor code, to deal. with PHP 7.0 errors.
18
+
19
+ ## 3.5.8.11
20
+ * Fixed: #2774 - border fields set to 0 would disappear after saving.
21
+ * Modified: Post/page settings on the media gallery window hidden for gallery field, since they are not applicable to Redux.
22
+ * Added: #2728 - Filter for hints HTML. 'redux/hints/html'. Thanks, @nyordanov.
23
+ * Fixed: #2716 - Enqueue jquery sortable when select field is set to sortable. Thanks, @josh-rathke.
24
+
25
+ ## 3.5.8.10
26
+ * Fixed: #2726 - Redux fixes for WordPress 4.4.
27
+ * Fixed: #2713 - Alerts wouldn't disappear.
28
+
29
+ ## 3.5.8.9
30
+ * Fixed: #2726 - WP 4.4 breaking template.php include, because the core WP guys thought it would be hilarious to break everyone else's stuff.
31
+
32
+ ## 3.5.8.8
33
+ * Fixed: Specifying 'user' in a field's data argument would produce WordPress depreciation errors.
34
+
35
+ ## 3.5.8.7
36
+ * Fixed: Reflective XSS security fix. Thanks to Kacper Szurek for the information.
37
+
38
+ ## 3.5.8.6
39
+ * Modified: #2685 - Rejoined http strings to prevent errors in theme check. Trade off, INFO notices will appear. @Otto says this is ok.
40
+
41
+ ## 3.5.8.5
42
+ * Fixed: #2684 - Sorter not displaying (or saving) WordPress data when using the data argument.
43
+
44
+ ## 3.5.8.4
45
+ * Added: #2673 - WP_CLI check before welcome page redirect.
46
+ * Fixed: #2677 - tinymce javascript errors when wp editor is disabled.
47
+
48
+ ## 3.5.8.3
49
+ * Modified: While in dev_mode, noticies will appear if Redux sample data in share_icons and admin_bar_links arguments is not changed.
50
+ This became necessary because devs are not changing this data and theme ends users are coming to us for theme support.
51
+ * Modified: Redux links to be // instead of http:// or https:// to ensure portability for secure sites.
52
+
53
+ ## 3.5.8.2
54
+ * Fixed: #2665 - For those who must have empty dirs in the extensions dir. No more errors.
55
+ * Added: #2660 - Added 'user'/'users' data type to wordpress data arg. Thanks @golchha21.
56
+
57
+ ## 3.5.8.1
58
+ * Fixed: #2652 - load_plugin_textdomain using depreciated argument.
59
+
60
  ## 3.5.8
61
  * Fixed: Customizer preview callback working again.
62
 
CONTRIBUTING.md CHANGED
@@ -1,27 +1,25 @@
1
- First and foremost, PLEASE check to see if you are using the latest version of Redux by checking the repository. If you plan on reporting an issue with any version BUT the latest version, we are going to ask you to upgrade to the latest code base anyway to see if your issue persists. Please save us and yourself some time by taking this simple step first. Thanks!
2
 
3
- When submitting a ticket, please make sure you include the following information, It is critical, and required. As Team Redux has not yet earned their certificates in mind reading, we need you to provide for us the following information. :)
4
 
5
- 1. The version of Redux you are using. Please do not say 'the latest version' as what you perceive as the latest and what might be the latest could easily be two different things. At the bottom of the Redux options panel is a four digit version number. Please include it.
6
 
7
- 2. The version of Wordpress you are running.
8
 
9
- 3. Please indicate if you are using Redux in dev_mode.
10
 
11
- 4. If you are having difficultly with a particular field, please include the config code for that entire field. If the field is dependent on other fields in the section (for example, required arguments are used), then please include the entire section.
12
 
13
- 5. If you are having difficulty with configuration, please specify if you are using a standalone theme, a child theme, a plugin, etc.
14
 
15
- 6. Please indicate if you are using Redux as a plugin or embedded in your project.
16
 
17
- 7. Please check your browser's output console. If there are any javascript errors pertaining to redux, please list them, including the module/file they occurred in and the line number
18
 
19
- The follow only applies if Redux is not loading properly:
20
 
21
- 8. If you are using Redux embedded, please specify the location in which Redux is installed, where you config is located, and the lines of code you are using to initialize Redux and your config.
22
 
23
- The way in which we diagnose bugs or config difficulties is to attempt to recreate them on our end. This is why we need the very specific information. Once we are able to confirm the issue, we will either push an update, or assist you in correcting any mistakes in your config.
24
-
25
- What we do NOT do is debug your code. We support the Redux code and the way in which the config is put together. Any other issue pertaining to your project is your own, or we might be able to assist with premium support.
26
 
27
  - Team Redux
1
+ Hello, and welcome to Redux Framework!
2
 
3
+ These are our new guidelines for support. Please read them thoroughly before submitting an issue on our issue tracker (or if you were directed her, modify your ticket with the required information).
4
 
5
+ First, and most importantly, we need to know if you are a developer using Redux in their project, or if you are using a theme/plugin that uses Redux. Redux is a tool for developers to include an options panel in their project. Consequently, we do not offer support for folks who have purchased a theme or plugin that uses Redux. The responsibility of support for themes and plugins falls upon it's author. We realize that some authors have included support links for Redux in their projects, when they should not have. We do apologize for that confusion and are taking steps to remedy this confusion. If you have purchased a theme or plugin that utilizes Redux, please contact the author for support. If the author is unavailable for support or has discontinued support, please refer to this article: [Support Defined](https://docs.reduxframework.com/core/support-defined/).
6
 
7
+ If you are a developer, using Redux Framework in your project, PLEASE check to see if you are using the latest version of Redux by checking this repository. If you plan to reporting an issue with any version BUT the latest version, we are going to ask you to upgrade to the latest code base anyway to see if your issue persists. Please save yourself and us some time by taking this simple step first. Thanks!
8
 
9
+ We designed our issue tracker to help identify and correct issues within Redux Framework. If you believe you have discovered an issue, or something is not working as it should, then submitting an issue is appropriate. However, if you are looking for a custom solution involving Redux, or require assistance with original code unrelated to the Redux core itself, then this type of support falls under Premium support. We are not PHP/JavaScript tutors, or a version of Stack Overflow, or have the time and resources to debug your code. For Premium support options, please visit this page: [Premium Support](https://reduxframework.com/extension/premium-support/). Our cost is $100.00 per hour. If you require a more tailored quote, please contact support@reduxframework.com.
10
 
11
+ We handle all support for Redux Framework via our issue tracker. Email support is available only for those who have purchased Premium Support, or in instances where we have requested contact via EMail.
12
 
13
+ For Redux Extensions: All pre-sale and support for premium extensions need to be posted to the [Redux Extensions Issue Tracker] (https://github.com/reduxframework/redux-extensions). Please do not post them to this issue tracker.
14
 
15
+ You MUST be using Redux in dev mode when submitting an issue to us. If you are not, or have circumvented our dev mode protocol, you are on your own. There could be information in your issue that requires dev move active. (Compressed Javascript, for example. We are unable to diagnose issues with compressed Javascript and why dev mode needs to be enabled.)
16
 
17
+ Because it is sometimes difficult to get all the necessary information for a support issue,we have designed the Support URL protocol, in which we are able to gather all the required data via one URL. It will be necessary for you to post one in your issue. Please refer to this article for instructions on generating a support URL: [Generating a Support URL] (https://docs.reduxframework.com/core/generating-a-support-hash/). This is *required*. We will not be able to offer support without one. We appreciate the understanding.
18
 
19
+ If an error or notice appears on your screen, please cut and paste it into your issue. PLEASE, do not say you 'got an error' without telling us what the error or notice is.
20
 
21
+ Sometimes, an issue may be tied to JavaScript. To make this determination, you will need to check the JavaScript console. To do this, ensure your web browser is the topmost window. On your keyboard, press CTRL+SHIFT+I. The JavaScript console will open. If there are notices or errors there, please cut and paste them into your issue. We would prefer a cut and paste, since it will include all pertinent information. Also, Redux dev mode must be enabled so an accurate line number may be reported.
22
 
23
+ It would also be hugely helpful to us if you are able to indicate any steps taken up until the issue occurred. We may need to be able to recreate your issue on our end, and having this information would help with that. Simply stating something 'doesn't work' isn't helpful, and tells us nothing. PLEASE, be as specific as possible.
 
 
24
 
25
  - Team Redux
ReduxCore/assets/css/redux-admin.css CHANGED
@@ -1 +1 @@
1
- .spinner{visibility:hidden;display:block}.spinner.is-active{visibility:visible}.redux-main .description{margin-top:7px}.form-table>tbody>tr>th{width:30%}.redux-container{background-color:#f5f5f5;background-repeat:repeat-x;background-image:-moz-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f2f2), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-ms-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-o-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#eeeeee', GradientType=0);background-image:-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);border:1px solid #dedede;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04);-moz-box-shadow:0 1px 5px rgba(0,0,0,0.4);margin-top:5px;overflow:hidden}.redux-container a:focus{box-shadow:none}.redux-container #redux-header,.redux-container #redux-footer{text-align:right;padding:6px 10px}.redux-container #redux-header{background:#f1f1f1;border-bottom:3px solid blue}.redux-container #redux-header .display_header{float:left;margin:20px 10px}.redux-container #redux-header .display_header h2{display:inline-block;font-style:normal;padding-right:5px}.redux-container #redux-header .display_header .redux-dev-mode-notice-container{position:absolute;top:67px;left:20px;bottom:auto;width:auto}.redux-container #redux-header .display_header span{color:#888}.redux-container #redux-header .display_header span.redux-dev-mode-notice{background-color:#f0ad4e;display:inline;padding:.2em .5em .2em;font-weight:700;line-height:1;color:#fff !important;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.redux-container #redux-header .icon32{float:right;margin:16px 16px 0}.redux-container #redux-footer{border-top:1px solid #E7E7E7;z-index:999}.redux-container #redux-footer #redux-share{float:left;line-height:28px;font-size:15px}.redux-container #redux-footer #redux-share a{text-decoration:none;margin-right:10px}.redux-container #redux-footer #redux-share a img{margin-bottom:-3px}.redux-container .notice-green{margin:0;border-bottom:1px solid #E7E7E7;background-color:#DFF0D8;color:#468847;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-blue{margin:0;border-bottom:1px solid #BCE8F1;background-color:#D9EDF7;color:#3A87AD;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-yellow{margin:0;border-bottom:1px solid #E7E7E7;background-color:#FCF8E3;color:#C09853;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-red,.redux-container .redux-field-errors{margin:0;border-bottom:1px solid #E7E7E7;background-color:#F2DEDE;color:#B94A48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .redux-field-error input,.redux-container .redux-field-error textarea,.redux-container .redux-field-error checkbox{background-color:#FFF6F6;color:#A00}.redux-container .redux-field-warning input,.redux-container .redux-field-warning textarea,.redux-container .redux-field-warning checkbox{background-color:#fcf8e3;color:#444}.redux-container .redux-field-errors,.redux-container .redux-field-warnings,.redux-container .redux-save-warn{display:none}.redux-container .sticky-save-warn{min-height:76px}.redux-container .sticky-save-warn .redux-save-warn{position:fixed;top:32px;right:21px;left:183px;opacity:1;z-index:9999}.redux-container #info_bar{background:#f3f3f3;border-bottom:1px solid #dedede;padding:6px 10px 6px 6px;text-align:right;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.redux-container .redux-group-tab{display:none;margin-bottom:15px}.redux-container .redux-group-tab .redux-theme-data{padding:20px 0;border-top:1px solid #E7E7E7}.redux-container .redux-group-tab .redux-theme-data.theme-description{padding:10px 0;border-width:0}.redux-container .redux-group-tab .redux-theme-data.theme-uri,.redux-container .redux-group-tab .redux-theme-data.theme-author,.redux-container .redux-group-tab .redux-theme-data.theme-version{padding:0;border-width:0}.redux-container .redux-group-tab h3{margin-top:0;line-height:2em;border-bottom:1px solid #E7E7E7}.redux-container .redux-group-tab .redux-section-desc{margin-bottom:15px;color:#666}.redux-container .redux-action_bar{float:right}.redux-container .redux-action_bar .spinner{float:left;margin-top:4px}.redux-container .redux-ajax-loading{display:none;background:red url(data:image/gif;base64,R0lGODlhEAAQAPUAAIiIiIqKio2NjZSUlJqamp6enqKioqSkpK+vr7i4uL+/v8PDw8XFxcnJyc/Pz9HR0dTU1NjY2Nzc3OLi4ubm5unp6ezs7PPz88vLy83NzdDQ0NXV1d3d3eHh4bu7u8zMzOvr6+3t7ZiYmNbW1sDAwMTExNra2s7OztPT09vb2+Xl5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEAAoA/wAsAAAAABAAEAAABXDgJY6XZZEoOTnOlI5WdUFNA5UnSR3FJNUSieFAIUUEgcdl4noEBBGSZaHIiSqKhTX2GhVFiQGjuxgkSoYAoosAGE6RhKQrUURHlS+pItMVCHMjEgQ9JBJISg+JT3ciFg4NFkcCNw0OViiDgF0oTC8hACH5BAAKAP8ALAAAAAAQABAAAAVx4CWOZGle1qJYp2hV1xYE29V1JXUYHWUcnQgGwyFFBAENiqUZ1kapFamTyeBcsNOLMkoMGC3GIIEyBBAtRMDAiiSKp04iQqpwc9kRpUCAizgEBVciEQNJFxpKGgECdFAYYBsCAjUMGS0XgAODmDacIyEAIfkEAAoA/wAsAAAAABAAEAAABnbAi3BILBovIMUidBSGQJdNIKBBMomUg6FDMRgoHcOBQowIqNaLJiCIEEMLxdWpnIfITRAHnxgwjiEfDR8UIQYBCEcgDYwdUR6ORxEfG3MgeFiFRB0FBBxEHAQFkUJmaBofamxuRB9/GwICGxeMTRehnrabpERBACH5BAAKAP8ALAAAAAAQABAAAAZ9wItwSCwaL5aFwnIUWiqXUSAwulSYRMrB0KEYDJSO4UAhRgQBDZLpCAgixOSSWFEssEho81IWJgYMTQwDCUgGAQhNCAEGTCMJHU0dCXBDFX1DFhwdeHwFIhxmGBihQxEDaRcOGhYao1WZGIFnAiMUDg6YRR0ioE57Fx2RRkEAIfkEAAoA/wAsAAAAABAAEAAABXLgJY5kaV7WolinaLGQEEBXxZLUUUyUYVATw4FCisg0NZYmIIiQUosKqaJY3FDS1oUoSgwYrcUggTIAEC1EwMCKJCatSYI2qnBx2dGkQOCQOAQFdxdGARoVGhCITE4kGBgWEI8QFgwYWhGTWiMWERFXIyEAIfkEAAoA/wAsAAAAABAAEAAABn/Ai3BILBovloXCchRaKpdRIDC6VJhEysHQoRgMlI7hQCFGBAENkukICCLE5JJYUSywSGjzUhYmBgxNDAMJSAYBCE0IAAZMEQkdTRwKVUMcHHhCFXpDERgYcJYEBZFDI58aFhoOFxpuoUIUGhoUZwJVGA6ZaxccBAQce0QdpUVBACH5BAAKAP8ALAAAAAAQABAAAAZ8wItwSCwaLyEFKXQUhioXSCAAuVSYRMrB0KEYDJSO4UAhmgQBDZKpCQhMxFBJgRVWlFkOtElhUj4NH3VEJQMJFx0NintFCAEGISEQH3BHHR5VThVlRRSMQh0FBBxEHAQFnEJnaRcfHxdtb0WKIWcCVSUNTYgEo7tEHR1HQQAh+QQACgD/ACwAAAAAEAAQAAAGdcCLcEgsGi8hhSJ0FHY6l1EgMLqAmEROo5HqGAwqL5g42qKsoAsqIEgRVacTdAhSLLBI1bWpwiYGDE0MAwlIBgEITQgBBkwjCRxNHQlVdCpGekUqBQSRQxwEBZdDKQIBZ3FqbG5EDYEjpikhW3hFoJ1NRU9HQQA7) no-repeat;width:16px;height:16px;margin:3px 4px 0;float:right}.redux-container #redux-intro-text{background:#f3f3f3;border-bottom:1px solid #dedede;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc;padding:3px;padding:10px 10px}.redux-container #redux-intro-text p{margin:0;font-family:"Lucida Grande", Sans-serif;color:#888}.redux-container .expand_options{cursor:pointer;display:block;height:22px;width:21px;float:left;font-size:0;text-indent:-9999px;margin:1px 0 0 5px;border:1px solid #bbb;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -26px}.redux-container .expand_options.expanded{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -1px}.redux-container .expand_options:hover{border-color:#888}.redux-container .sticky-footer-fixed{background:#f3f3f3;border-top:1px solid #dedede !important;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.redux-container .redux-sidebar,.redux-container .redux-main{min-height:300px}.no-js{border:1px solid #ffbaba;margin:0;border-bottom:1px solid #E7E7E7;background-color:#F2DEDE;color:#B94A48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-main{background:#FCFCFC;margin-left:201px;border-left:1px solid #D8D8D8;padding:10px 20px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #FFF;box-shadow:inset 0 1px 0 #FFF;position:relative}.redux-main #redux_ajax_overlay{position:absolute;top:0;left:0;right:0;bottom:0;-moz-opacity:0.10;-khtml-opacity:0.10;opacity:0.10;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10);filter:alpha(opacity=10);background:#000;z-index:200;display:none}.redux-main .form-table.no-border{border-top:none}.redux-main .form-table tr{border-bottom:1px solid #E7E7E7}.redux-main .form-table tr:last-child{border-bottom:none !important}.redux-main .form-table tr th,.redux-main .form-table tr td{color:#333}.redux-main .form-table tr td table.mceLayout,.redux-main .form-table tr td table.mceLayout tr,.redux-main .form-table tr td table.mceLayout tr td{padding:0;border-width:0}.redux-main .form-table tr td .redux-th-warning{font-size:1em;color:#C09853;font-weight:normal;display:block;margin-top:10px}.redux-main .form-table tr td .redux-field-warning{border-color:#C09853;margin-top:10px}.redux-main .form-table tr td .redux-th-error{font-size:1em;color:#B94A48;font-weight:normal;display:block;margin-top:10px}.redux-main input.large-text{width:100%}.redux-main .hide{display:none}.redux-main .redux-field-container{padding:20px 0}.redux-main .mini,.redux-main input[type=text].mini{width:60px;text-align:center}.redux-main input{line-height:19px}.redux-main img{max-width:100%;height:auto;width:auto !important}.redux-main .select2-default{width:auto !important}.redux-main .showDefaults{display:block;font-weight:normal;font-size:.8em;color:#888}.redux-main span.description{display:block;font-style:normal;font-weight:400}.redux-main #redux-system-info textarea{min-height:730px;width:100%}.redux-main .field-desc{clear:both;font-size:13px}.redux-main .data-full li{width:100%}.redux-main .data-half li{width:50%;float:left}.redux-main .data-third li{width:33.3%;float:left}.redux-main .data-quarter li{width:25%;float:left}.redux-main .ui-helper-hidden-accessible{top:inherit}.redux-main .form-table{clear:none;margin-top:0px !important}.redux-main .form-table tr:first-child th,.redux-main .form-table tr:first-child td{padding-top:0}.redux-main .input-append input{border-right:0;margin-bottom:0;border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0;float:left;margin-top:0;display:block}.redux-main .input-append .add-on{border-top-right-radius:3px;border-bottom-right-radius:3px;margin-left:-2px;padding-top:4px !important;padding-bottom:2px !important}.redux-main .input-prepend input{border-left:0;margin-bottom:0;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0;padding-top:2px;padding-bottom:5px;float:left;margin-top:0;display:block}.redux-main .input-prepend .add-on{border-top-left-radius:3px;border-bottom-left-radius:3px;float:left}.redux-main .input-append{margin-right:10px;font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.redux-main .input-append .add-on,.redux-main .input-prepend .add-on{width:auto;display:inline-block;min-width:16px;padding:3px 4px;font-size:12px;font-weight:400;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #cccccc}.redux-main .input-prepend{font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.redux-sidebar{width:202px;float:left}.redux-sidebar .redux-group-menu{margin-top:0 !important}.redux-sidebar .redux-group-menu li{margin-top:0}.redux-sidebar .redux-group-menu li.active a,.redux-sidebar .redux-group-menu li.active a:hover,.redux-sidebar .redux-group-menu li.activeChild a,.redux-sidebar .redux-group-menu li.activeChild a:hover{background:#FCFCFC;color:#269ad6;width:184px;opacity:1}.redux-sidebar .redux-group-menu li.active a li a{background:#333;padding-left:5px}.redux-sidebar .redux-group-menu li.divide{padding:0;border-width:1px 0;border-style:solid;border-bottom-color:#E7E7E7;border-top-color:#F9F9F9}.redux-sidebar .redux-group-menu li a:first-child{border-top:none}.redux-sidebar .redux-group-menu li a{display:block;padding:10px 4px 10px 14px;background:#e0e0e0;background:transparent;border-width:1px 0;border-style:solid;border-bottom-color:#E7E7E7;border-top-color:#F9F9F9;opacity:0.7;color:#555;font-weight:bold;text-decoration:none;-webkit-transition:none;transition:none}.redux-sidebar .redux-group-menu li a.custom-tab{background:#f6f6f6}.redux-sidebar .redux-group-menu li a img{width:16px;height:16px;position:absolute;left:15px}.redux-sidebar .redux-group-menu li a:hover{background:#e5e5e5;color:#777;opacity:1}.redux-sidebar .redux-menu-warning,.redux-sidebar .redux-menu-error,.redux-sidebar .hasSubSections .extraIconSubsections{display:inline-block;float:right;padding:6px 7px 4px 7px;margin-left:4px;font-family:sans-serif;font-size:9px;font-weight:bold;line-height:9px;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent}.redux-sidebar .redux-menu-warning i,.redux-sidebar .redux-menu-error i,.redux-sidebar .hasSubSections .extraIconSubsections i{margin-left:-3px;margin-top:-3px}.redux-sidebar .redux-menu-error{background-color:#b94a48;color:#f2dede}.redux-sidebar .redux-menu-warning{background-color:#C09853;color:#FCF8E3}.redux-sidebar ul .subsection{display:none}.redux-sidebar .redux-group-tab-link-a{position:relative;outline:0}.redux-sidebar .redux-group-tab-link-a i{vertical-align:middle;font-size:1.35em;position:absolute}.redux-sidebar .redux-group-tab-link-a span{display:block}.redux-sidebar .redux-group-tab-link-a span.group_title{padding-left:30px}.redux-sidebar .redux-group-tab-link-li a.hasError span.group_title{padding-right:25px}.redux-sidebar #redux-header{text-align:center}.redux-sidebar #redux-header .display_header{float:none}.form-table th,.form-table td{margin:0;padding:0;width:auto}.redux_field_th{font-weight:bold;padding:20px 10px 20px 0px;display:block}.redux_field_th span:first-child{font-weight:normal;display:block;color:#666}.farb-popup-wrapper{position:relative;display:block}.farb-popup{position:absolute;left:40px;top:40px;background-color:white;border:1px solid #222;padding:5px;z-index:100}#ui-datepicker-div{display:none}.mp6 .icon-themes{display:none}.mp6 .redux-container #info_bar{padding:6px 10px 6px 6px}.mp6 .redux-container #info_bar a{margin-top:2px}.redux-timer{text-align:center;font-size:10px;color:#888}.wrap{margin-top:0}@media screen and (max-width: 600px){.redux-sidebar{width:44px}.redux-sidebar .extraIconSubsections{display:none !important}.redux-sidebar .redux-group-menu li a,.redux-sidebar .redux-group-menu li a:hover,.redux-sidebar .redux-group-menu li.active a,.redux-sidebar .redux-group-menu li.active a:hover,.redux-sidebar .redux-group-menu li.activeChild a,.redux-sidebar .redux-group-menu li.activeChild a:hover{width:auto}.redux-sidebar .redux-group-tab-link-a{position:relative}.redux-sidebar .redux-group-tab-link-a i{position:inherit}.redux-sidebar .redux-group-tab-link-a span{display:none;position:absolute;top:0;left:44px;padding:12px;width:200px;background:#eeeeee;border:1px solid #ccc;-webkit-box-shadow:2px 2px 8px rgba(0,0,0,0.2);-moz-box-shadow:2px 2px 8px rgba(0,0,0,0.2);box-shadow:2px 2px 8px rgba(0,0,0,0.2);border-width:1px 1px 1px 0px;z-index:3}.redux-sidebar .redux-group-tab-link-a:hover>span{display:block}.redux-main{margin-left:43px;width:auto;max-width:100%}table.form-table,.form-table>thead,.form-table>tbody,.form-table>tbody>tr>th,.form-table>tbody>tr>td,.form-table>tbody>tr{display:block;width:100% !important;padding:0px !important}.form-table>tbody>tr>th,.form-table>tbody>tr>td{padding:10px !important}.form-table>tbody>tr>th,.form-table>tbody>tr>td{padding:10px !important}}@media screen and (max-width: 782px){.form-table>tbody>tr>th{width:100%}.redux_field_th{padding-bottom:0}.mp6 .redux-container #info_bar{height:auto;padding-bottom:1px}.mp6 .redux-container #info_bar a{margin-top:5px}.redux-container-switch label{padding:5px 10px !important}.redux-container-button_set label{padding:12px 10px}.redux-container #redux-footer #redux-share{line-height:34px}}pre{overflow:hidden}#redux-header h2{color:#fff}.admin-color-fresh .button.ui-datepicker-current,.admin-color-fresh button.ui-datepicker-close,.wp-customizer .button.ui-datepicker-current,.wp-customizer button.ui-datepicker-close{background-color:#007db9 !important}.admin-color-fresh .ui-datepicker-buttonpane button.ui-datepicker-current,.wp-customizer .ui-datepicker-buttonpane button.ui-datepicker-current{background:#1e8cbe !important;color:white !important;border:1px solid #104b66 !important}.admin-color-fresh .ui-datepicker-header .ui-icon,.wp-customizer .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-fresh .ui-datepicker-header,.wp-customizer .ui-datepicker-header{background-color:#23282d !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{background-color:#007db9 !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-hover,.wp-customizer .ui-datepicker td .ui-state-hover{color:#007db9 !important}.admin-color-fresh .ui-datepicker td .ui-state-highlight,.wp-customizer .ui-datepicker td .ui-state-highlight{background:#0073aa !important;border:1px solid #23282d !important;color:white !important}.admin-color-fresh .redux-container-switch .cb-disable,.admin-color-fresh .redux-container-switch .cb-enable,.admin-color-fresh .ui-state-default,.admin-color-fresh .ui-widget-content .ui-state-default,.admin-color-fresh .ui-widget-header .ui-state-default,.wp-customizer .redux-container-switch .cb-disable,.wp-customizer .redux-container-switch .cb-enable,.wp-customizer .ui-state-default,.wp-customizer .ui-widget-content .ui-state-default,.wp-customizer .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-fresh .redux-container-switch .cb-disable.selected,.wp-customizer .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-fresh .redux-container-switch .cb-enable.selected,.admin-color-fresh .redux-field-container .ui-buttonset .ui-state-active,.wp-customizer .redux-container-switch .cb-enable.selected,.wp-customizer .redux-field-container .ui-buttonset .ui-state-active{background-color:#0073aa !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#008bce), to(#0073aa)) !important;background-image:-moz-linear-gradient(top, #008bce, #0073aa) !important;background-image:-ms-linear-gradient(top, #008bce, #0073aa) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #008bce), color-stop(100%, #0073aa)) !important;background-image:-webkit-linear-gradient(top, #008bce, #0073aa) !important;background-image:-o-linear-gradient(top, #008bce, #0073aa) !important;background-image:-linear-gradient(top, #008bce, #0073aa) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#008bce', endColorstr='#0073aa', GradientType=0) !important;border-color:#003f5e !important;border-color:#005177 !important;-webkit-box-shadow:inset 0 1px 0 #00a7f7,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #00a7f7,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-fresh #redux-header,.wp-customizer #redux-header{background:#23282d;border-color:#0073aa}.admin-color-fresh #redux-header .display_header span,.wp-customizer #redux-header .display_header span{color:#a0a5aa}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild,.wp-customizer .redux-sidebar .redux-group-menu li.active,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-fresh .redux-sidebar .redux-group-menu li.active a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild a,.wp-customizer .redux-sidebar .redux-group-menu li.active a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild a{color:#23282d}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#1e8cbe;background:#0d0f10}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#0073aa}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#23282d}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#a0a5aa;text-shadow:1px 1px #54595d}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#23282d;text-shadow:none}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#0073aa;text-shadow:1px 1px #002e44}.admin-color-fresh .redux-container-image_select .redux-image-select-selected img,.wp-customizer .redux-container-image_select .redux-image-select-selected img{border-color:#0073aa}.admin-color-fresh #redux-footer #redux-share a,.wp-customizer #redux-footer #redux-share a{color:#0073aa}.admin-color-fresh #redux-footer #redux-share a:hover,.wp-customizer #redux-footer #redux-share a:hover{color:#002e44}.admin-color-fresh .select2-results .select2-highlighted,.wp-customizer .select2-results .select2-highlighted{background:#0073aa}.admin-color-fresh .select2-drop-active,.admin-color-fresh .select2-container-multi.select2-container-active .select2-choices,.admin-color-fresh .select2-drop.select2-drop-above.select2-drop-active,.admin-color-fresh .select2-container-active .select2-choice,.admin-color-fresh .select2-container-active .select2-choices,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choices,.wp-customizer .select2-drop-active,.wp-customizer .select2-container-multi.select2-container-active .select2-choices,.wp-customizer .select2-drop.select2-drop-above.select2-drop-active,.wp-customizer .select2-container-active .select2-choice,.wp-customizer .select2-container-active .select2-choices,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choice,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#0073aa}.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choices,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choice,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-fresh .noUi-connect,.wp-customizer .noUi-connect{background-color:#007db9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#0096dd), to(#007db9)) !important;background-image:-moz-linear-gradient(top, #0096dd, #007db9) !important;background-image:-ms-linear-gradient(top, #0096dd, #007db9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #0096dd), color-stop(100%, #007db9)) !important;background-image:-webkit-linear-gradient(top, #0096dd, #007db9) !important;background-image:-o-linear-gradient(top, #0096dd, #007db9) !important;background-image:-linear-gradient(top, #0096dd, #007db9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0096dd', endColorstr='#007db9', GradientType=0) !important}.admin-color-light .button.ui-datepicker-current,.admin-color-light button.ui-datepicker-close{background-color:#04b0db !important}.admin-color-light .ui-datepicker-buttonpane button.ui-datepicker-current{background:#0384a4 !important;color:white !important;border:1px solid #013340 !important}.admin-color-light .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-light .ui-datepicker-header{background-color:#888 !important;color:white !important}.admin-color-light .ui-datepicker td .ui-state-active{background-color:#04b0db !important;color:white !important}.admin-color-light .ui-datepicker td .ui-state-hover{color:#04b0db !important}.admin-color-light .ui-datepicker td .ui-state-highlight{background:#04a4cc !important;border:1px solid #888 !important;color:white !important}.admin-color-light .redux-container-switch .cb-disable,.admin-color-light .redux-container-switch .cb-enable,.admin-color-light .ui-state-default,.admin-color-light .ui-widget-content .ui-state-default,.admin-color-light .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-light .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-light .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-light .redux-container-switch .cb-enable.selected,.admin-color-light .redux-field-container .ui-buttonset .ui-state-active{background-color:#04a4cc !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#05c0ef), to(#04a4cc)) !important;background-image:-moz-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-ms-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #05c0ef), color-stop(100%, #04a4cc)) !important;background-image:-webkit-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-o-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-linear-gradient(top, #05c0ef, #04a4cc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#05c0ef', endColorstr='#04a4cc', GradientType=0) !important;border-color:#036881 !important;border-color:#037c9a !important;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-light #redux-header{background:#888;border-color:#04a4cc}.admin-color-light #redux-header .display_header span{color:#e6e6e6}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-light .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-light .redux-sidebar .redux-group-menu li.active,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-light .redux-sidebar .redux-group-menu li.active a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild a{color:#888}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#0384a4;background:#6f6f6f}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#04a4cc}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#888}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#e6e6e6;text-shadow:1px 1px #9a9a9a}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#888;text-shadow:none}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#04a4cc;text-shadow:1px 1px #025468}.admin-color-light .redux-container-image_select .redux-image-select-selected img{border-color:#04a4cc}.admin-color-light #redux-footer #redux-share a{color:#04a4cc}.admin-color-light #redux-footer #redux-share a:hover{color:#025468}.admin-color-light .select2-results .select2-highlighted{background:#04a4cc}.admin-color-light .select2-drop-active,.admin-color-light .select2-container-multi.select2-container-active .select2-choices,.admin-color-light .select2-drop.select2-drop-above.select2-drop-active,.admin-color-light .select2-container-active .select2-choice,.admin-color-light .select2-container-active .select2-choices,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#04a4cc}.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-light .noUi-connect{background-color:#04b0db !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#09cafa), to(#04b0db)) !important;background-image:-moz-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-ms-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #09cafa), color-stop(100%, #04b0db)) !important;background-image:-webkit-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-o-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-linear-gradient(top, #09cafa, #04b0db) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#09cafa', endColorstr='#04b0db', GradientType=0) !important}.admin-color-blue .button.ui-datepicker-current,.admin-color-blue button.ui-datepicker-close{background-color:#509dba !important}.admin-color-blue .ui-datepicker-buttonpane button.ui-datepicker-current{background:#db9825 !important;color:white !important;border:1px solid #845c16 !important}.admin-color-blue .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-blue .ui-datepicker-header{background-color:#096484 !important;color:white !important}.admin-color-blue .ui-datepicker td .ui-state-active{background-color:#509dba !important;color:white !important}.admin-color-blue .ui-datepicker td .ui-state-hover{color:#509dba !important}.admin-color-blue .ui-datepicker td .ui-state-highlight{background:#4796b3 !important;border:1px solid #096484 !important;color:white !important}.admin-color-blue .redux-container-switch .cb-disable,.admin-color-blue .redux-container-switch .cb-enable,.admin-color-blue .ui-state-default,.admin-color-blue .ui-widget-content .ui-state-default,.admin-color-blue .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-blue .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-blue .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-blue .redux-container-switch .cb-enable.selected,.admin-color-blue .redux-field-container .ui-buttonset .ui-state-active{background-color:#4796b3 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#5ea5bf), to(#4796b3)) !important;background-image:-moz-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-ms-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5ea5bf), color-stop(100%, #4796b3)) !important;background-image:-webkit-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-o-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-linear-gradient(top, #5ea5bf, #4796b3) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5ea5bf', endColorstr='#4796b3', GradientType=0) !important;border-color:#31687c !important;border-color:#39778e !important;-webkit-box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-blue #redux-header{background:#096484;border-color:#4796b3}.admin-color-blue #redux-header .display_header span{color:#e2ecf1}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-blue .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-blue .redux-sidebar .redux-group-menu li.active,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-blue .redux-sidebar .redux-group-menu li.active a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild a{color:#096484}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#db9825;background:#064054}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#4796b3}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#096484}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#e2ecf1;text-shadow:1px 1px #7ba8bf}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#096484;text-shadow:none}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#4796b3;text-shadow:1px 1px #2a596a}.admin-color-blue .redux-container-image_select .redux-image-select-selected img{border-color:#4796b3}.admin-color-blue #redux-footer #redux-share a{color:#4796b3}.admin-color-blue #redux-footer #redux-share a:hover{color:#2a596a}.admin-color-blue .select2-results .select2-highlighted{background:#4796b3}.admin-color-blue .select2-drop-active,.admin-color-blue .select2-container-multi.select2-container-active .select2-choices,.admin-color-blue .select2-drop.select2-drop-above.select2-drop-active,.admin-color-blue .select2-container-active .select2-choice,.admin-color-blue .select2-container-active .select2-choices,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#4796b3}.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-blue .noUi-connect{background-color:#509dba !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#69abc4), to(#509dba)) !important;background-image:-moz-linear-gradient(top, #69abc4, #509dba) !important;background-image:-ms-linear-gradient(top, #69abc4, #509dba) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #69abc4), color-stop(100%, #509dba)) !important;background-image:-webkit-linear-gradient(top, #69abc4, #509dba) !important;background-image:-o-linear-gradient(top, #69abc4, #509dba) !important;background-image:-linear-gradient(top, #69abc4, #509dba) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#69abc4', endColorstr='#509dba', GradientType=0) !important}.admin-color-coffee .button.ui-datepicker-current,.admin-color-coffee button.ui-datepicker-close{background-color:#ccad93 !important}.admin-color-coffee .ui-datepicker-buttonpane button.ui-datepicker-current{background:#ba906d !important;color:white !important;border:1px solid #835d3e !important}.admin-color-coffee .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-coffee .ui-datepicker-header{background-color:#46403c !important;color:white !important}.admin-color-coffee .ui-datepicker td .ui-state-active{background-color:#ccad93 !important;color:white !important}.admin-color-coffee .ui-datepicker td .ui-state-hover{color:#ccad93 !important}.admin-color-coffee .ui-datepicker td .ui-state-highlight{background:#c7a589 !important;border:1px solid #46403c !important;color:white !important}.admin-color-coffee .redux-container-switch .cb-disable,.admin-color-coffee .redux-container-switch .cb-enable,.admin-color-coffee .ui-state-default,.admin-color-coffee .ui-widget-content .ui-state-default,.admin-color-coffee .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-coffee .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-coffee .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-coffee .redux-container-switch .cb-enable.selected,.admin-color-coffee .redux-field-container .ui-buttonset .ui-state-active{background-color:#c7a589 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d2b7a1), to(#c7a589)) !important;background-image:-moz-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-ms-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d2b7a1), color-stop(100%, #c7a589)) !important;background-image:-webkit-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-o-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-linear-gradient(top, #d2b7a1, #c7a589) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d2b7a1', endColorstr='#c7a589', GradientType=0) !important;border-color:#ae7d55 !important;border-color:#b78b66 !important;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-coffee #redux-header{background:#46403c;border-color:#c7a589}.admin-color-coffee #redux-header .display_header span{color:#cdcbc9}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-coffee .redux-sidebar .redux-group-menu li.active a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild a{color:#46403c}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#ba906d;background:#2b2724}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#c7a589}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#46403c}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#cdcbc9;text-shadow:1px 1px #837f7a}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#46403c;text-shadow:none}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#c7a589;text-shadow:1px 1px #9f714b}.admin-color-coffee .redux-container-image_select .redux-image-select-selected img{border-color:#c7a589}.admin-color-coffee #redux-footer #redux-share a{color:#c7a589}.admin-color-coffee #redux-footer #redux-share a:hover{color:#9f714b}.admin-color-coffee .select2-results .select2-highlighted{background:#c7a589}.admin-color-coffee .select2-drop-active,.admin-color-coffee .select2-container-multi.select2-container-active .select2-choices,.admin-color-coffee .select2-drop.select2-drop-above.select2-drop-active,.admin-color-coffee .select2-container-active .select2-choice,.admin-color-coffee .select2-container-active .select2-choices,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#c7a589}.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-coffee .noUi-connect{background-color:#ccad93 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d7bfac), to(#ccad93)) !important;background-image:-moz-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-ms-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d7bfac), color-stop(100%, #ccad93)) !important;background-image:-webkit-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-o-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-linear-gradient(top, #d7bfac, #ccad93) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d7bfac', endColorstr='#ccad93', GradientType=0) !important}.admin-color-ectoplasm .button.ui-datepicker-current,.admin-color-ectoplasm button.ui-datepicker-close{background-color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker-buttonpane button.ui-datepicker-current{background:#89993a !important;color:white !important;border:1px solid #474f1e !important}.admin-color-ectoplasm .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-ectoplasm .ui-datepicker-header{background-color:#413256 !important;color:white !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{background-color:#a9bd4f !important;color:white !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-hover{color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-highlight{background:#a3b745 !important;border:1px solid #413256 !important;color:white !important}.admin-color-ectoplasm .redux-container-switch .cb-disable,.admin-color-ectoplasm .redux-container-switch .cb-enable,.admin-color-ectoplasm .ui-state-default,.admin-color-ectoplasm .ui-widget-content .ui-state-default,.admin-color-ectoplasm .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-ectoplasm .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-ectoplasm .redux-container-switch .cb-enable.selected,.admin-color-ectoplasm .redux-field-container .ui-buttonset .ui-state-active{background-color:#a3b745 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b0c25e), to(#a3b745)) !important;background-image:-moz-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-ms-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0c25e), color-stop(100%, #a3b745)) !important;background-image:-webkit-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-o-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-linear-gradient(top, #b0c25e, #a3b745) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b0c25e', endColorstr='#a3b745', GradientType=0) !important;border-color:#727f30 !important;border-color:#829237 !important;-webkit-box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-ectoplasm #redux-header{background:#413256;border-color:#a3b745}.admin-color-ectoplasm #redux-header .display_header span{color:#cbc5d3}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild a{color:#413256}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#89993a;background:#291f36}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#a3b745}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#413256}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#cbc5d3;text-shadow:1px 1px #7d6e91}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#413256;text-shadow:none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#a3b745;text-shadow:1px 1px #616d29}.admin-color-ectoplasm .redux-container-image_select .redux-image-select-selected img{border-color:#a3b745}.admin-color-ectoplasm #redux-footer #redux-share a{color:#a3b745}.admin-color-ectoplasm #redux-footer #redux-share a:hover{color:#616d29}.admin-color-ectoplasm .select2-results .select2-highlighted{background:#a3b745}.admin-color-ectoplasm .select2-drop-active,.admin-color-ectoplasm .select2-container-multi.select2-container-active .select2-choices,.admin-color-ectoplasm .select2-drop.select2-drop-above.select2-drop-active,.admin-color-ectoplasm .select2-container-active .select2-choice,.admin-color-ectoplasm .select2-container-active .select2-choices,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#a3b745}.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-ectoplasm .noUi-connect{background-color:#a9bd4f !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b6c669), to(#a9bd4f)) !important;background-image:-moz-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-ms-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b6c669), color-stop(100%, #a9bd4f)) !important;background-image:-webkit-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-o-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-linear-gradient(top, #b6c669, #a9bd4f) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b6c669', endColorstr='#a9bd4f', GradientType=0) !important}.admin-color-midnight .button.ui-datepicker-current,.admin-color-midnight button.ui-datepicker-close{background-color:#e35950 !important}.admin-color-midnight .ui-datepicker-buttonpane button.ui-datepicker-current{background:#d92c23 !important;color:white !important;border:1px solid #811a15 !important}.admin-color-midnight .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-midnight .ui-datepicker-header{background-color:#363b3f !important;color:white !important}.admin-color-midnight .ui-datepicker td .ui-state-active{background-color:#e35950 !important;color:white !important}.admin-color-midnight .ui-datepicker td .ui-state-hover{color:#e35950 !important}.admin-color-midnight .ui-datepicker td .ui-state-highlight{background:#e14d43 !important;border:1px solid #363b3f !important;color:white !important}.admin-color-midnight .redux-container-switch .cb-disable,.admin-color-midnight .redux-container-switch .cb-enable,.admin-color-midnight .ui-state-default,.admin-color-midnight .ui-widget-content .ui-state-default,.admin-color-midnight .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-midnight .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-midnight .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-midnight .redux-container-switch .cb-enable.selected,.admin-color-midnight .redux-field-container .ui-buttonset .ui-state-active{background-color:#e14d43 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e66a62), to(#e14d43)) !important;background-image:-moz-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-ms-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e66a62), color-stop(100%, #e14d43)) !important;background-image:-webkit-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-o-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-linear-gradient(top, #e66a62, #e14d43) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e66a62', endColorstr='#e14d43', GradientType=0) !important;border-color:#ba281e !important;border-color:#d02c21 !important;-webkit-box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-midnight #redux-header{background:#363b3f;border-color:#e14d43}.admin-color-midnight #redux-header .display_header span{color:#c2c4c5}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-midnight .redux-sidebar .redux-group-menu li.active a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild a{color:#363b3f}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#d92c23;background:#1e2124}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#e14d43}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#363b3f}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#c2c4c5;text-shadow:1px 1px #74787a}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#363b3f;text-shadow:none}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#e14d43;text-shadow:1px 1px #a4231a}.admin-color-midnight .redux-container-image_select .redux-image-select-selected img{border-color:#e14d43}.admin-color-midnight #redux-footer #redux-share a{color:#e14d43}.admin-color-midnight #redux-footer #redux-share a:hover{color:#a4231a}.admin-color-midnight .select2-results .select2-highlighted{background:#e14d43}.admin-color-midnight .select2-drop-active,.admin-color-midnight .select2-container-multi.select2-container-active .select2-choices,.admin-color-midnight .select2-drop.select2-drop-above.select2-drop-active,.admin-color-midnight .select2-container-active .select2-choice,.admin-color-midnight .select2-container-active .select2-choices,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#e14d43}.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-midnight .noUi-connect{background-color:#e35950 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e8776f), to(#e35950)) !important;background-image:-moz-linear-gradient(top, #e8776f, #e35950) !important;background-image:-ms-linear-gradient(top, #e8776f, #e35950) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e8776f), color-stop(100%, #e35950)) !important;background-image:-webkit-linear-gradient(top, #e8776f, #e35950) !important;background-image:-o-linear-gradient(top, #e8776f, #e35950) !important;background-image:-linear-gradient(top, #e8776f, #e35950) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e8776f', endColorstr='#e35950', GradientType=0) !important}.admin-color-ocean .button.ui-datepicker-current,.admin-color-ocean button.ui-datepicker-close{background-color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker-buttonpane button.ui-datepicker-current{background:#86a988 !important;color:white !important;border:1px solid #547555 !important}.admin-color-ocean .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-ocean .ui-datepicker-header{background-color:#627c83 !important;color:white !important}.admin-color-ocean .ui-datepicker td .ui-state-active{background-color:#a7c0a9 !important;color:white !important}.admin-color-ocean .ui-datepicker td .ui-state-hover{color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker td .ui-state-highlight{background:#9ebaa0 !important;border:1px solid #627c83 !important;color:white !important}.admin-color-ocean .redux-container-switch .cb-disable,.admin-color-ocean .redux-container-switch .cb-enable,.admin-color-ocean .ui-state-default,.admin-color-ocean .ui-widget-content .ui-state-default,.admin-color-ocean .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-ocean .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-ocean .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-ocean .redux-container-switch .cb-enable.selected,.admin-color-ocean .redux-field-container .ui-buttonset .ui-state-active{background-color:#9ebaa0 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b3c9b4), to(#9ebaa0)) !important;background-image:-moz-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-ms-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b3c9b4), color-stop(100%, #9ebaa0)) !important;background-image:-webkit-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-o-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-linear-gradient(top, #b3c9b4, #9ebaa0) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3c9b4', endColorstr='#9ebaa0', GradientType=0) !important;border-color:#719a74 !important;border-color:#80a583 !important;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-ocean #redux-header{background:#627c83;border-color:#9ebaa0}.admin-color-ocean #redux-header .display_header span{color:#d5dddf}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-ocean .redux-sidebar .redux-group-menu li.active a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild a{color:#627c83}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#86a988;background:#4c6066}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#9ebaa0}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#627c83}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#d5dddf;text-shadow:1px 1px #7e979d}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#627c83;text-shadow:none}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#9ebaa0;text-shadow:1px 1px #658d68}.admin-color-ocean .redux-container-image_select .redux-image-select-selected img{border-color:#9ebaa0}.admin-color-ocean #redux-footer #redux-share a{color:#9ebaa0}.admin-color-ocean #redux-footer #redux-share a:hover{color:#658d68}.admin-color-ocean .select2-results .select2-highlighted{background:#9ebaa0}.admin-color-ocean .select2-drop-active,.admin-color-ocean .select2-container-multi.select2-container-active .select2-choices,.admin-color-ocean .select2-drop.select2-drop-above.select2-drop-active,.admin-color-ocean .select2-container-active .select2-choice,.admin-color-ocean .select2-container-active .select2-choices,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#9ebaa0}.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-ocean .noUi-connect{background-color:#a7c0a9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#bccfbd), to(#a7c0a9)) !important;background-image:-moz-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-ms-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #bccfbd), color-stop(100%, #a7c0a9)) !important;background-image:-webkit-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-o-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-linear-gradient(top, #bccfbd, #a7c0a9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bccfbd', endColorstr='#a7c0a9', GradientType=0) !important}.admin-color-sunrise .button.ui-datepicker-current,.admin-color-sunrise button.ui-datepicker-close{background-color:#df8a48 !important}.admin-color-sunrise .ui-datepicker-buttonpane button.ui-datepicker-current{background:#cc6c23 !important;color:white !important;border:1px solid #753e14 !important}.admin-color-sunrise .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-sunrise .ui-datepicker-header{background-color:#b43c38 !important;color:white !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{background-color:#df8a48 !important;color:white !important}.admin-color-sunrise .ui-datepicker td .ui-state-hover{color:#df8a48 !important}.admin-color-sunrise .ui-datepicker td .ui-state-highlight{background:#dd823b !important;border:1px solid #b43c38 !important;color:white !important}.admin-color-sunrise .redux-container-switch .cb-disable,.admin-color-sunrise .redux-container-switch .cb-enable,.admin-color-sunrise .ui-state-default,.admin-color-sunrise .ui-widget-content .ui-state-default,.admin-color-sunrise .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-sunrise .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-sunrise .redux-container-switch .cb-enable.selected,.admin-color-sunrise .redux-field-container .ui-buttonset .ui-state-active{background-color:#dd823b !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e29559), to(#dd823b)) !important;background-image:-moz-linear-gradient(top, #e29559, #dd823b) !important;background-image:-ms-linear-gradient(top, #e29559, #dd823b) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e29559), color-stop(100%, #dd823b)) !important;background-image:-webkit-linear-gradient(top, #e29559, #dd823b) !important;background-image:-o-linear-gradient(top, #e29559, #dd823b) !important;background-image:-linear-gradient(top, #e29559, #dd823b) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e29559', endColorstr='#dd823b', GradientType=0) !important;border-color:#ad5d1e !important;border-color:#c36922 !important;-webkit-box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-sunrise #redux-header{background:#b43c38;border-color:#dd823b}.admin-color-sunrise #redux-header .display_header span{color:#f0c8c6}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild a{color:#b43c38}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#cc6c23;background:#8d2f2c}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#dd823b}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#b43c38}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#f0c8c6;text-shadow:1px 1px #d0534d}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#b43c38;text-shadow:none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#dd823b;text-shadow:1px 1px #98511a}.admin-color-sunrise .redux-container-image_select .redux-image-select-selected img{border-color:#dd823b}.admin-color-sunrise #redux-footer #redux-share a{color:#dd823b}.admin-color-sunrise #redux-footer #redux-share a:hover{color:#98511a}.admin-color-sunrise .select2-results .select2-highlighted{background:#dd823b}.admin-color-sunrise .select2-drop-active,.admin-color-sunrise .select2-container-multi.select2-container-active .select2-choices,.admin-color-sunrise .select2-drop.select2-drop-above.select2-drop-active,.admin-color-sunrise .select2-container-active .select2-choice,.admin-color-sunrise .select2-container-active .select2-choices,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#dd823b}.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-sunrise .noUi-connect{background-color:#df8a48 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e59e66), to(#df8a48)) !important;background-image:-moz-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-ms-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e59e66), color-stop(100%, #df8a48)) !important;background-image:-webkit-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-o-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-linear-gradient(top, #e59e66, #df8a48) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e59e66', endColorstr='#df8a48', GradientType=0) !important}@media screen and (max-width: 600px){.redux-group-tab-link-a{min-height:15px}.redux-group-tab-link-a span{padding:11px 12px;color:#555;-webkit-transition:all 0.3s;-moz-transition:all 0.3s;transition:all 0.3s;text-shadow:none !important}.redux-group-tab-link-a span:hover{background:#e5e5e5}}@media screen and (max-width: 782px){#redux-footer #redux-share{line-height:38px;font-size:18px}.sticky-save-warn .redux-save-warn{right:13px;top:46px}.redux-container .expand_options{margin-top:5px}.redux-action_bar input{margin-bottom:0 !important}}@media screen and (max-width: 600px){#redux-footer #redux-share,.redux-hint-qtip{display:none}.redux-container .redux-action_bar{float:none}}.redux-sidebar .icon-large,.redux-main .icon-large{background-image:inherit !important;width:inherit;height:inherit}.redux-main dd,.redux-main li,.redux-sidebar li{margin-bottom:0 !important}.fully-expanded .redux-sidebar{margin-left:-500px}.fully-expanded .redux-main{margin-left:0}.fully-expanded .redux-group-tab{display:block}@media screen and (max-width: 640px){#redux-defaults-section{display:none}}@media screen and (max-width: 730px){#redux-share{display:none}}@media screen and (max-width: 730px){#redux-defaults-section2{display:none}#redux-share{display:none}}@media screen and (max-width: 600px){.form-table>tbody>tr>th{padding-bottom:0 !important}.redux_field_th{padding-top:0;padding-bottom:0}.redux-main .redux-field-container{padding-top:0;padding-bottom:0}.redux-main .subsection a{min-height:15px}}@media screen and (min-width: 601px) and (max-width: 782px){.redux-container .sticky-save-warn .redux-save-warn{top:47px !important;right:13px !important}}@media screen and (max-width: 782px){.redux-main .form-table-section-indented input[type=text]{width:95% !important}.redux-main .redux-container-sortable input[type=text]{width:80%;display:initial}.redux-main .redux-typography-container .input_wrapper input.mini{font-size:16px !important;height:40px !important;padding:7px 10px !important;line-height:24px !important}.redux-main .redux-typography-container .picker-wrapper label{margin-top:16px !important}.redux-main .input-append{height:50px !important}.redux-main .input-append .add-on{font-size:16px;line-height:24px !important;padding:7px;height:32px !important;float:right;margin-top:-40px}.redux-main .redux-hint-qtip{float:left !important}.redux-main .redux-action_bar .button{margin-top:-1px}}@media screen and (max-width: 600px){.sticky-save-warn .redux-save-warn{top:0 !important;right:14px !important}}@media screen and (max-width: 570px){.redux-main .redux-container-sortable .checkbox-container{width:85%;padding-bottom:5px}.redux-main .redux-container-sortable .checkbox-container label{display:initial}}#redux-header{position:relative}.redux-main{position:relative}.redux-main #redux-sticky{min-height:32px;margin-left:-20px;margin-right:-20px;margin-top:-10px;margin-bottom:8px}.redux-main #redux-sticky #info_bar{height:32px}.redux-main #redux-sticky #info_bar .expand_options{margin-top:4px}.redux-main .redux_field_search{top:50px;right:5px}.redux-main #redux-footer-sticky{margin-left:-20px;margin-right:-20px;margin-bottom:-10px}.redux-qtip{z-index:999999 !important}.redux-main pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}
1
+ .spinner{visibility:hidden;display:block}.spinner.is-active{visibility:visible}.redux-main .description{margin-top:7px}.form-table>tbody>tr>th{width:30%}.redux-container{background-color:#f5f5f5;background-repeat:repeat-x;background-image:-moz-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f2f2), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-ms-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-o-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#eeeeee', GradientType=0);background-image:-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);border:1px solid #dedede;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04);-moz-box-shadow:0 1px 5px rgba(0,0,0,0.4);margin-top:5px;overflow:hidden}.redux-container a:focus{box-shadow:none}.redux-container #redux-header,.redux-container #redux-footer{text-align:right;padding:6px 10px}.redux-container #redux-header{background:#f1f1f1;border-bottom:3px solid blue}.redux-container #redux-header .display_header{float:left;margin:20px 10px}.redux-container #redux-header .display_header h2{display:inline-block;font-style:normal;padding-right:5px}.redux-container #redux-header .display_header .redux-dev-mode-notice-container{position:absolute;top:67px;left:20px;bottom:auto;width:auto}.redux-container #redux-header .display_header span{color:#888}.redux-container #redux-header .display_header span.redux-dev-mode-notice{background-color:#f0ad4e;display:inline;padding:.2em .5em .2em;font-weight:700;line-height:1;color:#fff !important;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.redux-container #redux-header .icon32{float:right;margin:16px 16px 0}.redux-container #redux-footer{border-top:1px solid #E7E7E7;z-index:999}.redux-container #redux-footer #redux-share{float:left;line-height:28px;font-size:15px}.redux-container #redux-footer #redux-share a{text-decoration:none;margin-right:10px}.redux-container #redux-footer #redux-share a img{margin-bottom:-3px}.redux-container .notice-green{margin:0;border-bottom:1px solid #E7E7E7;background-color:#DFF0D8;color:#468847;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-blue{margin:0;border-bottom:1px solid #BCE8F1;background-color:#D9EDF7;color:#3A87AD;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-yellow{margin:0;border-bottom:1px solid #E7E7E7;background-color:#FCF8E3;color:#C09853;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-red,.redux-container .redux-field-errors{margin:0;border-bottom:1px solid #E7E7E7;background-color:#F2DEDE;color:#B94A48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .redux-field-error input,.redux-container .redux-field-error textarea,.redux-container .redux-field-error checkbox{background-color:#FFF6F6;color:#A00}.redux-container .redux-field-warning input,.redux-container .redux-field-warning textarea,.redux-container .redux-field-warning checkbox{background-color:#fcf8e3;color:#444}.redux-container .redux-field-errors,.redux-container .redux-field-warnings,.redux-container .redux-save-warn{display:none}.redux-container .sticky-save-warn{min-height:76px}.redux-container .sticky-save-warn .redux-save-warn{position:fixed;top:32px;right:21px;left:183px;opacity:1;z-index:9999}.redux-container #info_bar{background:#f3f3f3;border-bottom:1px solid #dedede;padding:6px 10px 6px 6px;text-align:right;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.redux-container .redux-group-tab{display:none;margin-bottom:15px}.redux-container .redux-group-tab .redux-theme-data{padding:20px 0;border-top:1px solid #E7E7E7}.redux-container .redux-group-tab .redux-theme-data.theme-description{padding:10px 0;border-width:0}.redux-container .redux-group-tab .redux-theme-data.theme-uri,.redux-container .redux-group-tab .redux-theme-data.theme-author,.redux-container .redux-group-tab .redux-theme-data.theme-version{padding:0;border-width:0}.redux-container .redux-group-tab h3{margin-top:0;line-height:2em;border-bottom:1px solid #E7E7E7}.redux-container .redux-group-tab .redux-section-desc{margin-bottom:15px;color:#666}.redux-container .redux-action_bar{float:right}.redux-container .redux-action_bar .spinner{float:left;margin-top:4px}.redux-container .redux-ajax-loading{display:none;background:red url(data:image/gif;base64,R0lGODlhEAAQAPUAAIiIiIqKio2NjZSUlJqamp6enqKioqSkpK+vr7i4uL+/v8PDw8XFxcnJyc/Pz9HR0dTU1NjY2Nzc3OLi4ubm5unp6ezs7PPz88vLy83NzdDQ0NXV1d3d3eHh4bu7u8zMzOvr6+3t7ZiYmNbW1sDAwMTExNra2s7OztPT09vb2+Xl5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEAAoA/wAsAAAAABAAEAAABXDgJY6XZZEoOTnOlI5WdUFNA5UnSR3FJNUSieFAIUUEgcdl4noEBBGSZaHIiSqKhTX2GhVFiQGjuxgkSoYAoosAGE6RhKQrUURHlS+pItMVCHMjEgQ9JBJISg+JT3ciFg4NFkcCNw0OViiDgF0oTC8hACH5BAAKAP8ALAAAAAAQABAAAAVx4CWOZGle1qJYp2hV1xYE29V1JXUYHWUcnQgGwyFFBAENiqUZ1kapFamTyeBcsNOLMkoMGC3GIIEyBBAtRMDAiiSKp04iQqpwc9kRpUCAizgEBVciEQNJFxpKGgECdFAYYBsCAjUMGS0XgAODmDacIyEAIfkEAAoA/wAsAAAAABAAEAAABnbAi3BILBovIMUidBSGQJdNIKBBMomUg6FDMRgoHcOBQowIqNaLJiCIEEMLxdWpnIfITRAHnxgwjiEfDR8UIQYBCEcgDYwdUR6ORxEfG3MgeFiFRB0FBBxEHAQFkUJmaBofamxuRB9/GwICGxeMTRehnrabpERBACH5BAAKAP8ALAAAAAAQABAAAAZ9wItwSCwaL5aFwnIUWiqXUSAwulSYRMrB0KEYDJSO4UAhRgQBDZLpCAgixOSSWFEssEho81IWJgYMTQwDCUgGAQhNCAEGTCMJHU0dCXBDFX1DFhwdeHwFIhxmGBihQxEDaRcOGhYao1WZGIFnAiMUDg6YRR0ioE57Fx2RRkEAIfkEAAoA/wAsAAAAABAAEAAABXLgJY5kaV7WolinaLGQEEBXxZLUUUyUYVATw4FCisg0NZYmIIiQUosKqaJY3FDS1oUoSgwYrcUggTIAEC1EwMCKJCatSYI2qnBx2dGkQOCQOAQFdxdGARoVGhCITE4kGBgWEI8QFgwYWhGTWiMWERFXIyEAIfkEAAoA/wAsAAAAABAAEAAABn/Ai3BILBovloXCchRaKpdRIDC6VJhEysHQoRgMlI7hQCFGBAENkukICCLE5JJYUSywSGjzUhYmBgxNDAMJSAYBCE0IAAZMEQkdTRwKVUMcHHhCFXpDERgYcJYEBZFDI58aFhoOFxpuoUIUGhoUZwJVGA6ZaxccBAQce0QdpUVBACH5BAAKAP8ALAAAAAAQABAAAAZ8wItwSCwaLyEFKXQUhioXSCAAuVSYRMrB0KEYDJSO4UAhmgQBDZKpCQhMxFBJgRVWlFkOtElhUj4NH3VEJQMJFx0NintFCAEGISEQH3BHHR5VThVlRRSMQh0FBBxEHAQFnEJnaRcfHxdtb0WKIWcCVSUNTYgEo7tEHR1HQQAh+QQACgD/ACwAAAAAEAAQAAAGdcCLcEgsGi8hhSJ0FHY6l1EgMLqAmEROo5HqGAwqL5g42qKsoAsqIEgRVacTdAhSLLBI1bWpwiYGDE0MAwlIBgEITQgBBkwjCRxNHQlVdCpGekUqBQSRQxwEBZdDKQIBZ3FqbG5EDYEjpikhW3hFoJ1NRU9HQQA7) no-repeat;width:16px;height:16px;margin:3px 4px 0;float:right}.redux-container #redux-intro-text{background:#f3f3f3;border-bottom:1px solid #dedede;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc;padding:3px;padding:10px 10px}.redux-container #redux-intro-text p{margin:0;font-family:"Lucida Grande", Sans-serif;color:#888}.redux-container .expand_options{cursor:pointer;display:block;height:22px;width:21px;float:left;font-size:0;text-indent:-9999px;margin:1px 0 0 5px;border:1px solid #bbb;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -26px}.redux-container .expand_options.expanded{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -1px}.redux-container .expand_options:hover{border-color:#888}.redux-container .sticky-footer-fixed{background:#f3f3f3;border-top:1px solid #dedede !important;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.redux-container .redux-sidebar,.redux-container .redux-main{min-height:300px}.no-js{border:1px solid #ffbaba;margin:0;border-bottom:1px solid #E7E7E7;background-color:#F2DEDE;color:#B94A48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-main{background:#FCFCFC;margin-left:201px;border-left:1px solid #D8D8D8;padding:10px 20px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #FFF;box-shadow:inset 0 1px 0 #FFF;position:relative}.redux-main #redux_ajax_overlay{position:absolute;top:0;left:0;right:0;bottom:0;-moz-opacity:0.10;-khtml-opacity:0.10;opacity:0.10;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10);filter:alpha(opacity=10);background:#000;z-index:200;display:none}.redux-main .form-table.no-border{border-top:none}.redux-main .form-table tr{border-bottom:1px solid #E7E7E7}.redux-main .form-table tr:last-child{border-bottom:none !important}.redux-main .form-table tr th,.redux-main .form-table tr td{color:#333}.redux-main .form-table tr td table.mceLayout,.redux-main .form-table tr td table.mceLayout tr,.redux-main .form-table tr td table.mceLayout tr td{padding:0;border-width:0}.redux-main .form-table tr td .redux-th-warning{font-size:1em;color:#C09853;font-weight:normal;display:block;margin-top:10px}.redux-main .form-table tr td .redux-field-warning{border-color:#C09853;margin-top:10px}.redux-main .form-table tr td .redux-th-error{font-size:1em;color:#B94A48;font-weight:normal;display:block;margin-top:10px}.redux-main input.large-text{width:100%}.redux-main .hide{display:none}.redux-main .redux-field-container{padding:20px 0}.redux-main .mini,.redux-main input[type=text].mini{width:60px;text-align:center}.redux-main input{line-height:19px}.redux-main img{max-width:100%;height:auto;width:auto !important}.redux-main .select2-default{width:auto !important}.redux-main .showDefaults{display:block;font-weight:normal;font-size:.8em;color:#888}.redux-main span.description{display:block;font-style:normal;font-weight:400}.redux-main #redux-system-info textarea{min-height:730px;width:100%}.redux-main .field-desc{clear:both;font-size:13px}.redux-main .data-full li{width:100%}.redux-main .data-half li{width:50%;float:left}.redux-main .data-third li{width:33.3%;float:left}.redux-main .data-quarter li{width:25%;float:left}.redux-main .ui-helper-hidden-accessible{top:inherit}.redux-main .form-table{clear:none;margin-top:0px !important}.redux-main .form-table tr:first-child th,.redux-main .form-table tr:first-child td{padding-top:0}.redux-main .input-append input{border-right:0;margin-bottom:0;border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0;float:left;margin-top:0;display:block}.redux-main .input-append .add-on{border-top-right-radius:3px;border-bottom-right-radius:3px;margin-left:-2px;padding-top:4px !important;padding-bottom:2px !important}.redux-main .input-prepend input{border-left:0;margin-bottom:0;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0;padding-top:2px;padding-bottom:5px;float:left;margin-top:0;display:block}.redux-main .input-prepend .add-on{border-top-left-radius:3px;border-bottom-left-radius:3px;float:left}.redux-main .input-append{margin-right:10px;font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.redux-main .input-append .add-on,.redux-main .input-prepend .add-on{width:auto;display:inline-block;min-width:16px;padding:3px 4px;font-size:12px;font-weight:400;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #cccccc}.redux-main .input-prepend{font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.redux-sidebar{width:202px;float:left}.redux-sidebar .redux-group-menu{margin-top:0 !important}.redux-sidebar .redux-group-menu li{margin-top:0}.redux-sidebar .redux-group-menu li.active a,.redux-sidebar .redux-group-menu li.active a:hover,.redux-sidebar .redux-group-menu li.activeChild a,.redux-sidebar .redux-group-menu li.activeChild a:hover{background:#FCFCFC;color:#269ad6;width:184px;opacity:1}.redux-sidebar .redux-group-menu li.active a li a{background:#333;padding-left:5px}.redux-sidebar .redux-group-menu li.divide{padding:0;border-width:1px 0;border-style:solid;border-bottom-color:#E7E7E7;border-top-color:#F9F9F9}.redux-sidebar .redux-group-menu li a:first-child{border-top:none}.redux-sidebar .redux-group-menu li a{display:block;padding:10px 4px 10px 14px;background:#e0e0e0;background:transparent;border-width:1px 0;border-style:solid;border-bottom-color:#E7E7E7;border-top-color:#F9F9F9;opacity:0.7;color:#555;font-weight:bold;text-decoration:none;-webkit-transition:none;transition:none}.redux-sidebar .redux-group-menu li a.custom-tab{background:#f6f6f6}.redux-sidebar .redux-group-menu li a img{width:16px;height:16px;position:absolute;left:15px}.redux-sidebar .redux-group-menu li a:hover{background:#e5e5e5;color:#777;opacity:1}.redux-sidebar .redux-menu-warning,.redux-sidebar .redux-menu-error,.redux-sidebar .hasSubSections .extraIconSubsections{display:inline-block;float:right;padding:6px 7px 4px 7px;margin-left:4px;font-family:sans-serif;font-size:9px;font-weight:bold;line-height:9px;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent}.redux-sidebar .redux-menu-warning i,.redux-sidebar .redux-menu-error i,.redux-sidebar .hasSubSections .extraIconSubsections i{margin-left:-3px;margin-top:-3px}.redux-sidebar .redux-menu-error{background-color:#b94a48;color:#f2dede}.redux-sidebar .redux-menu-warning{background-color:#C09853;color:#FCF8E3}.redux-sidebar ul .subsection{display:none}.redux-sidebar .redux-group-tab-link-a{position:relative;outline:0}.redux-sidebar .redux-group-tab-link-a i{vertical-align:middle;font-size:1.35em;position:absolute}.redux-sidebar .redux-group-tab-link-a span{display:block}.redux-sidebar .redux-group-tab-link-a span.group_title{padding-left:30px}.redux-sidebar .redux-group-tab-link-li a.hasError span.group_title{padding-right:25px}.redux-sidebar #redux-header{text-align:center}.redux-sidebar #redux-header .display_header{float:none}.form-table th,.form-table td{margin:0;padding:0;width:auto}.redux_field_th{font-weight:bold;padding:20px 10px 20px 0px;display:block}.redux_field_th span:first-child{font-weight:normal;display:block;color:#666}.farb-popup-wrapper{position:relative;display:block}.farb-popup{position:absolute;left:40px;top:40px;background-color:white;border:1px solid #222;padding:5px;z-index:100}#ui-datepicker-div{display:none}.mp6 .icon-themes{display:none}.mp6 .redux-container #info_bar{padding:6px 10px 6px 6px}.mp6 .redux-container #info_bar a{margin-top:2px}.redux-timer{text-align:center;font-size:10px;color:#888}.wrap{margin-top:0}@media screen and (max-width: 600px){.redux-sidebar{width:44px}.redux-sidebar .extraIconSubsections{display:none !important}.redux-sidebar .redux-group-menu li a,.redux-sidebar .redux-group-menu li a:hover,.redux-sidebar .redux-group-menu li.active a,.redux-sidebar .redux-group-menu li.active a:hover,.redux-sidebar .redux-group-menu li.activeChild a,.redux-sidebar .redux-group-menu li.activeChild a:hover{width:auto}.redux-sidebar .redux-group-tab-link-a{position:relative}.redux-sidebar .redux-group-tab-link-a i{position:inherit}.redux-sidebar .redux-group-tab-link-a span{display:none;position:absolute;top:0;left:44px;padding:12px;width:200px;background:#eeeeee;border:1px solid #ccc;-webkit-box-shadow:2px 2px 8px rgba(0,0,0,0.2);-moz-box-shadow:2px 2px 8px rgba(0,0,0,0.2);box-shadow:2px 2px 8px rgba(0,0,0,0.2);border-width:1px 1px 1px 0px;z-index:3}.redux-sidebar .redux-group-tab-link-a:hover>span{display:block}.redux-main{margin-left:43px;width:auto;max-width:100%}table.form-table,.form-table>thead,.form-table>tbody,.form-table>tbody>tr>th,.form-table>tbody>tr>td,.form-table>tbody>tr{display:block;width:100% !important;padding:0px !important}.form-table>tbody>tr>th,.form-table>tbody>tr>td{padding:10px !important}.form-table>tbody>tr>th,.form-table>tbody>tr>td{padding:10px !important}}@media screen and (max-width: 782px){.form-table>tbody>tr>th{width:100%}.redux_field_th{padding-bottom:0}.mp6 .redux-container #info_bar{height:auto;padding-bottom:1px}.mp6 .redux-container #info_bar a{margin-top:5px}.redux-container-switch label{padding:5px 10px !important}.redux-container-button_set label{padding:12px 10px}.redux-container #redux-footer #redux-share{line-height:34px}}pre{overflow:hidden}#redux-header h2{color:#fff}.admin-color-fresh .button.ui-datepicker-current,.admin-color-fresh button.ui-datepicker-close,.wp-customizer .button.ui-datepicker-current,.wp-customizer button.ui-datepicker-close{background-color:#007db9 !important}.admin-color-fresh .ui-datepicker-buttonpane button.ui-datepicker-current,.wp-customizer .ui-datepicker-buttonpane button.ui-datepicker-current{background:#1e8cbe !important;color:white !important;border:1px solid #104b66 !important}.admin-color-fresh .ui-datepicker-header .ui-icon,.wp-customizer .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-fresh .ui-datepicker-header,.wp-customizer .ui-datepicker-header{background-color:#23282d !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{background-color:#007db9 !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-hover,.wp-customizer .ui-datepicker td .ui-state-hover{color:#007db9 !important}.admin-color-fresh .ui-datepicker td .ui-state-highlight,.wp-customizer .ui-datepicker td .ui-state-highlight{background:#0073aa !important;border:1px solid #23282d !important;color:white !important}.admin-color-fresh .redux-container-switch .cb-disable,.admin-color-fresh .redux-container-switch .cb-enable,.admin-color-fresh .ui-state-default,.admin-color-fresh .ui-widget-content .ui-state-default,.admin-color-fresh .ui-widget-header .ui-state-default,.wp-customizer .redux-container-switch .cb-disable,.wp-customizer .redux-container-switch .cb-enable,.wp-customizer .ui-state-default,.wp-customizer .ui-widget-content .ui-state-default,.wp-customizer .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-fresh .redux-container-switch .cb-disable.selected,.wp-customizer .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-fresh .redux-container-switch .cb-enable.selected,.admin-color-fresh .redux-field-container .ui-buttonset .ui-state-active,.wp-customizer .redux-container-switch .cb-enable.selected,.wp-customizer .redux-field-container .ui-buttonset .ui-state-active{background-color:#0073aa !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#008bce), to(#0073aa)) !important;background-image:-moz-linear-gradient(top, #008bce, #0073aa) !important;background-image:-ms-linear-gradient(top, #008bce, #0073aa) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #008bce), color-stop(100%, #0073aa)) !important;background-image:-webkit-linear-gradient(top, #008bce, #0073aa) !important;background-image:-o-linear-gradient(top, #008bce, #0073aa) !important;background-image:-linear-gradient(top, #008bce, #0073aa) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#008bce', endColorstr='#0073aa', GradientType=0) !important;border-color:#003f5d !important;border-color:#005077 !important;-webkit-box-shadow:inset 0 1px 0 #00a7f6,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #00a7f6,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-fresh #redux-header,.wp-customizer #redux-header{background:#23282d;border-color:#0073aa}.admin-color-fresh #redux-header .display_header span,.wp-customizer #redux-header .display_header span{color:#a0a5aa}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild,.wp-customizer .redux-sidebar .redux-group-menu li.active,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-fresh .redux-sidebar .redux-group-menu li.active a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild a,.wp-customizer .redux-sidebar .redux-group-menu li.active a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild a{color:#23282d}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#1e8cbe;background:#0d0e10}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#0073aa}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#23282d}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#a0a5aa;text-shadow:1px 1px #54595d}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#23282d;text-shadow:none}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#0073aa;text-shadow:1px 1px #002e44}.admin-color-fresh .redux-container-image_select .redux-image-select-selected img,.wp-customizer .redux-container-image_select .redux-image-select-selected img{border-color:#0073aa}.admin-color-fresh #redux-footer #redux-share a,.wp-customizer #redux-footer #redux-share a{color:#0073aa}.admin-color-fresh #redux-footer #redux-share a:hover,.wp-customizer #redux-footer #redux-share a:hover{color:#002e44}.admin-color-fresh .select2-results .select2-highlighted,.wp-customizer .select2-results .select2-highlighted{background:#0073aa}.admin-color-fresh .select2-drop-active,.admin-color-fresh .select2-container-multi.select2-container-active .select2-choices,.admin-color-fresh .select2-drop.select2-drop-above.select2-drop-active,.admin-color-fresh .select2-container-active .select2-choice,.admin-color-fresh .select2-container-active .select2-choices,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choices,.wp-customizer .select2-drop-active,.wp-customizer .select2-container-multi.select2-container-active .select2-choices,.wp-customizer .select2-drop.select2-drop-above.select2-drop-active,.wp-customizer .select2-container-active .select2-choice,.wp-customizer .select2-container-active .select2-choices,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choice,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#0073aa}.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choices,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choice,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-fresh .noUi-connect,.wp-customizer .noUi-connect{background-color:#007db9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#0095dd), to(#007db9)) !important;background-image:-moz-linear-gradient(top, #0095dd, #007db9) !important;background-image:-ms-linear-gradient(top, #0095dd, #007db9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #0095dd), color-stop(100%, #007db9)) !important;background-image:-webkit-linear-gradient(top, #0095dd, #007db9) !important;background-image:-o-linear-gradient(top, #0095dd, #007db9) !important;background-image:-linear-gradient(top, #0095dd, #007db9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0095dd', endColorstr='#007db9', GradientType=0) !important}.admin-color-light .button.ui-datepicker-current,.admin-color-light button.ui-datepicker-close{background-color:#04b0db !important}.admin-color-light .ui-datepicker-buttonpane button.ui-datepicker-current{background:#0384a4 !important;color:white !important;border:1px solid #013340 !important}.admin-color-light .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-light .ui-datepicker-header{background-color:#888 !important;color:white !important}.admin-color-light .ui-datepicker td .ui-state-active{background-color:#04b0db !important;color:white !important}.admin-color-light .ui-datepicker td .ui-state-hover{color:#04b0db !important}.admin-color-light .ui-datepicker td .ui-state-highlight{background:#04a4cc !important;border:1px solid #888 !important;color:white !important}.admin-color-light .redux-container-switch .cb-disable,.admin-color-light .redux-container-switch .cb-enable,.admin-color-light .ui-state-default,.admin-color-light .ui-widget-content .ui-state-default,.admin-color-light .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-light .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-light .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-light .redux-container-switch .cb-enable.selected,.admin-color-light .redux-field-container .ui-buttonset .ui-state-active{background-color:#04a4cc !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#05c0ef), to(#04a4cc)) !important;background-image:-moz-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-ms-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #05c0ef), color-stop(100%, #04a4cc)) !important;background-image:-webkit-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-o-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-linear-gradient(top, #05c0ef, #04a4cc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#05c0ef', endColorstr='#04a4cc', GradientType=0) !important;border-color:#036881 !important;border-color:#037c9a !important;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-light #redux-header{background:#888;border-color:#04a4cc}.admin-color-light #redux-header .display_header span{color:#e6e6e6}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-light .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-light .redux-sidebar .redux-group-menu li.active,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-light .redux-sidebar .redux-group-menu li.active a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild a{color:#888}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#0384a4;background:#6f6f6f}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#04a4cc}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#888}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#e6e6e6;text-shadow:1px 1px #9a9a9a}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#888;text-shadow:none}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#04a4cc;text-shadow:1px 1px #025468}.admin-color-light .redux-container-image_select .redux-image-select-selected img{border-color:#04a4cc}.admin-color-light #redux-footer #redux-share a{color:#04a4cc}.admin-color-light #redux-footer #redux-share a:hover{color:#025468}.admin-color-light .select2-results .select2-highlighted{background:#04a4cc}.admin-color-light .select2-drop-active,.admin-color-light .select2-container-multi.select2-container-active .select2-choices,.admin-color-light .select2-drop.select2-drop-above.select2-drop-active,.admin-color-light .select2-container-active .select2-choice,.admin-color-light .select2-container-active .select2-choices,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#04a4cc}.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-light .noUi-connect{background-color:#04b0db !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#09cafa), to(#04b0db)) !important;background-image:-moz-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-ms-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #09cafa), color-stop(100%, #04b0db)) !important;background-image:-webkit-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-o-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-linear-gradient(top, #09cafa, #04b0db) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#09cafa', endColorstr='#04b0db', GradientType=0) !important}.admin-color-blue .button.ui-datepicker-current,.admin-color-blue button.ui-datepicker-close{background-color:#509dba !important}.admin-color-blue .ui-datepicker-buttonpane button.ui-datepicker-current{background:#db9825 !important;color:white !important;border:1px solid #845c16 !important}.admin-color-blue .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-blue .ui-datepicker-header{background-color:#096484 !important;color:white !important}.admin-color-blue .ui-datepicker td .ui-state-active{background-color:#509dba !important;color:white !important}.admin-color-blue .ui-datepicker td .ui-state-hover{color:#509dba !important}.admin-color-blue .ui-datepicker td .ui-state-highlight{background:#4796b3 !important;border:1px solid #096484 !important;color:white !important}.admin-color-blue .redux-container-switch .cb-disable,.admin-color-blue .redux-container-switch .cb-enable,.admin-color-blue .ui-state-default,.admin-color-blue .ui-widget-content .ui-state-default,.admin-color-blue .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-blue .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-blue .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-blue .redux-container-switch .cb-enable.selected,.admin-color-blue .redux-field-container .ui-buttonset .ui-state-active{background-color:#4796b3 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#5ea5bf), to(#4796b3)) !important;background-image:-moz-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-ms-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5ea5bf), color-stop(100%, #4796b3)) !important;background-image:-webkit-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-o-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-linear-gradient(top, #5ea5bf, #4796b3) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5ea5bf', endColorstr='#4796b3', GradientType=0) !important;border-color:#31687c !important;border-color:#39778e !important;-webkit-box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-blue #redux-header{background:#096484;border-color:#4796b3}.admin-color-blue #redux-header .display_header span{color:#e2ecf1}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-blue .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-blue .redux-sidebar .redux-group-menu li.active,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-blue .redux-sidebar .redux-group-menu li.active a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild a{color:#096484}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#db9825;background:#064054}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#4796b3}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#096484}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#e2ecf1;text-shadow:1px 1px #7ba8bf}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#096484;text-shadow:none}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#4796b3;text-shadow:1px 1px #2a596a}.admin-color-blue .redux-container-image_select .redux-image-select-selected img{border-color:#4796b3}.admin-color-blue #redux-footer #redux-share a{color:#4796b3}.admin-color-blue #redux-footer #redux-share a:hover{color:#2a596a}.admin-color-blue .select2-results .select2-highlighted{background:#4796b3}.admin-color-blue .select2-drop-active,.admin-color-blue .select2-container-multi.select2-container-active .select2-choices,.admin-color-blue .select2-drop.select2-drop-above.select2-drop-active,.admin-color-blue .select2-container-active .select2-choice,.admin-color-blue .select2-container-active .select2-choices,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#4796b3}.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-blue .noUi-connect{background-color:#509dba !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#69abc4), to(#509dba)) !important;background-image:-moz-linear-gradient(top, #69abc4, #509dba) !important;background-image:-ms-linear-gradient(top, #69abc4, #509dba) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #69abc4), color-stop(100%, #509dba)) !important;background-image:-webkit-linear-gradient(top, #69abc4, #509dba) !important;background-image:-o-linear-gradient(top, #69abc4, #509dba) !important;background-image:-linear-gradient(top, #69abc4, #509dba) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#69abc4', endColorstr='#509dba', GradientType=0) !important}.admin-color-coffee .button.ui-datepicker-current,.admin-color-coffee button.ui-datepicker-close{background-color:#ccad93 !important}.admin-color-coffee .ui-datepicker-buttonpane button.ui-datepicker-current{background:#ba906d !important;color:white !important;border:1px solid #835d3e !important}.admin-color-coffee .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-coffee .ui-datepicker-header{background-color:#46403c !important;color:white !important}.admin-color-coffee .ui-datepicker td .ui-state-active{background-color:#ccad93 !important;color:white !important}.admin-color-coffee .ui-datepicker td .ui-state-hover{color:#ccad93 !important}.admin-color-coffee .ui-datepicker td .ui-state-highlight{background:#c7a589 !important;border:1px solid #46403c !important;color:white !important}.admin-color-coffee .redux-container-switch .cb-disable,.admin-color-coffee .redux-container-switch .cb-enable,.admin-color-coffee .ui-state-default,.admin-color-coffee .ui-widget-content .ui-state-default,.admin-color-coffee .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-coffee .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-coffee .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-coffee .redux-container-switch .cb-enable.selected,.admin-color-coffee .redux-field-container .ui-buttonset .ui-state-active{background-color:#c7a589 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d2b7a1), to(#c7a589)) !important;background-image:-moz-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-ms-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d2b7a1), color-stop(100%, #c7a589)) !important;background-image:-webkit-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-o-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-linear-gradient(top, #d2b7a1, #c7a589) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d2b7a1', endColorstr='#c7a589', GradientType=0) !important;border-color:#ae7d55 !important;border-color:#b78b66 !important;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-coffee #redux-header{background:#46403c;border-color:#c7a589}.admin-color-coffee #redux-header .display_header span{color:#cdcbc9}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-coffee .redux-sidebar .redux-group-menu li.active a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild a{color:#46403c}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#ba906d;background:#2b2724}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#c7a589}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#46403c}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#cdcbc9;text-shadow:1px 1px #837e7a}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#46403c;text-shadow:none}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#c7a589;text-shadow:1px 1px #9f714b}.admin-color-coffee .redux-container-image_select .redux-image-select-selected img{border-color:#c7a589}.admin-color-coffee #redux-footer #redux-share a{color:#c7a589}.admin-color-coffee #redux-footer #redux-share a:hover{color:#9f714b}.admin-color-coffee .select2-results .select2-highlighted{background:#c7a589}.admin-color-coffee .select2-drop-active,.admin-color-coffee .select2-container-multi.select2-container-active .select2-choices,.admin-color-coffee .select2-drop.select2-drop-above.select2-drop-active,.admin-color-coffee .select2-container-active .select2-choice,.admin-color-coffee .select2-container-active .select2-choices,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#c7a589}.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-coffee .noUi-connect{background-color:#ccad93 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d7bfac), to(#ccad93)) !important;background-image:-moz-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-ms-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d7bfac), color-stop(100%, #ccad93)) !important;background-image:-webkit-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-o-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-linear-gradient(top, #d7bfac, #ccad93) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d7bfac', endColorstr='#ccad93', GradientType=0) !important}.admin-color-ectoplasm .button.ui-datepicker-current,.admin-color-ectoplasm button.ui-datepicker-close{background-color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker-buttonpane button.ui-datepicker-current{background:#89993a !important;color:white !important;border:1px solid #474f1e !important}.admin-color-ectoplasm .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-ectoplasm .ui-datepicker-header{background-color:#413256 !important;color:white !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{background-color:#a9bd4f !important;color:white !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-hover{color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-highlight{background:#a3b745 !important;border:1px solid #413256 !important;color:white !important}.admin-color-ectoplasm .redux-container-switch .cb-disable,.admin-color-ectoplasm .redux-container-switch .cb-enable,.admin-color-ectoplasm .ui-state-default,.admin-color-ectoplasm .ui-widget-content .ui-state-default,.admin-color-ectoplasm .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-ectoplasm .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-ectoplasm .redux-container-switch .cb-enable.selected,.admin-color-ectoplasm .redux-field-container .ui-buttonset .ui-state-active{background-color:#a3b745 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b0c25e), to(#a3b745)) !important;background-image:-moz-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-ms-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0c25e), color-stop(100%, #a3b745)) !important;background-image:-webkit-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-o-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-linear-gradient(top, #b0c25e, #a3b745) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b0c25e', endColorstr='#a3b745', GradientType=0) !important;border-color:#727f30 !important;border-color:#829237 !important;-webkit-box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-ectoplasm #redux-header{background:#413256;border-color:#a3b745}.admin-color-ectoplasm #redux-header .display_header span{color:#cbc5d3}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild a{color:#413256}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#89993a;background:#291f36}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#a3b745}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#413256}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#cbc5d3;text-shadow:1px 1px #7d6e91}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#413256;text-shadow:none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#a3b745;text-shadow:1px 1px #616d29}.admin-color-ectoplasm .redux-container-image_select .redux-image-select-selected img{border-color:#a3b745}.admin-color-ectoplasm #redux-footer #redux-share a{color:#a3b745}.admin-color-ectoplasm #redux-footer #redux-share a:hover{color:#616d29}.admin-color-ectoplasm .select2-results .select2-highlighted{background:#a3b745}.admin-color-ectoplasm .select2-drop-active,.admin-color-ectoplasm .select2-container-multi.select2-container-active .select2-choices,.admin-color-ectoplasm .select2-drop.select2-drop-above.select2-drop-active,.admin-color-ectoplasm .select2-container-active .select2-choice,.admin-color-ectoplasm .select2-container-active .select2-choices,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#a3b745}.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-ectoplasm .noUi-connect{background-color:#a9bd4f !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b6c669), to(#a9bd4f)) !important;background-image:-moz-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-ms-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b6c669), color-stop(100%, #a9bd4f)) !important;background-image:-webkit-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-o-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-linear-gradient(top, #b6c669, #a9bd4f) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b6c669', endColorstr='#a9bd4f', GradientType=0) !important}.admin-color-midnight .button.ui-datepicker-current,.admin-color-midnight button.ui-datepicker-close{background-color:#e35950 !important}.admin-color-midnight .ui-datepicker-buttonpane button.ui-datepicker-current{background:#d92c23 !important;color:white !important;border:1px solid #811a15 !important}.admin-color-midnight .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-midnight .ui-datepicker-header{background-color:#363b3f !important;color:white !important}.admin-color-midnight .ui-datepicker td .ui-state-active{background-color:#e35950 !important;color:white !important}.admin-color-midnight .ui-datepicker td .ui-state-hover{color:#e35950 !important}.admin-color-midnight .ui-datepicker td .ui-state-highlight{background:#e14d43 !important;border:1px solid #363b3f !important;color:white !important}.admin-color-midnight .redux-container-switch .cb-disable,.admin-color-midnight .redux-container-switch .cb-enable,.admin-color-midnight .ui-state-default,.admin-color-midnight .ui-widget-content .ui-state-default,.admin-color-midnight .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-midnight .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-midnight .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-midnight .redux-container-switch .cb-enable.selected,.admin-color-midnight .redux-field-container .ui-buttonset .ui-state-active{background-color:#e14d43 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e66a62), to(#e14d43)) !important;background-image:-moz-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-ms-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e66a62), color-stop(100%, #e14d43)) !important;background-image:-webkit-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-o-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-linear-gradient(top, #e66a62, #e14d43) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e66a62', endColorstr='#e14d43', GradientType=0) !important;border-color:#ba281e !important;border-color:#d02c21 !important;-webkit-box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-midnight #redux-header{background:#363b3f;border-color:#e14d43}.admin-color-midnight #redux-header .display_header span{color:#c2c4c5}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-midnight .redux-sidebar .redux-group-menu li.active a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild a{color:#363b3f}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#d92c23;background:#1e2124}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#e14d43}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#363b3f}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#c2c4c5;text-shadow:1px 1px #74787a}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#363b3f;text-shadow:none}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#e14d43;text-shadow:1px 1px #a4231a}.admin-color-midnight .redux-container-image_select .redux-image-select-selected img{border-color:#e14d43}.admin-color-midnight #redux-footer #redux-share a{color:#e14d43}.admin-color-midnight #redux-footer #redux-share a:hover{color:#a4231a}.admin-color-midnight .select2-results .select2-highlighted{background:#e14d43}.admin-color-midnight .select2-drop-active,.admin-color-midnight .select2-container-multi.select2-container-active .select2-choices,.admin-color-midnight .select2-drop.select2-drop-above.select2-drop-active,.admin-color-midnight .select2-container-active .select2-choice,.admin-color-midnight .select2-container-active .select2-choices,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#e14d43}.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-midnight .noUi-connect{background-color:#e35950 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e8776f), to(#e35950)) !important;background-image:-moz-linear-gradient(top, #e8776f, #e35950) !important;background-image:-ms-linear-gradient(top, #e8776f, #e35950) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e8776f), color-stop(100%, #e35950)) !important;background-image:-webkit-linear-gradient(top, #e8776f, #e35950) !important;background-image:-o-linear-gradient(top, #e8776f, #e35950) !important;background-image:-linear-gradient(top, #e8776f, #e35950) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e8776f', endColorstr='#e35950', GradientType=0) !important}.admin-color-ocean .button.ui-datepicker-current,.admin-color-ocean button.ui-datepicker-close{background-color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker-buttonpane button.ui-datepicker-current{background:#86a988 !important;color:white !important;border:1px solid #547555 !important}.admin-color-ocean .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-ocean .ui-datepicker-header{background-color:#627c83 !important;color:white !important}.admin-color-ocean .ui-datepicker td .ui-state-active{background-color:#a7c0a9 !important;color:white !important}.admin-color-ocean .ui-datepicker td .ui-state-hover{color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker td .ui-state-highlight{background:#9ebaa0 !important;border:1px solid #627c83 !important;color:white !important}.admin-color-ocean .redux-container-switch .cb-disable,.admin-color-ocean .redux-container-switch .cb-enable,.admin-color-ocean .ui-state-default,.admin-color-ocean .ui-widget-content .ui-state-default,.admin-color-ocean .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-ocean .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-ocean .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-ocean .redux-container-switch .cb-enable.selected,.admin-color-ocean .redux-field-container .ui-buttonset .ui-state-active{background-color:#9ebaa0 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b3c9b4), to(#9ebaa0)) !important;background-image:-moz-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-ms-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b3c9b4), color-stop(100%, #9ebaa0)) !important;background-image:-webkit-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-o-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-linear-gradient(top, #b3c9b4, #9ebaa0) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3c9b4', endColorstr='#9ebaa0', GradientType=0) !important;border-color:#719a74 !important;border-color:#80a583 !important;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-ocean #redux-header{background:#627c83;border-color:#9ebaa0}.admin-color-ocean #redux-header .display_header span{color:#d5dddf}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-ocean .redux-sidebar .redux-group-menu li.active a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild a{color:#627c83}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#86a988;background:#4c6066}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#9ebaa0}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#627c83}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#d5dddf;text-shadow:1px 1px #7e979d}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#627c83;text-shadow:none}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#9ebaa0;text-shadow:1px 1px #658d68}.admin-color-ocean .redux-container-image_select .redux-image-select-selected img{border-color:#9ebaa0}.admin-color-ocean #redux-footer #redux-share a{color:#9ebaa0}.admin-color-ocean #redux-footer #redux-share a:hover{color:#658d68}.admin-color-ocean .select2-results .select2-highlighted{background:#9ebaa0}.admin-color-ocean .select2-drop-active,.admin-color-ocean .select2-container-multi.select2-container-active .select2-choices,.admin-color-ocean .select2-drop.select2-drop-above.select2-drop-active,.admin-color-ocean .select2-container-active .select2-choice,.admin-color-ocean .select2-container-active .select2-choices,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#9ebaa0}.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-ocean .noUi-connect{background-color:#a7c0a9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#bccfbd), to(#a7c0a9)) !important;background-image:-moz-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-ms-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #bccfbd), color-stop(100%, #a7c0a9)) !important;background-image:-webkit-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-o-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-linear-gradient(top, #bccfbd, #a7c0a9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bccfbd', endColorstr='#a7c0a9', GradientType=0) !important}.admin-color-sunrise .button.ui-datepicker-current,.admin-color-sunrise button.ui-datepicker-close{background-color:#df8a48 !important}.admin-color-sunrise .ui-datepicker-buttonpane button.ui-datepicker-current{background:#cc6c23 !important;color:white !important;border:1px solid #753e14 !important}.admin-color-sunrise .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-sunrise .ui-datepicker-header{background-color:#b43c38 !important;color:white !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{background-color:#df8a48 !important;color:white !important}.admin-color-sunrise .ui-datepicker td .ui-state-hover{color:#df8a48 !important}.admin-color-sunrise .ui-datepicker td .ui-state-highlight{background:#dd823b !important;border:1px solid #b43c38 !important;color:white !important}.admin-color-sunrise .redux-container-switch .cb-disable,.admin-color-sunrise .redux-container-switch .cb-enable,.admin-color-sunrise .ui-state-default,.admin-color-sunrise .ui-widget-content .ui-state-default,.admin-color-sunrise .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-sunrise .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-sunrise .redux-container-switch .cb-enable.selected,.admin-color-sunrise .redux-field-container .ui-buttonset .ui-state-active{background-color:#dd823b !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e29559), to(#dd823b)) !important;background-image:-moz-linear-gradient(top, #e29559, #dd823b) !important;background-image:-ms-linear-gradient(top, #e29559, #dd823b) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e29559), color-stop(100%, #dd823b)) !important;background-image:-webkit-linear-gradient(top, #e29559, #dd823b) !important;background-image:-o-linear-gradient(top, #e29559, #dd823b) !important;background-image:-linear-gradient(top, #e29559, #dd823b) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e29559', endColorstr='#dd823b', GradientType=0) !important;border-color:#ad5d1e !important;border-color:#c36922 !important;-webkit-box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-sunrise #redux-header{background:#b43c38;border-color:#dd823b}.admin-color-sunrise #redux-header .display_header span{color:#f0c8c6}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild a{color:#b43c38}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#cc6c23;background:#8d2f2c}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#dd823b}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#b43c38}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#f0c8c6;text-shadow:1px 1px #d0534d}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#b43c38;text-shadow:none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#dd823b;text-shadow:1px 1px #98511a}.admin-color-sunrise .redux-container-image_select .redux-image-select-selected img{border-color:#dd823b}.admin-color-sunrise #redux-footer #redux-share a{color:#dd823b}.admin-color-sunrise #redux-footer #redux-share a:hover{color:#98511a}.admin-color-sunrise .select2-results .select2-highlighted{background:#dd823b}.admin-color-sunrise .select2-drop-active,.admin-color-sunrise .select2-container-multi.select2-container-active .select2-choices,.admin-color-sunrise .select2-drop.select2-drop-above.select2-drop-active,.admin-color-sunrise .select2-container-active .select2-choice,.admin-color-sunrise .select2-container-active .select2-choices,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#dd823b}.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-sunrise .noUi-connect{background-color:#df8a48 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e59e66), to(#df8a48)) !important;background-image:-moz-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-ms-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e59e66), color-stop(100%, #df8a48)) !important;background-image:-webkit-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-o-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-linear-gradient(top, #e59e66, #df8a48) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e59e66', endColorstr='#df8a48', GradientType=0) !important}@media screen and (max-width: 600px){.redux-group-tab-link-a{min-height:15px}.redux-group-tab-link-a span{padding:11px 12px;color:#555;-webkit-transition:all 0.3s;-moz-transition:all 0.3s;transition:all 0.3s;text-shadow:none !important}.redux-group-tab-link-a span:hover{background:#e5e5e5}}@media screen and (max-width: 782px){#redux-footer #redux-share{line-height:38px;font-size:18px}.sticky-save-warn .redux-save-warn{right:13px;top:46px}.redux-container .expand_options{margin-top:5px}.redux-action_bar input{margin-bottom:0 !important}}@media screen and (max-width: 600px){#redux-footer #redux-share,.redux-hint-qtip{display:none}.redux-container .redux-action_bar{float:none}}.redux-sidebar .icon-large,.redux-main .icon-large{background-image:inherit !important;width:inherit;height:inherit}.redux-main dd,.redux-main li,.redux-sidebar li{margin-bottom:0 !important}.fully-expanded .redux-sidebar{margin-left:-500px}.fully-expanded .redux-main{margin-left:0}.fully-expanded .redux-group-tab{display:block}@media screen and (max-width: 640px){#redux-defaults-section{display:none}}@media screen and (max-width: 730px){#redux-share{display:none}}@media screen and (max-width: 730px){#redux-defaults-section2{display:none}#redux-share{display:none}}@media screen and (max-width: 600px){.form-table>tbody>tr>th{padding-bottom:0 !important}.redux_field_th{padding-top:0;padding-bottom:0}.redux-main .redux-field-container{padding-top:0;padding-bottom:0}.redux-main .subsection a{min-height:15px}}@media screen and (min-width: 601px) and (max-width: 782px){.redux-container .sticky-save-warn .redux-save-warn{top:47px !important;right:13px !important}}@media screen and (max-width: 782px){.redux-main .form-table-section-indented input[type=text]{width:95% !important}.redux-main .redux-container-sortable input[type=text]{width:80%;display:initial}.redux-main .redux-typography-container .input_wrapper input.mini{font-size:16px !important;height:40px !important;padding:7px 10px !important;line-height:24px !important}.redux-main .redux-typography-container .picker-wrapper label{margin-top:16px !important}.redux-main .input-append{height:50px !important}.redux-main .input-append .add-on{font-size:16px;line-height:24px !important;padding:7px;height:32px !important;float:right;margin-top:-40px}.redux-main .redux-hint-qtip{float:left !important}.redux-main .redux-action_bar .button{margin-top:-1px}}@media screen and (max-width: 600px){.sticky-save-warn .redux-save-warn{top:0 !important;right:14px !important}}@media screen and (max-width: 570px){.redux-main .redux-container-sortable .checkbox-container{width:85%;padding-bottom:5px}.redux-main .redux-container-sortable .checkbox-container label{display:initial}}#redux-header{position:relative}.redux-main{position:relative}.redux-main #redux-sticky{min-height:32px;margin-left:-20px;margin-right:-20px;margin-top:-10px;margin-bottom:8px}.redux-main #redux-sticky #info_bar{height:32px}.redux-main #redux-sticky #info_bar .expand_options{margin-top:4px}.redux-main .redux_field_search{top:50px;right:5px}.redux-main #redux-footer-sticky{margin-left:-20px;margin-right:-20px;margin-bottom:-10px}.redux-qtip{z-index:999999 !important}.redux-main pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}
ReduxCore/assets/css/vendor/qtip/jquery.qtip.css CHANGED
@@ -1,14 +1,14 @@
1
  /*
2
- * qTip2 - Pretty powerful tooltips - v2.2.0
3
  * http://qtip2.com
4
  *
5
- * Copyright (c) 2013 Craig Michael Thompson
6
- * Released under the MIT, GPL licenses
7
  * http://jquery.org/license
8
  *
9
- * Date: Thu Nov 21 2013 08:34 GMT+0000
10
  * Plugins: tips modal viewport svg imagemap ie6
11
- * Styles: basic css3
12
  */
13
  .qtip{
14
  position: absolute;
@@ -18,7 +18,7 @@
18
 
19
  max-width: 280px;
20
  min-width: 50px;
21
-
22
  font-size: 10.5px;
23
  line-height: 12px;
24
 
@@ -28,72 +28,71 @@
28
  padding: 0;
29
  }
30
 
31
- .qtip-content{
32
- position: relative;
33
- padding: 5px 9px;
34
- overflow: hidden;
35
-
36
- text-align: left;
37
- word-wrap: break-word;
38
- }
39
-
40
- .qtip-titlebar{
41
- position: relative;
42
- padding: 5px 35px 5px 10px;
43
- overflow: hidden;
44
-
45
- border-width: 0 0 1px;
46
- font-weight: bold;
47
- }
48
-
49
- .qtip-titlebar + .qtip-content{ border-top-width: 0 !important; }
50
-
51
- /* Default close button class */
52
- .qtip-close{
53
- position: absolute;
54
- right: -9px; top: -9px;
55
-
56
- cursor: pointer;
57
- outline: medium none;
58
-
59
- border-width: 1px;
60
- border-style: solid;
61
- border-color: transparent;
62
- }
63
-
64
- .qtip-titlebar .qtip-close{
65
- right: 4px; top: 50%;
66
- margin-top: -9px;
67
- }
68
-
69
- * html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */
70
-
71
- .qtip-titlebar .ui-icon,
72
- .qtip-icon .ui-icon{
73
- display: block;
74
- text-indent: -1000em;
75
- direction: ltr;
76
- }
77
-
78
- .qtip-icon, .qtip-icon .ui-icon{
79
- -moz-border-radius: 3px;
80
- -webkit-border-radius: 3px;
81
- border-radius: 3px;
82
- text-decoration: none;
83
- }
84
-
85
- .qtip-icon .ui-icon{
86
- width: 18px;
87
- height: 14px;
88
-
89
- line-height: 14px;
90
- text-align: center;
91
- text-indent: 0;
92
- font: normal bold 10px/13px Tahoma,sans-serif;
93
-
94
- color: inherit;
95
- background: transparent none no-repeat -100em -100em;
96
- }
97
 
98
  /* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
99
  .qtip-focus{}
@@ -103,30 +102,26 @@
103
 
104
  /* Default tooltip style */
105
  .qtip-default{
106
- border-width: 1px;
107
- border-style: solid;
108
- border-color: black;
109
- /* #F1D031;*/
110
 
111
  background-color: #FFFFA3;
112
  color: #555;
113
  }
114
 
115
- .qtip-default .qtip-titlebar{
116
- background-color: #FFEF93;
117
- }
118
 
119
- .qtip-default .qtip-icon{
120
- border-color: #CCC;
121
- background: #F1F1F1;
122
- color: #777;
123
- }
124
-
125
- .qtip-default .qtip-titlebar .qtip-close{
126
- border-color: #AAA;
127
- color: #111;
128
- }
129
 
 
 
 
 
130
 
131
 
132
  /*! Light tooltip style */
@@ -136,9 +131,9 @@
136
  color: #454545;
137
  }
138
 
139
- .qtip-light .qtip-titlebar{
140
- background-color: #f1f1f1;
141
- }
142
 
143
 
144
  /*! Dark tooltip style */
@@ -148,17 +143,17 @@
148
  color: #f3f3f3;
149
  }
150
 
151
- .qtip-dark .qtip-titlebar{
152
- background-color: #404040;
153
- }
154
 
155
- .qtip-dark .qtip-icon{
156
- border-color: #444;
157
- }
158
 
159
- .qtip-dark .qtip-titlebar .ui-state-hover{
160
- border-color: #303030;
161
- }
162
 
163
 
164
  /*! Cream tooltip style */
@@ -168,13 +163,13 @@
168
  color: #A27D35;
169
  }
170
 
171
- .qtip-cream .qtip-titlebar{
172
- background-color: #F0DE7D;
173
- }
174
 
175
- .qtip-cream .qtip-close .qtip-icon{
176
- background-position: -82px 0;
177
- }
178
 
179
 
180
  /*! Red tooltip style */
@@ -184,21 +179,21 @@
184
  color: #912323;
185
  }
186
 
187
- .qtip-red .qtip-titlebar{
188
- background-color: #F06D65;
189
- }
190
 
191
- .qtip-red .qtip-close .qtip-icon{
192
- background-position: -102px 0;
193
- }
194
 
195
- .qtip-red .qtip-icon{
196
- border-color: #D95252;
197
- }
198
 
199
- .qtip-red .qtip-titlebar .ui-state-hover{
200
- border-color: #D95252;
201
- }
202
 
203
 
204
  /*! Green tooltip style */
@@ -208,13 +203,13 @@
208
  color: #3F6219;
209
  }
210
 
211
- .qtip-green .qtip-titlebar{
212
- background-color: #B0DE78;
213
- }
214
 
215
- .qtip-green .qtip-close .qtip-icon{
216
- background-position: -42px 0;
217
- }
218
 
219
 
220
  /*! Blue tooltip style */
@@ -224,14 +219,13 @@
224
  color: #5E99BD;
225
  }
226
 
227
- .qtip-blue .qtip-titlebar{
228
- background-color: #D0E9F5;
229
- }
230
-
231
- .qtip-blue .qtip-close .qtip-icon{
232
- background-position: -2px 0;
233
- }
234
 
 
 
 
235
 
236
 
237
  .qtip-shadow{
@@ -260,13 +254,13 @@
260
  -moz-border-radius: 2px;
261
  -webkit-border-radius: 2px;
262
  border-radius: 2px;
263
-
264
  -webkit-box-shadow: 0 0 3px #333;
265
  -moz-box-shadow: 0 0 3px #333;
266
  box-shadow: 0 0 3px #333;
267
 
268
  color: white;
269
- border-width: 0;
270
 
271
  background: #4A4A4A;
272
  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));
@@ -276,26 +270,26 @@
276
  background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%);
277
  }
278
 
279
- .qtip-youtube .qtip-titlebar{
280
- background-color: #4A4A4A;
281
- background-color: rgba(0,0,0,0);
282
- }
283
-
284
- .qtip-youtube .qtip-content{
285
- padding: .75em;
286
- font: 12px arial,sans-serif;
287
-
288
- filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);
289
- -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);";
290
- }
291
 
292
- .qtip-youtube .qtip-icon{
293
- border-color: #222;
294
- }
295
 
296
- .qtip-youtube .qtip-titlebar .ui-state-hover{
297
- border-color: #303030;
298
- }
299
 
300
 
301
  /* jQuery TOOLS Tooltip style */
@@ -320,31 +314,31 @@
320
  box-shadow: 0 0 12px #333;
321
  }
322
 
323
- /* IE Specific */
324
- .qtip-jtools .qtip-titlebar{
325
- background-color: transparent;
326
- filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A);
327
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)";
328
- }
329
- .qtip-jtools .qtip-content{
330
- filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323);
331
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)";
332
- }
333
 
334
- .qtip-jtools .qtip-titlebar,
335
- .qtip-jtools .qtip-content{
336
- background: transparent;
337
- color: white;
338
- border: 0 dashed transparent;
339
- }
340
 
341
- .qtip-jtools .qtip-icon{
342
- border-color: #555;
343
- }
344
 
345
- .qtip-jtools .qtip-titlebar .ui-state-hover{
346
- border-color: #333;
347
- }
348
 
349
 
350
  /* Cluetip style */
@@ -358,20 +352,20 @@
358
  border: 0 dashed transparent;
359
  }
360
 
361
- .qtip-cluetip .qtip-titlebar{
362
- background-color: #87876A;
363
- color: white;
364
- border: 0 dashed transparent;
365
- }
366
-
367
- .qtip-cluetip .qtip-icon{
368
- border-color: #808064;
369
- }
370
-
371
- .qtip-cluetip .qtip-titlebar .ui-state-hover{
372
- border-color: #696952;
373
- color: #696952;
374
- }
375
 
376
 
377
  /* Tipsy style */
@@ -389,23 +383,23 @@
389
  text-shadow: 0 1px black;
390
  }
391
 
392
- .qtip-tipsy .qtip-titlebar{
393
- padding: 6px 35px 0 10px;
394
- background-color: transparent;
395
- }
396
 
397
- .qtip-tipsy .qtip-content{
398
- padding: 6px 10px;
399
- }
400
-
401
- .qtip-tipsy .qtip-icon{
402
- border-color: #222;
403
- text-shadow: none;
404
- }
405
 
406
- .qtip-tipsy .qtip-titlebar .ui-state-hover{
407
- border-color: #303030;
408
- }
409
 
410
 
411
  /* Tipped style */
@@ -423,29 +417,29 @@
423
  font-family: serif;
424
  }
425
 
426
- .qtip-tipped .qtip-titlebar{
427
- border-bottom-width: 0;
428
 
429
- color: white;
430
- background: #3A79B8;
431
- background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D));
432
- background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D);
433
- background-image: -moz-linear-gradient(top, #3A79B8, #2E629D);
434
- background-image: -ms-linear-gradient(top, #3A79B8, #2E629D);
435
- background-image: -o-linear-gradient(top, #3A79B8, #2E629D);
436
- filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D);
437
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)";
438
- }
439
 
440
- .qtip-tipped .qtip-icon{
441
- border: 2px solid #285589;
442
- background: #285589;
443
- }
444
 
445
- .qtip-tipped .qtip-icon .ui-icon{
446
- background-color: #FBFBFB;
447
- color: #555;
448
- }
449
 
450
 
451
  /**
@@ -476,83 +470,83 @@
476
  background-clip: padding-box;
477
  }
478
 
479
- .qtip-bootstrap .qtip-titlebar{
480
- /** Taken from Bootstrap .popover-title */
481
- padding: 8px 14px;
482
- margin: 0;
483
- font-size: 14px;
484
- font-weight: normal;
485
- line-height: 18px;
486
- background-color: #f7f7f7;
487
- border-bottom: 1px solid #ebebeb;
488
- -webkit-border-radius: 5px 5px 0 0;
489
- -moz-border-radius: 5px 5px 0 0;
490
- border-radius: 5px 5px 0 0;
491
- }
492
-
493
- .qtip-bootstrap .qtip-titlebar .qtip-close{
494
- /**
495
- * Overrides qTip2:
496
- * .qtip-titlebar .qtip-close{
497
- * [...]
498
- * right: 4px;
499
- * top: 50%;
500
- * [...]
501
- * border-style: solid;
502
- * }
503
- */
504
- right: 11px;
505
- top: 45%;
506
- border-style: none;
507
- }
508
-
509
- .qtip-bootstrap .qtip-content{
510
- /** Taken from Bootstrap .popover-content */
511
- padding: 9px 14px;
512
- }
513
-
514
- .qtip-bootstrap .qtip-icon{
515
- /**
516
- * Overrides qTip2:
517
- * .qtip-default .qtip-icon {
518
- * border-color: #CCC;
519
- * background: #F1F1F1;
520
- * color: #777;
521
- * }
522
- */
523
- background: transparent;
524
- }
525
-
526
- .qtip-bootstrap .qtip-icon .ui-icon{
527
- /**
528
- * Overrides qTip2:
529
- * .qtip-icon .ui-icon{
530
- * width: 18px;
531
- * height: 14px;
532
- * }
533
- */
534
- width: auto;
535
- height: auto;
536
-
537
- /* Taken from Bootstrap .close */
538
- float: right;
539
- font-size: 20px;
540
- font-weight: bold;
541
- line-height: 18px;
542
- color: #000000;
543
- text-shadow: 0 1px 0 #ffffff;
544
- opacity: 0.2;
545
- filter: alpha(opacity=20);
546
- }
547
-
548
- .qtip-bootstrap .qtip-icon .ui-icon:hover{
549
- /* Taken from Bootstrap .close:hover */
550
- color: #000000;
551
- text-decoration: none;
552
- cursor: pointer;
553
- opacity: 0.4;
554
- filter: alpha(opacity=40);
555
- }
556
 
557
 
558
  /* IE9 fix - removes all filters */
@@ -563,37 +557,37 @@
563
  }
564
 
565
 
566
-
567
  .qtip .qtip-tip{
568
  margin: 0 auto;
569
  overflow: hidden;
570
  z-index: 10;
571
-
 
 
 
 
 
 
572
  }
573
 
574
- /* Opera bug #357 - Incorrect tip position
575
- https://github.com/Craga89/qTip2/issues/367 */
576
- x:-o-prefocus, .qtip .qtip-tip{
577
- visibility: hidden;
578
- }
 
 
 
 
579
 
580
- .qtip .qtip-tip,
581
- .qtip .qtip-tip .qtip-vml,
582
- .qtip .qtip-tip canvas{
583
- position: absolute;
584
 
585
- color: #123456;
586
- background: transparent;
587
- border: 0 dashed transparent;
588
- }
589
-
590
- .qtip .qtip-tip canvas{ top: 0; left: 0; }
591
 
592
- .qtip .qtip-tip .qtip-vml{
593
- behavior: url(#default#VML);
594
- display: inline-block;
595
- visibility: visible;
596
- }
597
 
598
  #qtip-overlay{
599
  position: fixed;
@@ -601,22 +595,21 @@
601
  width: 100%; height: 100%;
602
  }
603
 
604
- /* Applied to modals with show.modal.blur set to true */
605
- #qtip-overlay.blurs{ cursor: pointer; }
606
 
607
- /* Change opacity of overlay here */
608
- #qtip-overlay div{
609
- position: absolute;
610
- left: 0; top: 0;
611
- width: 100%; height: 100%;
612
-
613
- background-color: black;
614
 
615
- opacity: 0.7;
616
- filter:alpha(opacity=70);
617
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
618
- }
619
 
 
 
 
 
620
 
621
 
622
  .qtipmodal-ie6fix{
1
  /*
2
+ * qTip2 - Pretty powerful tooltips - v2.2.1
3
  * http://qtip2.com
4
  *
5
+ * Copyright (c) 2014
6
+ * Released under the MIT licenses
7
  * http://jquery.org/license
8
  *
9
+ * Date: Sat Sep 6 2014 11:12 GMT+0100+0100
10
  * Plugins: tips modal viewport svg imagemap ie6
11
+ * Styles: core basic css3
12
  */
13
  .qtip{
14
  position: absolute;
18
 
19
  max-width: 280px;
20
  min-width: 50px;
21
+
22
  font-size: 10.5px;
23
  line-height: 12px;
24
 
28
  padding: 0;
29
  }
30
 
31
+ .qtip-content{
32
+ position: relative;
33
+ padding: 5px 9px;
34
+ overflow: hidden;
35
+
36
+ text-align: left;
37
+ word-wrap: break-word;
38
+ }
39
+
40
+ .qtip-titlebar{
41
+ position: relative;
42
+ padding: 5px 35px 5px 10px;
43
+ overflow: hidden;
44
+
45
+ border-width: 0 0 1px;
46
+ font-weight: bold;
47
+ }
48
+
49
+ .qtip-titlebar + .qtip-content{ border-top-width: 0 !important; }
50
+
51
+ /* Default close button class */
52
+ .qtip-close{
53
+ position: absolute;
54
+ right: -9px; top: -9px;
55
+ z-index: 11; /* Overlap .qtip-tip */
56
+
57
+ cursor: pointer;
58
+ outline: medium none;
59
+
60
+ border: 1px solid transparent;
61
+ }
62
+
63
+ .qtip-titlebar .qtip-close{
64
+ right: 4px; top: 50%;
65
+ margin-top: -9px;
66
+ }
67
+
68
+ * html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */
69
+
70
+ .qtip-titlebar .ui-icon,
71
+ .qtip-icon .ui-icon{
72
+ display: block;
73
+ text-indent: -1000em;
74
+ direction: ltr;
75
+ }
76
+
77
+ .qtip-icon, .qtip-icon .ui-icon{
78
+ -moz-border-radius: 3px;
79
+ -webkit-border-radius: 3px;
80
+ border-radius: 3px;
81
+ text-decoration: none;
82
+ }
83
+
84
+ .qtip-icon .ui-icon{
85
+ width: 18px;
86
+ height: 14px;
87
+
88
+ line-height: 14px;
89
+ text-align: center;
90
+ text-indent: 0;
91
+ font: normal bold 10px/13px Tahoma,sans-serif;
92
+
93
+ color: inherit;
94
+ background: transparent none no-repeat -100em -100em;
95
+ }
 
96
 
97
  /* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
98
  .qtip-focus{}
102
 
103
  /* Default tooltip style */
104
  .qtip-default{
105
+ border: 1px solid #F1D031;
 
 
 
106
 
107
  background-color: #FFFFA3;
108
  color: #555;
109
  }
110
 
111
+ .qtip-default .qtip-titlebar{
112
+ background-color: #FFEF93;
113
+ }
114
 
115
+ .qtip-default .qtip-icon{
116
+ border-color: #CCC;
117
+ background: #F1F1F1;
118
+ color: #777;
119
+ }
 
 
 
 
 
120
 
121
+ .qtip-default .qtip-titlebar .qtip-close{
122
+ border-color: #AAA;
123
+ color: #111;
124
+ }
125
 
126
 
127
  /*! Light tooltip style */
131
  color: #454545;
132
  }
133
 
134
+ .qtip-light .qtip-titlebar{
135
+ background-color: #f1f1f1;
136
+ }
137
 
138
 
139
  /*! Dark tooltip style */
143
  color: #f3f3f3;
144
  }
145
 
146
+ .qtip-dark .qtip-titlebar{
147
+ background-color: #404040;
148
+ }
149
 
150
+ .qtip-dark .qtip-icon{
151
+ border-color: #444;
152
+ }
153
 
154
+ .qtip-dark .qtip-titlebar .ui-state-hover{
155
+ border-color: #303030;
156
+ }
157
 
158
 
159
  /*! Cream tooltip style */
163
  color: #A27D35;
164
  }
165
 
166
+ .qtip-cream .qtip-titlebar{
167
+ background-color: #F0DE7D;
168
+ }
169
 
170
+ .qtip-cream .qtip-close .qtip-icon{
171
+ background-position: -82px 0;
172
+ }
173
 
174
 
175
  /*! Red tooltip style */
179
  color: #912323;
180
  }
181
 
182
+ .qtip-red .qtip-titlebar{
183
+ background-color: #F06D65;
184
+ }
185
 
186
+ .qtip-red .qtip-close .qtip-icon{
187
+ background-position: -102px 0;
188
+ }
189
 
190
+ .qtip-red .qtip-icon{
191
+ border-color: #D95252;
192
+ }
193
 
194
+ .qtip-red .qtip-titlebar .ui-state-hover{
195
+ border-color: #D95252;
196
+ }
197
 
198
 
199
  /*! Green tooltip style */
203
  color: #3F6219;
204
  }
205
 
206
+ .qtip-green .qtip-titlebar{
207
+ background-color: #B0DE78;
208
+ }
209
 
210
+ .qtip-green .qtip-close .qtip-icon{
211
+ background-position: -42px 0;
212
+ }
213
 
214
 
215
  /*! Blue tooltip style */
219
  color: #5E99BD;
220
  }
221
 
222
+ .qtip-blue .qtip-titlebar{
223
+ background-color: #D0E9F5;
224
+ }
 
 
 
 
225
 
226
+ .qtip-blue .qtip-close .qtip-icon{
227
+ background-position: -2px 0;
228
+ }
229
 
230
 
231
  .qtip-shadow{
254
  -moz-border-radius: 2px;
255
  -webkit-border-radius: 2px;
256
  border-radius: 2px;
257
+
258
  -webkit-box-shadow: 0 0 3px #333;
259
  -moz-box-shadow: 0 0 3px #333;
260
  box-shadow: 0 0 3px #333;
261
 
262
  color: white;
263
+ border: 0 solid transparent;
264
 
265
  background: #4A4A4A;
266
  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));
270
  background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%);
271
  }
272
 
273
+ .qtip-youtube .qtip-titlebar{
274
+ background-color: #4A4A4A;
275
+ background-color: rgba(0,0,0,0);
276
+ }
277
+
278
+ .qtip-youtube .qtip-content{
279
+ padding: .75em;
280
+ font: 12px arial,sans-serif;
281
+
282
+ filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);
283
+ -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);";
284
+ }
285
 
286
+ .qtip-youtube .qtip-icon{
287
+ border-color: #222;
288
+ }
289
 
290
+ .qtip-youtube .qtip-titlebar .ui-state-hover{
291
+ border-color: #303030;
292
+ }
293
 
294
 
295
  /* jQuery TOOLS Tooltip style */
314
  box-shadow: 0 0 12px #333;
315
  }
316
 
317
+ /* IE Specific */
318
+ .qtip-jtools .qtip-titlebar{
319
+ background-color: transparent;
320
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A);
321
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)";
322
+ }
323
+ .qtip-jtools .qtip-content{
324
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323);
325
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)";
326
+ }
327
 
328
+ .qtip-jtools .qtip-titlebar,
329
+ .qtip-jtools .qtip-content{
330
+ background: transparent;
331
+ color: white;
332
+ border: 0 dashed transparent;
333
+ }
334
 
335
+ .qtip-jtools .qtip-icon{
336
+ border-color: #555;
337
+ }
338
 
339
+ .qtip-jtools .qtip-titlebar .ui-state-hover{
340
+ border-color: #333;
341
+ }
342
 
343
 
344
  /* Cluetip style */
352
  border: 0 dashed transparent;
353
  }
354
 
355
+ .qtip-cluetip .qtip-titlebar{
356
+ background-color: #87876A;
357
+ color: white;
358
+ border: 0 dashed transparent;
359
+ }
360
+
361
+ .qtip-cluetip .qtip-icon{
362
+ border-color: #808064;
363
+ }
364
+
365
+ .qtip-cluetip .qtip-titlebar .ui-state-hover{
366
+ border-color: #696952;
367
+ color: #696952;
368
+ }
369
 
370
 
371
  /* Tipsy style */
383
  text-shadow: 0 1px black;
384
  }
385
 
386
+ .qtip-tipsy .qtip-titlebar{
387
+ padding: 6px 35px 0 10px;
388
+ background-color: transparent;
389
+ }
390
 
391
+ .qtip-tipsy .qtip-content{
392
+ padding: 6px 10px;
393
+ }
394
+
395
+ .qtip-tipsy .qtip-icon{
396
+ border-color: #222;
397
+ text-shadow: none;
398
+ }
399
 
400
+ .qtip-tipsy .qtip-titlebar .ui-state-hover{
401
+ border-color: #303030;
402
+ }
403
 
404
 
405
  /* Tipped style */
417
  font-family: serif;
418
  }
419
 
420
+ .qtip-tipped .qtip-titlebar{
421
+ border-bottom-width: 0;
422
 
423
+ color: white;
424
+ background: #3A79B8;
425
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D));
426
+ background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D);
427
+ background-image: -moz-linear-gradient(top, #3A79B8, #2E629D);
428
+ background-image: -ms-linear-gradient(top, #3A79B8, #2E629D);
429
+ background-image: -o-linear-gradient(top, #3A79B8, #2E629D);
430
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D);
431
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)";
432
+ }
433
 
434
+ .qtip-tipped .qtip-icon{
435
+ border: 2px solid #285589;
436
+ background: #285589;
437
+ }
438
 
439
+ .qtip-tipped .qtip-icon .ui-icon{
440
+ background-color: #FBFBFB;
441
+ color: #555;
442
+ }
443
 
444
 
445
  /**
470
  background-clip: padding-box;
471
  }
472
 
473
+ .qtip-bootstrap .qtip-titlebar{
474
+ /** Taken from Bootstrap .popover-title */
475
+ padding: 8px 14px;
476
+ margin: 0;
477
+ font-size: 14px;
478
+ font-weight: normal;
479
+ line-height: 18px;
480
+ background-color: #f7f7f7;
481
+ border-bottom: 1px solid #ebebeb;
482
+ -webkit-border-radius: 5px 5px 0 0;
483
+ -moz-border-radius: 5px 5px 0 0;
484
+ border-radius: 5px 5px 0 0;
485
+ }
486
+
487
+ .qtip-bootstrap .qtip-titlebar .qtip-close{
488
+ /**
489
+ * Overrides qTip2:
490
+ * .qtip-titlebar .qtip-close{
491
+ * [...]
492
+ * right: 4px;
493
+ * top: 50%;
494
+ * [...]
495
+ * border-style: solid;
496
+ * }
497
+ */
498
+ right: 11px;
499
+ top: 45%;
500
+ border-style: none;
501
+ }
502
+
503
+ .qtip-bootstrap .qtip-content{
504
+ /** Taken from Bootstrap .popover-content */
505
+ padding: 9px 14px;
506
+ }
507
+
508
+ .qtip-bootstrap .qtip-icon{
509
+ /**
510
+ * Overrides qTip2:
511
+ * .qtip-default .qtip-icon {
512
+ * border-color: #CCC;
513
+ * background: #F1F1F1;
514
+ * color: #777;
515
+ * }
516
+ */
517
+ background: transparent;
518
+ }
519
+
520
+ .qtip-bootstrap .qtip-icon .ui-icon{
521
+ /**
522
+ * Overrides qTip2:
523
+ * .qtip-icon .ui-icon{
524
+ * width: 18px;
525
+ * height: 14px;
526
+ * }
527
+ */
528
+ width: auto;
529
+ height: auto;
530
+
531
+ /* Taken from Bootstrap .close */
532
+ float: right;
533
+ font-size: 20px;
534
+ font-weight: bold;
535
+ line-height: 18px;
536
+ color: #000000;
537
+ text-shadow: 0 1px 0 #ffffff;
538
+ opacity: 0.2;
539
+ filter: alpha(opacity=20);
540
+ }
541
+
542
+ .qtip-bootstrap .qtip-icon .ui-icon:hover{
543
+ /* Taken from Bootstrap .close:hover */
544
+ color: #000000;
545
+ text-decoration: none;
546
+ cursor: pointer;
547
+ opacity: 0.4;
548
+ filter: alpha(opacity=40);
549
+ }
550
 
551
 
552
  /* IE9 fix - removes all filters */
557
  }
558
 
559
 
 
560
  .qtip .qtip-tip{
561
  margin: 0 auto;
562
  overflow: hidden;
563
  z-index: 10;
564
+
565
+ }
566
+
567
+ /* Opera bug #357 - Incorrect tip position
568
+ https://github.com/Craga89/qTip2/issues/367 */
569
+ x:-o-prefocus, .qtip .qtip-tip{
570
+ visibility: hidden;
571
  }
572
 
573
+ .qtip .qtip-tip,
574
+ .qtip .qtip-tip .qtip-vml,
575
+ .qtip .qtip-tip canvas{
576
+ position: absolute;
577
+
578
+ color: #123456;
579
+ background: transparent;
580
+ border: 0 dashed transparent;
581
+ }
582
 
583
+ .qtip .qtip-tip canvas{ top: 0; left: 0; }
 
 
 
584
 
585
+ .qtip .qtip-tip .qtip-vml{
586
+ behavior: url(#default#VML);
587
+ display: inline-block;
588
+ visibility: visible;
589
+ }
 
590
 
 
 
 
 
 
591
 
592
  #qtip-overlay{
593
  position: fixed;
595
  width: 100%; height: 100%;
596
  }
597
 
598
+ /* Applied to modals with show.modal.blur set to true */
599
+ #qtip-overlay.blurs{ cursor: pointer; }
600
 
601
+ /* Change opacity of overlay here */
602
+ #qtip-overlay div{
603
+ position: absolute;
604
+ left: 0; top: 0;
605
+ width: 100%; height: 100%;
 
 
606
 
607
+ background-color: black;
 
 
 
608
 
609
+ opacity: 0.7;
610
+ filter:alpha(opacity=70);
611
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
612
+ }
613
 
614
 
615
  .qtipmodal-ie6fix{
ReduxCore/assets/css/vendor/qtip/jquery.qtip.min.css CHANGED
@@ -1,2 +1,3 @@
 
1
 
2
- .qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:bold}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;cursor:pointer;outline:medium none;border-width:1px;border-style:solid;border-color:transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-titlebar .ui-icon,.qtip-icon .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:normal bold 10px/13px Tahoma,sans-serif;color:inherit;background:transparent none no-repeat -100em -100em}.qtip-default{border-width:1px;border-style:solid;border-color:black;background-color:#ffffa3;color:#555}.qtip-default .qtip-titlebar{background-color:#ffef93}.qtip-default .qtip-icon{border-color:#CCC;background:#f1f1f1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}/*! Light tooltip style */.qtip-light{background-color:white;border-color:#e2e2e2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}/*! Dark tooltip style */.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}/*! Cream tooltip style */.qtip-cream{background-color:#fbf7aa;border-color:#f9e98e;color:#a27d35}.qtip-cream .qtip-titlebar{background-color:#f0de7d}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}/*! Red tooltip style */.qtip-red{background-color:#f78b83;border-color:#d95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#f06d65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon{border-color:#d95252}.qtip-red .qtip-titlebar .ui-state-hover{border-color:#d95252}/*! Green tooltip style */.qtip-green{background-color:#caed9e;border-color:#90d93f;color:#3f6219}.qtip-green .qtip-titlebar{background-color:#b0de78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}/*! Blue tooltip style */.qtip-blue{background-color:#e5f6fe;border-color:#add9ed;color:#5e99bd}.qtip-blue .qtip-titlebar{background-color:#d0e9f5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,0.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,0.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,0.15)}.qtip-rounded,.qtip-tipsy,.qtip-bootstrap{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:white;border-width:0;background:#4a4a4a;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4a4a4a),color-stop(100%,black));background-image:-webkit-linear-gradient(top,#4a4a4a 0,black 100%);background-image:-moz-linear-gradient(top,#4a4a4a 0,black 100%);background-image:-ms-linear-gradient(top,#4a4a4a 0,black 100%);background-image:-o-linear-gradient(top,#4a4a4a 0,black 100%)}.qtip-youtube .qtip-titlebar{background-color:#4a4a4a;background-color:rgba(0,0,0,0)}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,0.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"}.qtip-jtools .qtip-titlebar,.qtip-jtools .qtip-content{background:transparent;color:white;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,0.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,0.4);box-shadow:4px 4px 5px rgba(0,0,0,0.4);background-color:#d9d9c2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876a;color:white;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:black;background:rgba(0,0,0,.87);color:white;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:bold;line-height:16px;text-shadow:0 1px black}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959fa9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#f9f9f9;color:#454545;font-weight:normal;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:white;background:#3a79b8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3a79b8),to(#2e629d));background-image:-webkit-linear-gradient(top,#3a79b8,#2e629d);background-image:-moz-linear-gradient(top,#3a79b8,#2e629d);background-image:-ms-linear-gradient(top,#3a79b8,#2e629d);background-image:-o-linear-gradient(top,#3a79b8,#2e629d);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#fbfbfb;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-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}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:transparent}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}x:-o-prefocus,.qtip .qtip-tip{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:transparent;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:black;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}
1
+ /* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
2
 
3
+ .qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;z-index:11;cursor:pointer;outline:0;border:1px solid transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-icon .ui-icon,.qtip-titlebar .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:400 bold 10px/13px Tahoma,sans-serif;color:inherit;background:-100em -100em no-repeat}.qtip-default{border:1px solid #F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon,.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-bootstrap,.qtip-rounded,.qtip-tipsy{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border:0 solid transparent;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,#000));background-image:-webkit-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,#000 100%)}.qtip-youtube .qtip-titlebar{background-color:transparent}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"}.qtip-jtools .qtip-content,.qtip-jtools .qtip-titlebar{background:0 0;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px #000}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-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);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:0 0}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,x:-o-prefocus{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:0 0;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}
ReduxCore/assets/js/redux.js CHANGED
@@ -62,9 +62,11 @@
62
  if ( redux.fields.hasOwnProperty( "editor" ) ) {
63
  $.each(
64
  redux.fields.editor, function( $key, $index ) {
65
- var editor = tinyMCE.get( $key );
66
- if ( editor ) {
67
- editor.save();
 
 
68
  }
69
  }
70
  );
62
  if ( redux.fields.hasOwnProperty( "editor" ) ) {
63
  $.each(
64
  redux.fields.editor, function( $key, $index ) {
65
+ if (typeof(tinyMCE) !== 'undefined') {
66
+ var editor = tinyMCE.get( $key );
67
+ if ( editor ) {
68
+ editor.save();
69
+ }
70
  }
71
  }
72
  );
ReduxCore/assets/js/redux.min.js CHANGED
@@ -1,2 +1,2 @@
1
- function redux_change(a){jQuery("body").trigger("check_dependencies",a),a.hasClass("compiler")&&jQuery("#redux-compiler-hook").val(1);var b=jQuery(a).parents(".redux-container:first"),c=jQuery(a).closest(".redux-group-tab").attr("id"),d=c.split("_");d=d[0];var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".redux-group-tab-link-li:first"),f=jQuery("#"+c+"_li").parents(".hasSubSections:first");if(jQuery(a).parents("fieldset.redux-field:first").hasClass("redux-field-error")){jQuery(a).parents("fieldset.redux-field:first").removeClass("redux-field-error"),jQuery(a).parent().find(".redux-th-error").slideUp();var g=parseInt(b.find(".redux-field-errors span").text())-1;if(0>=g)jQuery("#"+c+"_li .redux-menu-error").fadeOut("fast").remove(),jQuery("#"+c+"_li .redux-group-tab-link-a").removeClass("hasError"),jQuery("#"+c+"_li").parents(".inside:first").find(".redux-field-errors").slideUp(),jQuery(a).parents(".redux-container:first").find(".redux-field-errors").slideUp(),jQuery("#redux_metaboxes_errors").slideUp();else{var h=parseInt(e.find(".redux-menu-error:first").text())-1;0>=h?e.find(".redux-menu-error:first").fadeOut().remove():e.find(".redux-menu-error:first").text(h),b.find(".redux-field-errors span").text(g)}0!==f.length&&0===f.find(".redux-menu-error").length&&f.find(".hasError").removeClass("hasError")}if(jQuery(a).parents("fieldset.redux-field:first").hasClass("redux-field-warning")){jQuery(a).parents("fieldset.redux-field:first").removeClass("redux-field-warning"),jQuery(a).parent().find(".redux-th-warning").slideUp();var i=parseInt(b.find(".redux-field-warnings span").text())-1;if(0>=i)jQuery("#"+c+"_li .redux-menu-warning").fadeOut("fast").remove(),jQuery("#"+c+"_li .redux-group-tab-link-a").removeClass("hasWarning"),jQuery("#"+c+"_li").parents(".inside:first").find(".redux-field-warnings").slideUp(),jQuery(a).parents(".redux-container:first").find(".redux-field-warnings").slideUp(),jQuery("#redux_metaboxes_warnings").slideUp();else{var j=parseInt(e.find(".redux-menu-warning:first").text())-1;0>=j?e.find(".redux-menu-warning:first").fadeOut().remove():e.find(".redux-menu-warning:first").text(j),b.find(".redux-field-warning span").text(i)}0!==f.length&&0===f.find(".redux-menu-warning").length&&f.find(".hasWarning").removeClass("hasWarning")}return b.find(".saved_notice:visible").length>0?void 0:redux.customizer?void redux.customizer.save(a,b,c):void(redux.args.disable_save_warn||(b.find(".redux-save-warn").slideDown(),window.onbeforeunload=confirmOnPageExit))}function colorValidate(a){var b=jQuery(a).val(),c=colorNameToHex(b);return c!==b.replace("#","")?c:b}function colorNameToHex(a){var b=a.replace(/^\s\s*/,"").replace(/\s\s*$/,"").replace("#",""),c={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",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",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",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",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",redux:"#01a3e3",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};return"undefined"!==c[b.toLowerCase()]?c[b.toLowerCase()]:a}!function(a){"function"==typeof define&&define.amd?jQueryCookie.define(["jquery"],a):a(jQuery)}(function(a){function b(a){return a}function c(a){return decodeURIComponent(a.replace(e," "))}function d(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return f.json?JSON.parse(a):a}catch(b){}}var e=/\+/g,f=a.cookie=function(e,g,h){if(void 0!==g){if(h=a.extend({},f.defaults,h),"number"==typeof h.expires){var i=h.expires,j=h.expires=new Date;j.setDate(j.getDate()+i)}return g=f.json?JSON.stringify(g):String(g),document.cookie=[f.raw?e:encodeURIComponent(e),"=",f.raw?g:encodeURIComponent(g),h.expires?"; expires="+h.expires.toUTCString():"",h.path?"; path="+h.path:"",h.domain?"; domain="+h.domain:"",h.secure?"; secure":""].join("")}for(var k=f.raw?b:c,l=document.cookie.split("; "),m=e?void 0:{},n=0,o=l.length;o>n;n++){var p=l[n].split("="),q=k(p.shift()),r=k(p.join("="));if(e&&e===q){m=d(r);break}e||(m[q]=d(r))}return m};f.defaults={},a.removeCookie=function(b,c){return void 0!==a.cookie(b)?(a.cookie(b,"",a.extend({},c,{expires:-1})),!0):!1}}),function(a){a.fn.typeWatch=function(b){function c(b,c){var d=a(b.el).val();(d.length>=f.captureLength&&d.toUpperCase()!=b.text||c&&d.length>=f.captureLength)&&(b.text=d.toUpperCase(),b.cb.call(b.el,d))}function d(b){var d=b.type.toUpperCase();if(a.inArray(d,f.inputTypes)>=0){var e={timer:null,text:a(b).val().toUpperCase(),cb:f.callback,el:b,wait:f.wait};f.highlight&&a(b).focus(function(){this.select()});var g=function(b){var d=e.wait,g=!1,h=this.type.toUpperCase();"undefined"!=typeof b.keyCode&&13==b.keyCode&&"TEXTAREA"!=h&&a.inArray(h,f.inputTypes)>=0&&(d=1,g=!0);var i=function(){c(e,g)};clearTimeout(e.timer),e.timer=setTimeout(i,d)};a(b).on("keydown paste cut input",g)}}var e=["TEXT","TEXTAREA","PASSWORD","TEL","SEARCH","URL","EMAIL","DATETIME","DATE","MONTH","WEEK","TIME","DATETIME-LOCAL","NUMBER","RANGE"],f=a.extend({wait:750,callback:function(){},highlight:!0,captureLength:2,inputTypes:e},b);return this.each(function(){d(this)})}}(jQuery),function(a){a.fn.serializeForm=function(){if(this.length<1)return!1;var b={},c=b,d=':input[type!="checkbox"][type!="radio"], input:checked',e=function(){if(!this.disabled){var d=this.name.replace(/\[([^\]]+)?\]/g,",$1").split(","),e=d.length-1,f=a(this);if(d[0]){for(var g=0;e>g;g++)c=c[d[g]]=c[d[g]]||(""===d[g+1]||"0"===d[g+1]?[]:{});void 0!==c.length?c.push(f.val()):c[d[e]]=f.val(),c=b}}};return this.filter(d).each(e),this.find(d).each(e),b}}(jQuery),function(a){function b(){var a="!@#$%^&*()+=[]\\';,/{}|\":<>?~`.-_";return a+=" "}function c(){var a="¬€£¦";return a}function d(b,c,d){b.each(function(){var b=a(this);b.bind("keyup change paste",function(a){var e="";a.originalEvent&&a.originalEvent.clipboardData&&a.originalEvent.clipboardData.getData&&(e=a.originalEvent.clipboardData.getData("text/plain")),setTimeout(function(){h(b,c,d,e)},0)}),b.bind("keypress",function(a){var e=a.charCode?a.charCode:a.which;if(!(g(e)||a.ctrlKey||a.metaKey)){var f=String.fromCharCode(e),h=b.selection(),i=h.start,j=h.end,k=b.val(),l=k.substring(0,i)+f+k.substring(j),m=c(l,d);m!=l&&a.preventDefault()}})})}function e(b,c){var d=parseFloat(a(b).val()),e=a(b);return isNaN(d)?void e.val(""):(f(c.min)&&d<c.min&&e.val(""),void(f(c.max)&&d>c.max&&e.val("")))}function f(a){return!isNaN(a)}function g(a){return a>=32?!1:10==a?!1:13==a?!1:!0}function h(a,b,c,d){var e=a.val();""==e&&d.length>0&&(e=d);var f=b(e,c);if(e!=f){var g=a.alphanum_caret();a.val(f),e.length==f.length+1?a.alphanum_caret(g-1):a.alphanum_caret(g)}}function i(b,c){"undefined"==typeof c&&(c=D);var d,e={};return d="string"==typeof b?F[b]:"undefined"==typeof b?{}:b,a.extend(e,c,d),"undefined"==typeof e.blacklist&&(e.blacklistSet=x(e.allow,e.disallow)),e}function j(b){var c,d={};return c="string"==typeof b?G[b]:"undefined"==typeof b?{}:b,a.extend(d,E,c),d}function k(a,b,c){return c.maxLength&&a.length>=c.maxLength?!1:c.allow.indexOf(b)>=0?!0:c.allowSpace&&" "==b?!0:c.blacklistSet.contains(b)?!1:!c.allowNumeric&&K[b]?!1:!c.allowUpper&&u(b)?!1:!c.allowLower&&v(b)?!1:!c.allowCaseless&&w(b)?!1:!c.allowLatin&&L.contains(b)?!1:c.allowOtherCharSets?!0:K[b]||L.contains(b)?!0:!1}function l(a,b,c){if(K[b])return n(a,c)?!1:p(a,c)?!1:o(a,c)?!1:q(a+b,c)?!1:r(a+b,c)?!1:!0;if(c.allowPlus&&"+"==b&&""==a)return!0;if(c.allowMinus&&"-"==b&&""==a)return!0;if(b==I&&c.allowThouSep&&A(a,b))return!0;if(b==J){if(a.indexOf(J)>=0)return!1;if(c.allowDecSep)return!0}return!1}function m(a){return a+="",a.replace(/[^0-9]/g,"").length}function n(a,b){var c=b.maxDigits;if(""==c||isNaN(c))return!1;var d=m(a);return d>=c?!0:!1}function o(a,b){var c=b.maxDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(-1==d)return!1;var e=a.substring(d),f=m(e);return f>=c?!0:!1}function p(a,b){var c=b.maxPreDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(d>=0)return!1;var e=m(a);return e>=c?!0:!1}function q(a,b){if(!b.max||b.max<0)return!1;var c=parseFloat(a);return c>b.max?!0:!1}function r(a,b){if(!b.min||b.min>0)return!1;var c=parseFloat(a);return c<b.min?!0:!1}function s(a,b){if("string"!=typeof a)return a;var c,d=a.split(""),e=[],f=0;for(f=0;f<d.length;f++){c=d[f];var g=e.join("");k(g,c,b)&&e.push(c)}return e.join("")}function t(a,b){if("string"!=typeof a)return a;var c,d=a.split(""),e=[],f=0;for(f=0;f<d.length;f++){c=d[f];var g=e.join("");l(g,c,b)&&e.push(c)}return e.join("")}function u(a){var b=a.toUpperCase(),c=a.toLowerCase();return a==b&&b!=c?!0:!1}function v(a){var b=a.toUpperCase(),c=a.toLowerCase();return a==c&&b!=c?!0:!1}function w(a){return a.toUpperCase()==a.toLowerCase()?!0:!1}function x(a,b){var c=new B(H+b),d=new B(a),e=c.subtract(d);return e}function y(){var a,b="0123456789".split(""),c={},d=0;for(d=0;d<b.length;d++)a=b[d],c[a]=!0;return c}function z(){var a="abcdefghijklmnopqrstuvwxyz",b=a.toUpperCase(),c=new B(a+b);return c}function A(a,b){if(0==a.length)return!1;var c=a.indexOf(J);if(c>=0)return!1;var d=a.indexOf(I);if(0>d)return!0;var e=a.lastIndexOf(I),f=a.length-e-1;if(3>f)return!1;var g=m(a.substring(d));return g%3>0?!1:!0}function B(a){"string"==typeof a?this.map=C(a):this.map={}}function C(a){var b,c={},d=a.split(""),e=0;for(e=0;e<d.length;e++)b=d[e],c[b]=!0;return c}a.fn.alphanum=function(a){var b=i(a),c=this;return d(c,s,b),this},a.fn.alpha=function(a){var b=i("alpha"),c=i(a,b),e=this;return d(e,s,c),this},a.fn.numeric=function(a){var b=j(a),c=this;return d(c,t,b),c.blur(function(){e(this,a)}),this};var D={allow:"",disallow:"",allowSpace:!0,allowNumeric:!0,allowUpper:!0,allowLower:!0,allowCaseless:!0,allowLatin:!0,allowOtherCharSets:!0,maxLength:NaN},E={allowPlus:!1,allowMinus:!0,allowThouSep:!0,allowDecSep:!0,allowLeadingSpaces:!1,maxDigits:NaN,maxDecimalPlaces:NaN,maxPreDecimalPlaces:NaN,max:NaN,min:NaN},F={alpha:{allowNumeric:!1},upper:{allowNumeric:!1,allowUpper:!0,allowLower:!1,allowCaseless:!0},lower:{allowNumeric:!1,allowUpper:!1,allowLower:!0,allowCaseless:!0}},G={integer:{allowPlus:!1,allowMinus:!0,allowThouSep:!1,allowDecSep:!1},positiveInteger:{allowPlus:!1,allowMinus:!1,allowThouSep:!1,allowDecSep:!1}},H=b()+c(),I=",",J=".",K=y(),L=z();B.prototype.add=function(a){var b=this.clone();for(var c in a.map)b.map[c]=!0;return b},B.prototype.subtract=function(a){var b=this.clone();for(var c in a.map)delete b.map[c];return b},B.prototype.contains=function(a){return this.map[a]?!0:!1},B.prototype.clone=function(){var a=new B;for(var b in this.map)a.map[b]=!0;return a},a.fn.alphanum.backdoorAlphaNum=function(a,b){var c=i(b);return s(a,c)},a.fn.alphanum.backdoorNumeric=function(a,b){var c=j(b);return t(a,c)},a.fn.alphanum.setNumericSeparators=function(a){1==a.thousandsSeparator.length&&1==a.decimalSeparator.length&&(I=a.thousandsSeparator,J=a.decimalSeparator)}}(jQuery),function(a){function b(a,b){if(a.createTextRange){var c=a.createTextRange();c.move("character",b),c.select()}else null!=a.selectionStart&&(a.focus(),a.setSelectionRange(b,b))}function c(a){if("selection"in document){var b=a.createTextRange();try{b.setEndPoint("EndToStart",document.selection.createRange())}catch(c){return 0}return b.text.length}return null!=a.selectionStart?a.selectionStart:void 0}a.fn.alphanum_caret=function(d,e){return"undefined"==typeof d?c(this.get(0)):this.queue(function(c){if(isNaN(d)){var f=a(this).val().indexOf(d);e===!0?f+=d.length:"undefined"!=typeof e&&(f+=e),b(this,f)}else b(this,d);c()})}}(jQuery),function(a){var b=function(a){return a?a.ownerDocument.defaultView||a.ownerDocument.parentWindow:window},c=function(b,c){var d=a.Range.current(b).clone(),e=a.Range(b).select(b);return d.overlaps(e)?(d.compare("START_TO_START",e)<1?(startPos=0,d.move("START_TO_START",e)):(fromElementToCurrent=e.clone(),fromElementToCurrent.move("END_TO_START",d),startPos=fromElementToCurrent.toString().length),d.compare("END_TO_END",e)>=0?endPos=e.toString().length:endPos=startPos+d.toString().length,{start:startPos,end:endPos}):null},d=function(d){var e=b(d);if(void 0!==d.selectionStart)return document.activeElement&&document.activeElement!=d&&d.selectionStart==d.selectionEnd&&0==d.selectionStart?{start:d.value.length,end:d.value.length}:{start:d.selectionStart,end:d.selectionEnd};if(e.getSelection)return c(d,e);try{if("input"==d.nodeName.toLowerCase()){var f=b(d).document.selection.createRange(),g=d.createTextRange();g.setEndPoint("EndToStart",f);var h=g.text.length;return{start:h,end:h+f.text.length}}var i=c(d,e);if(!i)return i;var j=a.Range.current().clone(),k=j.clone().collapse().range,l=j.clone().collapse(!1).range;return k.moveStart("character",-1),l.moveStart("character",-1),0!=i.startPos&&""==k.text&&(i.startPos+=2),0!=i.endPos&&""==l.text&&(i.endPos+=2),i}catch(m){return{start:d.value.length,end:d.value.length}}},e=function(a,c,d){var e=b(a);if(a.setSelectionRange)void 0===d?(a.focus(),a.setSelectionRange(c,c)):(a.select(),a.selectionStart=c,a.selectionEnd=d);else if(a.createTextRange){var f=a.createTextRange();f.moveStart("character",c),d=d||c,f.moveEnd("character",d-a.value.length),f.select()}else if(e.getSelection){var h=e.document,i=e.getSelection(),j=h.createRange(),k=[c,void 0!==d?d:c];g([a],k),j.setStart(k[0].el,k[0].count),j.setEnd(k[1].el,k[1].count),i.removeAllRanges(),i.addRange(j)}else if(e.document.body.createTextRange){var j=document.body.createTextRange();j.moveToElementText(a),j.collapse(),j.moveStart("character",c),j.moveEnd("character",void 0!==d?d:c),j.select()}},f=function(a,b,c,d){"number"==typeof c[0]&&c[0]<b&&(c[0]={el:d,count:c[0]-a}),"number"==typeof c[1]&&c[1]<=b&&(c[1]={el:d,count:c[1]-a})},g=function(a,b,c){var d,e;c=c||0;for(var h=0;a[h];h++)d=a[h],3===d.nodeType||4===d.nodeType?(e=c,c+=d.nodeValue.length,f(e,c,b,d)):8!==d.nodeType&&(c=g(d.childNodes,b,c));return c};jQuery.fn.selection=function(a,b){return void 0!==a?this.each(function(){e(this,a,b)}):d(this[0])},a.fn.selection.getCharElement=g}(jQuery),function(a){"use strict";a.redux=a.redux||{},a(document).ready(function(){a.fn.isOnScreen=function(){if(window){var b=a(window),c={top:b.scrollTop()};c.right=c.left+b.width(),c.bottom=c.top+b.height();var d=this.offset();return d.right=d.left+this.outerWidth(),d.bottom=d.top+this.outerHeight(),!(c.right<d.left||c.left>d.right||c.bottom<d.top||c.top>d.bottom)}},a.redux.hideFields(),a.redux.checkRequired(),a.redux.initEvents(),a.redux.initQtip(),a.redux.tabCheck(),a.redux.notices(),a.redux.tabControl()}),a.redux.ajax_save=function(b){var c=a(document.getElementById("redux_ajax_overlay"));c.fadeIn(),jQuery(".redux-action_bar .spinner").addClass("is-active"),jQuery(".redux-action_bar input").attr("disabled","disabled");var d=jQuery(document.getElementById("redux_notification_bar"));d.slideUp(),jQuery(".redux-save-warn").slideUp(),jQuery(".redux_ajax_save_error").slideUp("medium",function(){jQuery(this).remove()});var e=jQuery(document.getElementById("redux-form-wrapper"));redux.fields.hasOwnProperty("editor")&&a.each(redux.fields.editor,function(a,b){var c=tinyMCE.get(a);c&&c.save()});var f=e.serialize();e.find("input[type=checkbox]").each(function(){if("undefined"!=typeof a(this).attr("name")){var b=a(this).is(":checked")?a(this).val():"0";f+="&"+a(this).attr("name")+"="+b}}),"redux_save"!=b.attr("name")&&(f+="&"+b.attr("name")+"="+b.val());var g=e.attr("data-nonce");return jQuery.ajax({type:"post",dataType:"json",url:ajaxurl,data:{action:redux.args.opt_name+"_ajax_save",nonce:g,opt_name:redux.args.opt_name,data:f},error:function(a){window.console||(console={}),console.log=console.log||function(a,b){},console.log(redux.ajax.console),console.log(a.responseText),jQuery(".redux-action_bar input").removeAttr("disabled"),c.fadeOut("fast"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),alert(redux.ajax.alert)},success:function(b){if(b.action&&"reload"==b.action)location.reload(!0);else if("success"==b.status){jQuery(".redux-action_bar input").removeAttr("disabled"),c.fadeOut("fast"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),redux.options=b.options,redux.errors=b.errors,redux.warnings=b.warnings,d.html(b.notification_bar).slideDown("fast"),(null!==b.errors||null!==b.warnings)&&a.redux.notices();var e=a(document.getElementById("redux_notification_bar")).find(".saved_notice");e.slideDown(),e.delay(4e3).slideUp()}else jQuery(".redux-action_bar input").removeAttr("disabled"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),c.fadeOut("fast"),jQuery(".wrap h2:first").parent().append('<div class="error redux_ajax_save_error" style="display:none;"><p>'+b.status+"</p></div>"),jQuery(".redux_ajax_save_error").slideDown(),jQuery("html, body").animate({scrollTop:0},"slow")}}),!1},a.redux.initEvents=function(){a(".redux-presets-bar").on("click",function(){window.onbeforeunload=null}),a("#toplevel_page_"+redux.args.slug+" .wp-submenu a, #wp-admin-bar-"+redux.args.slug+" a.ab-item").click(function(b){if((a("#toplevel_page_"+redux.args.slug).hasClass("wp-menu-open")||a(this).hasClass("ab-item"))&&!a(this).parents("ul.ab-submenu:first").hasClass("ab-sub-secondary")&&a(this).attr("href").toLowerCase().indexOf(redux.args.slug+"&tab=")>=0){b.preventDefault();var c=a(this).attr("href").split("&tab=");return a("#"+c[1]+"_section_group_li_a").click(),a(this).parents("ul:first").find(".current").removeClass("current"),a(this).addClass("current"),a(this).parent().addClass("current"),!1}}),a(".redux-action_bar input").on("click",function(b){if(a(this).attr("name")==redux.args.opt_name+"[defaults]"){if(!confirm(redux.args.reset_confirm))return!1}else if(a(this).attr("name")==redux.args.opt_name+"[defaults-section]"&&!confirm(redux.args.reset_section_confirm))return!1;window.onbeforeunload=null,redux.args.ajax_save===!0&&(a.redux.ajax_save(a(this)),b.preventDefault())}),a(".expand_options").click(function(b){b.preventDefault();var c=a(".redux-container");if(a(c).hasClass("fully-expanded")){a(c).removeClass("fully-expanded");var d=a.cookie("redux_current_tab");a(".redux-container:first").find("#"+d+"_section_group").fadeIn(200,function(){0!==a(".redux-container:first").find("#redux-footer").length&&a.redux.stickyInfo(),a.redux.initFields()})}return a.redux.expandOptions(a(this).parents(".redux-container:first")),!1}),a(".saved_notice").is(":visible")&&a(".saved_notice").slideDown(),a(document.body).on("change",".redux-field input, .redux-field textarea, .redux-field select",function(){a(this).hasClass("noUpdate")||redux_change(a(this))});var b=a("#redux-footer").height();a("#redux-sticky-padder").css({height:b}),a("#redux-footer-sticky").removeClass("hide"),0!==a("#redux-footer").length&&(a(window).scroll(function(){a.redux.stickyInfo()}),a(window).resize(function(){a.redux.stickyInfo()})),a(".saved_notice").delay(4e3).slideUp()},a.redux.hideFields=function(){a("label[for='redux_hide_field']").each(function(b,c){var d=a(this).parent().parent();a(d).addClass("hidden")})},a.redux.checkRequired=function(){a.redux.required(),a("body").on("change",".redux-main select, .redux-main radio, .redux-main input[type=checkbox], .redux-main input[type=hidden]",function(b){a.redux.check_dependencies(this)}),a("body").on("check_dependencies",function(b,c){a.redux.check_dependencies(c)}),a("td > fieldset:empty,td > div:empty").parent().parent().hide()},a.redux.initQtip=function(){if(a().qtip){var b="",c=redux.args.hints.tip_style.shadow;c===!0&&(b="qtip-shadow");var d="",e=redux.args.hints.tip_style.color;""!==e&&(d="qtip-"+e);var f="",g=redux.args.hints.tip_style.rounded;g===!0&&(f="qtip-rounded");var h="",i=redux.args.hints.tip_style.style;""!==i&&(h="qtip-"+i);var j=b+","+d+","+f+","+h+",redux-qtip";j=j.replace(/,/g," ");var k=redux.args.hints.tip_position.my,l=redux.args.hints.tip_position.at;k=a.redux.verifyPos(k.toLowerCase(),!0),l=a.redux.verifyPos(l.toLowerCase(),!1);var m=redux.args.hints.tip_effect.show.event,n=redux.args.hints.tip_effect.hide.event,o=redux.args.hints.tip_effect.show.effect,p=redux.args.hints.tip_effect.show.duration,q=redux.args.hints.tip_effect.hide.effect,r=redux.args.hints.tip_effect.hide.duration;a("div.redux-dev-qtip").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:{effect:function(){a(this).slideDown(500)},event:"mouseover"},hide:{effect:function(){a(this).slideUp(500)},event:"mouseleave"},style:{classes:"qtip-shadow qtip-light"},position:{my:"top center",at:"bottom center"}})}),a("div.redux-hint-qtip").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:{effect:function(){switch(o){case"slide":a(this).slideDown(p);break;case"fade":a(this).fadeIn(p);break;default:a(this).show()}},event:m},hide:{effect:function(){switch(q){case"slide":a(this).slideUp(r);break;case"fade":a(this).fadeOut(r);break;default:a(this).hide(r)}},event:n},style:{classes:j},position:{my:k,at:l}})}),a("input[qtip-content]").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:"focus",hide:"blur",style:j,position:{my:k,at:l}})})}},a.redux.tabCheck=function(){if(a(".redux-group-tab-link-a").click(function(){var b=a(this);if(b.parent().hasClass("empty_section")&&b.parent().hasClass("hasSubSections")){var c=a(this).closest("ul").find(".redux-group-tab-link-a"),d=c.index(this);b=c.slice(d+1,d+2)}var e=b.parents(".redux-container:first"),f=b.data("rel"),g=e.find(".redux-group-tab-link-li.active:first .redux-group-tab-link-a").data("rel");if(g!==f){if(a("#currentSection").val(f),b.parents(".postbox-container:first").length||a.cookie("redux_current_tab",f,{expires:7,path:"/"}),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").length){var h=e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").attr("id").split("_");h=h[0]}if(e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a.current").removeClass("current"),e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu li.current").removeClass("current"),e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a").each(function(){var b=a(this).attr("href").split("&tab=");(b[1]==f||b[1]==h)&&(a(this).addClass("current"),a(this).parent().addClass("current"))}),e.find("#"+g+"_section_group_li").find("#"+g+"_section_group_li").length)e.find("#"+g+"_section_group_li").addClass("activeChild"),e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild");else if(e.find("#"+f+"_section_group_li").parents("#"+g+"_section_group_li").length||e.find("#"+g+"_section_group_li").parents("ul.subsection").find("#"+f+"_section_group_li").length)e.find("#"+f+"_section_group_li").parents("#"+g+"_section_group_li").length?e.find("#"+g+"_section_group_li").addClass("activeChild").removeClass("active"):(e.find("#"+f+"_section_group_li").addClass("active"),e.find("#"+g+"_section_group_li").removeClass("active")),e.find("#"+f+"_section_group_li").removeClass("activeChild").addClass("active");else if(e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+g+"_section_group_li").find("ul.subsection").length){e.find("#"+g+"_section_group_li").find("ul.subsection").slideUp("fast",function(){e.find("#"+g+"_section_group_li").removeClass("active").removeClass("activeChild")});var i=e.find("#"+f+"_section_group_li").parents(".hasSubSections:first");i.length>0&&(e.find("#"+f+"_section_group_li").removeClass("active"),f=i.find(".redux-group-tab-link-a:first").data("rel"),i.hasClass("empty_section")?(i.find(".subsection li:first").addClass("active"),e.find("#"+f+"_section_group_li").removeClass("active").addClass("activeChild").find("ul.subsection").slideDown(),i=i.find(".subsection li:first"),f=i.find(".redux-group-tab-link-a:first").data("rel")):e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown())}else e.find("#"+g+"_section_group_li").parents("ul.subsection").length?e.find("#"+g+"_section_group_li").parents("#"+f+"_section_group_li").length?e.find("#"+g+"_section_group_li").removeClass("active"):e.find("#"+g+"_section_group_li").parents("ul.subsection").slideUp("fast",function(){e.find("#"+g+"_section_group_li").removeClass("active"),e.find("#"+g+"_section_group_li").parents(".redux-group-tab-link-li").removeClass("active").removeClass("activeChild"),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+f+"_section_group_li").addClass("active")}):(e.find("#"+g+"_section_group_li").removeClass("active"),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").length&&(e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+f+"_section_group_li").addClass("active")));e.find("#"+g+"_section_group").hide(),e.find("#"+f+"_section_group").fadeIn(200,function(){0!==e.find("#redux-footer").length&&a.redux.stickyInfo(),a.redux.initFields()}),a("#toplevel_page_"+redux.args.slug).find(".current").removeClass("current")}}),void 0!==redux.last_tab)return void a("#"+redux.last_tab+"_section_group_li_a").click();var b=decodeURI((new RegExp("tab=(.+?)(&|$)").exec(location.search)||[,""])[1]);""!==b?a.cookie("redux_current_tab_get")!==b&&(a.cookie("redux_current_tab",b,{expires:7,path:"/"}),a.cookie("redux_current_tab_get",b,{expires:7,path:"/"}),a("#"+b+"_section_group_li").click()):""!==a.cookie("redux_current_tab_get")&&a.removeCookie("redux_current_tab_get");var c=a("#"+a.cookie("redux_current_tab")+"_section_group_li_a");null===a.cookie("redux_current_tab")||"undefined"==typeof a.cookie("redux_current_tab")||0===c.length?a(".redux-container").find(".redux-group-tab-link-a:first").click():c.click()},a.redux.initFields=function(){a(".redux-group-tab:visible").find(".redux-field-init:visible").each(function(){var b=a(this).attr("data-type");if("undefined"!=typeof redux.field_objects&&redux.field_objects[b]&&redux.field_objects[b]&&redux.field_objects[b].init(),!redux.customizer&&a(this).hasClass("redux_remove_th")){var c=a(this).parents("tr:first"),d=c.find("th:first");d.html()&&d.html().length>0&&(a(this).prepend(d.html()),a(this).find(".redux_field_th").css("padding","0 0 10px 0")),a(this).parent().attr("colspan","2"),d.remove()}})},a.redux.notices=function(){redux.errors&&redux.errors.errors&&(a.each(redux.errors.errors,function(b,c){a.each(c.errors,function(b,c){a("#"+redux.args.opt_name+"-"+c.id).addClass("redux-field-error"),0===a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-error").length?a("#"+redux.args.opt_name+"-"+c.id).append('<div class="redux-th-error">'+c.msg+"</div>"):a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-error").html(c.msg).css("display","block")})}),a(".redux-container").each(function(){var b=a(this);b.find(".redux-menu-error").remove();var c=b.find(".redux-field-error").length;c>0&&(b.find(".redux-field-errors span").text(c),b.find(".redux-field-errors").slideDown(),b.find(".redux-group-tab").each(function(){var c=a(this).find(".redux-field-error").length;if(c>0){var d=a(this).attr("id").split("_");d=d[0],b.find('.redux-group-tab-link-a[data-key="'+d+'"]').prepend('<span class="redux-menu-error">'+c+"</span>"),b.find('.redux-group-tab-link-a[data-key="'+d+'"]').addClass("hasError");var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".hasSubSections:first");e&&e.find(".redux-group-tab-link-a:first").addClass("hasError")}}))})),redux.warnings&&redux.warnings.warnings&&(a.each(redux.warnings.warnings,function(b,c){a.each(c.warnings,function(b,c){a("#"+redux.args.opt_name+"-"+c.id).addClass("redux-field-warning"),0===a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-warning").length?a("#"+redux.args.opt_name+"-"+c.id).append('<div class="redux-th-warning">'+c.msg+"</div>"):a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-warning").html(c.msg).css("display","block")})}),a(".redux-container").each(function(){var b=a(this);b.find(".redux-menu-warning").remove();var c=b.find(".redux-field-warning").length;c>0&&(b.find(".redux-field-warnings span").text(c),b.find(".redux-field-warnings").slideDown(),b.find(".redux-group-tab").each(function(){var c=a(this).find(".redux-field-warning").length;if(c>0){var d=a(this).attr("id").split("_");d=d[0],b.find('.redux-group-tab-link-a[data-key="'+d+'"]').prepend('<span class="redux-menu-warning">'+c+"</span>"),b.find('.redux-group-tab-link-a[data-key="'+d+'"]').addClass("hasWarning");var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".hasSubSections:first");e&&e.find(".redux-group-tab-link-a:first").addClass("hasWarning")}}))}))},a.redux.tabControl=function(){a(".redux-section-tabs div").hide(),a(".redux-section-tabs div:first").show(),a(".redux-section-tabs ul li:first").addClass("active"),a(".redux-section-tabs ul li a").click(function(){a(".redux-section-tabs ul li").removeClass("active"),a(this).parent().addClass("active");var b=a(this).attr("href");return a(".redux-section-tabs div").hide(),a(b).fadeIn("medium",function(){a.redux.initFields()}),!1})},a.redux.required=function(){a.each(redux.folds,function(b,c){var d=a("#"+redux.args.opt_name+"-"+b);if(d.parents("tr:first").addClass("fold"),"hide"==c){if(d.parents("tr:first").addClass("hide"),d.hasClass("redux-container-section")){var e=a("#section-"+b);e.hasClass("redux-section-indent-start")&&(a("#section-table-"+b).hide().addClass("hide"),
2
  e.hide().addClass("hide"))}if(d.hasClass("redux-container-info")&&a("#info-"+b).hide().addClass("hide"),d.hasClass("redux-container-divide")&&a("#divide-"+b).hide().addClass("hide"),d.hasClass("redux-container-raw")){var f=d.parents().find("table#"+redux.args.opt_name+"-"+b);f.hide().addClass("hide")}}})},a.redux.get_container_value=function(b){var c=a("#"+redux.args.opt_name+"-"+b).serializeForm();return null!==c&&"object"==typeof c&&c.hasOwnProperty(redux.args.opt_name)&&(c=c[redux.args.opt_name][b]),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-media")&&(c=c.url),c},a.redux.check_dependencies=function(b){if(null!==redux.required){var c=a(b),d=c.parents(".redux-field:first").data("id");if(redux.required.hasOwnProperty(d)){var e=c.parents(".redux-field-container:first"),f=e.parents("tr:first").hasClass(".hide");a.each(redux.required[d],function(b,c){var d=a(this),e=!1,g=a("#"+redux.args.opt_name+"-"+b),h=g.parents("tr:first");if(f||(e=a.redux.check_parents_dependencies(b)),e===!0){if(g.hasClass("redux-container-section")){var i=a("#section-"+b);i.hasClass("redux-section-indent-start")&&i.hasClass("hide")&&(a("#section-table-"+b).fadeIn(300).removeClass("hide"),i.fadeIn(300).removeClass("hide"))}if(g.hasClass("redux-container-info")&&a("#info-"+b).fadeIn(300).removeClass("hide"),g.hasClass("redux-container-divide")&&a("#divide-"+b).fadeIn(300).removeClass("hide"),g.hasClass("redux-container-raw")){var j=g.parents().find("table#"+redux.args.opt_name+"-"+b);j.fadeIn(300).removeClass("hide")}h.fadeIn(300,function(){a(this).removeClass("hide"),redux.required.hasOwnProperty(b)&&a.redux.check_dependencies(a("#"+redux.args.opt_name+"-"+b).children().first()),a.redux.initFields()}),(g.hasClass("redux-container-section")||g.hasClass("redux-container-info"))&&h.css({display:"none"})}else e===!1&&h.fadeOut(100,function(){a(this).addClass("hide"),redux.required.hasOwnProperty(b)&&a.redux.required_recursive_hide(b)});d.find("select, radio, input[type=checkbox]").trigger("change")})}}},a.redux.required_recursive_hide=function(b){var c=a("#"+redux.args.opt_name+"-"+b).parents("tr:first");c.fadeOut(50,function(){if(a(this).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-section")){var c=a("#section-"+b);c.hasClass("redux-section-indent-start")&&(a("#section-table-"+b).fadeOut(50).addClass("hide"),c.fadeOut(50).addClass("hide"))}if(a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-info")&&a("#info-"+b).fadeOut(50).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-divide")&&a("#divide-"+b).fadeOut(50).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-raw")){var d=a("#"+redux.args.opt_name+"-"+b).parents().find("table#"+redux.args.opt_name+"-"+b);d.fadeOut(50).addClass("hide")}redux.required.hasOwnProperty(b)&&a.each(redux.required[b],function(b){a.redux.required_recursive_hide(b)})})},a.redux.check_parents_dependencies=function(b){var c="";return redux.required_child.hasOwnProperty(b)?a.each(redux.required_child[b],function(b,d){if(a("#"+redux.args.opt_name+"-"+d.parent).parents("tr:first").hasClass(".hide"))c=!1;else if(c!==!1){var e=a.redux.get_container_value(d.parent);c=a.redux.check_dependencies_visibility(e,d)}}):c=!0,c},a.redux.check_dependencies_visibility=function(b,c){var d,e=!1,f=c.checkValue,g=c.operation;switch(g){case"=":case"equals":a.isArray(b)?a(b[0]).each(function(b,c){if(a.isArray(f))a(f).each(function(a,b){return c==b?(e=!0,!0):void 0});else if(c==f)return e=!0,!0}):a.isArray(f)?a(f).each(function(a,c){b==c&&(e=!0)}):b==f&&(e=!0);break;case"!=":case"not":a.isArray(b)?a(b).each(function(b,c){if(a.isArray(f))a(f).each(function(a,b){return c!=b?(e=!0,!0):void 0});else if(c!=f)return e=!0,!0}):a.isArray(f)?a(f).each(function(a,c){b!=c&&(e=!0)}):b!=f&&(e=!0);break;case">":case"greater":case"is_larger":parseFloat(b)>parseFloat(f)&&(e=!0);break;case">=":case"greater_equal":case"is_larger_equal":parseFloat(b)>=parseFloat(f)&&(e=!0);break;case"<":case"less":case"is_smaller":parseFloat(b)<parseFloat(f)&&(e=!0);break;case"<=":case"less_equal":case"is_smaller_equal":parseFloat(b)<=parseFloat(f)&&(e=!0);break;case"contains":a.isPlainObject(b)&&(d=Object.keys(b).map(function(a){return b[a]}),b=d),a.isPlainObject(f)&&(d=Object.keys(f).map(function(a){return f[a]}),f=d),a.isArray(f)?a(f).each(function(a,c){-1!==b.toString().indexOf(c)&&(e=!0)}):-1!==b.toString().indexOf(f)&&(e=!0);break;case"doesnt_contain":case"not_contain":a.isPlainObject(b)&&(d=Object.keys(b).map(function(a){return b[a]}),b=d),a.isPlainObject(f)&&(d=Object.keys(f).map(function(a){return f[a]}),f=d),a.isArray(f)?a(f).each(function(a,c){-1===b.toString().indexOf(c)&&(e=!0)}):-1===b.toString().indexOf(f)&&(e=!0);break;case"is_empty_or":(""===b||b==f)&&(e=!0);break;case"not_empty_and":""!==b&&b!=f&&(e=!0);break;case"is_empty":case"empty":case"!isset":b&&""!==b&&null!==b||(e=!0);break;case"not_empty":case"!empty":case"isset":b&&""!==b&&null!==b&&(e=!0)}return e},a.redux.verifyPos=function(a,b){if(a=a.replace(/^\s+|\s+$/gm,""),""===a||-1==a.search(" "))return b===!0?"top left":"bottom right";var c=a.split(" "),d=b?"top":"bottom";("top"==c[0]||"center"==c[0]||"bottom"==c[0])&&(d=c[0]);var e=b?"left":"right";return("left"==c[1]||"center"==c[1]||"right"==c[1])&&(e=c[1]),d+" "+e},a.redux.stickyInfo=function(){var b=a(".redux-main").innerWidth()-20;a("#info_bar").isOnScreen()||a("#redux-footer-sticky").isOnScreen()?(a("#redux-footer").css({background:"#eee",position:"inherit",bottom:"inherit",width:"inherit"}),a("#redux-sticky-padder").hide(),a("#redux-footer").removeClass("sticky-footer-fixed")):(a("#redux-footer").css({position:"fixed",bottom:"0",width:b,right:21}),a("#redux-footer").addClass("sticky-footer-fixed"),a(".redux-save-warn").css("left",a("#redux-sticky").offset().left),a("#redux-sticky-padder").show()),a("#info_bar").isOnScreen()?a("#redux-sticky").removeClass("sticky-save-warn"):a("#redux-sticky").addClass("sticky-save-warn")},a.redux.expandOptions=function(b){var c=b.find(".expand_options"),d=b.find(".redux-sidebar").width()-1,e=a(".redux-group-menu .active a").data("rel")+"_section_group";return c.hasClass("expanded")?(c.removeClass("expanded"),b.find(".redux-main").removeClass("expand"),b.find(".redux-sidebar").stop().animate({"margin-left":"0px"},500),b.find(".redux-main").stop().animate({"margin-left":d},500,function(){b.find(".redux-main").attr("style","")}),b.find(".redux-group-tab").each(function(){a(this).attr("id")!==e&&a(this).fadeOut("fast")})):(c.addClass("expanded"),b.find(".redux-main").addClass("expand"),b.find(".redux-sidebar").stop().animate({"margin-left":-d-113},500),b.find(".redux-main").stop().animate({"margin-left":"-1px"},500),b.find(".redux-group-tab").fadeIn("medium",function(){a.redux.initFields()})),!1},a.redux.scaleToRatio=function(b,c,d){var e=0,f=b.attr("data-width");f||(f=b.width(),b.attr("data-width",f));var g=b.attr("data-height"),h=b.height();(!g||h>g)&&(g=h,b.attr("data-height",g),b.css("width","auto"),b.attr("data-width",b.width()),f=b.width()),f>d?(e=d/f,b.css("width",d),b.css("height",g*e),g*=e,f*=e):b.css("width","auto"),g>c?(e=c/g,b.css("height",c),b.css("width",f*e),f*=e,g*=e):b.css("height","auto");var i=(a(document.getElementById("redux-header")).height()-b.height())/2;i>0?b.css("margin-top",i):b.css("margin-top",0),a("#redux-header .redux_field_search")&&a("#redux-header .redux_field_search").css("right",a(b).width()+20)},a.redux.resizeAds=function(){var b,c=a("#redux-header");c.length?b=c.width()-c.find(".display_header").width()-30:(c=a("#customize-info"),b=c.width());var d=c.height(),e=c.find(".rAds");a(e).find("video").each(function(){a.redux.scaleToRatio(a(this),d,b)}),a(e).find("img").each(function(){a.redux.scaleToRatio(a(this),d,b)}),a(e).find("div").each(function(){a.redux.scaleToRatio(a(this),d,b)}),"-99999px"==e.css("left")&&e.css("display","none").css("left","auto"),e.fadeIn("slow")},a(document).ready(function(){redux.rAds&&setTimeout(function(){var b;a("#redux-header").length>0?(a("#redux-header").append('<div class="rAds"></div>'),b=a("#redux-header")):(a("#customize-theme-controls ul").first().prepend('<li id="redux_rAds" class="accordion-section rAdsContainer" style="position: relative;"><div class="rAds"></div></li>'),b=a("#redux_rAds")),b.css("position","relative"),b.find(".rAds").attr("style","position:absolute; top: 6px; right: 6px; display:block !important;overflow:hidden;").css("left","-99999px"),b.find(".rAds").html(redux.rAds.replace(/<br\s?\/?>/,""));var c=b.find(".rAds");b.height(),b.width()-b.find(".display_header").width()-30;c.find("a").css("float","right").css("line-height",b.height()+"px").css("margin-left","5px"),a(document).ajaxComplete(function(){c.find("a").hide(),setTimeout(function(){a.redux.resizeAds(),c.find("a").fadeIn()},1400),setTimeout(function(){a.redux.resizeAds()},1500),a(document).unbind("ajaxComplete")}),a(window).resize(function(){a.redux.resizeAds()})},400)})}(jQuery),jQuery.noConflict();var confirmOnPageExit=function(a){a=a||window.event;var b=redux.args.save_pending;return a&&(a.returnValue=b),window.onbeforeunload=null,b};
1
+ function redux_change(a){jQuery("body").trigger("check_dependencies",a),a.hasClass("compiler")&&jQuery("#redux-compiler-hook").val(1);var b=jQuery(a).parents(".redux-container:first"),c=jQuery(a).closest(".redux-group-tab").attr("id"),d=c.split("_");d=d[0];var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".redux-group-tab-link-li:first"),f=jQuery("#"+c+"_li").parents(".hasSubSections:first");if(jQuery(a).parents("fieldset.redux-field:first").hasClass("redux-field-error")){jQuery(a).parents("fieldset.redux-field:first").removeClass("redux-field-error"),jQuery(a).parent().find(".redux-th-error").slideUp();var g=parseInt(b.find(".redux-field-errors span").text())-1;if(0>=g)jQuery("#"+c+"_li .redux-menu-error").fadeOut("fast").remove(),jQuery("#"+c+"_li .redux-group-tab-link-a").removeClass("hasError"),jQuery("#"+c+"_li").parents(".inside:first").find(".redux-field-errors").slideUp(),jQuery(a).parents(".redux-container:first").find(".redux-field-errors").slideUp(),jQuery("#redux_metaboxes_errors").slideUp();else{var h=parseInt(e.find(".redux-menu-error:first").text())-1;0>=h?e.find(".redux-menu-error:first").fadeOut().remove():e.find(".redux-menu-error:first").text(h),b.find(".redux-field-errors span").text(g)}0!==f.length&&0===f.find(".redux-menu-error").length&&f.find(".hasError").removeClass("hasError")}if(jQuery(a).parents("fieldset.redux-field:first").hasClass("redux-field-warning")){jQuery(a).parents("fieldset.redux-field:first").removeClass("redux-field-warning"),jQuery(a).parent().find(".redux-th-warning").slideUp();var i=parseInt(b.find(".redux-field-warnings span").text())-1;if(0>=i)jQuery("#"+c+"_li .redux-menu-warning").fadeOut("fast").remove(),jQuery("#"+c+"_li .redux-group-tab-link-a").removeClass("hasWarning"),jQuery("#"+c+"_li").parents(".inside:first").find(".redux-field-warnings").slideUp(),jQuery(a).parents(".redux-container:first").find(".redux-field-warnings").slideUp(),jQuery("#redux_metaboxes_warnings").slideUp();else{var j=parseInt(e.find(".redux-menu-warning:first").text())-1;0>=j?e.find(".redux-menu-warning:first").fadeOut().remove():e.find(".redux-menu-warning:first").text(j),b.find(".redux-field-warning span").text(i)}0!==f.length&&0===f.find(".redux-menu-warning").length&&f.find(".hasWarning").removeClass("hasWarning")}return b.find(".saved_notice:visible").length>0?void 0:redux.customizer?void redux.customizer.save(a,b,c):void(redux.args.disable_save_warn||(b.find(".redux-save-warn").slideDown(),window.onbeforeunload=confirmOnPageExit))}function colorValidate(a){var b=jQuery(a).val(),c=colorNameToHex(b);return c!==b.replace("#","")?c:b}function colorNameToHex(a){var b=a.replace(/^\s\s*/,"").replace(/\s\s*$/,"").replace("#",""),c={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",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",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",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",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",redux:"#01a3e3",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};return"undefined"!==c[b.toLowerCase()]?c[b.toLowerCase()]:a}!function(a){"function"==typeof define&&define.amd?jQueryCookie.define(["jquery"],a):a(jQuery)}(function(a){function b(a){return a}function c(a){return decodeURIComponent(a.replace(e," "))}function d(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return f.json?JSON.parse(a):a}catch(b){}}var e=/\+/g,f=a.cookie=function(e,g,h){if(void 0!==g){if(h=a.extend({},f.defaults,h),"number"==typeof h.expires){var i=h.expires,j=h.expires=new Date;j.setDate(j.getDate()+i)}return g=f.json?JSON.stringify(g):String(g),document.cookie=[f.raw?e:encodeURIComponent(e),"=",f.raw?g:encodeURIComponent(g),h.expires?"; expires="+h.expires.toUTCString():"",h.path?"; path="+h.path:"",h.domain?"; domain="+h.domain:"",h.secure?"; secure":""].join("")}for(var k=f.raw?b:c,l=document.cookie.split("; "),m=e?void 0:{},n=0,o=l.length;o>n;n++){var p=l[n].split("="),q=k(p.shift()),r=k(p.join("="));if(e&&e===q){m=d(r);break}e||(m[q]=d(r))}return m};f.defaults={},a.removeCookie=function(b,c){return void 0!==a.cookie(b)?(a.cookie(b,"",a.extend({},c,{expires:-1})),!0):!1}}),function(a){a.fn.typeWatch=function(b){function c(b,c){var d=a(b.el).val();(d.length>=f.captureLength&&d.toUpperCase()!=b.text||c&&d.length>=f.captureLength)&&(b.text=d.toUpperCase(),b.cb.call(b.el,d))}function d(b){var d=b.type.toUpperCase();if(a.inArray(d,f.inputTypes)>=0){var e={timer:null,text:a(b).val().toUpperCase(),cb:f.callback,el:b,wait:f.wait};f.highlight&&a(b).focus(function(){this.select()});var g=function(b){var d=e.wait,g=!1,h=this.type.toUpperCase();"undefined"!=typeof b.keyCode&&13==b.keyCode&&"TEXTAREA"!=h&&a.inArray(h,f.inputTypes)>=0&&(d=1,g=!0);var i=function(){c(e,g)};clearTimeout(e.timer),e.timer=setTimeout(i,d)};a(b).on("keydown paste cut input",g)}}var e=["TEXT","TEXTAREA","PASSWORD","TEL","SEARCH","URL","EMAIL","DATETIME","DATE","MONTH","WEEK","TIME","DATETIME-LOCAL","NUMBER","RANGE"],f=a.extend({wait:750,callback:function(){},highlight:!0,captureLength:2,inputTypes:e},b);return this.each(function(){d(this)})}}(jQuery),function(a){a.fn.serializeForm=function(){if(this.length<1)return!1;var b={},c=b,d=':input[type!="checkbox"][type!="radio"], input:checked',e=function(){if(!this.disabled){var d=this.name.replace(/\[([^\]]+)?\]/g,",$1").split(","),e=d.length-1,f=a(this);if(d[0]){for(var g=0;e>g;g++)c=c[d[g]]=c[d[g]]||(""===d[g+1]||"0"===d[g+1]?[]:{});void 0!==c.length?c.push(f.val()):c[d[e]]=f.val(),c=b}}};return this.filter(d).each(e),this.find(d).each(e),b}}(jQuery),function(a){function b(){var a="!@#$%^&*()+=[]\\';,/{}|\":<>?~`.-_";return a+=" "}function c(){var a="¬€£¦";return a}function d(b,c,d){b.each(function(){var b=a(this);b.bind("keyup change paste",function(a){var e="";a.originalEvent&&a.originalEvent.clipboardData&&a.originalEvent.clipboardData.getData&&(e=a.originalEvent.clipboardData.getData("text/plain")),setTimeout(function(){h(b,c,d,e)},0)}),b.bind("keypress",function(a){var e=a.charCode?a.charCode:a.which;if(!(g(e)||a.ctrlKey||a.metaKey)){var f=String.fromCharCode(e),h=b.selection(),i=h.start,j=h.end,k=b.val(),l=k.substring(0,i)+f+k.substring(j),m=c(l,d);m!=l&&a.preventDefault()}})})}function e(b,c){var d=parseFloat(a(b).val()),e=a(b);return isNaN(d)?void e.val(""):(f(c.min)&&d<c.min&&e.val(""),void(f(c.max)&&d>c.max&&e.val("")))}function f(a){return!isNaN(a)}function g(a){return a>=32?!1:10==a?!1:13==a?!1:!0}function h(a,b,c,d){var e=a.val();""==e&&d.length>0&&(e=d);var f=b(e,c);if(e!=f){var g=a.alphanum_caret();a.val(f),e.length==f.length+1?a.alphanum_caret(g-1):a.alphanum_caret(g)}}function i(b,c){"undefined"==typeof c&&(c=D);var d,e={};return d="string"==typeof b?F[b]:"undefined"==typeof b?{}:b,a.extend(e,c,d),"undefined"==typeof e.blacklist&&(e.blacklistSet=x(e.allow,e.disallow)),e}function j(b){var c,d={};return c="string"==typeof b?G[b]:"undefined"==typeof b?{}:b,a.extend(d,E,c),d}function k(a,b,c){return c.maxLength&&a.length>=c.maxLength?!1:c.allow.indexOf(b)>=0?!0:c.allowSpace&&" "==b?!0:c.blacklistSet.contains(b)?!1:!c.allowNumeric&&K[b]?!1:!c.allowUpper&&u(b)?!1:!c.allowLower&&v(b)?!1:!c.allowCaseless&&w(b)?!1:!c.allowLatin&&L.contains(b)?!1:c.allowOtherCharSets?!0:K[b]||L.contains(b)?!0:!1}function l(a,b,c){if(K[b])return n(a,c)?!1:p(a,c)?!1:o(a,c)?!1:q(a+b,c)?!1:r(a+b,c)?!1:!0;if(c.allowPlus&&"+"==b&&""==a)return!0;if(c.allowMinus&&"-"==b&&""==a)return!0;if(b==I&&c.allowThouSep&&A(a,b))return!0;if(b==J){if(a.indexOf(J)>=0)return!1;if(c.allowDecSep)return!0}return!1}function m(a){return a+="",a.replace(/[^0-9]/g,"").length}function n(a,b){var c=b.maxDigits;if(""==c||isNaN(c))return!1;var d=m(a);return d>=c?!0:!1}function o(a,b){var c=b.maxDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(-1==d)return!1;var e=a.substring(d),f=m(e);return f>=c?!0:!1}function p(a,b){var c=b.maxPreDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(d>=0)return!1;var e=m(a);return e>=c?!0:!1}function q(a,b){if(!b.max||b.max<0)return!1;var c=parseFloat(a);return c>b.max?!0:!1}function r(a,b){if(!b.min||b.min>0)return!1;var c=parseFloat(a);return c<b.min?!0:!1}function s(a,b){if("string"!=typeof a)return a;var c,d=a.split(""),e=[],f=0;for(f=0;f<d.length;f++){c=d[f];var g=e.join("");k(g,c,b)&&e.push(c)}return e.join("")}function t(a,b){if("string"!=typeof a)return a;var c,d=a.split(""),e=[],f=0;for(f=0;f<d.length;f++){c=d[f];var g=e.join("");l(g,c,b)&&e.push(c)}return e.join("")}function u(a){var b=a.toUpperCase(),c=a.toLowerCase();return a==b&&b!=c?!0:!1}function v(a){var b=a.toUpperCase(),c=a.toLowerCase();return a==c&&b!=c?!0:!1}function w(a){return a.toUpperCase()==a.toLowerCase()?!0:!1}function x(a,b){var c=new B(H+b),d=new B(a),e=c.subtract(d);return e}function y(){var a,b="0123456789".split(""),c={},d=0;for(d=0;d<b.length;d++)a=b[d],c[a]=!0;return c}function z(){var a="abcdefghijklmnopqrstuvwxyz",b=a.toUpperCase(),c=new B(a+b);return c}function A(a,b){if(0==a.length)return!1;var c=a.indexOf(J);if(c>=0)return!1;var d=a.indexOf(I);if(0>d)return!0;var e=a.lastIndexOf(I),f=a.length-e-1;if(3>f)return!1;var g=m(a.substring(d));return g%3>0?!1:!0}function B(a){"string"==typeof a?this.map=C(a):this.map={}}function C(a){var b,c={},d=a.split(""),e=0;for(e=0;e<d.length;e++)b=d[e],c[b]=!0;return c}a.fn.alphanum=function(a){var b=i(a),c=this;return d(c,s,b),this},a.fn.alpha=function(a){var b=i("alpha"),c=i(a,b),e=this;return d(e,s,c),this},a.fn.numeric=function(a){var b=j(a),c=this;return d(c,t,b),c.blur(function(){e(this,a)}),this};var D={allow:"",disallow:"",allowSpace:!0,allowNumeric:!0,allowUpper:!0,allowLower:!0,allowCaseless:!0,allowLatin:!0,allowOtherCharSets:!0,maxLength:NaN},E={allowPlus:!1,allowMinus:!0,allowThouSep:!0,allowDecSep:!0,allowLeadingSpaces:!1,maxDigits:NaN,maxDecimalPlaces:NaN,maxPreDecimalPlaces:NaN,max:NaN,min:NaN},F={alpha:{allowNumeric:!1},upper:{allowNumeric:!1,allowUpper:!0,allowLower:!1,allowCaseless:!0},lower:{allowNumeric:!1,allowUpper:!1,allowLower:!0,allowCaseless:!0}},G={integer:{allowPlus:!1,allowMinus:!0,allowThouSep:!1,allowDecSep:!1},positiveInteger:{allowPlus:!1,allowMinus:!1,allowThouSep:!1,allowDecSep:!1}},H=b()+c(),I=",",J=".",K=y(),L=z();B.prototype.add=function(a){var b=this.clone();for(var c in a.map)b.map[c]=!0;return b},B.prototype.subtract=function(a){var b=this.clone();for(var c in a.map)delete b.map[c];return b},B.prototype.contains=function(a){return this.map[a]?!0:!1},B.prototype.clone=function(){var a=new B;for(var b in this.map)a.map[b]=!0;return a},a.fn.alphanum.backdoorAlphaNum=function(a,b){var c=i(b);return s(a,c)},a.fn.alphanum.backdoorNumeric=function(a,b){var c=j(b);return t(a,c)},a.fn.alphanum.setNumericSeparators=function(a){1==a.thousandsSeparator.length&&1==a.decimalSeparator.length&&(I=a.thousandsSeparator,J=a.decimalSeparator)}}(jQuery),function(a){function b(a,b){if(a.createTextRange){var c=a.createTextRange();c.move("character",b),c.select()}else null!=a.selectionStart&&(a.focus(),a.setSelectionRange(b,b))}function c(a){if("selection"in document){var b=a.createTextRange();try{b.setEndPoint("EndToStart",document.selection.createRange())}catch(c){return 0}return b.text.length}return null!=a.selectionStart?a.selectionStart:void 0}a.fn.alphanum_caret=function(d,e){return"undefined"==typeof d?c(this.get(0)):this.queue(function(c){if(isNaN(d)){var f=a(this).val().indexOf(d);e===!0?f+=d.length:"undefined"!=typeof e&&(f+=e),b(this,f)}else b(this,d);c()})}}(jQuery),function(a){var b=function(a){return a?a.ownerDocument.defaultView||a.ownerDocument.parentWindow:window},c=function(b,c){var d=a.Range.current(b).clone(),e=a.Range(b).select(b);return d.overlaps(e)?(d.compare("START_TO_START",e)<1?(startPos=0,d.move("START_TO_START",e)):(fromElementToCurrent=e.clone(),fromElementToCurrent.move("END_TO_START",d),startPos=fromElementToCurrent.toString().length),d.compare("END_TO_END",e)>=0?endPos=e.toString().length:endPos=startPos+d.toString().length,{start:startPos,end:endPos}):null},d=function(d){var e=b(d);if(void 0!==d.selectionStart)return document.activeElement&&document.activeElement!=d&&d.selectionStart==d.selectionEnd&&0==d.selectionStart?{start:d.value.length,end:d.value.length}:{start:d.selectionStart,end:d.selectionEnd};if(e.getSelection)return c(d,e);try{if("input"==d.nodeName.toLowerCase()){var f=b(d).document.selection.createRange(),g=d.createTextRange();g.setEndPoint("EndToStart",f);var h=g.text.length;return{start:h,end:h+f.text.length}}var i=c(d,e);if(!i)return i;var j=a.Range.current().clone(),k=j.clone().collapse().range,l=j.clone().collapse(!1).range;return k.moveStart("character",-1),l.moveStart("character",-1),0!=i.startPos&&""==k.text&&(i.startPos+=2),0!=i.endPos&&""==l.text&&(i.endPos+=2),i}catch(m){return{start:d.value.length,end:d.value.length}}},e=function(a,c,d){var e=b(a);if(a.setSelectionRange)void 0===d?(a.focus(),a.setSelectionRange(c,c)):(a.select(),a.selectionStart=c,a.selectionEnd=d);else if(a.createTextRange){var f=a.createTextRange();f.moveStart("character",c),d=d||c,f.moveEnd("character",d-a.value.length),f.select()}else if(e.getSelection){var h=e.document,i=e.getSelection(),j=h.createRange(),k=[c,void 0!==d?d:c];g([a],k),j.setStart(k[0].el,k[0].count),j.setEnd(k[1].el,k[1].count),i.removeAllRanges(),i.addRange(j)}else if(e.document.body.createTextRange){var j=document.body.createTextRange();j.moveToElementText(a),j.collapse(),j.moveStart("character",c),j.moveEnd("character",void 0!==d?d:c),j.select()}},f=function(a,b,c,d){"number"==typeof c[0]&&c[0]<b&&(c[0]={el:d,count:c[0]-a}),"number"==typeof c[1]&&c[1]<=b&&(c[1]={el:d,count:c[1]-a})},g=function(a,b,c){var d,e;c=c||0;for(var h=0;a[h];h++)d=a[h],3===d.nodeType||4===d.nodeType?(e=c,c+=d.nodeValue.length,f(e,c,b,d)):8!==d.nodeType&&(c=g(d.childNodes,b,c));return c};jQuery.fn.selection=function(a,b){return void 0!==a?this.each(function(){e(this,a,b)}):d(this[0])},a.fn.selection.getCharElement=g}(jQuery),function(a){"use strict";a.redux=a.redux||{},a(document).ready(function(){a.fn.isOnScreen=function(){if(window){var b=a(window),c={top:b.scrollTop()};c.right=c.left+b.width(),c.bottom=c.top+b.height();var d=this.offset();return d.right=d.left+this.outerWidth(),d.bottom=d.top+this.outerHeight(),!(c.right<d.left||c.left>d.right||c.bottom<d.top||c.top>d.bottom)}},a.redux.hideFields(),a.redux.checkRequired(),a.redux.initEvents(),a.redux.initQtip(),a.redux.tabCheck(),a.redux.notices(),a.redux.tabControl()}),a.redux.ajax_save=function(b){var c=a(document.getElementById("redux_ajax_overlay"));c.fadeIn(),jQuery(".redux-action_bar .spinner").addClass("is-active"),jQuery(".redux-action_bar input").attr("disabled","disabled");var d=jQuery(document.getElementById("redux_notification_bar"));d.slideUp(),jQuery(".redux-save-warn").slideUp(),jQuery(".redux_ajax_save_error").slideUp("medium",function(){jQuery(this).remove()});var e=jQuery(document.getElementById("redux-form-wrapper"));redux.fields.hasOwnProperty("editor")&&a.each(redux.fields.editor,function(a,b){if("undefined"!=typeof tinyMCE){var c=tinyMCE.get(a);c&&c.save()}});var f=e.serialize();e.find("input[type=checkbox]").each(function(){if("undefined"!=typeof a(this).attr("name")){var b=a(this).is(":checked")?a(this).val():"0";f+="&"+a(this).attr("name")+"="+b}}),"redux_save"!=b.attr("name")&&(f+="&"+b.attr("name")+"="+b.val());var g=e.attr("data-nonce");return jQuery.ajax({type:"post",dataType:"json",url:ajaxurl,data:{action:redux.args.opt_name+"_ajax_save",nonce:g,opt_name:redux.args.opt_name,data:f},error:function(a){window.console||(console={}),console.log=console.log||function(a,b){},console.log(redux.ajax.console),console.log(a.responseText),jQuery(".redux-action_bar input").removeAttr("disabled"),c.fadeOut("fast"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),alert(redux.ajax.alert)},success:function(b){if(b.action&&"reload"==b.action)location.reload(!0);else if("success"==b.status){jQuery(".redux-action_bar input").removeAttr("disabled"),c.fadeOut("fast"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),redux.options=b.options,redux.errors=b.errors,redux.warnings=b.warnings,d.html(b.notification_bar).slideDown("fast"),(null!==b.errors||null!==b.warnings)&&a.redux.notices();var e=a(document.getElementById("redux_notification_bar")).find(".saved_notice");e.slideDown(),e.delay(4e3).slideUp()}else jQuery(".redux-action_bar input").removeAttr("disabled"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),c.fadeOut("fast"),jQuery(".wrap h2:first").parent().append('<div class="error redux_ajax_save_error" style="display:none;"><p>'+b.status+"</p></div>"),jQuery(".redux_ajax_save_error").slideDown(),jQuery("html, body").animate({scrollTop:0},"slow")}}),!1},a.redux.initEvents=function(){a(".redux-presets-bar").on("click",function(){window.onbeforeunload=null}),a("#toplevel_page_"+redux.args.slug+" .wp-submenu a, #wp-admin-bar-"+redux.args.slug+" a.ab-item").click(function(b){if((a("#toplevel_page_"+redux.args.slug).hasClass("wp-menu-open")||a(this).hasClass("ab-item"))&&!a(this).parents("ul.ab-submenu:first").hasClass("ab-sub-secondary")&&a(this).attr("href").toLowerCase().indexOf(redux.args.slug+"&tab=")>=0){b.preventDefault();var c=a(this).attr("href").split("&tab=");return a("#"+c[1]+"_section_group_li_a").click(),a(this).parents("ul:first").find(".current").removeClass("current"),a(this).addClass("current"),a(this).parent().addClass("current"),!1}}),a(".redux-action_bar input").on("click",function(b){if(a(this).attr("name")==redux.args.opt_name+"[defaults]"){if(!confirm(redux.args.reset_confirm))return!1}else if(a(this).attr("name")==redux.args.opt_name+"[defaults-section]"&&!confirm(redux.args.reset_section_confirm))return!1;window.onbeforeunload=null,redux.args.ajax_save===!0&&(a.redux.ajax_save(a(this)),b.preventDefault())}),a(".expand_options").click(function(b){b.preventDefault();var c=a(".redux-container");if(a(c).hasClass("fully-expanded")){a(c).removeClass("fully-expanded");var d=a.cookie("redux_current_tab");a(".redux-container:first").find("#"+d+"_section_group").fadeIn(200,function(){0!==a(".redux-container:first").find("#redux-footer").length&&a.redux.stickyInfo(),a.redux.initFields()})}return a.redux.expandOptions(a(this).parents(".redux-container:first")),!1}),a(".saved_notice").is(":visible")&&a(".saved_notice").slideDown(),a(document.body).on("change",".redux-field input, .redux-field textarea, .redux-field select",function(){a(this).hasClass("noUpdate")||redux_change(a(this))});var b=a("#redux-footer").height();a("#redux-sticky-padder").css({height:b}),a("#redux-footer-sticky").removeClass("hide"),0!==a("#redux-footer").length&&(a(window).scroll(function(){a.redux.stickyInfo()}),a(window).resize(function(){a.redux.stickyInfo()})),a(".saved_notice").delay(4e3).slideUp()},a.redux.hideFields=function(){a("label[for='redux_hide_field']").each(function(b,c){var d=a(this).parent().parent();a(d).addClass("hidden")})},a.redux.checkRequired=function(){a.redux.required(),a("body").on("change",".redux-main select, .redux-main radio, .redux-main input[type=checkbox], .redux-main input[type=hidden]",function(b){a.redux.check_dependencies(this)}),a("body").on("check_dependencies",function(b,c){a.redux.check_dependencies(c)}),a("td > fieldset:empty,td > div:empty").parent().parent().hide()},a.redux.initQtip=function(){if(a().qtip){var b="",c=redux.args.hints.tip_style.shadow;c===!0&&(b="qtip-shadow");var d="",e=redux.args.hints.tip_style.color;""!==e&&(d="qtip-"+e);var f="",g=redux.args.hints.tip_style.rounded;g===!0&&(f="qtip-rounded");var h="",i=redux.args.hints.tip_style.style;""!==i&&(h="qtip-"+i);var j=b+","+d+","+f+","+h+",redux-qtip";j=j.replace(/,/g," ");var k=redux.args.hints.tip_position.my,l=redux.args.hints.tip_position.at;k=a.redux.verifyPos(k.toLowerCase(),!0),l=a.redux.verifyPos(l.toLowerCase(),!1);var m=redux.args.hints.tip_effect.show.event,n=redux.args.hints.tip_effect.hide.event,o=redux.args.hints.tip_effect.show.effect,p=redux.args.hints.tip_effect.show.duration,q=redux.args.hints.tip_effect.hide.effect,r=redux.args.hints.tip_effect.hide.duration;a("div.redux-dev-qtip").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:{effect:function(){a(this).slideDown(500)},event:"mouseover"},hide:{effect:function(){a(this).slideUp(500)},event:"mouseleave"},style:{classes:"qtip-shadow qtip-light"},position:{my:"top center",at:"bottom center"}})}),a("div.redux-hint-qtip").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:{effect:function(){switch(o){case"slide":a(this).slideDown(p);break;case"fade":a(this).fadeIn(p);break;default:a(this).show()}},event:m},hide:{effect:function(){switch(q){case"slide":a(this).slideUp(r);break;case"fade":a(this).fadeOut(r);break;default:a(this).hide(r)}},event:n},style:{classes:j},position:{my:k,at:l}})}),a("input[qtip-content]").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:"focus",hide:"blur",style:j,position:{my:k,at:l}})})}},a.redux.tabCheck=function(){if(a(".redux-group-tab-link-a").click(function(){var b=a(this);if(b.parent().hasClass("empty_section")&&b.parent().hasClass("hasSubSections")){var c=a(this).closest("ul").find(".redux-group-tab-link-a"),d=c.index(this);b=c.slice(d+1,d+2)}var e=b.parents(".redux-container:first"),f=b.data("rel"),g=e.find(".redux-group-tab-link-li.active:first .redux-group-tab-link-a").data("rel");if(g!==f){if(a("#currentSection").val(f),b.parents(".postbox-container:first").length||a.cookie("redux_current_tab",f,{expires:7,path:"/"}),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").length){var h=e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").attr("id").split("_");h=h[0]}if(e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a.current").removeClass("current"),e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu li.current").removeClass("current"),e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a").each(function(){var b=a(this).attr("href").split("&tab=");(b[1]==f||b[1]==h)&&(a(this).addClass("current"),a(this).parent().addClass("current"))}),e.find("#"+g+"_section_group_li").find("#"+g+"_section_group_li").length)e.find("#"+g+"_section_group_li").addClass("activeChild"),e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild");else if(e.find("#"+f+"_section_group_li").parents("#"+g+"_section_group_li").length||e.find("#"+g+"_section_group_li").parents("ul.subsection").find("#"+f+"_section_group_li").length)e.find("#"+f+"_section_group_li").parents("#"+g+"_section_group_li").length?e.find("#"+g+"_section_group_li").addClass("activeChild").removeClass("active"):(e.find("#"+f+"_section_group_li").addClass("active"),e.find("#"+g+"_section_group_li").removeClass("active")),e.find("#"+f+"_section_group_li").removeClass("activeChild").addClass("active");else if(e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+g+"_section_group_li").find("ul.subsection").length){e.find("#"+g+"_section_group_li").find("ul.subsection").slideUp("fast",function(){e.find("#"+g+"_section_group_li").removeClass("active").removeClass("activeChild")});var i=e.find("#"+f+"_section_group_li").parents(".hasSubSections:first");i.length>0&&(e.find("#"+f+"_section_group_li").removeClass("active"),f=i.find(".redux-group-tab-link-a:first").data("rel"),i.hasClass("empty_section")?(i.find(".subsection li:first").addClass("active"),e.find("#"+f+"_section_group_li").removeClass("active").addClass("activeChild").find("ul.subsection").slideDown(),i=i.find(".subsection li:first"),f=i.find(".redux-group-tab-link-a:first").data("rel")):e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown())}else e.find("#"+g+"_section_group_li").parents("ul.subsection").length?e.find("#"+g+"_section_group_li").parents("#"+f+"_section_group_li").length?e.find("#"+g+"_section_group_li").removeClass("active"):e.find("#"+g+"_section_group_li").parents("ul.subsection").slideUp("fast",function(){e.find("#"+g+"_section_group_li").removeClass("active"),e.find("#"+g+"_section_group_li").parents(".redux-group-tab-link-li").removeClass("active").removeClass("activeChild"),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+f+"_section_group_li").addClass("active")}):(e.find("#"+g+"_section_group_li").removeClass("active"),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").length&&(e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+f+"_section_group_li").addClass("active")));e.find("#"+g+"_section_group").hide(),e.find("#"+f+"_section_group").fadeIn(200,function(){0!==e.find("#redux-footer").length&&a.redux.stickyInfo(),a.redux.initFields()}),a("#toplevel_page_"+redux.args.slug).find(".current").removeClass("current")}}),void 0!==redux.last_tab)return void a("#"+redux.last_tab+"_section_group_li_a").click();var b=decodeURI((new RegExp("tab=(.+?)(&|$)").exec(location.search)||[,""])[1]);""!==b?a.cookie("redux_current_tab_get")!==b&&(a.cookie("redux_current_tab",b,{expires:7,path:"/"}),a.cookie("redux_current_tab_get",b,{expires:7,path:"/"}),a("#"+b+"_section_group_li").click()):""!==a.cookie("redux_current_tab_get")&&a.removeCookie("redux_current_tab_get");var c=a("#"+a.cookie("redux_current_tab")+"_section_group_li_a");null===a.cookie("redux_current_tab")||"undefined"==typeof a.cookie("redux_current_tab")||0===c.length?a(".redux-container").find(".redux-group-tab-link-a:first").click():c.click()},a.redux.initFields=function(){a(".redux-group-tab:visible").find(".redux-field-init:visible").each(function(){var b=a(this).attr("data-type");if("undefined"!=typeof redux.field_objects&&redux.field_objects[b]&&redux.field_objects[b]&&redux.field_objects[b].init(),!redux.customizer&&a(this).hasClass("redux_remove_th")){var c=a(this).parents("tr:first"),d=c.find("th:first");d.html()&&d.html().length>0&&(a(this).prepend(d.html()),a(this).find(".redux_field_th").css("padding","0 0 10px 0")),a(this).parent().attr("colspan","2"),d.remove()}})},a.redux.notices=function(){redux.errors&&redux.errors.errors&&(a.each(redux.errors.errors,function(b,c){a.each(c.errors,function(b,c){a("#"+redux.args.opt_name+"-"+c.id).addClass("redux-field-error"),0===a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-error").length?a("#"+redux.args.opt_name+"-"+c.id).append('<div class="redux-th-error">'+c.msg+"</div>"):a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-error").html(c.msg).css("display","block")})}),a(".redux-container").each(function(){var b=a(this);b.find(".redux-menu-error").remove();var c=b.find(".redux-field-error").length;c>0&&(b.find(".redux-field-errors span").text(c),b.find(".redux-field-errors").slideDown(),b.find(".redux-group-tab").each(function(){var c=a(this).find(".redux-field-error").length;if(c>0){var d=a(this).attr("id").split("_");d=d[0],b.find('.redux-group-tab-link-a[data-key="'+d+'"]').prepend('<span class="redux-menu-error">'+c+"</span>"),b.find('.redux-group-tab-link-a[data-key="'+d+'"]').addClass("hasError");var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".hasSubSections:first");e&&e.find(".redux-group-tab-link-a:first").addClass("hasError")}}))})),redux.warnings&&redux.warnings.warnings&&(a.each(redux.warnings.warnings,function(b,c){a.each(c.warnings,function(b,c){a("#"+redux.args.opt_name+"-"+c.id).addClass("redux-field-warning"),0===a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-warning").length?a("#"+redux.args.opt_name+"-"+c.id).append('<div class="redux-th-warning">'+c.msg+"</div>"):a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-warning").html(c.msg).css("display","block")})}),a(".redux-container").each(function(){var b=a(this);b.find(".redux-menu-warning").remove();var c=b.find(".redux-field-warning").length;c>0&&(b.find(".redux-field-warnings span").text(c),b.find(".redux-field-warnings").slideDown(),b.find(".redux-group-tab").each(function(){var c=a(this).find(".redux-field-warning").length;if(c>0){var d=a(this).attr("id").split("_");d=d[0],b.find('.redux-group-tab-link-a[data-key="'+d+'"]').prepend('<span class="redux-menu-warning">'+c+"</span>"),b.find('.redux-group-tab-link-a[data-key="'+d+'"]').addClass("hasWarning");var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".hasSubSections:first");e&&e.find(".redux-group-tab-link-a:first").addClass("hasWarning")}}))}))},a.redux.tabControl=function(){a(".redux-section-tabs div").hide(),a(".redux-section-tabs div:first").show(),a(".redux-section-tabs ul li:first").addClass("active"),a(".redux-section-tabs ul li a").click(function(){a(".redux-section-tabs ul li").removeClass("active"),a(this).parent().addClass("active");var b=a(this).attr("href");return a(".redux-section-tabs div").hide(),a(b).fadeIn("medium",function(){a.redux.initFields()}),!1})},a.redux.required=function(){a.each(redux.folds,function(b,c){var d=a("#"+redux.args.opt_name+"-"+b);if(d.parents("tr:first").addClass("fold"),"hide"==c){if(d.parents("tr:first").addClass("hide"),d.hasClass("redux-container-section")){var e=a("#section-"+b);e.hasClass("redux-section-indent-start")&&(a("#section-table-"+b).hide().addClass("hide"),
2
  e.hide().addClass("hide"))}if(d.hasClass("redux-container-info")&&a("#info-"+b).hide().addClass("hide"),d.hasClass("redux-container-divide")&&a("#divide-"+b).hide().addClass("hide"),d.hasClass("redux-container-raw")){var f=d.parents().find("table#"+redux.args.opt_name+"-"+b);f.hide().addClass("hide")}}})},a.redux.get_container_value=function(b){var c=a("#"+redux.args.opt_name+"-"+b).serializeForm();return null!==c&&"object"==typeof c&&c.hasOwnProperty(redux.args.opt_name)&&(c=c[redux.args.opt_name][b]),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-media")&&(c=c.url),c},a.redux.check_dependencies=function(b){if(null!==redux.required){var c=a(b),d=c.parents(".redux-field:first").data("id");if(redux.required.hasOwnProperty(d)){var e=c.parents(".redux-field-container:first"),f=e.parents("tr:first").hasClass(".hide");a.each(redux.required[d],function(b,c){var d=a(this),e=!1,g=a("#"+redux.args.opt_name+"-"+b),h=g.parents("tr:first");if(f||(e=a.redux.check_parents_dependencies(b)),e===!0){if(g.hasClass("redux-container-section")){var i=a("#section-"+b);i.hasClass("redux-section-indent-start")&&i.hasClass("hide")&&(a("#section-table-"+b).fadeIn(300).removeClass("hide"),i.fadeIn(300).removeClass("hide"))}if(g.hasClass("redux-container-info")&&a("#info-"+b).fadeIn(300).removeClass("hide"),g.hasClass("redux-container-divide")&&a("#divide-"+b).fadeIn(300).removeClass("hide"),g.hasClass("redux-container-raw")){var j=g.parents().find("table#"+redux.args.opt_name+"-"+b);j.fadeIn(300).removeClass("hide")}h.fadeIn(300,function(){a(this).removeClass("hide"),redux.required.hasOwnProperty(b)&&a.redux.check_dependencies(a("#"+redux.args.opt_name+"-"+b).children().first()),a.redux.initFields()}),(g.hasClass("redux-container-section")||g.hasClass("redux-container-info"))&&h.css({display:"none"})}else e===!1&&h.fadeOut(100,function(){a(this).addClass("hide"),redux.required.hasOwnProperty(b)&&a.redux.required_recursive_hide(b)});d.find("select, radio, input[type=checkbox]").trigger("change")})}}},a.redux.required_recursive_hide=function(b){var c=a("#"+redux.args.opt_name+"-"+b).parents("tr:first");c.fadeOut(50,function(){if(a(this).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-section")){var c=a("#section-"+b);c.hasClass("redux-section-indent-start")&&(a("#section-table-"+b).fadeOut(50).addClass("hide"),c.fadeOut(50).addClass("hide"))}if(a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-info")&&a("#info-"+b).fadeOut(50).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-divide")&&a("#divide-"+b).fadeOut(50).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-raw")){var d=a("#"+redux.args.opt_name+"-"+b).parents().find("table#"+redux.args.opt_name+"-"+b);d.fadeOut(50).addClass("hide")}redux.required.hasOwnProperty(b)&&a.each(redux.required[b],function(b){a.redux.required_recursive_hide(b)})})},a.redux.check_parents_dependencies=function(b){var c="";return redux.required_child.hasOwnProperty(b)?a.each(redux.required_child[b],function(b,d){if(a("#"+redux.args.opt_name+"-"+d.parent).parents("tr:first").hasClass(".hide"))c=!1;else if(c!==!1){var e=a.redux.get_container_value(d.parent);c=a.redux.check_dependencies_visibility(e,d)}}):c=!0,c},a.redux.check_dependencies_visibility=function(b,c){var d,e=!1,f=c.checkValue,g=c.operation;switch(g){case"=":case"equals":a.isArray(b)?a(b[0]).each(function(b,c){if(a.isArray(f))a(f).each(function(a,b){return c==b?(e=!0,!0):void 0});else if(c==f)return e=!0,!0}):a.isArray(f)?a(f).each(function(a,c){b==c&&(e=!0)}):b==f&&(e=!0);break;case"!=":case"not":a.isArray(b)?a(b).each(function(b,c){if(a.isArray(f))a(f).each(function(a,b){return c!=b?(e=!0,!0):void 0});else if(c!=f)return e=!0,!0}):a.isArray(f)?a(f).each(function(a,c){b!=c&&(e=!0)}):b!=f&&(e=!0);break;case">":case"greater":case"is_larger":parseFloat(b)>parseFloat(f)&&(e=!0);break;case">=":case"greater_equal":case"is_larger_equal":parseFloat(b)>=parseFloat(f)&&(e=!0);break;case"<":case"less":case"is_smaller":parseFloat(b)<parseFloat(f)&&(e=!0);break;case"<=":case"less_equal":case"is_smaller_equal":parseFloat(b)<=parseFloat(f)&&(e=!0);break;case"contains":a.isPlainObject(b)&&(d=Object.keys(b).map(function(a){return b[a]}),b=d),a.isPlainObject(f)&&(d=Object.keys(f).map(function(a){return f[a]}),f=d),a.isArray(f)?a(f).each(function(a,c){-1!==b.toString().indexOf(c)&&(e=!0)}):-1!==b.toString().indexOf(f)&&(e=!0);break;case"doesnt_contain":case"not_contain":a.isPlainObject(b)&&(d=Object.keys(b).map(function(a){return b[a]}),b=d),a.isPlainObject(f)&&(d=Object.keys(f).map(function(a){return f[a]}),f=d),a.isArray(f)?a(f).each(function(a,c){-1===b.toString().indexOf(c)&&(e=!0)}):-1===b.toString().indexOf(f)&&(e=!0);break;case"is_empty_or":(""===b||b==f)&&(e=!0);break;case"not_empty_and":""!==b&&b!=f&&(e=!0);break;case"is_empty":case"empty":case"!isset":b&&""!==b&&null!==b||(e=!0);break;case"not_empty":case"!empty":case"isset":b&&""!==b&&null!==b&&(e=!0)}return e},a.redux.verifyPos=function(a,b){if(a=a.replace(/^\s+|\s+$/gm,""),""===a||-1==a.search(" "))return b===!0?"top left":"bottom right";var c=a.split(" "),d=b?"top":"bottom";("top"==c[0]||"center"==c[0]||"bottom"==c[0])&&(d=c[0]);var e=b?"left":"right";return("left"==c[1]||"center"==c[1]||"right"==c[1])&&(e=c[1]),d+" "+e},a.redux.stickyInfo=function(){var b=a(".redux-main").innerWidth()-20;a("#info_bar").isOnScreen()||a("#redux-footer-sticky").isOnScreen()?(a("#redux-footer").css({background:"#eee",position:"inherit",bottom:"inherit",width:"inherit"}),a("#redux-sticky-padder").hide(),a("#redux-footer").removeClass("sticky-footer-fixed")):(a("#redux-footer").css({position:"fixed",bottom:"0",width:b,right:21}),a("#redux-footer").addClass("sticky-footer-fixed"),a(".redux-save-warn").css("left",a("#redux-sticky").offset().left),a("#redux-sticky-padder").show()),a("#info_bar").isOnScreen()?a("#redux-sticky").removeClass("sticky-save-warn"):a("#redux-sticky").addClass("sticky-save-warn")},a.redux.expandOptions=function(b){var c=b.find(".expand_options"),d=b.find(".redux-sidebar").width()-1,e=a(".redux-group-menu .active a").data("rel")+"_section_group";return c.hasClass("expanded")?(c.removeClass("expanded"),b.find(".redux-main").removeClass("expand"),b.find(".redux-sidebar").stop().animate({"margin-left":"0px"},500),b.find(".redux-main").stop().animate({"margin-left":d},500,function(){b.find(".redux-main").attr("style","")}),b.find(".redux-group-tab").each(function(){a(this).attr("id")!==e&&a(this).fadeOut("fast")})):(c.addClass("expanded"),b.find(".redux-main").addClass("expand"),b.find(".redux-sidebar").stop().animate({"margin-left":-d-113},500),b.find(".redux-main").stop().animate({"margin-left":"-1px"},500),b.find(".redux-group-tab").fadeIn("medium",function(){a.redux.initFields()})),!1},a.redux.scaleToRatio=function(b,c,d){var e=0,f=b.attr("data-width");f||(f=b.width(),b.attr("data-width",f));var g=b.attr("data-height"),h=b.height();(!g||h>g)&&(g=h,b.attr("data-height",g),b.css("width","auto"),b.attr("data-width",b.width()),f=b.width()),f>d?(e=d/f,b.css("width",d),b.css("height",g*e),g*=e,f*=e):b.css("width","auto"),g>c?(e=c/g,b.css("height",c),b.css("width",f*e),f*=e,g*=e):b.css("height","auto");var i=(a(document.getElementById("redux-header")).height()-b.height())/2;i>0?b.css("margin-top",i):b.css("margin-top",0),a("#redux-header .redux_field_search")&&a("#redux-header .redux_field_search").css("right",a(b).width()+20)},a.redux.resizeAds=function(){var b,c=a("#redux-header");c.length?b=c.width()-c.find(".display_header").width()-30:(c=a("#customize-info"),b=c.width());var d=c.height(),e=c.find(".rAds");a(e).find("video").each(function(){a.redux.scaleToRatio(a(this),d,b)}),a(e).find("img").each(function(){a.redux.scaleToRatio(a(this),d,b)}),a(e).find("div").each(function(){a.redux.scaleToRatio(a(this),d,b)}),"-99999px"==e.css("left")&&e.css("display","none").css("left","auto"),e.fadeIn("slow")},a(document).ready(function(){redux.rAds&&setTimeout(function(){var b;a("#redux-header").length>0?(a("#redux-header").append('<div class="rAds"></div>'),b=a("#redux-header")):(a("#customize-theme-controls ul").first().prepend('<li id="redux_rAds" class="accordion-section rAdsContainer" style="position: relative;"><div class="rAds"></div></li>'),b=a("#redux_rAds")),b.css("position","relative"),b.find(".rAds").attr("style","position:absolute; top: 6px; right: 6px; display:block !important;overflow:hidden;").css("left","-99999px"),b.find(".rAds").html(redux.rAds.replace(/<br\s?\/?>/,""));var c=b.find(".rAds");b.height(),b.width()-b.find(".display_header").width()-30;c.find("a").css("float","right").css("line-height",b.height()+"px").css("margin-left","5px"),a(document).ajaxComplete(function(){c.find("a").hide(),setTimeout(function(){a.redux.resizeAds(),c.find("a").fadeIn()},1400),setTimeout(function(){a.redux.resizeAds()},1500),a(document).unbind("ajaxComplete")}),a(window).resize(function(){a.redux.resizeAds()})},400)})}(jQuery),jQuery.noConflict();var confirmOnPageExit=function(a){a=a||window.event;var b=redux.args.save_pending;return a&&(a.returnValue=b),window.onbeforeunload=null,b};
ReduxCore/assets/js/vendor/qtip/jquery.qtip.js CHANGED
@@ -1,3951 +1,3451 @@
1
  /*
2
- * qTip2 - Pretty powerful tooltips - v2.2.0
3
  * http://qtip2.com
4
  *
5
- * Copyright (c) 2013 Craig Michael Thompson
6
- * Released under the MIT, GPL licenses
7
  * http://jquery.org/license
8
  *
9
- * Date: Thu Nov 21 2013 08:34 GMT+0000
10
  * Plugins: tips modal viewport svg imagemap ie6
11
- * Styles: basic css3
12
  */
13
  /*global window: false, jQuery: false, console: false, define: false */
14
 
15
- if ( typeof jQuery.qtip === 'undefined' ) {
16
- /* Cache window, document, undefined */
17
- (function( window, document, undefined ) {
18
 
19
- // Uses AMD or browser globals to create a jQuery plugin.
20
- (function( factory ) {
21
- "use strict";
22
- if ( typeof define === 'function' && define.amd ) {
23
- define( ['jquery'], factory );
24
- }
25
- else if ( jQuery && !jQuery.fn.qtip ) {
26
- factory( jQuery );
27
- }
28
  }
29
- (
30
- function( $ ) {
31
- "use strict"; // Enable ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
32
-
33
- ;// Munge the primitives - Paul Irish tip
34
- var TRUE = true,
35
- FALSE = false,
36
- NULL = null,
37
-
38
- // Common variables
39
- X = 'x', Y = 'y',
40
- WIDTH = 'width',
41
- HEIGHT = 'height',
42
-
43
- // Positioning sides
44
- TOP = 'top',
45
- LEFT = 'left',
46
- BOTTOM = 'bottom',
47
- RIGHT = 'right',
48
- CENTER = 'center',
49
-
50
- // Position adjustment types
51
- FLIP = 'flip',
52
- FLIPINVERT = 'flipinvert',
53
- SHIFT = 'shift',
54
-
55
- // Shortcut vars
56
- QTIP, PROTOTYPE, CORNER, CHECKS,
57
- PLUGINS = {},
58
- NAMESPACE = 'qtip',
59
- ATTR_HAS = 'data-hasqtip',
60
- ATTR_ID = 'data-qtip-id',
61
- WIDGET = ['ui-widget', 'ui-tooltip'],
62
- SELECTOR = '.' + NAMESPACE,
63
- INACTIVE_EVENTS = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split( ' ' ),
64
-
65
- CLASS_FIXED = NAMESPACE + '-fixed',
66
- CLASS_DEFAULT = NAMESPACE + '-default',
67
- CLASS_FOCUS = NAMESPACE + '-focus',
68
- CLASS_HOVER = NAMESPACE + '-hover',
69
- CLASS_DISABLED = NAMESPACE + '-disabled',
70
-
71
- replaceSuffix = '_replacedByqTip',
72
- oldtitle = 'oldtitle',
73
- trackingBound,
74
-
75
- // Browser detection
76
- BROWSER = {
77
- /*
78
- * IE version detection
79
- *
80
- * Adapted from: http://ajaxian.com/archives/attack-of-the-ie-conditional-comment
81
- * Credit to James Padolsey for the original implemntation!
82
- */
83
- ie: (function() {
84
- var v = 3, div = document.createElement( 'div' );
85
- while ( (div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->') ) {
86
- if ( !div.getElementsByTagName( 'i' )[0] ) {
87
- break;
88
- }
89
- }
90
- return v > 4 ? v : NaN;
91
- }()),
92
-
93
- /*
94
- * iOS version detection
95
- */
96
- iOS: parseFloat(
97
- ('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec( navigator.userAgent ) || [0, ''])[1])
98
- .replace( 'undefined', '3_2' ).replace( '_', '.' ).replace( '_', '' )
99
- ) || FALSE
100
- };
101
-
102
- ;
103
- function QTip( target, options, id, attr ) {
104
- // Elements and ID
105
- this.id = id;
106
- this.target = target;
107
- this.tooltip = NULL;
108
- this.elements = {target: target};
109
-
110
- // Internal constructs
111
- this._id = NAMESPACE + '-' + id;
112
- this.timers = {img: {}};
113
- this.options = options;
114
- this.plugins = {};
115
-
116
- // Cache object
117
- this.cache = {
118
- event: {},
119
- target: $(),
120
- disabled: FALSE,
121
- attr: attr,
122
- onTooltip: FALSE,
123
- lastClass: ''
124
- };
125
 
126
- // Set the initial flags
127
- this.rendered = this.destroyed = this.disabled = this.waiting =
128
- this.hiddenDuringWait = this.positioning = this.triggering = FALSE;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  }
 
130
 
131
- PROTOTYPE = QTip.prototype;
 
132
 
133
- PROTOTYPE._when = function( deferreds ) {
134
- return $.when.apply( $, deferreds );
135
- };
 
 
136
 
137
- PROTOTYPE.render = function( show ) {
138
- if ( this.rendered || this.destroyed ) {
139
- return this;
140
- } // If tooltip has already been rendered, exit
141
-
142
- var self = this,
143
- options = this.options,
144
- cache = this.cache,
145
- elements = this.elements,
146
- text = options.content.text,
147
- title = options.content.title,
148
- button = options.content.button,
149
- posOptions = options.position,
150
- namespace = '.' + this._id + ' ',
151
- deferreds = [],
152
- tooltip;
153
-
154
- // Add ARIA attributes to target
155
- $.attr( this.target[0], 'aria-describedby', this._id );
156
-
157
- // Create tooltip element
158
- this.tooltip = elements.tooltip = tooltip = $(
159
- '<div/>', {
160
- 'id': this._id,
161
- 'class': [NAMESPACE, CLASS_DEFAULT, options.style.classes, NAMESPACE + '-pos-' + options.position.my.abbrev()].join( ' ' ),
162
- 'width': options.style.width || '',
163
- 'height': options.style.height || '',
164
- 'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse,
165
-
166
- /* ARIA specific attributes */
167
- 'role': 'alert',
168
- 'aria-live': 'polite',
169
- 'aria-atomic': FALSE,
170
- 'aria-describedby': this._id + '-content',
171
- 'aria-hidden': TRUE
172
- }
173
- )
174
- .toggleClass( CLASS_DISABLED, this.disabled )
175
- .attr( ATTR_ID, this.id )
176
- .data( NAMESPACE, this )
177
- .appendTo( posOptions.container )
178
- .append(
179
- // Create content element
180
- elements.content = $(
181
- '<div />', {
182
- 'class': NAMESPACE + '-content',
183
- 'id': this._id + '-content',
184
- 'aria-atomic': TRUE
185
- }
186
- )
187
- );
188
 
189
- // Set rendered flag and prevent redundant reposition calls for now
190
- this.rendered = -1;
191
- this.positioning = TRUE;
 
 
 
 
192
 
193
- // Create title...
194
- if ( title ) {
 
195
 
196
- this._createTitle();
 
 
 
197
 
198
- // Update title only if its not a callback (called in toggle if so)
199
- if ( !$.isFunction( title ) ) {
200
- deferreds.push( this._updateTitle( title, FALSE ) );
201
- }
202
- }
203
 
204
- // Create button
205
- if ( button ) {
206
- this._createButton();
207
- }
 
 
208
 
209
- // Set proper rendered flag and update content if not a callback function (called in toggle)
210
- if ( !$.isFunction( text ) ) {
211
- deferreds.push( this._updateContent( text, FALSE ) );
212
- }
213
- this.rendered = TRUE;
214
 
215
- // Setup widget classes
216
- this._setWidget();
217
 
218
- // Initialize 'render' plugins
219
- $.each(
220
- PLUGINS, function( name ) {
221
- var instance;
222
- if ( this.initialize === 'render' && (instance = this( self )) ) {
223
- self.plugins[name] = instance;
224
- }
225
- }
226
- );
227
 
228
- // Unassign initial events and assign proper events
229
- this._unassignEvents();
230
- this._assignEvents();
231
 
232
- // When deferreds have completed
233
- this._when( deferreds ).then(
234
- function() {
235
- // tooltiprender event
236
- self._trigger( 'render' );
237
 
238
- // Reset flags
239
- self.positioning = FALSE;
 
 
240
 
241
- // Show tooltip if not hidden during wait period
242
- if ( !self.hiddenDuringWait && (options.show.ready || show) ) {
243
- self.toggle( TRUE, cache.event, FALSE );
244
- }
245
- self.hiddenDuringWait = FALSE;
246
- }
247
- );
248
 
249
- // Expose API
250
- QTIP.api[this.id] = this;
 
 
251
 
252
- return this;
253
- };
 
 
 
254
 
255
- PROTOTYPE.destroy = function( immediate ) {
256
- // Set flag the signify destroy is taking place to plugins
257
- // and ensure it only gets destroyed once!
258
- if ( this.destroyed ) {
259
- return this.target;
260
- }
261
 
262
- function process() {
263
- if ( this.destroyed ) {
264
- return;
265
- }
266
- this.destroyed = TRUE;
267
 
268
- var target = this.target,
269
- title = target.attr( oldtitle );
 
 
270
 
271
- // Destroy tooltip if rendered
272
- if ( this.rendered ) {
273
- this.tooltip.stop( 1, 0 ).find( '*' ).remove().end().remove();
274
- }
275
 
276
- // Destroy all plugins
277
- $.each(
278
- this.plugins, function( name ) {
279
- this.destroy && this.destroy();
280
- }
281
- );
282
-
283
- // Clear timers and remove bound events
284
- clearTimeout( this.timers.show );
285
- clearTimeout( this.timers.hide );
286
- this._unassignEvents();
287
-
288
- // Remove api object and ARIA attributes
289
- target.removeData( NAMESPACE )
290
- .removeAttr( ATTR_ID )
291
- .removeAttr( ATTR_HAS )
292
- .removeAttr( 'aria-describedby' );
293
-
294
- // Reset old title attribute if removed
295
- if ( this.options.suppress && title ) {
296
- target.attr( 'title', title ).removeAttr( oldtitle );
297
- }
298
 
299
- // Remove qTip events associated with this API
300
- this._unbind( target );
301
 
302
- // Remove ID from used id objects, and delete object references
303
- // for better garbage collection and leak protection
304
- this.options = this.elements = this.cache = this.timers =
305
- this.plugins = this.mouse = NULL;
 
306
 
307
- // Delete epoxsed API object
308
- delete QTIP.api[this.id];
309
- }
310
 
311
- // If an immediate destory is needed
312
- if ( (immediate !== TRUE || this.triggering === 'hide') && this.rendered ) {
313
- this.tooltip.one( 'tooltiphidden', $.proxy( process, this ) );
314
- !this.triggering && this.hide();
315
- }
316
 
317
- // If we're not in the process of hiding... process
318
- else {
319
- process.call( this );
320
- }
321
 
322
- return this.target;
323
- };
 
324
 
325
- ;
326
- function invalidOpt( a ) {
327
- return a === NULL || $.type( a ) !== 'object';
328
- }
329
 
330
- function invalidContent( c ) {
331
- return !( $.isFunction( c ) || (c && c.attr) || c.length || ($.type( c ) === 'object' && (c.jquery || c.then) ));
 
 
332
  }
 
333
 
334
- // Option object sanitizer
335
- function sanitizeOptions( opts ) {
336
- var content, text, ajax, once;
337
-
338
- if ( invalidOpt( opts ) ) {
339
- return FALSE;
340
- }
341
-
342
- if ( invalidOpt( opts.metadata ) ) {
343
- opts.metadata = {type: opts.metadata};
344
- }
345
-
346
- if ( 'content' in opts ) {
347
- content = opts.content;
348
-
349
- if ( invalidOpt( content ) || content.jquery || content.done ) {
350
- content = opts.content = {
351
- text: (text = invalidContent( content ) ? FALSE : content)
352
- };
353
- }
354
- else {
355
- text = content.text;
356
- }
357
-
358
- // DEPRECATED - Old content.ajax plugin functionality
359
- // Converts it into the proper Deferred syntax
360
- if ( 'ajax' in content ) {
361
- ajax = content.ajax;
362
- once = ajax && ajax.once !== FALSE;
363
- delete content.ajax;
364
-
365
- content.text = function( event, api ) {
366
- var loading = text || $( this ).attr( api.options.content.attr ) || 'Loading...',
367
-
368
- deferred = $.ajax(
369
- $.extend( {}, ajax, {context: api} )
370
- )
371
- .then( ajax.success, NULL, ajax.error )
372
- .then(
373
- function( content ) {
374
- if ( content && once ) {
375
- api.set( 'content.text', content );
376
- }
377
- return content;
378
- },
379
- function( xhr, status, error ) {
380
- if ( api.destroyed || xhr.status === 0 ) {
381
- return;
382
- }
383
- api.set( 'content.text', status + ': ' + error );
384
- }
385
- );
386
-
387
- return !once ? (api.set( 'content.text', loading ), deferred) : loading;
388
- };
389
- }
390
-
391
- if ( 'title' in content ) {
392
- if ( !invalidOpt( content.title ) ) {
393
- content.button = content.title.button;
394
- content.title = content.title.text;
395
- }
396
 
397
- if ( invalidContent( content.title || FALSE ) ) {
398
- content.title = FALSE;
399
- }
400
- }
401
- }
402
 
403
- if ( 'position' in opts && invalidOpt( opts.position ) ) {
404
- opts.position = {my: opts.position, at: opts.position};
405
- }
 
 
 
 
 
 
 
 
 
406
 
407
- if ( 'show' in opts && invalidOpt( opts.show ) ) {
408
- opts.show = opts.show.jquery ? {target: opts.show} :
409
- opts.show === TRUE ? {ready: TRUE} : {event: opts.show};
410
- }
411
 
412
- if ( 'hide' in opts && invalidOpt( opts.hide ) ) {
413
- opts.hide = opts.hide.jquery ? {target: opts.hide} : {event: opts.hide};
 
 
414
  }
415
 
416
- if ( 'style' in opts && invalidOpt( opts.style ) ) {
417
- opts.style = {classes: opts.style};
418
  }
419
-
420
- // Sanitize plugin options
421
- $.each(
422
- PLUGINS, function() {
423
- this.sanitize && this.sanitize( opts );
424
- }
425
- );
426
-
427
- return opts;
428
  }
 
429
 
430
- // Setup builtin .set() option checks
431
- CHECKS = PROTOTYPE.checks = {
432
- builtin: {
433
- // Core checks
434
- '^id$': function( obj, o, v, prev ) {
435
- var id = v === TRUE ? QTIP.nextid : v,
436
- new_id = NAMESPACE + '-' + id;
437
 
438
- if ( id !== FALSE && id.length > 0 && !$( '#' + new_id ).length ) {
439
- this._id = new_id;
 
 
440
 
441
- if ( this.rendered ) {
442
- this.tooltip[0].id = this._id;
443
- this.elements.content[0].id = this._id + '-content';
444
- this.elements.title[0].id = this._id + '-title';
445
- }
446
- }
447
- else {
448
- obj[o] = prev;
449
- }
450
- },
451
- '^prerender': function( obj, o, v ) {
452
- v && !this.rendered && this.render( this.options.show.ready );
453
- },
454
 
455
- // Content checks
456
- '^content.text$': function( obj, o, v ) {
457
- this._updateContent( v );
458
- },
459
- '^content.attr$': function( obj, o, v, prev ) {
460
- if ( this.options.content.text === this.target.attr( prev ) ) {
461
- this._updateContent( this.target.attr( v ) );
462
- }
463
- },
464
- '^content.title$': function( obj, o, v ) {
465
 
466
- // Remove title if content is null
467
- if ( !v ) {
468
- return this._removeTitle();
469
- }
470
 
471
- // If title isn't already created, create it now and update
472
- v && !this.elements.title && this._createTitle();
473
- this._updateTitle( v );
474
- },
475
- '^content.button$': function( obj, o, v ) {
476
- this._updateButton( v );
477
- },
478
- '^content.title.(text|button)$': function( obj, o, v ) {
479
- this.set( 'content.' + o, v ); // Backwards title.text/button compat
480
- },
481
 
482
- // Position checks
483
- '^position.(my|at)$': function( obj, o, v ) {
484
- 'string' === typeof v && (obj[o] = new CORNER( v, o === 'at' ));
485
- },
486
- '^position.container$': function( obj, o, v ) {
487
- this.rendered && this.tooltip.appendTo( v );
488
- },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
489
 
490
- // Show checks
491
- '^show.ready$': function( obj, o, v ) {
492
- v && (!this.rendered && this.render( TRUE ) || this.toggle( TRUE ));
493
- },
494
 
495
- // Style checks
496
- '^style.classes$': function( obj, o, v, p ) {
497
- this.rendered && this.tooltip.removeClass( p ).addClass( v );
498
- },
499
- '^style.(width|height)': function( obj, o, v ) {
500
- this.rendered && this.tooltip.css( o, v );
501
- },
502
- '^style.widget|content.title': function() {
503
- this.rendered && this._setWidget();
504
- },
505
- '^style.def': function( obj, o, v ) {
506
- this.rendered && this.tooltip.toggleClass( CLASS_DEFAULT, !!v );
507
- },
508
 
509
- // Events check
510
- '^events.(render|show|move|hide|focus|blur)$': function( obj, o, v ) {
511
- this.rendered && this.tooltip[($.isFunction( v ) ? '' : 'un') + 'bind']( 'tooltip' + o, v );
512
- },
513
 
514
- // Properties which require event reassignment
515
- '^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() {
516
- if ( !this.rendered ) {
517
- return;
518
- }
519
 
520
- // Set tracking flag
521
- var posOptions = this.options.position;
522
- this.tooltip.attr( 'tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse );
523
 
524
- // Reassign events
525
- this._unassignEvents();
526
- this._assignEvents();
527
- }
528
- }
529
- };
530
 
531
- // Dot notation converter
532
- function convertNotation( options, notation ) {
533
- var i = 0, obj, option = options,
534
 
535
- // Split notation into array
536
- levels = notation.split( '.' );
537
 
538
- // Loop through
539
- while ( option = option[levels[i++]] ) {
540
- if ( i < levels.length ) {
541
- obj = option;
 
 
 
 
 
542
  }
543
  }
544
-
545
- return [obj || options, levels.pop()];
546
  }
 
 
547
 
548
- PROTOTYPE.get = function( notation ) {
549
- if ( this.destroyed ) {
550
- return this;
551
- }
552
-
553
- var o = convertNotation( this.options, notation.toLowerCase() ),
554
- result = o[0][o[1]];
555
 
556
- return result.precedance ? result.string() : result;
557
- };
558
 
559
- function setCallback( notation, args ) {
560
- var category, rule, match;
 
 
 
561
 
562
- for ( category in this.checks ) {
563
- for ( rule in this.checks[category] ) {
564
- if ( match = (new RegExp( rule, 'i' )).exec( notation ) ) {
565
- args.push( match );
 
566
 
567
- if ( category === 'builtin' || this.plugins[category] ) {
568
- this.checks[category][rule].apply(
569
- this.plugins[category] || this, args
570
- );
571
- }
572
- }
573
- }
574
- }
575
  }
576
 
577
- var rmove = /^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,
578
- rrender = /^prerender|show\.ready/i;
 
 
579
 
580
- PROTOTYPE.set = function( option, value ) {
581
- if ( this.destroyed ) {
582
- return this;
583
- }
584
 
585
- var rendered = this.rendered,
586
- reposition = FALSE,
587
- options = this.options,
588
- checks = this.checks,
589
- name;
590
-
591
- // Convert singular option/value pair into object form
592
- if ( 'string' === typeof option ) {
593
- name = option;
594
- option = {};
595
- option[name] = value;
596
- }
597
- else {
598
- option = $.extend( {}, option );
599
- }
600
 
601
- // Set all of the defined options to their new values
602
- $.each(
603
- option, function( notation, value ) {
604
- if ( rendered && rrender.test( notation ) ) {
605
- delete option[notation];
606
- return;
607
- }
608
 
609
- // Set new obj value
610
- var obj = convertNotation( options, notation.toLowerCase() ), previous;
611
- previous = obj[0][obj[1]];
612
- obj[0][obj[1]] = value && value.nodeType ? $( value ) : value;
 
 
 
613
 
614
- // Also check if we need to reposition
615
- reposition = rmove.test( notation ) || reposition;
 
 
616
 
617
- // Set the new params for the callback
618
- option[notation] = [obj[0], obj[1], value, previous];
619
- }
620
- );
 
621
 
622
- // Re-sanitize options
623
- sanitizeOptions( options );
624
 
625
- /*
626
- * Execute any valid callbacks for the set options
627
- * Also set positioning flag so we don't get loads of redundant repositioning calls.
628
- */
629
- this.positioning = TRUE;
630
- $.each( option, $.proxy( setCallback, this ) );
631
- this.positioning = FALSE;
632
 
633
- // Update position if needed
634
- if ( this.rendered && this.tooltip[0].offsetWidth > 0 && reposition ) {
635
- this.reposition( options.position.target === 'mouse' ? NULL : this.cache.event );
636
- }
 
 
 
 
 
 
637
 
638
- return this;
639
- };
640
 
641
- ;
642
- PROTOTYPE._update = function( content, element, reposition ) {
643
- var self = this,
644
- cache = this.cache;
 
 
645
 
646
- // Make sure tooltip is rendered and content is defined. If not return
647
- if ( !this.rendered || !content ) {
648
- return FALSE;
649
- }
650
 
651
- // Use function to parse content
652
- if ( $.isFunction( content ) ) {
653
- content = content.call( this.elements.target, cache.event, this ) || '';
654
- }
 
 
 
655
 
656
- // Handle deferred content
657
- if ( $.isFunction( content.then ) ) {
658
- cache.waiting = TRUE;
659
- return content.then(
660
- function( c ) {
661
- cache.waiting = FALSE;
662
- return self._update( c, element );
663
- }, NULL, function( e ) {
664
- return self._update( e, element );
665
- }
666
- );
667
- }
668
 
669
- // If content is null... return false
670
- if ( content === FALSE || (!content && content !== '') ) {
671
- return FALSE;
672
- }
673
 
674
- // Append new content if its a DOM array and show it if hidden
675
- if ( content.jquery && content.length > 0 ) {
676
- element.empty().append(
677
- content.css( {display: 'block', visibility: 'visible'} )
678
- );
679
- }
680
 
681
- // Content is a regular string, insert the new content
682
- else {
683
- element.html( content );
684
- }
685
 
686
- // Wait for content to be loaded, and reposition
687
- return this._waitForContent( element ).then(
688
- function( images ) {
689
- if ( images.images && images.images.length && self.rendered && self.tooltip[0].offsetWidth > 0 ) {
690
- self.reposition( cache.event, !images.length );
691
- }
692
- }
693
- );
694
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
695
 
696
- PROTOTYPE._waitForContent = function( element ) {
697
- var cache = this.cache;
 
 
698
 
699
- // Set flag
700
- cache.waiting = TRUE;
 
 
701
 
702
- // If imagesLoaded is included, ensure images have loaded and return promise
703
- return ( $.fn.imagesLoaded ? element.imagesLoaded() : $.Deferred().resolve( [] ) )
704
- .done(
705
- function() {
706
- cache.waiting = FALSE;
707
- }
708
- )
709
- .promise();
710
- };
711
 
712
- PROTOTYPE._updateContent = function( content, reposition ) {
713
- this._update( content, this.elements.content, reposition );
714
- };
 
 
715
 
716
- PROTOTYPE._updateTitle = function( content, reposition ) {
717
- if ( this._update( content, this.elements.title, reposition ) === FALSE ) {
718
- this._removeTitle( FALSE );
719
- }
720
  };
721
 
722
- PROTOTYPE._createTitle = function() {
723
- var elements = this.elements,
724
- id = this._id + '-title';
 
 
 
725
 
726
- // Destroy previous title element, if present
727
- if ( elements.titlebar ) {
728
- this._removeTitle();
 
 
 
729
  }
730
-
731
- // Create title bar and title elements
732
- elements.titlebar = $(
733
- '<div />', {
734
- 'class': NAMESPACE + '-titlebar ' + (this.options.style.widget ? createWidgetClass( 'header' ) : '')
735
- }
736
- )
737
- .append(
738
- elements.title = $(
739
- '<div />', {
740
- 'id': id,
741
- 'class': NAMESPACE + '-title',
742
- 'aria-atomic': TRUE
743
- }
744
- )
745
- )
746
- .insertBefore( elements.content )
747
-
748
- // Button-specific events
749
- .delegate(
750
- '.qtip-close', 'mousedown keydown mouseup keyup mouseout', function( event ) {
751
- $( this ).toggleClass(
752
- 'ui-state-active ui-state-focus', event.type.substr( -4 ) === 'down'
753
- );
754
- }
755
- )
756
- .delegate(
757
- '.qtip-close', 'mouseover mouseout', function( event ) {
758
- $( this ).toggleClass( 'ui-state-hover', event.type === 'mouseover' );
759
- }
760
- );
761
-
762
- // Create button if enabled
763
- if ( this.options.content.button ) {
764
- this._createButton();
765
  }
766
- };
 
 
 
 
767
 
768
- PROTOTYPE._removeTitle = function( reposition ) {
769
- var elements = this.elements;
 
770
 
771
- if ( elements.title ) {
772
- elements.titlebar.remove();
773
- elements.titlebar = elements.title = elements.button = NULL;
 
774
 
775
- // Reposition if enabled
776
- if ( reposition !== FALSE ) {
777
- this.reposition();
778
- }
 
779
  }
780
- };
781
 
782
- ;
783
- PROTOTYPE.reposition = function( event, effect ) {
784
- if ( !this.rendered || this.positioning || this.destroyed ) {
785
- return this;
786
- }
787
 
788
- // Set positioning flag
789
- this.positioning = TRUE;
790
-
791
- var cache = this.cache,
792
- tooltip = this.tooltip,
793
- posOptions = this.options.position,
794
- target = posOptions.target,
795
- my = posOptions.my,
796
- at = posOptions.at,
797
- viewport = posOptions.viewport,
798
- container = posOptions.container,
799
- adjust = posOptions.adjust,
800
- method = adjust.method.split( ' ' ),
801
- tooltipWidth = tooltip.outerWidth( FALSE ),
802
- tooltipHeight = tooltip.outerHeight( FALSE ),
803
- targetWidth = 0,
804
- targetHeight = 0,
805
- type = tooltip.css( 'position' ),
806
- position = {left: 0, top: 0},
807
- visible = tooltip[0].offsetWidth > 0,
808
- isScroll = event && event.type === 'scroll',
809
- win = $( window ),
810
- doc = container[0].ownerDocument,
811
- mouse = this.mouse,
812
- pluginCalculations, offset;
813
-
814
- // Check if absolute position was passed
815
- if ( $.isArray( target ) && target.length === 2 ) {
816
- // Force left top and set position
817
- at = {x: LEFT, y: TOP};
818
- position = {left: target[0], top: target[1]};
819
- }
820
 
821
- // Check if mouse was the target
822
- else if ( target === 'mouse' ) {
823
- // Force left top to allow flipping
824
- at = {x: LEFT, y: TOP};
 
 
825
 
826
- // Use the cached mouse coordinates if available, or passed event has no coordinates
827
- if ( mouse && mouse.pageX && (adjust.mouse || !event || !event.pageX) ) {
828
- event = mouse;
829
- }
 
 
 
830
 
831
- // If the passed event has no coordinates (such as a scroll event)
832
- else if ( !event || !event.pageX ) {
833
- // Use the mouse origin that caused the show event, if distance hiding is enabled
834
- if ( (!adjust.mouse || this.options.show.distance) && cache.origin && cache.origin.pageX ) {
835
- event = cache.origin;
836
- }
837
 
838
- // Use cached event for resize/scroll events
839
- else if ( !event || (event && (event.type === 'resize' || event.type === 'scroll')) ) {
840
- event = cache.event;
841
- }
842
- }
 
 
 
843
 
844
- // Calculate body and container offset and take them into account below
845
- if ( type !== 'static' ) {
846
- position = container.offset();
847
- }
848
- if ( doc.body.offsetWidth !== (window.innerWidth || doc.documentElement.clientWidth) ) {
849
- offset = $( document.body ).offset();
850
- }
851
 
852
- // Use event coordinates for position
853
- position = {
854
- left: event.pageX - position.left + (offset && offset.left || 0),
855
- top: event.pageY - position.top + (offset && offset.top || 0)
856
- };
857
 
858
- // Scroll events are a pain, some browsers
859
- if ( adjust.mouse && isScroll && mouse ) {
860
- position.left -= (mouse.scrollX || 0) - win.scrollLeft();
861
- position.top -= (mouse.scrollY || 0) - win.scrollTop();
862
- }
863
- }
864
 
865
- // Target wasn't mouse or absolute...
866
- else {
867
- // Check if event targetting is being used
868
- if ( target === 'event' ) {
869
- if ( event && event.target && event.type !== 'scroll' && event.type !== 'resize' ) {
870
- cache.target = $( event.target );
871
- }
872
- else if ( !event.target ) {
873
- cache.target = this.elements.target;
874
- }
875
- }
876
- else if ( target !== 'event' ) {
877
- cache.target = $( target.jquery ? target : this.elements.target );
878
- }
879
- target = cache.target;
880
 
881
- // Parse the target into a jQuery object and make sure there's an element present
882
- target = $( target ).eq( 0 );
883
- if ( target.length === 0 ) {
884
- return this;
885
- }
886
 
887
- // Check if window or document is the target
888
- else if ( target[0] === document || target[0] === window ) {
889
- targetWidth = BROWSER.iOS ? window.innerWidth : target.width();
890
- targetHeight = BROWSER.iOS ? window.innerHeight : target.height();
891
 
892
- if ( target[0] === window ) {
893
- position = {
894
- top: (viewport || target).scrollTop(),
895
- left: (viewport || target).scrollLeft()
896
- };
897
- }
898
- }
899
 
900
- // Check if the target is an <AREA> element
901
- else if ( PLUGINS.imagemap && target.is( 'area' ) ) {
902
- pluginCalculations = PLUGINS.imagemap(
903
- this, target, at, PLUGINS.viewport ? method : FALSE
904
- );
905
- }
906
 
907
- // Check if the target is an SVG element
908
- else if ( PLUGINS.svg && target && target[0].ownerSVGElement ) {
909
- pluginCalculations = PLUGINS.svg( this, target, at, PLUGINS.viewport ? method : FALSE );
910
- }
911
 
912
- // Otherwise use regular jQuery methods
913
- else {
914
- targetWidth = target.outerWidth( FALSE );
915
- targetHeight = target.outerHeight( FALSE );
916
- position = target.offset();
917
- }
 
918
 
919
- // Parse returned plugin values into proper variables
920
- if ( pluginCalculations ) {
921
- targetWidth = pluginCalculations.width;
922
- targetHeight = pluginCalculations.height;
923
- offset = pluginCalculations.offset;
924
- position = pluginCalculations.position;
925
- }
926
 
927
- // Adjust position to take into account offset parents
928
- position = this.reposition.offset( target, position, container );
929
 
930
- // Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2)
931
- if ( (BROWSER.iOS > 3.1 && BROWSER.iOS < 4.1) ||
932
- (BROWSER.iOS >= 4.3 && BROWSER.iOS < 4.33) ||
933
- (!BROWSER.iOS && type === 'fixed')
934
- ) {
935
- position.left -= win.scrollLeft();
936
- position.top -= win.scrollTop();
937
- }
938
 
939
- // Adjust position relative to target
940
- if ( !pluginCalculations || (pluginCalculations && pluginCalculations.adjustable !== FALSE) ) {
941
- position.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0;
942
- position.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0;
943
- }
944
- }
945
 
946
- // Adjust position relative to tooltip
947
- position.left += adjust.x + (my.x === RIGHT ? -tooltipWidth : my.x === CENTER ? -tooltipWidth / 2 : 0);
948
- position.top += adjust.y + (my.y === BOTTOM ? -tooltipHeight : my.y === CENTER ? -tooltipHeight / 2 : 0);
 
949
 
950
- // Use viewport adjustment plugin if enabled
951
- if ( PLUGINS.viewport ) {
952
- position.adjusted = PLUGINS.viewport(
953
- this, position, posOptions, targetWidth, targetHeight, tooltipWidth, tooltipHeight
954
- );
955
 
956
- // Apply offsets supplied by positioning plugin (if used)
957
- if ( offset && position.adjusted.left ) {
958
- position.left += offset.left;
959
- }
960
- if ( offset && position.adjusted.top ) {
961
- position.top += offset.top;
962
- }
963
  }
964
-
965
- // Viewport adjustment is disabled, set values to zero
966
  else {
967
- position.adjusted = {left: 0, top: 0};
968
- }
969
-
970
- // tooltipmove event
971
- if ( !this._trigger( 'move', [position, viewport.elem || viewport], event ) ) {
972
- return this;
973
  }
974
- delete position.adjusted;
975
 
976
- // If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly
977
- if ( effect === FALSE || !visible || isNaN( position.left ) || isNaN( position.top ) || target === 'mouse' || !$.isFunction( posOptions.effect ) ) {
978
- tooltip.css( position );
979
- }
980
 
981
- // Use custom function if provided
982
- else if ( $.isFunction( posOptions.effect ) ) {
983
- posOptions.effect.call( tooltip, this, $.extend( {}, position ) );
984
- tooltip.queue(
985
- function( next ) {
986
- // Reset attributes to avoid cross-browser rendering bugs
987
- $( this ).css( {opacity: '', height: ''} );
988
- if ( BROWSER.ie ) {
989
- this.style.removeAttribute( 'filter' );
990
- }
991
-
992
- next();
993
- }
994
- );
995
- }
996
 
997
- // Set positioning flag
998
- this.positioning = FALSE;
 
 
999
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1000
  return this;
1001
- };
1002
 
1003
- // Custom (more correct for qTip!) offset calculator
1004
- PROTOTYPE.reposition.offset = function( elem, pos, container ) {
1005
- if ( !container[0] ) {
1006
- return pos;
1007
- }
1008
 
1009
- var ownerDocument = $( elem[0].ownerDocument ),
1010
- quirks = !!BROWSER.ie && document.compatMode !== 'CSS1Compat',
1011
- parent = container[0],
1012
- scrolled, position, parentOffset, overflow;
1013
 
1014
- function scroll( e, i ) {
1015
- pos.left += i * e.scrollLeft();
1016
- pos.top += i * e.scrollTop();
1017
- }
1018
 
1019
- // Compensate for non-static containers offset
1020
- do {
1021
- if ( (position = $.css( parent, 'position' )) !== 'static' ) {
1022
- if ( position === 'fixed' ) {
1023
- parentOffset = parent.getBoundingClientRect();
1024
- scroll( ownerDocument, -1 );
1025
- }
1026
- else {
1027
- parentOffset = $( parent ).position();
1028
- parentOffset.left += (parseFloat( $.css( parent, 'borderLeftWidth' ) ) || 0);
1029
- parentOffset.top += (parseFloat( $.css( parent, 'borderTopWidth' ) ) || 0);
1030
- }
1031
 
1032
- pos.left -= parentOffset.left + (parseFloat( $.css( parent, 'marginLeft' ) ) || 0);
1033
- pos.top -= parentOffset.top + (parseFloat( $.css( parent, 'marginTop' ) ) || 0);
1034
 
1035
- // If this is the first parent element with an overflow of "scroll" or "auto", store it
1036
- if ( !scrolled && (overflow = $.css(
1037
- parent, 'overflow'
1038
- )) !== 'hidden' && overflow !== 'visible' ) {
1039
- scrolled = $( parent );
1040
- }
1041
- }
1042
- }
1043
- while ( (parent = parent.offsetParent) );
1044
 
1045
- // Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode)
1046
- if ( scrolled && (scrolled[0] !== ownerDocument[0] || quirks) ) {
1047
- scroll( scrolled, 1 );
1048
- }
1049
 
1050
- return pos;
1051
- };
1052
 
1053
- // Corner class
1054
- var C = (CORNER = PROTOTYPE.reposition.Corner = function( corner, forceY ) {
1055
- corner = ('' + corner).replace( /([A-Z])/, ' $1' ).replace( /middle/gi, CENTER ).toLowerCase();
1056
- this.x = (corner.match( /left|right/i ) || corner.match( /center/ ) || ['inherit'])[0].toLowerCase();
1057
- this.y = (corner.match( /top|bottom|center/i ) || ['inherit'])[0].toLowerCase();
1058
- this.forceY = !!forceY;
1059
 
1060
- var f = corner.charAt( 0 );
1061
- this.precedance = (f === 't' || f === 'b' ? Y : X);
1062
- }).prototype;
1063
 
1064
- C.invert = function( z, center ) {
1065
- this[z] = this[z] === LEFT ? RIGHT : this[z] === RIGHT ? LEFT : center || this[z];
1066
- };
1067
 
1068
- C.string = function() {
1069
- var x = this.x, y = this.y;
1070
- return x === y ? x : this.precedance === Y || (this.forceY && y !== 'center') ? y + ' ' + x : x + ' ' + y;
1071
- };
1072
 
1073
- C.abbrev = function() {
1074
- var result = this.string().split( ' ' );
1075
- return result[0].charAt( 0 ) + (result[1] && result[1].charAt( 0 ) || '');
1076
- };
1077
-
1078
- C.clone = function() {
1079
- return new CORNER( this.string(), this.forceY );
1080
- };
1081
- ;
1082
- PROTOTYPE.toggle = function( state, event ) {
1083
- var cache = this.cache,
1084
- options = this.options,
1085
- tooltip = this.tooltip;
1086
-
1087
- // Try to prevent flickering when tooltip overlaps show element
1088
- if ( event ) {
1089
- if ( (/over|enter/).test( event.type ) && (/out|leave/).test( cache.event.type ) &&
1090
- options.show.target.add( event.target ).length === options.show.target.length &&
1091
- tooltip.has( event.relatedTarget ).length ) {
1092
- return this;
1093
- }
1094
-
1095
- // Cache event
1096
- cache.event = cloneEvent( event );
1097
- }
1098
 
1099
- // If we're currently waiting and we've just hidden... stop it
1100
- this.waiting && !state && (this.hiddenDuringWait = TRUE);
1101
-
1102
- // Render the tooltip if showing and it isn't already
1103
- if ( !this.rendered ) {
1104
- return state ? this.render( 1 ) : this;
1105
- }
1106
- else if ( this.destroyed || this.disabled ) {
1107
- return this;
1108
- }
1109
-
1110
- var type = state ? 'show' : 'hide',
1111
- opts = this.options[type],
1112
- otherOpts = this.options[!state ? 'show' : 'hide'],
1113
- posOptions = this.options.position,
1114
- contentOptions = this.options.content,
1115
- width = this.tooltip.css( 'width' ),
1116
- visible = this.tooltip.is( ':visible' ),
1117
- animate = state || opts.target.length === 1,
1118
- sameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target,
1119
- identicalState, allow, showEvent, delay, after;
1120
-
1121
- // Detect state if valid one isn't provided
1122
- if ( (typeof state).search( 'boolean|number' ) ) {
1123
- state = !visible;
1124
- }
1125
-
1126
- // Check if the tooltip is in an identical state to the new would-be state
1127
- identicalState = !tooltip.is( ':animated' ) && visible === state && sameTarget;
1128
-
1129
- // Fire tooltip(show/hide) event and check if destroyed
1130
- allow = !identicalState ? !!this._trigger( type, [90] ) : NULL;
1131
-
1132
- // Check to make sure the tooltip wasn't destroyed in the callback
1133
- if ( this.destroyed ) {
1134
- return this;
1135
- }
1136
-
1137
- // If the user didn't stop the method prematurely and we're showing the tooltip, focus it
1138
- if ( allow !== FALSE && state ) {
1139
- this.focus( event );
1140
- }
1141
 
1142
- // If the state hasn't changed or the user stopped it, return early
1143
- if ( !allow || identicalState ) {
1144
- return this;
1145
- }
1146
 
1147
- // Set ARIA hidden attribute
1148
- $.attr( tooltip[0], 'aria-hidden', !!!state );
 
 
 
 
 
 
 
1149
 
1150
- // Execute state specific properties
1151
- if ( state ) {
1152
- // Store show origin coordinates
1153
- cache.origin = cloneEvent( this.mouse );
1154
 
1155
- // Update tooltip content & title if it's a dynamic function
1156
- if ( $.isFunction( contentOptions.text ) ) {
1157
- this._updateContent( contentOptions.text, FALSE );
1158
- }
1159
- if ( $.isFunction( contentOptions.title ) ) {
1160
- this._updateTitle( contentOptions.title, FALSE );
1161
- }
1162
 
1163
- // Cache mousemove events for positioning purposes (if not already tracking)
1164
- if ( !trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse ) {
1165
- $( document ).bind( 'mousemove.' + NAMESPACE, this._storeMouse );
1166
- trackingBound = TRUE;
1167
- }
1168
 
1169
- // Update the tooltip position (set width first to prevent viewport/max-width issues)
1170
- if ( !width ) {
1171
- tooltip.css( 'width', tooltip.outerWidth( FALSE ) );
1172
- }
1173
- this.reposition( event, arguments[2] );
1174
- if ( !width ) {
1175
- tooltip.css( 'width', '' );
1176
- }
1177
 
1178
- // Hide other tooltips if tooltip is solo
1179
- if ( !!opts.solo ) {
1180
- (typeof opts.solo === 'string' ? $( opts.solo ) : $( SELECTOR, opts.solo ))
1181
- .not( tooltip ).not( opts.target ).qtip( 'hide', $.Event( 'tooltipsolo' ) );
1182
- }
1183
- }
1184
- else {
1185
- // Clear show timer if we're hiding
1186
- clearTimeout( this.timers.show );
1187
-
1188
- // Remove cached origin on hide
1189
- delete cache.origin;
1190
-
1191
- // Remove mouse tracking event if not needed (all tracking qTips are hidden)
1192
- if ( trackingBound && !$(
1193
- SELECTOR + '[tracking="true"]:visible', opts.solo
1194
- ).not( tooltip ).length ) {
1195
- $( document ).unbind( 'mousemove.' + NAMESPACE );
1196
- trackingBound = FALSE;
1197
- }
1198
 
1199
- // Blur the tooltip
1200
- this.blur( event );
 
1201
  }
1202
 
1203
- // Define post-animation, state specific properties
1204
- after = $.proxy(
1205
- function() {
1206
- if ( state ) {
1207
- // Prevent antialias from disappearing in IE by removing filter
1208
- if ( BROWSER.ie ) {
1209
- tooltip[0].style.removeAttribute( 'filter' );
1210
- }
1211
-
1212
- // Remove overflow setting to prevent tip bugs
1213
- tooltip.css( 'overflow', '' );
1214
-
1215
- // Autofocus elements if enabled
1216
- if ( 'string' === typeof opts.autofocus ) {
1217
- $( this.options.show.autofocus, tooltip ).focus();
1218
- }
1219
-
1220
- // If set, hide tooltip when inactive for delay period
1221
- this.options.show.target.trigger( 'qtip-' + this.id + '-inactive' );
1222
- }
1223
- else {
1224
- // Reset CSS states
1225
- tooltip.css(
1226
- {
1227
- display: '',
1228
- visibility: '',
1229
- opacity: '',
1230
- left: '',
1231
- top: ''
1232
- }
1233
- );
1234
- }
1235
 
1236
- // tooltipvisible/tooltiphidden events
1237
- this._trigger( state ? 'visible' : 'hidden' );
1238
- }, this
1239
- );
1240
 
1241
- // If no effect type is supplied, use a simple toggle
1242
- if ( opts.effect === FALSE || animate === FALSE ) {
1243
- tooltip[type]();
1244
- after();
1245
- }
1246
 
1247
- // Use custom function if provided
1248
- else if ( $.isFunction( opts.effect ) ) {
1249
- tooltip.stop( 1, 1 );
1250
- opts.effect.call( tooltip, this );
1251
- tooltip.queue(
1252
- 'fx', function( n ) {
1253
- after();
1254
- n();
1255
- }
1256
- );
1257
- }
1258
 
1259
- // Use basic fade function by default
1260
- else {
1261
- tooltip.fadeTo( 90, state ? 1 : 0, after );
1262
- }
1263
 
1264
- // If inactive hide method is set, active it
1265
- if ( state ) {
1266
- opts.target.trigger( 'qtip-' + this.id + '-inactive' );
1267
- }
1268
 
1269
- return this;
1270
- };
1271
 
1272
- PROTOTYPE.show = function( event ) {
1273
- return this.toggle( TRUE, event );
1274
- };
1275
 
1276
- PROTOTYPE.hide = function( event ) {
1277
- return this.toggle( FALSE, event );
1278
- };
1279
 
1280
- ;
1281
- PROTOTYPE.focus = function( event ) {
1282
- if ( !this.rendered || this.destroyed ) {
1283
- return this;
1284
- }
1285
 
1286
- var qtips = $( SELECTOR ),
1287
- tooltip = this.tooltip,
1288
- curIndex = parseInt( tooltip[0].style.zIndex, 10 ),
1289
- newIndex = QTIP.zindex + qtips.length,
1290
- focusedElem;
1291
-
1292
- // Only update the z-index if it has changed and tooltip is not already focused
1293
- if ( !tooltip.hasClass( CLASS_FOCUS ) ) {
1294
- // tooltipfocus event
1295
- if ( this._trigger( 'focus', [newIndex], event ) ) {
1296
- // Only update z-index's if they've changed
1297
- if ( curIndex !== newIndex ) {
1298
- // Reduce our z-index's and keep them properly ordered
1299
- qtips.each(
1300
- function() {
1301
- if ( this.style.zIndex > curIndex ) {
1302
- this.style.zIndex = this.style.zIndex - 1;
1303
- }
1304
- }
1305
- );
1306
-
1307
- // Fire blur event for focused tooltip
1308
- qtips.filter( '.' + CLASS_FOCUS ).qtip( 'blur', event );
1309
  }
 
1310
 
1311
- // Set the new z-index
1312
- tooltip.addClass( CLASS_FOCUS )[0].style.zIndex = newIndex;
1313
- }
1314
- }
1315
-
1316
- return this;
1317
- };
1318
-
1319
- PROTOTYPE.blur = function( event ) {
1320
- if ( !this.rendered || this.destroyed ) {
1321
- return this;
1322
  }
1323
 
1324
- // Set focused status to FALSE
1325
- this.tooltip.removeClass( CLASS_FOCUS );
1326
-
1327
- // tooltipblur event
1328
- this._trigger( 'blur', [this.tooltip.css( 'zIndex' )], event );
1329
-
1330
- return this;
1331
- };
1332
 
1333
- ;
1334
- PROTOTYPE.disable = function( state ) {
1335
- if ( this.destroyed ) {
1336
- return this;
1337
- }
1338
 
1339
- // If 'toggle' is passed, toggle the current state
1340
- if ( state === 'toggle' ) {
1341
- state = !(this.rendered ? this.tooltip.hasClass( CLASS_DISABLED ) : this.disabled);
1342
- }
1343
 
1344
- // Disable if no state passed
1345
- else if ( 'boolean' !== typeof state ) {
1346
- state = TRUE;
1347
- }
1348
 
1349
- if ( this.rendered ) {
1350
- this.tooltip.toggleClass( CLASS_DISABLED, state )
1351
- .attr( 'aria-disabled', state );
1352
- }
1353
 
1354
- this.disabled = !!state;
 
 
 
1355
 
1356
- return this;
1357
- };
 
 
1358
 
1359
- PROTOTYPE.enable = function() {
1360
- return this.disable( FALSE );
1361
- };
 
1362
 
1363
- ;
1364
- PROTOTYPE._createButton = function() {
1365
- var self = this,
1366
- elements = this.elements,
1367
- tooltip = elements.tooltip,
1368
- button = this.options.content.button,
1369
- isString = typeof button === 'string',
1370
- close = isString ? button : 'Close tooltip';
1371
-
1372
- if ( elements.button ) {
1373
- elements.button.remove();
1374
- }
1375
 
1376
- // Use custom button if one was supplied by user, else use default
1377
- if ( button.jquery ) {
1378
- elements.button = button;
1379
- }
1380
- else {
1381
- elements.button = $(
1382
- '<a />', {
1383
- 'class': 'qtip-close ' + (this.options.style.widget ? '' : NAMESPACE + '-icon'),
1384
- 'title': close,
1385
- 'aria-label': close
1386
- }
1387
- )
1388
- .prepend(
1389
- $(
1390
- '<span />', {
1391
- 'class': 'ui-icon ui-icon-close',
1392
- 'html': '&times;'
1393
- }
1394
- )
1395
- );
1396
- }
1397
 
1398
- // Create button and setup attributes
1399
- elements.button.appendTo( elements.titlebar || tooltip )
1400
- .attr( 'role', 'button' )
1401
- .click(
1402
- function( event ) {
1403
- if ( !tooltip.hasClass( CLASS_DISABLED ) ) {
1404
- self.hide( event );
1405
- }
1406
- return FALSE;
1407
- }
1408
- );
1409
- };
1410
 
1411
- PROTOTYPE._updateButton = function( button ) {
1412
- // Make sure tooltip is rendered and if not, return
1413
- if ( !this.rendered ) {
1414
- return FALSE;
1415
- }
 
 
 
 
1416
 
1417
- var elem = this.elements.button;
1418
- if ( button ) {
1419
- this._createButton();
1420
- }
1421
- else {
1422
- elem.remove();
1423
- }
1424
- };
1425
 
1426
- ;// Widget class creator
1427
- function createWidgetClass( cls ) {
1428
- return WIDGET.concat( '' ).join( cls ? '-' + cls + ' ' : ' ' );
1429
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
1430
 
1431
- // Widget class setter method
1432
- PROTOTYPE._setWidget = function() {
1433
- var on = this.options.style.widget,
1434
- elements = this.elements,
1435
- tooltip = elements.tooltip,
1436
- disabled = tooltip.hasClass( CLASS_DISABLED );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1437
 
1438
- tooltip.removeClass( CLASS_DISABLED );
1439
- CLASS_DISABLED = on ? 'ui-state-disabled' : 'qtip-disabled';
1440
- tooltip.toggleClass( CLASS_DISABLED, disabled );
 
 
 
 
1441
 
1442
- tooltip.toggleClass( 'ui-helper-reset ' + createWidgetClass(), on ).toggleClass(
1443
- CLASS_DEFAULT, this.options.style.def && !on
1444
- );
1445
 
1446
- if ( elements.content ) {
1447
- elements.content.toggleClass( createWidgetClass( 'content' ), on );
1448
- }
1449
- if ( elements.titlebar ) {
1450
- elements.titlebar.toggleClass( createWidgetClass( 'header' ), on );
1451
- }
1452
- if ( elements.button ) {
1453
- elements.button.toggleClass( NAMESPACE + '-icon', !on );
1454
- }
1455
- };
1456
- ;
1457
- function cloneEvent( event ) {
1458
- return event && {
1459
- type: event.type,
1460
- pageX: event.pageX,
1461
- pageY: event.pageY,
1462
- target: event.target,
1463
- relatedTarget: event.relatedTarget,
1464
- scrollX: event.scrollX || window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft,
1465
- scrollY: event.scrollY || window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop
1466
- } || {};
1467
- }
1468
-
1469
- function delay( callback, duration ) {
1470
- // If tooltip has displayed, start hide timer
1471
- if ( duration > 0 ) {
1472
- return setTimeout(
1473
- $.proxy( callback, this ), duration
1474
- );
1475
- }
1476
- else {
1477
- callback.call( this );
1478
- }
1479
- }
1480
 
1481
- function showMethod( event ) {
1482
- if ( this.tooltip.hasClass( CLASS_DISABLED ) ) {
1483
- return FALSE;
1484
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1485
 
1486
- // Clear hide timers
1487
- clearTimeout( this.timers.show );
1488
- clearTimeout( this.timers.hide );
1489
 
1490
- // Start show timer
1491
- this.timers.show = delay.call(
1492
- this,
1493
- function() {
1494
- this.toggle( TRUE, event );
1495
- },
1496
- this.options.show.delay
1497
- );
1498
- }
1499
 
1500
- function hideMethod( event ) {
1501
- if ( this.tooltip.hasClass( CLASS_DISABLED ) ) {
1502
- return FALSE;
1503
- }
 
 
1504
 
1505
- // Check if new target was actually the tooltip element
1506
- var relatedTarget = $( event.relatedTarget ),
1507
- ontoTooltip = relatedTarget.closest( SELECTOR )[0] === this.tooltip[0],
1508
- ontoTarget = relatedTarget[0] === this.options.show.target[0];
1509
-
1510
- // Clear timers and stop animation queue
1511
- clearTimeout( this.timers.show );
1512
- clearTimeout( this.timers.hide );
1513
-
1514
- // Prevent hiding if tooltip is fixed and event target is the tooltip.
1515
- // Or if mouse positioning is enabled and cursor momentarily overlaps
1516
- if ( this !== relatedTarget[0] &&
1517
- (this.options.position.target === 'mouse' && ontoTooltip) ||
1518
- (this.options.hide.fixed && (
1519
- (/mouse(out|leave|move)/).test( event.type ) && (ontoTooltip || ontoTarget))
1520
- ) ) {
1521
- try {
1522
- event.preventDefault();
1523
- event.stopImmediatePropagation();
1524
- } catch ( e ) {
1525
- }
 
 
 
 
 
 
1526
 
1527
- return;
1528
- }
 
 
 
 
 
1529
 
1530
- // If tooltip has displayed, start hide timer
1531
- this.timers.hide = delay.call(
1532
- this,
1533
- function() {
1534
- this.toggle( FALSE, event );
1535
- },
1536
- this.options.hide.delay,
1537
- this
1538
- );
1539
- }
1540
 
1541
- function inactiveMethod( event ) {
1542
- if ( this.tooltip.hasClass( CLASS_DISABLED ) || !this.options.hide.inactive ) {
1543
- return FALSE;
1544
- }
1545
 
1546
- // Clear timer
1547
- clearTimeout( this.timers.inactive );
 
 
 
1548
 
1549
- this.timers.inactive = delay.call(
1550
- this,
1551
- function() {
1552
- this.hide( event );
1553
- },
1554
- this.options.hide.inactive
1555
- );
1556
- }
1557
 
1558
- function repositionMethod( event ) {
1559
- if ( this.rendered && this.tooltip[0].offsetWidth > 0 ) {
1560
- this.reposition( event );
1561
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1562
  }
1563
-
1564
- // Store mouse coordinates
1565
- PROTOTYPE._storeMouse = function( event ) {
1566
- (this.mouse = cloneEvent( event )).type = 'mousemove';
1567
- };
1568
-
1569
- // Bind events
1570
- PROTOTYPE._bind = function( targets, events, method, suffix, context ) {
1571
- var ns = '.' + this._id + (suffix ? '-' + suffix : '');
1572
- events.length && $( targets ).bind(
1573
- (events.split ? events : events.join( ns + ' ' )) + ns,
1574
- $.proxy( method, context || this )
1575
- );
1576
- };
1577
- PROTOTYPE._unbind = function( targets, suffix ) {
1578
- $( targets ).unbind( '.' + this._id + (suffix ? '-' + suffix : '') );
1579
- };
1580
-
1581
- // Apply common event handlers using delegate (avoids excessive .bind calls!)
1582
- var ns = '.' + NAMESPACE;
1583
-
1584
- function delegate( selector, events, method ) {
1585
- $( document.body ).delegate(
1586
- selector,
1587
- (events.split ? events : events.join( ns + ' ' )) + ns,
1588
- function() {
1589
- var api = QTIP.api[$.attr( this, ATTR_ID )];
1590
- api && !api.disabled && method.apply( api, arguments );
1591
- }
1592
- );
 
 
 
 
 
 
 
 
 
 
 
 
1593
  }
 
1594
 
1595
- $(
1596
- function() {
1597
- delegate(
1598
- SELECTOR, ['mouseenter', 'mouseleave'], function( event ) {
1599
- var state = event.type === 'mouseenter',
1600
- tooltip = $( event.currentTarget ),
1601
- target = $( event.relatedTarget || event.target ),
1602
- options = this.options;
1603
-
1604
- // On mouseenter...
1605
- if ( state ) {
1606
- // Focus the tooltip on mouseenter (z-index stacking)
1607
- this.focus( event );
1608
-
1609
- // Clear hide timer on tooltip hover to prevent it from closing
1610
- tooltip.hasClass( CLASS_FIXED ) && !tooltip.hasClass( CLASS_DISABLED ) && clearTimeout( this.timers.hide );
1611
- }
1612
-
1613
- // On mouseleave...
1614
- else {
1615
- // Hide when we leave the tooltip and not onto the show target (if a hide event is set)
1616
- if ( options.position.target === 'mouse' && options.hide.event &&
1617
- options.show.target && !target.closest( options.show.target[0] ).length ) {
1618
- this.hide( event );
1619
- }
1620
- }
1621
-
1622
- // Add hover class
1623
- tooltip.toggleClass( CLASS_HOVER, state );
1624
- }
1625
- );
1626
 
1627
- // Define events which reset the 'inactive' event handler
1628
- delegate( '[' + ATTR_ID + ']', INACTIVE_EVENTS, inactiveMethod );
1629
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1630
  );
 
1631
 
1632
- // Event trigger
1633
- PROTOTYPE._trigger = function( type, args, event ) {
1634
- var callback = $.Event( 'tooltip' + type );
1635
- callback.originalEvent = (event && $.extend( {}, event )) || this.cache.event || NULL;
1636
-
1637
- this.triggering = type;
1638
- this.tooltip.trigger( callback, [this].concat( args || [] ) );
1639
- this.triggering = FALSE;
1640
-
1641
- return !callback.isDefaultPrevented();
1642
- };
1643
-
1644
- PROTOTYPE._bindEvents = function( showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod ) {
1645
- // If hide and show targets are the same...
1646
- if ( hideTarget.add( showTarget ).length === hideTarget.length ) {
1647
- var toggleEvents = [];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1648
 
1649
- // Filter identical show/hide events
1650
- hideEvents = $.map(
1651
- hideEvents, function( type ) {
1652
- var showIndex = $.inArray( type, showEvents );
1653
 
1654
- // Both events are identical, remove from both hide and show events
1655
- // and append to toggleEvents
1656
- if ( showIndex > -1 ) {
1657
- toggleEvents.push( showEvents.splice( showIndex, 1 )[0] );
1658
- return;
1659
- }
 
 
 
1660
 
1661
- return type;
1662
- }
1663
- );
 
 
 
1664
 
1665
- // Toggle events are special case of identical show/hide events, which happen in sequence
1666
- toggleEvents.length && this._bind(
1667
- showTarget, toggleEvents, function( event ) {
1668
- var state = this.rendered ? this.tooltip[0].offsetWidth > 0 : false;
1669
- (state ? hideMethod : showMethod).call( this, event );
1670
- }
1671
- );
1672
  }
 
 
1673
 
1674
- // Apply show/hide/toggle events
1675
- this._bind( showTarget, showEvents, showMethod );
1676
- this._bind( hideTarget, hideEvents, hideMethod );
1677
- };
1678
 
1679
- PROTOTYPE._assignInitialEvents = function( event ) {
1680
- var options = this.options,
1681
- showTarget = options.show.target,
1682
- hideTarget = options.hide.target,
1683
- showEvents = options.show.event ? $.trim( '' + options.show.event ).split( ' ' ) : [],
1684
- hideEvents = options.hide.event ? $.trim( '' + options.hide.event ).split( ' ' ) : [];
1685
-
1686
- /*
1687
- * Make sure hoverIntent functions properly by using mouseleave as a hide event if
1688
- * mouseenter/mouseout is used for show.event, even if it isn't in the users options.
1689
- */
1690
- if ( /mouse(over|enter)/i.test( options.show.event ) && !/mouse(out|leave)/i.test( options.hide.event ) ) {
1691
- hideEvents.push( 'mouseleave' );
1692
- }
1693
 
1694
- /*
1695
- * Also make sure initial mouse targetting works correctly by caching mousemove coords
1696
- * on show targets before the tooltip has rendered. Also set onTarget when triggered to
1697
- * keep mouse tracking working.
1698
- */
1699
- this._bind(
1700
- showTarget, 'mousemove', function( event ) {
1701
- this._storeMouse( event );
1702
- this.cache.onTarget = TRUE;
1703
- }
1704
- );
1705
 
1706
- // Define hoverIntent function
1707
- function hoverIntent( event ) {
1708
- // Only continue if tooltip isn't disabled
1709
- if ( this.disabled || this.destroyed ) {
1710
- return FALSE;
1711
- }
 
1712
 
1713
- // Cache the event data
1714
- this.cache.event = cloneEvent( event );
1715
- this.cache.target = event ? $( event.target ) : [undefined];
1716
-
1717
- // Start the event sequence
1718
- clearTimeout( this.timers.show );
1719
- this.timers.show = delay.call(
1720
- this,
1721
- function() {
1722
- this.render( typeof event === 'object' || options.show.ready );
1723
- },
1724
- options.show.delay
1725
- );
1726
  }
 
1727
 
1728
- // Filter and bind events
1729
- this._bindEvents(
1730
- showEvents, hideEvents, showTarget, hideTarget, hoverIntent, function() {
1731
- clearTimeout( this.timers.show );
1732
- }
1733
- );
1734
-
1735
- // Prerendering is enabled, create tooltip now
1736
- if ( options.show.ready || options.prerender ) {
1737
- hoverIntent.call( this, event );
1738
- }
1739
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1740
 
1741
- // Event assignment method
1742
- PROTOTYPE._assignEvents = function() {
1743
- var self = this,
1744
- options = this.options,
1745
- posOptions = options.position,
1746
-
1747
- tooltip = this.tooltip,
1748
- showTarget = options.show.target,
1749
- hideTarget = options.hide.target,
1750
- containerTarget = posOptions.container,
1751
- viewportTarget = posOptions.viewport,
1752
- documentTarget = $( document ),
1753
- bodyTarget = $( document.body ),
1754
- windowTarget = $( window ),
1755
-
1756
- showEvents = options.show.event ? $.trim( '' + options.show.event ).split( ' ' ) : [],
1757
- hideEvents = options.hide.event ? $.trim( '' + options.hide.event ).split( ' ' ) : [];
1758
-
1759
-
1760
- // Assign passed event callbacks
1761
- $.each(
1762
- options.events, function( name, callback ) {
1763
- self._bind(
1764
- tooltip, name === 'toggle' ? ['tooltipshow', 'tooltiphide'] : ['tooltip' + name],
1765
- callback, null, tooltip
1766
- );
1767
- }
1768
- );
1769
 
1770
- // Hide tooltips when leaving current window/frame (but not select/option elements)
1771
- if ( /mouse(out|leave)/i.test( options.hide.event ) && options.hide.leave === 'window' ) {
1772
- this._bind(
1773
- documentTarget, ['mouseout', 'blur'], function( event ) {
1774
- if ( !/select|option/.test( event.target.nodeName ) && !event.relatedTarget ) {
1775
- this.hide( event );
1776
- }
1777
- }
1778
- );
1779
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1780
 
1781
- // Enable hide.fixed by adding appropriate class
1782
- if ( options.hide.fixed ) {
1783
- hideTarget = hideTarget.add( tooltip.addClass( CLASS_FIXED ) );
1784
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1785
 
1786
- /*
1787
- * Make sure hoverIntent functions properly by using mouseleave to clear show timer if
1788
- * mouseenter/mouseout is used for show.event, even if it isn't in the users options.
1789
- */
1790
- else if ( /mouse(over|enter)/i.test( options.show.event ) ) {
1791
- this._bind(
1792
- hideTarget, 'mouseleave', function() {
1793
- clearTimeout( this.timers.show );
1794
- }
1795
- );
1796
  }
 
1797
 
1798
- // Hide tooltip on document mousedown if unfocus events are enabled
1799
- if ( ('' + options.hide.event).indexOf( 'unfocus' ) > -1 ) {
1800
- this._bind(
1801
- containerTarget.closest( 'html' ), ['mousedown', 'touchstart'], function( event ) {
1802
- var elem = $( event.target ),
1803
- enabled = this.rendered && !this.tooltip.hasClass( CLASS_DISABLED ) && this.tooltip[0].offsetWidth > 0,
1804
- isAncestor = elem.parents( SELECTOR ).filter( this.tooltip[0] ).length > 0;
1805
-
1806
- if ( elem[0] !== this.target[0] && elem[0] !== this.tooltip[0] && !isAncestor && !this.target.has( elem[0] ).length && enabled
1807
- ) {
1808
- this.hide( event );
1809
- }
1810
- }
1811
- );
1812
- }
1813
 
1814
- // Check if the tooltip hides when inactive
1815
- if ( 'number' === typeof options.hide.inactive ) {
1816
- // Bind inactive method to show target(s) as a custom event
1817
- this._bind( showTarget, 'qtip-' + this.id + '-inactive', inactiveMethod );
 
 
1818
 
1819
- // Define events which reset the 'inactive' event handler
1820
- this._bind( hideTarget.add( tooltip ), QTIP.inactiveEvents, inactiveMethod, '-inactive' );
1821
- }
1822
 
1823
- // Filter and bind events
1824
- this._bindEvents( showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod );
1825
-
1826
- // Mouse movement bindings
1827
- this._bind(
1828
- showTarget.add( tooltip ), 'mousemove', function( event ) {
1829
- // Check if the tooltip hides when mouse is moved a certain distance
1830
- if ( 'number' === typeof options.hide.distance ) {
1831
- var origin = this.cache.origin || {},
1832
- limit = this.options.hide.distance,
1833
- abs = Math.abs;
1834
-
1835
- // Check if the movement has gone beyond the limit, and hide it if so
1836
- if ( abs( event.pageX - origin.pageX ) >= limit || abs( event.pageY - origin.pageY ) >= limit ) {
1837
- this.hide( event );
1838
- }
1839
- }
1840
 
1841
- // Cache mousemove coords on show targets
1842
- this._storeMouse( event );
1843
- }
1844
- );
1845
 
1846
- // Mouse positioning events
1847
- if ( posOptions.target === 'mouse' ) {
1848
- // If mouse adjustment is on...
1849
- if ( posOptions.adjust.mouse ) {
1850
- // Apply a mouseleave event so we don't get problems with overlapping
1851
- if ( options.hide.event ) {
1852
- // Track if we're on the target or not
1853
- this._bind(
1854
- showTarget, ['mouseenter', 'mouseleave'], function( event ) {
1855
- this.cache.onTarget = event.type === 'mouseenter';
1856
- }
1857
- );
1858
- }
1859
 
1860
- // Update tooltip position on mousemove
1861
- this._bind(
1862
- documentTarget, 'mousemove', function( event ) {
1863
- // Update the tooltip position only if the tooltip is visible and adjustment is enabled
1864
- if ( this.rendered && this.cache.onTarget && !this.tooltip.hasClass( CLASS_DISABLED ) && this.tooltip[0].offsetWidth > 0 ) {
1865
- this.reposition( event );
1866
- }
1867
- }
1868
- );
1869
- }
1870
- }
1871
 
1872
- // Adjust positions of the tooltip on window resize if enabled
1873
- if ( posOptions.adjust.resize || viewportTarget.length ) {
1874
- this._bind(
1875
- $.event.special.resize ? viewportTarget : windowTarget, 'resize', repositionMethod
1876
- );
1877
- }
1878
 
1879
- // Adjust tooltip position on scroll of the window or viewport element if present
1880
- if ( posOptions.adjust.scroll ) {
1881
- this._bind( windowTarget.add( posOptions.container ), 'scroll', repositionMethod );
1882
- }
1883
- };
1884
 
1885
- // Un-assignment method
1886
- PROTOTYPE._unassignEvents = function() {
1887
- var targets = [
1888
- this.options.show.target[0],
1889
- this.options.hide.target[0],
1890
- this.rendered && this.tooltip[0],
1891
- this.options.position.container[0],
1892
- this.options.position.viewport[0],
1893
- this.options.position.container.closest( 'html' )[0], // unfocus
1894
- window,
1895
- document
1896
- ];
1897
 
1898
- this._unbind(
1899
- $( [] ).pushStack(
1900
- $.grep(
1901
- targets, function( i ) {
1902
- return typeof i === 'object';
1903
- }
1904
- )
1905
- )
1906
- );
1907
- };
1908
 
1909
- ;// Initialization method
1910
- function init( elem, id, opts ) {
1911
- var obj, posOptions, attr, config, title,
1912
 
1913
- // Setup element references
1914
- docBody = $( document.body ),
 
1915
 
1916
- // Use document body instead of document element if needed
1917
- newTarget = elem[0] === document ? docBody : elem,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1918
 
1919
- // Grab metadata from element if plugin is present
1920
- metadata = (elem.metadata) ? elem.metadata( opts.metadata ) : NULL,
1921
 
1922
- // If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise
1923
- metadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL,
 
 
 
1924
 
1925
- // Grab data from metadata.name (or data-qtipopts as fallback) using .data() method,
1926
- html5 = elem.data( opts.metadata.name || 'qtipopts' );
 
1927
 
1928
- // If we don't get an object returned attempt to parse it manualyl without parseJSON
1929
- try {
1930
- html5 = typeof html5 === 'string' ? $.parseJSON( html5 ) : html5;
1931
- } catch ( e ) {
1932
- }
1933
 
1934
- // Merge in and sanitize metadata
1935
- config = $.extend(
1936
- TRUE, {}, QTIP.defaults, opts,
1937
- typeof html5 === 'object' ? sanitizeOptions( html5 ) : NULL,
1938
- sanitizeOptions( metadata5 || metadata )
1939
- );
 
 
 
 
 
 
 
1940
 
1941
- // Re-grab our positioning options now we've merged our metadata and set id to passed value
1942
- posOptions = config.position;
1943
- config.id = id;
 
 
1944
 
1945
- // Setup missing content if none is detected
1946
- if ( 'boolean' === typeof config.content.text ) {
1947
- attr = elem.attr( config.content.attr );
1948
 
1949
- // Grab from supplied attribute if available
1950
- if ( config.content.attr !== FALSE && attr ) {
1951
- config.content.text = attr;
 
1952
  }
1953
-
1954
- // No valid content was found, abort render
1955
  else {
 
1956
  return FALSE;
1957
  }
1958
  }
1959
 
1960
- // Setup target options
1961
- if ( !posOptions.container.length ) {
1962
- posOptions.container = docBody;
1963
- }
1964
- if ( posOptions.target === FALSE ) {
1965
- posOptions.target = newTarget;
1966
  }
1967
- if ( config.show.target === FALSE ) {
1968
- config.show.target = newTarget;
1969
- }
1970
- if ( config.show.solo === TRUE ) {
1971
- config.show.solo = posOptions.container.closest( 'body' );
1972
- }
1973
- if ( config.hide.target === FALSE ) {
1974
- config.hide.target = newTarget;
1975
- }
1976
- if ( config.position.viewport === TRUE ) {
1977
- config.position.viewport = posOptions.container;
1978
- }
1979
-
1980
- // Ensure we only use a single container
1981
- posOptions.container = posOptions.container.eq( 0 );
1982
 
1983
- // Convert position corner values into x and y strings
1984
- posOptions.at = new CORNER( posOptions.at, TRUE );
1985
- posOptions.my = new CORNER( posOptions.my );
1986
-
1987
- // Destroy previous tooltip if overwrite is enabled, or skip element if not
1988
- if ( elem.data( NAMESPACE ) ) {
1989
- if ( config.overwrite ) {
1990
- elem.qtip( 'destroy', true );
1991
- }
1992
- else if ( config.overwrite === FALSE ) {
1993
- return FALSE;
1994
- }
1995
- }
1996
-
1997
- // Add has-qtip attribute
1998
- elem.attr( ATTR_HAS, id );
1999
-
2000
- // Remove title attribute and store it if present
2001
- if ( config.suppress && (title = elem.attr( 'title' )) ) {
2002
- // Final attr call fixes event delegatiom and IE default tooltip showing problem
2003
- elem.removeAttr( 'title' ).attr( oldtitle, title ).attr( 'title', '' );
2004
- }
2005
-
2006
- // Initialize the tooltip and add API reference
2007
- obj = new QTip( elem, config, id, !!attr );
2008
- elem.data( NAMESPACE, obj );
2009
-
2010
- // Catch remove/removeqtip events on target element to destroy redundant tooltip
2011
- elem.one(
2012
- 'remove.qtip-' + id + ' removeqtip.qtip-' + id, function() {
2013
- var api;
2014
- if ( (api = $( this ).data( NAMESPACE )) ) {
2015
- api.destroy( true );
2016
- }
2017
- }
2018
- );
2019
-
2020
- return obj;
2021
- }
2022
 
2023
- // jQuery $.fn extension method
2024
- QTIP = $.fn.qtip = function( options, notation, newValue ) {
2025
- var command = ('' + options).toLowerCase(), // Parse command
2026
- returned = NULL,
2027
- args = $.makeArray( arguments ).slice( 1 ),
2028
- event = args[args.length - 1],
2029
- opts = this[0] ? $.data( this[0], NAMESPACE ) : NULL;
2030
 
2031
- // Check for API request
2032
- if ( (!arguments.length && opts) || command === 'api' ) {
2033
- return opts;
2034
- }
2035
 
2036
- // Execute API command if present
2037
- else if ( 'string' === typeof options ) {
2038
- this.each(
2039
- function() {
2040
- var api = $.data( this, NAMESPACE );
2041
- if ( !api ) {
2042
- return TRUE;
2043
- }
2044
-
2045
- // Cache the event if possible
2046
- if ( event && event.timeStamp ) {
2047
- api.cache.event = event;
2048
- }
2049
-
2050
- // Check for specific API commands
2051
- if ( notation && (command === 'option' || command === 'options') ) {
2052
- if ( newValue !== undefined || $.isPlainObject( notation ) ) {
2053
- api.set( notation, newValue );
2054
- }
2055
- else {
2056
- returned = api.get( notation );
2057
- return FALSE;
2058
- }
2059
- }
2060
-
2061
- // Execute API command
2062
- else if ( api[command] ) {
2063
- api[command].apply( api, args );
2064
- }
2065
- }
2066
- );
2067
-
2068
- return returned !== NULL ? returned : this;
2069
- }
2070
 
2071
- // No API commands. validate provided options and setup qTips
2072
- else if ( 'object' === typeof options || !arguments.length ) {
2073
- // Sanitize options first
2074
- opts = sanitizeOptions( $.extend( TRUE, {}, options ) );
2075
-
2076
- return this.each(
2077
- function( i ) {
2078
- var api, id;
2079
-
2080
- // Find next available ID, or use custom ID if provided
2081
- id = $.isArray( opts.id ) ? opts.id[i] : opts.id;
2082
- id = !id || id === FALSE || id.length < 1 || QTIP.api[id] ? QTIP.nextid++ : id;
2083
-
2084
- // Initialize the qTip and re-grab newly sanitized options
2085
- api = init( $( this ), id, opts );
2086
- if ( api === FALSE ) {
2087
- return TRUE;
2088
- }
2089
- else {
2090
- QTIP.api[id] = api;
2091
- }
2092
-
2093
- // Initialize plugins
2094
- $.each(
2095
- PLUGINS, function() {
2096
- if ( this.initialize === 'initialize' ) {
2097
- this( api );
2098
- }
2099
- }
2100
- );
2101
-
2102
- // Assign initial pre-render events
2103
- api._assignInitialEvents( event );
2104
- }
2105
- );
2106
- }
2107
- };
2108
 
2109
- // Expose class
2110
- $.qtip = QTip;
 
 
2111
 
2112
- // Populated in render method
2113
- QTIP.api = {};
2114
- ;
2115
- $.each(
2116
- {
2117
- /* Allow other plugins to successfully retrieve the title of an element with a qTip applied */
2118
- attr: function( attr, val ) {
2119
- if ( this.length ) {
2120
- var self = this[0],
2121
- title = 'title',
2122
- api = $.data( self, 'qtip' );
2123
-
2124
- if ( attr === title && api && 'object' === typeof api && api.options.suppress ) {
2125
- if ( arguments.length < 2 ) {
2126
- return $.attr( self, oldtitle );
2127
- }
2128
-
2129
- // If qTip is rendered and title was originally used as content, update it
2130
- if ( api && api.options.content.attr === title && api.cache.attr ) {
2131
- api.set( 'content.text', val );
2132
- }
2133
-
2134
- // Use the regular attr method to set, then cache the result
2135
- return this.attr( oldtitle, val );
2136
- }
2137
- }
2138
 
2139
- return $.fn['attr' + replaceSuffix].apply( this, arguments );
2140
- },
2141
 
2142
- /* Allow clone to correctly retrieve cached title attributes */
2143
- clone: function( keepData ) {
2144
- var titles = $( [] ), title = 'title',
2145
-
2146
- // Clone our element using the real clone method
2147
- elems = $.fn['clone' + replaceSuffix].apply( this, arguments );
2148
-
2149
- // Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false
2150
- if ( !keepData ) {
2151
- elems.filter( '[' + oldtitle + ']' ).attr(
2152
- 'title', function() {
2153
- return $.attr( this, oldtitle );
2154
- }
2155
- )
2156
- .removeAttr( oldtitle );
2157
- }
2158
 
2159
- return elems;
2160
- }
2161
- }, function( name, func ) {
2162
- if ( !func || $.fn[name + replaceSuffix] ) {
2163
- return TRUE;
2164
  }
2165
 
2166
- var old = $.fn[name + replaceSuffix] = $.fn[name];
2167
- $.fn[name] = function() {
2168
- return func.apply( this, arguments ) || old.apply( this, arguments );
2169
- };
2170
- }
2171
- );
2172
-
2173
- /* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar).
2174
- * This snippet is taken directly from jQuery UI source code found here:
2175
- * http://code.jquery.com/ui/jquery-ui-git.js
2176
- */
2177
- if ( !$.ui ) {
2178
- $['cleanData' + replaceSuffix] = $.cleanData;
2179
- $.cleanData = function( elems ) {
2180
- for ( var i = 0, elem; (elem = $( elems[i] )).length; i++ ) {
2181
- if ( elem.attr( ATTR_HAS ) ) {
2182
- try {
2183
- elem.triggerHandler( 'removeqtip' );
2184
- }
2185
- catch ( e ) {
2186
- }
2187
- }
2188
  }
2189
- $['cleanData' + replaceSuffix].apply( this, arguments );
2190
- };
2191
- }
2192
-
2193
- ;// qTip version
2194
- QTIP.version = '2.2.0';
2195
-
2196
- // Base ID for all qTips
2197
- QTIP.nextid = 0;
2198
-
2199
- // Inactive events array
2200
- QTIP.inactiveEvents = INACTIVE_EVENTS;
2201
-
2202
- // Base z-index for all qTips
2203
- QTIP.zindex = 15000;
2204
 
2205
- // Define configuration defaults
2206
- QTIP.defaults = {
2207
- prerender: FALSE,
2208
- id: FALSE,
2209
- overwrite: TRUE,
2210
- suppress: TRUE,
2211
- content: {
2212
- text: TRUE,
2213
- attr: 'title',
2214
- title: FALSE,
2215
- button: FALSE
2216
- },
2217
- position: {
2218
- my: 'top left',
2219
- at: 'bottom right',
2220
- target: FALSE,
2221
- container: FALSE,
2222
- viewport: FALSE,
2223
- adjust: {
2224
- x: 0, y: 0,
2225
- mouse: TRUE,
2226
- scroll: TRUE,
2227
- resize: TRUE,
2228
- method: 'flipinvert flipinvert'
2229
- },
2230
- effect: function( api, pos, viewport ) {
2231
- $( this ).animate(
2232
- pos, {
2233
- duration: 200,
2234
- queue: FALSE
2235
- }
2236
- );
2237
- }
2238
- },
2239
- show: {
2240
- target: FALSE,
2241
- event: 'mouseenter',
2242
- effect: TRUE,
2243
- delay: 90,
2244
- solo: FALSE,
2245
- ready: FALSE,
2246
- autofocus: FALSE
2247
- },
2248
- hide: {
2249
- target: FALSE,
2250
- event: 'mouseleave',
2251
- effect: TRUE,
2252
- delay: 0,
2253
- fixed: FALSE,
2254
- inactive: FALSE,
2255
- leave: 'window',
2256
- distance: FALSE
2257
- },
2258
- style: {
2259
- classes: '',
2260
- widget: FALSE,
2261
- width: FALSE,
2262
- height: FALSE,
2263
- def: TRUE
2264
- },
2265
- events: {
2266
- render: NULL,
2267
- move: NULL,
2268
- show: NULL,
2269
- hide: NULL,
2270
- toggle: NULL,
2271
- visible: NULL,
2272
- hidden: NULL,
2273
- focus: NULL,
2274
- blur: NULL
2275
  }
2276
- };
2277
-
2278
- ;
2279
- var TIP,
2280
-
2281
- // .bind()/.on() namespace
2282
- TIPNS = '.qtip-tip',
2283
-
2284
- // Common CSS strings
2285
- MARGIN = 'margin',
2286
- BORDER = 'border',
2287
- COLOR = 'color',
2288
- BG_COLOR = 'background-color',
2289
- TRANSPARENT = 'transparent',
2290
- IMPORTANT = ' !important',
2291
-
2292
- // Check if the browser supports <canvas/> elements
2293
- HASCANVAS = !!document.createElement( 'canvas' ).getContext,
2294
-
2295
- // Invalid colour values used in parseColours()
2296
- INVALID = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i;
2297
-
2298
- // Camel-case method, taken from jQuery source
2299
- // http://code.jquery.com/jquery-1.8.0.js
2300
- function camel( s ) {
2301
- return s.charAt( 0 ).toUpperCase() + s.slice( 1 );
2302
  }
2303
 
2304
- /*
2305
- * Modified from Modernizr's testPropsAll()
2306
- * http://modernizr.com/downloads/modernizr-latest.js
2307
- */
2308
- var cssProps = {}, cssPrefixes = ["Webkit", "O", "Moz", "ms"];
2309
 
2310
- function vendorCss( elem, prop ) {
2311
- var ucProp = prop.charAt( 0 ).toUpperCase() + prop.slice( 1 ),
2312
- props = (prop + ' ' + cssPrefixes.join( ucProp + ' ' ) + ucProp).split( ' ' ),
2313
- cur, val, i = 0;
2314
-
2315
- // If the property has already been mapped...
2316
- if ( cssProps[prop] ) {
2317
- return elem.css( cssProps[prop] );
2318
- }
2319
 
2320
- while ( (cur = props[i++]) ) {
2321
- if ( (val = elem.css( cur )) !== undefined ) {
2322
- return cssProps[prop] = cur, val;
2323
- }
2324
- }
2325
- }
2326
 
2327
- // Parse a given elements CSS property into an int
2328
- function intCss( elem, prop ) {
2329
- return Math.ceil( parseFloat( vendorCss( elem, prop ) ) );
 
 
 
2330
  }
2331
 
2332
-
2333
- // VML creation (for IE only)
2334
- if ( !HASCANVAS ) {
2335
- var createVML = function( tag, props, style ) {
2336
- return '<qtipvml:' + tag + ' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" ' + (props || '') +
2337
- ' style="behavior: url(#default#VML); ' + (style || '') + '" />';
2338
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2339
  }
2340
-
2341
- // Canvas only definitions
2342
- else {
2343
- var PIXEL_RATIO = window.devicePixelRatio || 1,
2344
- BACKING_STORE_RATIO = (function() {
2345
- var context = document.createElement( 'canvas' ).getContext( '2d' );
2346
- return context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio ||
2347
- context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || 1;
2348
- }()),
2349
- SCALE = PIXEL_RATIO / BACKING_STORE_RATIO;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2350
  }
2351
-
2352
-
2353
- function Tip( qtip, options ) {
2354
- this._ns = 'tip';
2355
- this.options = options;
2356
- this.offset = options.offset;
2357
- this.size = [options.width, options.height];
2358
-
2359
- // Initialize
2360
- this.init( (this.qtip = qtip) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2361
  }
 
 
2362
 
2363
- $.extend(
2364
- Tip.prototype, {
2365
- init: function( qtip ) {
2366
- var context, tip;
2367
-
2368
- // Create tip element and prepend to the tooltip
2369
- tip = this.element = qtip.elements.tip = $(
2370
- '<div />', {'class': NAMESPACE + '-tip'}
2371
- ).prependTo( qtip.tooltip );
2372
-
2373
- // Create tip drawing element(s)
2374
- if ( HASCANVAS ) {
2375
- // save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()!
2376
- context = $( '<canvas />' ).appendTo( this.element )[0].getContext( '2d' );
2377
-
2378
- // Setup constant parameters
2379
- context.lineJoin = 'miter';
2380
- context.miterLimit = 100000;
2381
- context.save();
2382
- }
2383
- else {
2384
- context = createVML( 'shape', 'coordorigin="0,0"', 'position:absolute;' );
2385
- this.element.html( context + context );
2386
-
2387
- // Prevent mousing down on the tip since it causes problems with .live() handling in IE due to VML
2388
- qtip._bind(
2389
- $( '*', tip ).add( tip ), ['click', 'mousedown'], function( event ) {
2390
- event.stopPropagation();
2391
- }, this._ns
2392
- );
2393
- }
2394
-
2395
- // Bind update events
2396
- qtip._bind( qtip.tooltip, 'tooltipmove', this.reposition, this._ns, this );
2397
 
2398
- // Create it
2399
- this.create();
2400
- },
2401
 
2402
- _swapDimensions: function() {
2403
- this.size[0] = this.options.height;
2404
- this.size[1] = this.options.width;
2405
- },
2406
- _resetDimensions: function() {
2407
- this.size[0] = this.options.width;
2408
- this.size[1] = this.options.height;
2409
- },
2410
 
2411
- _useTitle: function( corner ) {
2412
- var titlebar = this.qtip.elements.titlebar;
2413
- return titlebar && (
2414
- corner.y === TOP || (corner.y === CENTER && this.element.position().top + (this.size[1] / 2) + this.options.offset < titlebar.outerHeight( TRUE ))
2415
- );
2416
- },
 
 
 
 
2417
 
2418
- _parseCorner: function( corner ) {
2419
- var my = this.qtip.options.position.my;
2420
 
2421
- // Detect corner and mimic properties
2422
- if ( corner === FALSE || my === FALSE ) {
2423
- corner = FALSE;
2424
- }
2425
- else if ( corner === TRUE ) {
2426
- corner = new CORNER( my.string() );
2427
- }
2428
- else if ( !corner.string ) {
2429
- corner = new CORNER( corner );
2430
- corner.fixed = TRUE;
2431
- }
2432
 
2433
- return corner;
2434
- },
 
2435
 
2436
- _parseWidth: function( corner, side, use ) {
2437
- var elements = this.qtip.elements,
2438
- prop = BORDER + camel( side ) + 'Width';
2439
 
2440
- return (use ? intCss( use, prop ) : (
2441
- intCss( elements.content, prop ) ||
2442
- intCss( this._useTitle( corner ) && elements.titlebar || elements.content, prop ) ||
2443
- intCss( elements.tooltip, prop )
2444
- )) || 0;
2445
- },
2446
 
2447
- _parseRadius: function( corner ) {
2448
- var elements = this.qtip.elements,
2449
- prop = BORDER + camel( corner.y ) + camel( corner.x ) + 'Radius';
 
2450
 
2451
- return BROWSER.ie < 9 ? 0 :
2452
- intCss( this._useTitle( corner ) && elements.titlebar || elements.content, prop ) ||
2453
- intCss( elements.tooltip, prop ) || 0;
2454
- },
 
 
 
 
2455
 
2456
- _invalidColour: function( elem, prop, compare ) {
2457
- var val = elem.css( prop );
2458
- return !val || (compare && val === elem.css( compare )) || INVALID.test( val ) ? FALSE : val;
2459
- },
2460
 
2461
- _parseColours: function( corner ) {
2462
- var elements = this.qtip.elements,
2463
- tip = this.element.css( 'cssText', '' ),
2464
- borderSide = BORDER + camel( corner[corner.precedance] ) + camel( COLOR ),
2465
- colorElem = this._useTitle( corner ) && elements.titlebar || elements.content,
2466
- css = this._invalidColour, color = [];
2467
-
2468
- // Attempt to detect the background colour from various elements, left-to-right precedance
2469
- color[0] = css( tip, BG_COLOR ) || css( colorElem, BG_COLOR ) || css(
2470
- elements.content, BG_COLOR
2471
- ) ||
2472
- css( elements.tooltip, BG_COLOR ) || tip.css( BG_COLOR );
2473
-
2474
- // Attempt to detect the correct border side colour from various elements, left-to-right precedance
2475
- color[1] = css( tip, borderSide, COLOR ) || css( colorElem, borderSide, COLOR ) ||
2476
- css( elements.content, borderSide, COLOR ) || css(
2477
- elements.tooltip, borderSide, COLOR
2478
- ) || elements.tooltip.css( borderSide );
2479
-
2480
- // Reset background and border colours
2481
- $( '*', tip ).add( tip ).css(
2482
- 'cssText',
2483
- BG_COLOR + ':' + TRANSPARENT + IMPORTANT + ';' + BORDER + ':0' + IMPORTANT + ';'
2484
- );
2485
 
2486
- return color;
2487
- },
2488
 
2489
- _calculateSize: function( corner ) {
2490
- var y = corner.precedance === Y,
2491
- width = this.options['width'],
2492
- height = this.options['height'],
2493
- isCenter = corner.abbrev() === 'c',
2494
- base = (y ? width : height) * (isCenter ? 0.5 : 1),
2495
- pow = Math.pow,
2496
- round = Math.round,
2497
- bigHyp, ratio, result,
 
 
2498
 
2499
- smallHyp = Math.sqrt( pow( base, 2 ) + pow( height, 2 ) ),
2500
- hyp = [(this.border / base) * smallHyp, (this.border / height) * smallHyp];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2501
 
2502
- hyp[2] = Math.sqrt( pow( hyp[0], 2 ) - pow( this.border, 2 ) );
2503
- hyp[3] = Math.sqrt( pow( hyp[1], 2 ) - pow( this.border, 2 ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2504
 
2505
- bigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]);
2506
- ratio = bigHyp / smallHyp;
2507
 
2508
- result = [round( ratio * width ), round( ratio * height )];
2509
- return y ? result : result.reverse();
2510
- },
2511
 
2512
- // Tip coordinates calculator
2513
- _calculateTip: function( corner, size, scale ) {
2514
- scale = scale || 1;
2515
- size = size || this.size;
2516
-
2517
- var width = size[0] * scale,
2518
- height = size[1] * scale,
2519
- width2 = Math.ceil( width / 2 ), height2 = Math.ceil( height / 2 ),
2520
-
2521
- // Define tip coordinates in terms of height and width values
2522
- tips = {
2523
- br: [0, 0, width, height, width, 0],
2524
- bl: [0, 0, width, 0, 0, height],
2525
- tr: [0, height, width, 0, width, height],
2526
- tl: [0, 0, 0, height, width, height],
2527
- tc: [0, height, width2, 0, width, height],
2528
- bc: [0, 0, width, 0, width2, height],
2529
- rc: [0, 0, width, height2, 0, height],
2530
- lc: [width, 0, width, height, 0, height2]
2531
- };
2532
-
2533
- // Set common side shapes
2534
- tips.lt = tips.br;
2535
- tips.rt = tips.bl;
2536
- tips.lb = tips.tr;
2537
- tips.rb = tips.tl;
2538
-
2539
- return tips[corner.abbrev()];
2540
- },
2541
 
2542
- // Tip coordinates drawer (canvas)
2543
- _drawCoords: function( context, coords ) {
2544
- context.beginPath();
2545
- context.moveTo( coords[0], coords[1] );
2546
- context.lineTo( coords[2], coords[3] );
2547
- context.lineTo( coords[4], coords[5] );
2548
- context.closePath();
2549
- },
 
2550
 
2551
- create: function() {
2552
- // Determine tip corner
2553
- var c = this.corner = (HASCANVAS || BROWSER.ie) && this._parseCorner( this.options.corner );
2554
 
2555
- // If we have a tip corner...
2556
- if ( (this.enabled = !!this.corner && this.corner.abbrev() !== 'c') ) {
2557
- // Cache it
2558
- this.qtip.cache.corner = c.clone();
2559
 
2560
- // Create it
2561
- this.update();
2562
- }
 
2563
 
2564
- // Toggle tip element
2565
- this.element.toggle( this.enabled );
 
 
 
 
 
2566
 
2567
- return this.corner;
2568
- },
 
2569
 
2570
- update: function( corner, position ) {
2571
- if ( !this.enabled ) {
2572
- return this;
2573
- }
2574
 
2575
- var elements = this.qtip.elements,
2576
- tip = this.element,
2577
- inner = tip.children(),
2578
- options = this.options,
2579
- curSize = this.size,
2580
- mimic = options.mimic,
2581
- round = Math.round,
2582
- color, precedance, context,
2583
- coords, bigCoords, translate, newSize, border, BACKING_STORE_RATIO;
2584
-
2585
- // Re-determine tip if not already set
2586
- if ( !corner ) {
2587
- corner = this.qtip.cache.corner || this.corner;
2588
- }
2589
 
2590
- // Use corner property if we detect an invalid mimic value
2591
- if ( mimic === FALSE ) {
2592
- mimic = corner;
2593
- }
2594
 
2595
- // Otherwise inherit mimic properties from the corner object as necessary
2596
- else {
2597
- mimic = new CORNER( mimic );
2598
- mimic.precedance = corner.precedance;
2599
-
2600
- if ( mimic.x === 'inherit' ) {
2601
- mimic.x = corner.x;
2602
- }
2603
- else if ( mimic.y === 'inherit' ) {
2604
- mimic.y = corner.y;
2605
- }
2606
- else if ( mimic.x === mimic.y ) {
2607
- mimic[corner.precedance] = corner[corner.precedance];
2608
- }
2609
- }
2610
- precedance = mimic.precedance;
2611
 
2612
- // Ensure the tip width.height are relative to the tip position
2613
- if ( corner.precedance === X ) {
2614
- this._swapDimensions();
2615
- }
2616
- else {
2617
- this._resetDimensions();
2618
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2619
 
2620
- // Update our colours
2621
- color = this.color = this._parseColours( corner );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2622
 
2623
- // Detect border width, taking into account colours
2624
- if ( color[1] !== TRANSPARENT ) {
2625
- // Grab border width
2626
- border = this.border = this._parseWidth( corner, corner[corner.precedance] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2627
 
2628
- // If border width isn't zero, use border color as fill if it's not invalid (1.0 style tips)
2629
- if ( options.border && border < 1 && !INVALID.test( color[1] ) ) {
2630
- color[0] = color[1];
2631
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2632
 
2633
- // Set border width (use detected border width if options.border is true)
2634
- this.border = border = options.border !== TRUE ? options.border : border;
2635
- }
2636
 
2637
- // Border colour was invalid, set border to zero
2638
- else {
2639
- this.border = border = 0;
2640
- }
2641
 
2642
- // Determine tip size
2643
- newSize = this.size = this._calculateSize( corner );
2644
- tip.css(
2645
- {
2646
- width: newSize[0],
2647
- height: newSize[1],
2648
- lineHeight: newSize[1] + 'px'
2649
- }
2650
- );
2651
 
2652
- // Calculate tip translation
2653
- if ( corner.precedance === Y ) {
2654
- translate = [
2655
- round( mimic.x === LEFT ? border : mimic.x === RIGHT ? newSize[0] - curSize[0] - border : (newSize[0] - curSize[0]) / 2 ),
2656
- round( mimic.y === TOP ? newSize[1] - curSize[1] : 0 )
2657
- ];
2658
- }
2659
- else {
2660
- translate = [
2661
- round( mimic.x === LEFT ? newSize[0] - curSize[0] : 0 ),
2662
- round( mimic.y === TOP ? border : mimic.y === BOTTOM ? newSize[1] - curSize[1] - border : (newSize[1] - curSize[1]) / 2 )
2663
- ];
2664
- }
2665
 
2666
- // Canvas drawing implementation
2667
- if ( HASCANVAS ) {
2668
- // Grab canvas context and clear/save it
2669
- context = inner[0].getContext( '2d' );
2670
- context.restore();
2671
- context.save();
2672
- context.clearRect( 0, 0, 6000, 6000 );
2673
-
2674
- // Calculate coordinates
2675
- coords = this._calculateTip( mimic, curSize, SCALE );
2676
- bigCoords = this._calculateTip( mimic, this.size, SCALE );
2677
-
2678
- // Set the canvas size using calculated size
2679
- inner.attr( WIDTH, newSize[0] * SCALE ).attr( HEIGHT, newSize[1] * SCALE );
2680
- inner.css( WIDTH, newSize[0] ).css( HEIGHT, newSize[1] );
2681
-
2682
- // Draw the outer-stroke tip
2683
- this._drawCoords( context, bigCoords );
2684
- context.fillStyle = color[1];
2685
- context.fill();
2686
-
2687
- // Draw the actual tip
2688
- context.translate( translate[0] * SCALE, translate[1] * SCALE );
2689
- this._drawCoords( context, coords );
2690
- context.fillStyle = color[0];
2691
- context.fill();
2692
- }
2693
 
2694
- // VML (IE Proprietary implementation)
2695
- else {
2696
- // Calculate coordinates
2697
- coords = this._calculateTip( mimic );
2698
-
2699
- // Setup coordinates string
2700
- coords = 'm' + coords[0] + ',' + coords[1] + ' l' + coords[2] +
2701
- ',' + coords[3] + ' ' + coords[4] + ',' + coords[5] + ' xe';
2702
-
2703
- // Setup VML-specific offset for pixel-perfection
2704
- translate[2] = border && /^(r|b)/i.test( corner.string() ) ?
2705
- BROWSER.ie === 8 ? 2 : 1 : 0;
2706
-
2707
- // Set initial CSS
2708
- inner.css(
2709
- {
2710
- coordsize: (newSize[0] + border) + ' ' + (newSize[1] + border),
2711
- antialias: '' + (mimic.string().indexOf( CENTER ) > -1),
2712
- left: translate[0] - (translate[2] * Number( precedance === X )),
2713
- top: translate[1] - (translate[2] * Number( precedance === Y )),
2714
- width: newSize[0] + border,
2715
- height: newSize[1] + border
2716
- }
2717
- )
2718
- .each(
2719
- function( i ) {
2720
- var $this = $( this );
2721
-
2722
- // Set shape specific attributes
2723
- $this[$this.prop ? 'prop' : 'attr'](
2724
- {
2725
- coordsize: (newSize[0] + border) + ' ' + (newSize[1] + border),
2726
- path: coords,
2727
- fillcolor: color[0],
2728
- filled: !!i,
2729
- stroked: !i
2730
- }
2731
- )
2732
- .toggle( !!(border || i) );
2733
-
2734
- // Check if border is enabled and add stroke element
2735
- !i && $this.html(
2736
- createVML(
2737
- 'stroke',
2738
- 'weight="' + (border * 2) + 'px" color="' + color[1] + '" miterlimit="1000" joinstyle="miter"'
2739
- )
2740
- );
2741
- }
2742
- );
2743
- }
2744
 
2745
- // Opera bug #357 - Incorrect tip position
2746
- // https://github.com/Craga89/qTip2/issues/367
2747
- window.opera && setTimeout(
2748
- function() {
2749
- elements.tip.css(
2750
- {
2751
- display: 'inline-block',
2752
- visibility: 'visible'
2753
- }
2754
- );
2755
- }, 1
2756
- );
2757
 
2758
- // Position if needed
2759
- if ( position !== FALSE ) {
2760
- this.calculate( corner, newSize );
2761
- }
2762
- },
2763
 
2764
- calculate: function( corner, size ) {
2765
- if ( !this.enabled ) {
2766
- return FALSE;
2767
- }
2768
 
2769
- var self = this,
2770
- elements = this.qtip.elements,
2771
- tip = this.element,
2772
- userOffset = this.options.offset,
2773
- isWidget = elements.tooltip.hasClass( 'ui-widget' ),
2774
- position = {},
2775
- precedance, corners;
2776
-
2777
- // Inherit corner if not provided
2778
- corner = corner || this.corner;
2779
- precedance = corner.precedance;
2780
-
2781
- // Determine which tip dimension to use for adjustment
2782
- size = size || this._calculateSize( corner );
2783
-
2784
- // Setup corners and offset array
2785
- corners = [corner.x, corner.y];
2786
- if ( precedance === X ) {
2787
- corners.reverse();
2788
- }
2789
 
2790
- // Calculate tip position
2791
- $.each(
2792
- corners, function( i, side ) {
2793
- var b, bc, br;
2794
-
2795
- if ( side === CENTER ) {
2796
- b = precedance === Y ? LEFT : TOP;
2797
- position[b] = '50%';
2798
- position[MARGIN + '-' + b] = -Math.round( size[precedance === Y ? 0 : 1] / 2 ) + userOffset;
2799
- }
2800
- else {
2801
- b = self._parseWidth( corner, side, elements.tooltip );
2802
- bc = self._parseWidth( corner, side, elements.content );
2803
- br = self._parseRadius( corner );
2804
-
2805
- position[side] = Math.max(
2806
- -self.border, i ? bc : (userOffset + (br > b ? br : -b))
2807
- );
2808
- }
2809
- }
2810
- );
2811
 
2812
- // Adjust for tip size
2813
- position[corner[precedance]] -= size[precedance === X ? 0 : 1];
2814
 
2815
- // Set and return new position
2816
- tip.css( {margin: '', top: '', bottom: '', left: '', right: ''} ).css( position );
2817
- return position;
2818
- },
2819
 
2820
- reposition: function( event, api, pos, viewport ) {
2821
- if ( !this.enabled ) {
2822
- return;
2823
- }
2824
 
2825
- var cache = api.cache,
2826
- newCorner = this.corner.clone(),
2827
- adjust = pos.adjusted,
2828
- method = api.options.position.adjust.method.split( ' ' ),
2829
- horizontal = method[0],
2830
- vertical = method[1] || method[0],
2831
- shift = {left: FALSE, top: FALSE, x: 0, y: 0},
2832
- offset, css = {}, props;
2833
-
2834
- function shiftflip( direction, precedance, popposite, side, opposite ) {
2835
- // Horizontal - Shift or flip method
2836
- if ( direction === SHIFT && newCorner.precedance === precedance && adjust[side] && newCorner[popposite] !== CENTER ) {
2837
- newCorner.precedance = newCorner.precedance === X ? Y : X;
2838
- }
2839
- else if ( direction !== SHIFT && adjust[side] ) {
2840
- newCorner[precedance] = newCorner[precedance] === CENTER ?
2841
- (adjust[side] > 0 ? side : opposite) : (newCorner[precedance] === side ? opposite : side);
2842
- }
2843
- }
2844
 
2845
- function shiftonly( xy, side, opposite ) {
2846
- if ( newCorner[xy] === CENTER ) {
2847
- css[MARGIN + '-' + side] = shift[xy] = offset[MARGIN + '-' + side] - adjust[side];
2848
- }
2849
- else {
2850
- props = offset[opposite] !== undefined ?
2851
- [adjust[side], -offset[side]] : [-adjust[side], offset[side]];
2852
-
2853
- if ( (shift[xy] = Math.max( props[0], props[1] )) > props[0] ) {
2854
- pos[side] -= adjust[side];
2855
- shift[side] = FALSE;
2856
- }
2857
-
2858
- css[offset[opposite] !== undefined ? opposite : side] = shift[xy];
2859
- }
2860
- }
 
 
 
 
 
 
2861
 
2862
- // If our tip position isn't fixed e.g. doesn't adjust with viewport...
2863
- if ( this.corner.fixed !== TRUE ) {
2864
- // Perform shift/flip adjustments
2865
- shiftflip( horizontal, X, Y, LEFT, RIGHT );
2866
- shiftflip( vertical, Y, X, TOP, BOTTOM );
2867
 
2868
- // Update and redraw the tip if needed (check cached details of last drawn tip)
2869
- if ( newCorner.string() !== cache.corner.string() && (cache.cornerTop !== adjust.top || cache.cornerLeft !== adjust.left) ) {
2870
- this.update( newCorner, FALSE );
2871
- }
2872
- }
2873
 
2874
- // Setup tip offset properties
2875
- offset = this.calculate( newCorner );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2876
 
2877
- // Readjust offset object to make it left/top
2878
- if ( offset.right !== undefined ) {
2879
- offset.left = -offset.right;
2880
- }
2881
- if ( offset.bottom !== undefined ) {
2882
- offset.top = -offset.bottom;
2883
- }
2884
- offset.user = this.offset;
2885
 
2886
- // Perform shift adjustments
2887
- if ( shift.left = (horizontal === SHIFT && !!adjust.left) ) {
2888
- shiftonly( X, LEFT, RIGHT );
2889
- }
2890
- if ( shift.top = (vertical === SHIFT && !!adjust.top) ) {
2891
- shiftonly( Y, TOP, BOTTOM );
2892
- }
2893
 
2894
- /*
2895
- * If the tip is adjusted in both dimensions, or in a
2896
- * direction that would cause it to be anywhere but the
2897
- * outer border, hide it!
2898
- */
2899
- this.element.css( css ).toggle(
2900
- !((shift.x && shift.y) || (newCorner.x === CENTER && shift.y) || (newCorner.y === CENTER && shift.x))
2901
- );
2902
 
2903
- // Adjust position to accomodate tip dimensions
2904
- pos.left -= offset.left.charAt ? offset.user :
2905
- horizontal !== SHIFT || shift.top || !shift.left && !shift.top ? offset.left + this.border : 0;
2906
- pos.top -= offset.top.charAt ? offset.user :
2907
- vertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top + this.border : 0;
2908
 
2909
- // Cache details
2910
- cache.cornerLeft = adjust.left;
2911
- cache.cornerTop = adjust.top;
2912
- cache.corner = newCorner.clone();
2913
- },
2914
 
2915
- destroy: function() {
2916
- // Unbind events
2917
- this.qtip._unbind( this.qtip.tooltip, this._ns );
 
 
 
2918
 
2919
- // Remove the tip element(s)
2920
- if ( this.qtip.elements.tip ) {
2921
- this.qtip.elements.tip.find( '*' )
2922
- .remove().end().remove();
2923
- }
2924
- }
2925
- }
2926
- );
2927
 
2928
- TIP = PLUGINS.tip = function( api ) {
2929
- return new Tip( api, api.options.style.tip );
2930
- };
 
 
 
 
 
 
2931
 
2932
- // Initialize tip on render
2933
- TIP.initialize = 'render';
2934
 
2935
- // Setup plugin sanitization options
2936
- TIP.sanitize = function( options ) {
2937
- if ( options.style && 'tip' in options.style ) {
2938
- var opts = options.style.tip;
2939
- if ( typeof opts !== 'object' ) {
2940
- opts = options.style.tip = {corner: opts};
2941
  }
2942
- if ( !(/string|boolean/i).test( typeof opts.corner ) ) {
2943
- opts.corner = TRUE;
2944
- }
2945
- }
2946
- };
2947
 
2948
- // Add new option checks for the plugin
2949
- CHECKS.tip = {
2950
- '^position.my|style.tip.(corner|mimic|border)$': function() {
2951
- // Make sure a tip can be drawn
2952
- this.create();
 
2953
 
2954
- // Reposition the tooltip
2955
- this.qtip.reposition();
2956
- },
2957
- '^style.tip.(height|width)$': function( obj ) {
2958
- // Re-set dimensions and redraw the tip
2959
- this.size = [obj.width, obj.height];
2960
- this.update();
2961
 
2962
- // Reposition the tooltip
2963
- this.qtip.reposition();
2964
- },
2965
- '^content.title|style.(classes|widget)$': function() {
2966
- this.update();
2967
- }
2968
- };
2969
 
2970
- // Extend original qTip defaults
2971
- $.extend(
2972
- TRUE, QTIP.defaults, {
2973
- style: {
2974
- tip: {
2975
- corner: TRUE,
2976
- mimic: FALSE,
2977
- width: 6,
2978
- height: 6,
2979
- border: TRUE,
2980
- offset: 0
2981
- }
2982
- }
2983
  }
2984
- );
 
2985
 
2986
- ;
2987
- var MODAL, OVERLAY,
2988
- MODALCLASS = 'qtip-modal',
2989
- MODALSELECTOR = '.' + MODALCLASS;
2990
-
2991
- OVERLAY = function() {
2992
- var self = this,
2993
- focusableElems = {},
2994
- current, onLast,
2995
- prevState, elem;
2996
-
2997
- // Modified code from jQuery UI 1.10.0 source
2998
- // http://code.jquery.com/ui/1.10.0/jquery-ui.js
2999
- function focusable( element ) {
3000
- // Use the defined focusable checker when possible
3001
- if ( $.expr[':'].focusable ) {
3002
- return $.expr[':'].focusable;
3003
- }
3004
 
3005
- var isTabIndexNotNaN = !isNaN( $.attr( element, 'tabindex' ) ),
3006
- nodeName = element.nodeName && element.nodeName.toLowerCase(),
3007
- map, mapName, img;
3008
 
3009
- if ( 'area' === nodeName ) {
3010
- map = element.parentNode;
3011
- mapName = map.name;
3012
- if ( !element.href || !mapName || map.nodeName.toLowerCase() !== 'map' ) {
3013
- return false;
3014
- }
3015
- img = $( 'img[usemap=#' + mapName + ']' )[0];
3016
- return !!img && img.is( ':visible' );
3017
- }
3018
- return (/input|select|textarea|button|object/.test( nodeName ) ?
3019
- !element.disabled :
3020
- 'a' === nodeName ?
3021
- element.href || isTabIndexNotNaN :
3022
- isTabIndexNotNaN
3023
- );
3024
  }
3025
 
3026
- // Focus inputs using cached focusable elements (see update())
3027
- function focusInputs( blurElems ) {
3028
- // Blurring body element in IE causes window.open windows to unfocus!
3029
- if ( focusableElems.length < 1 && blurElems.length ) {
3030
- blurElems.not( 'body' ).blur();
3031
- }
3032
 
3033
- // Focus the inputs
3034
- else {
3035
- focusableElems.first().focus();
3036
- }
3037
  }
3038
 
3039
- // Steal focus from elements outside tooltip
3040
- function stealFocus( event ) {
3041
- if ( !elem.is( ':visible' ) ) {
3042
- return;
3043
- }
3044
 
3045
- var target = $( event.target ),
3046
- tooltip = current.tooltip,
3047
- container = target.closest( SELECTOR ),
3048
- targetOnTop;
3049
 
3050
- // Determine if input container target is above this
3051
- targetOnTop = container.length < 1 ? FALSE :
3052
- (parseInt( container[0].style.zIndex, 10 ) > parseInt( tooltip[0].style.zIndex, 10 ));
 
3053
 
3054
- // If we're showing a modal, but focus has landed on an input below
3055
- // this modal, divert focus to the first visible input in this modal
3056
- // or if we can't find one... the tooltip itself
3057
- if ( !targetOnTop && target.closest( SELECTOR )[0] !== tooltip[0] ) {
3058
- focusInputs( target );
3059
- }
3060
 
3061
- // Detect when we leave the last focusable element...
3062
- onLast = event.target === focusableElems[focusableElems.length - 1];
 
 
 
3063
  }
3064
 
3065
- $.extend(
3066
- self, {
3067
- init: function() {
3068
- // Create document overlay
3069
- elem = self.elem = $(
3070
- '<div />', {
3071
- id: 'qtip-overlay',
3072
- html: '<div></div>',
3073
- mousedown: function() {
3074
- return FALSE;
3075
- }
3076
- }
3077
- )
3078
- .hide();
3079
-
3080
- // Make sure we can't focus anything outside the tooltip
3081
- $( document.body ).bind( 'focusin' + MODALSELECTOR, stealFocus );
3082
-
3083
- // Apply keyboard "Escape key" close handler
3084
- $( document ).bind(
3085
- 'keydown' + MODALSELECTOR, function( event ) {
3086
- if ( current && current.options.show.modal.escape && event.keyCode === 27 ) {
3087
- current.hide( event );
3088
- }
3089
- }
3090
- );
3091
-
3092
- // Apply click handler for blur option
3093
- elem.bind(
3094
- 'click' + MODALSELECTOR, function( event ) {
3095
- if ( current && current.options.show.modal.blur ) {
3096
- current.hide( event );
3097
- }
3098
- }
3099
- );
3100
-
3101
- return self;
3102
- },
3103
-
3104
- update: function( api ) {
3105
- // Update current API reference
3106
- current = api;
3107
-
3108
- // Update focusable elements if enabled
3109
- if ( api.options.show.modal.stealfocus !== FALSE ) {
3110
- focusableElems = api.tooltip.find( '*' ).filter(
3111
- function() {
3112
- return focusable( this );
3113
- }
3114
- );
3115
- }
3116
- else {
3117
- focusableElems = [];
3118
- }
3119
- },
3120
-
3121
- toggle: function( api, state, duration ) {
3122
- var docBody = $( document.body ),
3123
- tooltip = api.tooltip,
3124
- options = api.options.show.modal,
3125
- effect = options.effect,
3126
- type = state ? 'show' : 'hide',
3127
- visible = elem.is( ':visible' ),
3128
- visibleModals = $( MODALSELECTOR ).filter( ':visible:not(:animated)' ).not( tooltip ),
3129
- zindex;
3130
-
3131
- // Set active tooltip API reference
3132
- self.update( api );
3133
-
3134
- // If the modal can steal the focus...
3135
- // Blur the current item and focus anything in the modal we an
3136
- if ( state && options.stealfocus !== FALSE ) {
3137
- focusInputs( $( ':focus' ) );
3138
- }
3139
-
3140
- // Toggle backdrop cursor style on show
3141
- elem.toggleClass( 'blurs', options.blur );
3142
-
3143
- // Append to body on show
3144
- if ( state ) {
3145
- elem.appendTo( document.body );
3146
- }
3147
-
3148
- // Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible
3149
- if ( (elem.is( ':animated' ) && visible === state && prevState !== FALSE) || (!state && visibleModals.length) ) {
3150
- return self;
3151
- }
3152
-
3153
- // Stop all animations
3154
- elem.stop( TRUE, FALSE );
3155
-
3156
- // Use custom function if provided
3157
- if ( $.isFunction( effect ) ) {
3158
- effect.call( elem, state );
3159
- }
3160
-
3161
- // If no effect type is supplied, use a simple toggle
3162
- else if ( effect === FALSE ) {
3163
- elem[type]();
3164
- }
3165
-
3166
- // Use basic fade function
3167
- else {
3168
- elem.fadeTo(
3169
- parseInt( duration, 10 ) || 90, state ? 1 : 0, function() {
3170
- if ( !state ) {
3171
- elem.hide();
3172
- }
3173
- }
3174
- );
3175
- }
3176
-
3177
- // Reset position and detach from body on hide
3178
- if ( !state ) {
3179
- elem.queue(
3180
- function( next ) {
3181
- elem.css( {left: '', top: ''} );
3182
- if ( !$( MODALSELECTOR ).length ) {
3183
- elem.detach();
3184
- }
3185
- next();
3186
- }
3187
- );
3188
- }
3189
-
3190
- // Cache the state
3191
- prevState = state;
3192
-
3193
- // If the tooltip is destroyed, set reference to null
3194
- if ( current.destroyed ) {
3195
- current = NULL;
3196
- }
3197
-
3198
- return self;
3199
- }
3200
- }
3201
- );
3202
 
3203
- self.init();
3204
- };
3205
- OVERLAY = new OVERLAY();
3206
 
3207
- function Modal( api, options ) {
3208
- this.options = options;
3209
- this._ns = '-modal';
3210
 
3211
- this.init( (this.qtip = api) );
3212
  }
 
3213
 
3214
- $.extend(
3215
- Modal.prototype, {
3216
- init: function( qtip ) {
3217
- var tooltip = qtip.tooltip;
3218
-
3219
- // If modal is disabled... return
3220
- if ( !this.options.on ) {
3221
- return this;
3222
- }
3223
-
3224
- // Set overlay reference
3225
- qtip.elements.overlay = OVERLAY.elem;
3226
-
3227
- // Add unique attribute so we can grab modal tooltips easily via a SELECTOR, and set z-index
3228
- tooltip.addClass( MODALCLASS ).css(
3229
- 'z-index', QTIP.modal_zindex + $( MODALSELECTOR ).length
3230
- );
3231
 
3232
- // Apply our show/hide/focus modal events
3233
- qtip._bind(
3234
- tooltip, ['tooltipshow', 'tooltiphide'], function( event, api, duration ) {
3235
- var oEvent = event.originalEvent;
3236
-
3237
- // Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop
3238
- if ( event.target === tooltip[0] ) {
3239
- if ( oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test( oEvent.type ) && $( oEvent.relatedTarget ).closest( OVERLAY.elem[0] ).length ) {
3240
- try {
3241
- event.preventDefault();
3242
- } catch ( e ) {
3243
- }
3244
- }
3245
- else if ( !oEvent || (oEvent && oEvent.type !== 'tooltipsolo') ) {
3246
- this.toggle( event, event.type === 'tooltipshow', duration );
3247
- }
3248
- }
3249
- }, this._ns, this
3250
- );
3251
 
3252
- // Adjust modal z-index on tooltip focus
3253
- qtip._bind(
3254
- tooltip, 'tooltipfocus', function( event, api ) {
3255
- // If focus was cancelled before it reached us, don't do anything
3256
- if ( event.isDefaultPrevented() || event.target !== tooltip[0] ) {
3257
- return;
3258
- }
3259
-
3260
- var qtips = $( MODALSELECTOR ),
3261
-
3262
- // Keep the modal's lower than other, regular qtips
3263
- newIndex = QTIP.modal_zindex + qtips.length,
3264
- curIndex = parseInt( tooltip[0].style.zIndex, 10 );
3265
-
3266
- // Set overlay z-index
3267
- OVERLAY.elem[0].style.zIndex = newIndex - 1;
3268
-
3269
- // Reduce modal z-index's and keep them properly ordered
3270
- qtips.each(
3271
- function() {
3272
- if ( this.style.zIndex > curIndex ) {
3273
- this.style.zIndex -= 1;
3274
- }
3275
- }
3276
- );
3277
-
3278
- // Fire blur event for focused tooltip
3279
- qtips.filter( '.' + CLASS_FOCUS ).qtip( 'blur', event.originalEvent );
3280
-
3281
- // Set the new z-index
3282
- tooltip.addClass( CLASS_FOCUS )[0].style.zIndex = newIndex;
3283
-
3284
- // Set current
3285
- OVERLAY.update( api );
3286
-
3287
- // Prevent default handling
3288
- try {
3289
- event.preventDefault();
3290
- } catch ( e ) {
3291
- }
3292
- }, this._ns, this
3293
- );
3294
 
3295
- // Focus any other visible modals when this one hides
3296
- qtip._bind(
3297
- tooltip, 'tooltiphide', function( event ) {
3298
- if ( event.target === tooltip[0] ) {
3299
- $( MODALSELECTOR ).filter( ':visible' ).not( tooltip ).last().qtip(
3300
- 'focus', event
3301
- );
3302
- }
3303
- }, this._ns, this
3304
- );
3305
- },
3306
 
3307
- toggle: function( event, state, duration ) {
3308
- // Make sure default event hasn't been prevented
3309
- if ( event && event.isDefaultPrevented() ) {
3310
- return this;
3311
- }
3312
 
3313
- // Toggle it
3314
- OVERLAY.toggle( this.qtip, !!state, duration );
3315
- },
3316
 
3317
- destroy: function() {
3318
- // Remove modal class
3319
- this.qtip.tooltip.removeClass( MODALCLASS );
3320
 
3321
- // Remove bound events
3322
- this.qtip._unbind( this.qtip.tooltip, this._ns );
 
3323
 
3324
- // Delete element reference
3325
- OVERLAY.toggle( this.qtip, FALSE );
3326
- delete this.qtip.elements.overlay;
 
 
 
 
3327
  }
3328
  }
3329
- );
3330
 
 
 
 
 
3331
 
3332
- MODAL = PLUGINS.modal = function( api ) {
3333
- return new Modal( api, api.options.show.modal );
3334
- };
3335
 
3336
- // Setup sanitiztion rules
3337
- MODAL.sanitize = function( opts ) {
3338
- if ( opts.show ) {
3339
- if ( typeof opts.show.modal !== 'object' ) {
3340
- opts.show.modal = {on: !!opts.show.modal};
3341
- }
3342
- else if ( typeof opts.show.modal.on === 'undefined' ) {
3343
- opts.show.modal.on = TRUE;
 
 
 
3344
  }
3345
- }
3346
- };
3347
 
3348
- // Base z-index for all modal tooltips (use qTip core z-index as a base)
3349
- QTIP.modal_zindex = QTIP.zindex - 200;
3350
 
3351
- // Plugin needs to be initialized on render
3352
- MODAL.initialize = 'render';
3353
 
3354
- // Setup option set checks
3355
- CHECKS.modal = {
3356
- '^show.modal.(on|blur)$': function() {
3357
- // Initialise
3358
- this.destroy();
3359
- this.init();
3360
 
3361
- // Show the modal if not visible already and tooltip is visible
3362
- this.qtip.elems.overlay.toggle(
3363
- this.qtip.tooltip[0].offsetWidth > 0
3364
- );
3365
- }
3366
- };
3367
 
3368
- // Extend original api defaults
3369
- $.extend(
3370
- TRUE, QTIP.defaults, {
3371
- show: {
3372
- modal: {
3373
- on: FALSE,
3374
- effect: TRUE,
3375
- blur: TRUE,
3376
- stealfocus: TRUE,
3377
- escape: TRUE
3378
- }
3379
- }
3380
- }
3381
- );
3382
- ;
3383
- PLUGINS.viewport = function( api, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight ) {
3384
- var target = posOptions.target,
3385
- tooltip = api.elements.tooltip,
3386
- my = posOptions.my,
3387
- at = posOptions.at,
3388
- adjust = posOptions.adjust,
3389
- method = adjust.method.split( ' ' ),
3390
- methodX = method[0],
3391
- methodY = method[1] || method[0],
3392
- viewport = posOptions.viewport,
3393
- container = posOptions.container,
3394
- cache = api.cache,
3395
- adjusted = {left: 0, top: 0},
3396
- fixed, newMy, newClass, containerOffset, containerStatic,
3397
- viewportWidth, viewportHeight, viewportScroll, viewportOffset;
3398
-
3399
- // If viewport is not a jQuery element, or it's the window/document, or no adjustment method is used... return
3400
- if ( !viewport.jquery || target[0] === window || target[0] === document.body || adjust.method === 'none' ) {
3401
- return adjusted;
3402
  }
 
 
3403
 
3404
- // Cach container details
3405
- containerOffset = container.offset() || adjusted;
3406
- containerStatic = container.css( 'position' ) === 'static';
3407
-
3408
- // Cache our viewport details
3409
- fixed = tooltip.css( 'position' ) === 'fixed';
3410
- viewportWidth = viewport[0] === window ? viewport.width() : viewport.outerWidth( FALSE );
3411
- viewportHeight = viewport[0] === window ? viewport.height() : viewport.outerHeight( FALSE );
3412
- viewportScroll = {left: fixed ? 0 : viewport.scrollLeft(), top: fixed ? 0 : viewport.scrollTop()};
3413
- viewportOffset = viewport.offset() || adjusted;
3414
-
3415
- // Generic calculation method
3416
- function calculate( side, otherSide, type, adjust, side1, side2, lengthName, targetLength, elemLength ) {
3417
- var initialPos = position[side1],
3418
- mySide = my[side],
3419
- atSide = at[side],
3420
- isShift = type === SHIFT,
3421
- myLength = mySide === side1 ? elemLength : mySide === side2 ? -elemLength : -elemLength / 2,
3422
- atLength = atSide === side1 ? targetLength : atSide === side2 ? -targetLength : -targetLength / 2,
3423
- sideOffset = viewportScroll[side1] + viewportOffset[side1] - (containerStatic ? 0 : containerOffset[side1]),
3424
- overflow1 = sideOffset - initialPos,
3425
- overflow2 = initialPos + elemLength - (lengthName === WIDTH ? viewportWidth : viewportHeight) - sideOffset,
3426
- offset = myLength - (my.precedance === side || mySide === my[otherSide] ? atLength : 0) - (atSide === CENTER ? targetLength / 2 : 0);
3427
-
3428
- // shift
3429
- if ( isShift ) {
3430
- offset = (mySide === side1 ? 1 : -1) * myLength;
3431
-
3432
- // Adjust position but keep it within viewport dimensions
3433
- position[side1] += overflow1 > 0 ? overflow1 : overflow2 > 0 ? -overflow2 : 0;
3434
- position[side1] = Math.max(
3435
- -containerOffset[side1] + viewportOffset[side1],
3436
- initialPos - offset,
3437
- Math.min(
3438
- Math.max(
3439
- -containerOffset[side1] + viewportOffset[side1] + (lengthName === WIDTH ? viewportWidth : viewportHeight),
3440
- initialPos + offset
3441
- ),
3442
- position[side1],
3443
-
3444
- // Make sure we don't adjust complete off the element when using 'center'
3445
- mySide === 'center' ? initialPos - myLength : 1E9
3446
- )
3447
- );
3448
-
3449
- }
3450
 
3451
- // flip/flipinvert
3452
- else {
3453
- // Update adjustment amount depending on if using flipinvert or flip
3454
- adjust *= (type === FLIPINVERT ? 2 : 0);
3455
 
3456
- // Check for overflow on the left/top
3457
- if ( overflow1 > 0 && (mySide !== side1 || overflow2 > 0) ) {
3458
- position[side1] -= offset + adjust;
3459
- newMy.invert( side, side1 );
3460
- }
3461
 
3462
- // Check for overflow on the bottom/right
3463
- else if ( overflow2 > 0 && (mySide !== side2 || overflow1 > 0) ) {
3464
- position[side1] -= (mySide === CENTER ? -offset : offset) + adjust;
3465
- newMy.invert( side, side2 );
3466
- }
3467
 
3468
- // Make sure we haven't made things worse with the adjustment and reset if so
3469
- if ( position[side1] < viewportScroll && -position[side1] > overflow2 ) {
3470
- position[side1] = initialPos;
3471
- newMy = my.clone();
3472
- }
3473
- }
3474
 
3475
- return position[side1] - initialPos;
3476
- }
3477
 
3478
- // Set newMy if using flip or flipinvert methods
3479
- if ( methodX !== 'shift' || methodY !== 'shift' ) {
3480
- newMy = my.clone();
3481
- }
3482
 
3483
- // Adjust position based onviewport and adjustment options
3484
- adjusted = {
3485
- left: methodX !== 'none' ? calculate(
3486
- X, Y, methodX, adjust.x, LEFT, RIGHT, WIDTH, targetWidth, elemWidth
3487
- ) : 0,
3488
- top: methodY !== 'none' ? calculate(
3489
- Y, X, methodY, adjust.y, TOP, BOTTOM, HEIGHT, targetHeight, elemHeight
3490
- ) : 0
3491
- };
3492
 
3493
- // Set tooltip position class if it's changed
3494
- if ( newMy && cache.lastClass !== (newClass = NAMESPACE + '-pos-' + newMy.abbrev()) ) {
3495
- tooltip.removeClass( api.cache.lastClass ).addClass( (api.cache.lastClass = newClass) );
3496
- }
3497
 
3498
- return adjusted;
3499
- };
3500
- ;
3501
- PLUGINS.polys = {
3502
- // POLY area coordinate calculator
3503
- // Special thanks to Ed Cradock for helping out with this.
3504
- // Uses a binary search algorithm to find suitable coordinates.
3505
- polygon: function( baseCoords, corner ) {
3506
- var result = {
3507
- width: 0, height: 0,
3508
- position: {
3509
- top: 1e10, right: 0,
3510
- bottom: 0, left: 1e10
3511
- },
3512
- adjustable: FALSE
3513
- },
3514
- i = 0, next,
3515
- coords = [],
3516
- compareX = 1, compareY = 1,
3517
- realX = 0, realY = 0,
3518
- newWidth, newHeight;
3519
-
3520
- // First pass, sanitize coords and determine outer edges
3521
- i = baseCoords.length;
3522
- while ( i-- ) {
3523
- next = [parseInt( baseCoords[--i], 10 ), parseInt( baseCoords[i + 1], 10 )];
3524
-
3525
- if ( next[0] > result.position.right ) {
3526
- result.position.right = next[0];
3527
- }
3528
- if ( next[0] < result.position.left ) {
3529
- result.position.left = next[0];
3530
- }
3531
- if ( next[1] > result.position.bottom ) {
3532
- result.position.bottom = next[1];
3533
- }
3534
- if ( next[1] < result.position.top ) {
3535
- result.position.top = next[1];
3536
- }
3537
 
3538
- coords.push( next );
3539
- }
 
 
 
 
3540
 
3541
- // Calculate height and width from outer edges
3542
- newWidth = result.width = Math.abs( result.position.right - result.position.left );
3543
- newHeight = result.height = Math.abs( result.position.bottom - result.position.top );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3544
 
3545
- // If it's the center corner...
3546
- if ( corner.abbrev() === 'c' ) {
3547
- result.position = {
3548
- left: result.position.left + (result.width / 2),
3549
- top: result.position.top + (result.height / 2)
3550
- };
3551
- }
3552
- else {
3553
- // Second pass, use a binary search algorithm to locate most suitable coordinate
3554
- while ( newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0 ) {
3555
- newWidth = Math.floor( newWidth / 2 );
3556
- newHeight = Math.floor( newHeight / 2 );
3557
-
3558
- if ( corner.x === LEFT ) {
3559
- compareX = newWidth;
3560
- }
3561
- else if ( corner.x === RIGHT ) {
3562
- compareX = result.width - newWidth;
3563
- }
3564
- else {
3565
- compareX += Math.floor( newWidth / 2 );
3566
- }
3567
-
3568
- if ( corner.y === TOP ) {
3569
- compareY = newHeight;
3570
- }
3571
- else if ( corner.y === BOTTOM ) {
3572
- compareY = result.height - newHeight;
3573
- }
3574
- else {
3575
- compareY += Math.floor( newHeight / 2 );
3576
- }
3577
-
3578
- i = coords.length;
3579
- while ( i-- ) {
3580
- if ( coords.length < 2 ) {
3581
- break;
3582
- }
3583
-
3584
- realX = coords[i][0] - result.position.left;
3585
- realY = coords[i][1] - result.position.top;
3586
-
3587
- if ( (corner.x === LEFT && realX >= compareX) ||
3588
- (corner.x === RIGHT && realX <= compareX) ||
3589
- (corner.x === CENTER && (realX < compareX || realX > (result.width - compareX))) ||
3590
- (corner.y === TOP && realY >= compareY) ||
3591
- (corner.y === BOTTOM && realY <= compareY) ||
3592
- (corner.y === CENTER && (realY < compareY || realY > (result.height - compareY))) ) {
3593
- coords.splice( i, 1 );
3594
- }
3595
- }
3596
- }
3597
- result.position = {left: coords[0][0], top: coords[0][1]};
3598
- }
3599
 
3600
- return result;
3601
- },
3602
 
3603
- rect: function( ax, ay, bx, by ) {
3604
- return {
3605
- width: Math.abs( bx - ax ),
3606
- height: Math.abs( by - ay ),
3607
- position: {
3608
- left: Math.min( ax, bx ),
3609
- top: Math.min( ay, by )
3610
- }
3611
- };
3612
- },
3613
 
3614
- _angles: {
3615
- tc: 3 / 2, tr: 7 / 4, tl: 5 / 4,
3616
- bc: 1 / 2, br: 1 / 4, bl: 3 / 4,
3617
- rc: 2, lc: 1, c: 0
3618
- },
3619
- ellipse: function( cx, cy, rx, ry, corner ) {
3620
- var c = PLUGINS.polys._angles[corner.abbrev()],
3621
- rxc = c === 0 ? 0 : rx * Math.cos( c * Math.PI ),
3622
- rys = ry * Math.sin( c * Math.PI );
3623
-
3624
- return {
3625
- width: (rx * 2) - Math.abs( rxc ),
3626
- height: (ry * 2) - Math.abs( rys ),
3627
- position: {
3628
- left: cx + rxc,
3629
- top: cy + rys
3630
- },
3631
- adjustable: FALSE
3632
- };
3633
- },
3634
- circle: function( cx, cy, r, corner ) {
3635
- return PLUGINS.polys.ellipse( cx, cy, r, r, corner );
3636
- }
3637
- };
3638
- ;
3639
- PLUGINS.svg = function( api, svg, corner ) {
3640
- var doc = $( document ),
3641
- elem = svg[0],
3642
- root = $( elem.ownerSVGElement ),
3643
- xScale = 1, yScale = 1,
3644
- complex = true,
3645
- rootWidth, rootHeight,
3646
- mtx, transformed, viewBox,
3647
- len, next, i, points,
3648
- result, position, dimensions;
3649
-
3650
- // Ascend the parentNode chain until we find an element with getBBox()
3651
- while ( !elem.getBBox ) {
3652
- elem = elem.parentNode;
3653
- }
3654
- if ( !elem.getBBox || !elem.parentNode ) {
3655
- return FALSE;
3656
  }
3657
 
3658
- // Determine dimensions where possible
3659
- rootWidth = root.attr( 'width' ) || root.width() || parseInt( root.css( 'width' ), 10 );
3660
- rootHeight = root.attr( 'height' ) || root.height() || parseInt( root.css( 'height' ), 10 );
 
 
3661
 
3662
- // Add stroke characteristics to scaling
3663
- var strokeWidth2 = (parseInt( svg.css( 'stroke-width' ), 10 ) || 0) / 2;
3664
- if ( strokeWidth2 ) {
3665
- xScale += strokeWidth2 / rootWidth;
3666
- yScale += strokeWidth2 / rootHeight;
3667
  }
 
3668
 
3669
- // Determine which shape calculation to use
3670
- switch ( elem.nodeName ) {
3671
- case 'ellipse':
3672
- case 'circle':
3673
- result = PLUGINS.polys.ellipse(
3674
- elem.cx.baseVal.value,
3675
- elem.cy.baseVal.value,
3676
- (elem.rx || elem.r).baseVal.value + strokeWidth2,
3677
- (elem.ry || elem.r).baseVal.value + strokeWidth2,
3678
- corner
3679
- );
3680
- break;
3681
-
3682
- case 'line':
3683
- case 'polygon':
3684
- case 'polyline':
3685
- // Determine points object (line has none, so mimic using array)
3686
- points = elem.points || [
3687
- {x: elem.x1.baseVal.value, y: elem.y1.baseVal.value},
3688
- {x: elem.x2.baseVal.value, y: elem.y2.baseVal.value}
3689
- ];
3690
-
3691
- for ( result = [], i = -1, len = points.numberOfItems || points.length; ++i < len; ) {
3692
- next = points.getItem ? points.getItem( i ) : points[i];
3693
- result.push.apply( result, [next.x, next.y] );
3694
- }
3695
 
3696
- result = PLUGINS.polys.polygon( result, corner );
3697
- break;
3698
-
3699
- // Unknown shape or rectangle? Use bounding box
3700
- default:
3701
- result = elem.getBoundingClientRect();
3702
- result = {
3703
- width: result.width, height: result.height,
3704
- position: {
3705
- left: result.left,
3706
- top: result.top
3707
- }
3708
- };
3709
- complex = false;
3710
- break;
3711
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3712
 
3713
- // Shortcut assignments
3714
- position = result.position;
3715
- root = root[0];
3716
-
3717
- // If the shape was complex (i.e. not using bounding box calculations)
3718
- if ( complex ) {
3719
- // Convert position into a pixel value
3720
- if ( root.createSVGPoint ) {
3721
- mtx = elem.getScreenCTM();
3722
- points = root.createSVGPoint();
3723
-
3724
- points.x = position.left;
3725
- points.y = position.top;
3726
- transformed = points.matrixTransform( mtx );
3727
- position.left = transformed.x;
3728
- position.top = transformed.y;
3729
- }
3730
 
3731
- // Calculate viewBox characteristics
3732
- if ( root.viewBox && (viewBox = root.viewBox.baseVal) && viewBox.width && viewBox.height ) {
3733
- xScale *= rootWidth / viewBox.width;
3734
- yScale *= rootHeight / viewBox.height;
3735
- }
3736
- }
 
 
 
 
 
 
 
3737
 
3738
- // Adjust by scroll offset
3739
- position.left += doc.scrollLeft();
3740
- position.top += doc.scrollTop();
3741
 
3742
- return result;
3743
- };
3744
- ;
3745
- PLUGINS.imagemap = function( api, area, corner, adjustMethod ) {
3746
- if ( !area.jquery ) {
3747
- area = $( area );
3748
- }
3749
 
3750
- var shape = area.attr( 'shape' ).toLowerCase().replace( 'poly', 'polygon' ),
3751
- image = $( 'img[usemap="#' + area.parent( 'map' ).attr( 'name' ) + '"]' ),
3752
- coordsString = $.trim( area.attr( 'coords' ) ),
3753
- coordsArray = coordsString.replace( /,$/, '' ).split( ',' ),
3754
- imageOffset, coords, i, next, result, len;
3755
 
3756
- // If we can't find the image using the map...
3757
- if ( !image.length ) {
3758
- return FALSE;
3759
- }
3760
 
3761
- // Pass coordinates string if polygon
3762
- if ( shape === 'polygon' ) {
3763
- result = PLUGINS.polys.polygon( coordsArray, corner );
 
 
 
 
 
 
3764
  }
 
 
3765
 
3766
- // Otherwise parse the coordinates and pass them as arguments
3767
- else if ( PLUGINS.polys[shape] ) {
3768
- for ( i = -1, len = coordsArray.length, coords = []; ++i < len; ) {
3769
- coords.push( parseInt( coordsArray[i], 10 ) );
3770
- }
3771
 
3772
- result = PLUGINS.polys[shape].apply(
3773
- this, coords.concat( corner )
3774
- );
 
 
 
 
3775
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3776
 
3777
- // If no shapre calculation method was found, return false
3778
- else {
3779
- return FALSE;
3780
- }
3781
 
3782
- // Make sure we account for padding and borders on the image
3783
- imageOffset = image.offset();
3784
- imageOffset.left += Math.ceil( (image.outerWidth( FALSE ) - image.width()) / 2 );
3785
- imageOffset.top += Math.ceil( (image.outerHeight( FALSE ) - image.height()) / 2 );
3786
 
3787
- // Add image position to offset coordinates
3788
- result.position.left += imageOffset.left;
3789
- result.position.top += imageOffset.top;
 
 
 
3790
 
3791
- return result;
3792
- };
3793
- ;
3794
- var IE6,
 
 
 
 
3795
 
3796
- /*
3797
- * BGIFrame adaption (http://plugins.jquery.com/project/bgiframe)
3798
- * Special thanks to Brandon Aaron
3799
- */
3800
- BGIFRAME = '<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" ' +
3801
- ' style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); ' +
3802
- '-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3803
 
3804
- function Ie6( api, qtip ) {
3805
- this._ns = 'ie6';
3806
- this.init( (this.qtip = api) );
 
3807
  }
3808
 
3809
- $.extend(
3810
- Ie6.prototype, {
3811
- _scroll: function() {
3812
- var overlay = this.qtip.elements.overlay;
3813
- overlay && (overlay[0].style.top = $( window ).scrollTop() + 'px');
3814
- },
3815
-
3816
- init: function( qtip ) {
3817
- var tooltip = qtip.tooltip,
3818
- scroll;
3819
 
3820
- // Create the BGIFrame element if needed
3821
- if ( $( 'select, object' ).length < 1 ) {
3822
- this.bgiframe = qtip.elements.bgiframe = $( BGIFRAME ).appendTo( tooltip );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3823
 
3824
- // Update BGIFrame on tooltip move
3825
- qtip._bind( tooltip, 'tooltipmove', this.adjustBGIFrame, this._ns, this );
3826
- }
 
 
3827
 
3828
- // redraw() container for width/height calculations
3829
- this.redrawContainer = $( '<div/>', {id: NAMESPACE + '-rcontainer'} )
3830
- .appendTo( document.body );
3831
 
3832
- // Fixup modal plugin if present too
3833
- if ( qtip.elements.overlay && qtip.elements.overlay.addClass( 'qtipmodal-ie6fix' ) ) {
3834
- qtip._bind( window, ['scroll', 'resize'], this._scroll, this._ns, this );
3835
- qtip._bind( tooltip, ['tooltipshow'], this._scroll, this._ns, this );
3836
- }
3837
 
3838
- // Set dimensions
3839
- this.redraw();
3840
- },
3841
 
3842
- adjustBGIFrame: function() {
3843
- var tooltip = this.qtip.tooltip,
3844
- dimensions = {
3845
- height: tooltip.outerHeight( FALSE ),
3846
- width: tooltip.outerWidth( FALSE )
3847
- },
3848
- plugin = this.qtip.plugins.tip,
3849
- tip = this.qtip.elements.tip,
3850
- tipAdjust, offset;
3851
-
3852
- // Adjust border offset
3853
- offset = parseInt( tooltip.css( 'borderLeftWidth' ), 10 ) || 0;
3854
- offset = {left: -offset, top: -offset};
3855
-
3856
- // Adjust for tips plugin
3857
- if ( plugin && tip ) {
3858
- tipAdjust = (plugin.corner.precedance === 'x') ? [WIDTH, LEFT] : [HEIGHT, TOP];
3859
- offset[tipAdjust[1]] -= tip[tipAdjust[0]]();
3860
- }
3861
 
3862
- // Update bgiframe
3863
- this.bgiframe.css( offset ).css( dimensions );
3864
- },
 
 
3865
 
3866
- // Max/min width simulator function
3867
- redraw: function() {
3868
- if ( this.qtip.rendered < 1 || this.drawing ) {
3869
- return this;
3870
- }
3871
 
3872
- var tooltip = this.qtip.tooltip,
3873
- style = this.qtip.options.style,
3874
- container = this.qtip.options.position.container,
3875
- perc, width, max, min;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3876
 
3877
- // Set drawing flag
3878
- this.qtip.drawing = 1;
 
3879
 
3880
- // If tooltip has a set height/width, just set it... like a boss!
3881
- if ( style.height ) {
3882
- tooltip.css( HEIGHT, style.height );
3883
- }
3884
- if ( style.width ) {
3885
- tooltip.css( WIDTH, style.width );
3886
- }
3887
 
3888
- // Simulate max/min width if not set width present...
3889
- else {
3890
- // Reset width and add fluid class
3891
- tooltip.css( WIDTH, '' ).appendTo( this.redrawContainer );
3892
 
3893
- // Grab our tooltip width (add 1 if odd so we don't get wrapping problems.. huzzah!)
3894
- width = tooltip.width();
3895
- if ( width % 2 < 1 ) {
3896
- width += 1;
3897
- }
3898
 
3899
- // Grab our max/min properties
3900
- max = tooltip.css( 'maxWidth' ) || '';
3901
- min = tooltip.css( 'minWidth' ) || '';
3902
 
3903
- // Parse into proper pixel values
3904
- perc = (max + min).indexOf( '%' ) > -1 ? container.width() / 100 : 0;
3905
- max = ((max.indexOf( '%' ) > -1 ? perc : 1) * parseInt( max, 10 )) || width;
3906
- min = ((min.indexOf( '%' ) > -1 ? perc : 1) * parseInt( min, 10 )) || 0;
3907
 
3908
- // Determine new dimension size based on max/min/current values
3909
- width = max + min ? Math.min( Math.max( width, min ), max ) : width;
 
3910
 
3911
- // Set the newly calculated width and remvoe fluid class
3912
- tooltip.css( WIDTH, Math.round( width ) ).appendTo( container );
3913
- }
3914
 
3915
- // Set drawing flag
3916
- this.drawing = 0;
 
 
3917
 
3918
- return this;
3919
- },
3920
 
3921
- destroy: function() {
3922
- // Remove iframe
3923
- this.bgiframe && this.bgiframe.remove();
3924
 
3925
- // Remove bound events
3926
- this.qtip._unbind( [window, this.qtip.tooltip], this._ns );
3927
- }
3928
- }
3929
- );
3930
 
3931
- IE6 = PLUGINS.ie6 = function( api ) {
3932
- // Proceed only if the browser is IE6
3933
- return BROWSER.ie === 6 ? new Ie6( api ) : FALSE;
3934
- };
3935
 
3936
- IE6.initialize = 'render';
 
 
3937
 
3938
- CHECKS.ie6 = {
3939
- '^content|style$': function() {
3940
- this.redraw();
3941
- }
3942
- };
3943
- ;
3944
  }
3945
- ));
3946
- }( window, document ));
3947
- }
3948
-
3949
 
 
 
 
 
3950
 
 
3951
 
 
 
 
 
 
 
 
1
  /*
2
+ * qTip2 - Pretty powerful tooltips - v2.2.1
3
  * http://qtip2.com
4
  *
5
+ * Copyright (c) 2014
6
+ * Released under the MIT licenses
7
  * http://jquery.org/license
8
  *
9
+ * Date: Sat Sep 6 2014 11:12 GMT+0100+0100
10
  * Plugins: tips modal viewport svg imagemap ie6
11
+ * Styles: core basic css3
12
  */
13
  /*global window: false, jQuery: false, console: false, define: false */
14
 
15
+ /* Cache window, document, undefined */
16
+ (function( window, document, undefined ) {
 
17
 
18
+ // Uses AMD or browser globals to create a jQuery plugin.
19
+ (function( factory ) {
20
+ "use strict";
21
+ if(typeof define === 'function' && define.amd) {
22
+ define(['jquery'], factory);
 
 
 
 
23
  }
24
+ else if(jQuery && !jQuery.fn.qtip) {
25
+ factory(jQuery);
26
+ }
27
+ }
28
+ (function($) {
29
+ "use strict"; // Enable ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
30
+ ;// Munge the primitives - Paul Irish tip
31
+ var TRUE = true,
32
+ FALSE = false,
33
+ NULL = null,
34
+
35
+ // Common variables
36
+ X = 'x', Y = 'y',
37
+ WIDTH = 'width',
38
+ HEIGHT = 'height',
39
+
40
+ // Positioning sides
41
+ TOP = 'top',
42
+ LEFT = 'left',
43
+ BOTTOM = 'bottom',
44
+ RIGHT = 'right',
45
+ CENTER = 'center',
46
+
47
+ // Position adjustment types
48
+ FLIP = 'flip',
49
+ FLIPINVERT = 'flipinvert',
50
+ SHIFT = 'shift',
51
+
52
+ // Shortcut vars
53
+ QTIP, PROTOTYPE, CORNER, CHECKS,
54
+ PLUGINS = {},
55
+ NAMESPACE = 'qtip',
56
+ ATTR_HAS = 'data-hasqtip',
57
+ ATTR_ID = 'data-qtip-id',
58
+ WIDGET = ['ui-widget', 'ui-tooltip'],
59
+ SELECTOR = '.'+NAMESPACE,
60
+ INACTIVE_EVENTS = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split(' '),
61
+
62
+ CLASS_FIXED = NAMESPACE+'-fixed',
63
+ CLASS_DEFAULT = NAMESPACE + '-default',
64
+ CLASS_FOCUS = NAMESPACE + '-focus',
65
+ CLASS_HOVER = NAMESPACE + '-hover',
66
+ CLASS_DISABLED = NAMESPACE+'-disabled',
67
+
68
+ replaceSuffix = '_replacedByqTip',
69
+ oldtitle = 'oldtitle',
70
+ trackingBound,
71
+
72
+ // Browser detection
73
+ BROWSER = {
74
+ /*
75
+ * IE version detection
76
+ *
77
+ * Adapted from: http://ajaxian.com/archives/attack-of-the-ie-conditional-comment
78
+ * Credit to James Padolsey for the original implemntation!
79
+ */
80
+ ie: (function(){
81
+ for (
82
+ var v = 4, i = document.createElement("div");
83
+ (i.innerHTML = "<!--[if gt IE " + v + "]><i></i><![endif]-->") && i.getElementsByTagName("i")[0];
84
+ v+=1
85
+ ) {}
86
+ return v > 4 ? v : NaN;
87
+ }()),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
 
89
+ /*
90
+ * iOS version detection
91
+ */
92
+ iOS: parseFloat(
93
+ ('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1])
94
+ .replace('undefined', '3_2').replace('_', '.').replace('_', '')
95
+ ) || FALSE
96
+ };
97
+ ;function QTip(target, options, id, attr) {
98
+ // Elements and ID
99
+ this.id = id;
100
+ this.target = target;
101
+ this.tooltip = NULL;
102
+ this.elements = { target: target };
103
+
104
+ // Internal constructs
105
+ this._id = NAMESPACE + '-' + id;
106
+ this.timers = { img: {} };
107
+ this.options = options;
108
+ this.plugins = {};
109
+
110
+ // Cache object
111
+ this.cache = {
112
+ event: {},
113
+ target: $(),
114
+ disabled: FALSE,
115
+ attr: attr,
116
+ onTooltip: FALSE,
117
+ lastClass: ''
118
+ };
119
+
120
+ // Set the initial flags
121
+ this.rendered = this.destroyed = this.disabled = this.waiting =
122
+ this.hiddenDuringWait = this.positioning = this.triggering = FALSE;
123
+ }
124
+ PROTOTYPE = QTip.prototype;
125
+
126
+ PROTOTYPE._when = function(deferreds) {
127
+ return $.when.apply($, deferreds);
128
+ };
129
+
130
+ PROTOTYPE.render = function(show) {
131
+ if(this.rendered || this.destroyed) { return this; } // If tooltip has already been rendered, exit
132
+
133
+ var self = this,
134
+ options = this.options,
135
+ cache = this.cache,
136
+ elements = this.elements,
137
+ text = options.content.text,
138
+ title = options.content.title,
139
+ button = options.content.button,
140
+ posOptions = options.position,
141
+ namespace = '.'+this._id+' ',
142
+ deferreds = [],
143
+ tooltip;
144
+
145
+ // Add ARIA attributes to target
146
+ $.attr(this.target[0], 'aria-describedby', this._id);
147
+
148
+ // Create public position object that tracks current position corners
149
+ cache.posClass = this._createPosClass(
150
+ (this.position = { my: posOptions.my, at: posOptions.at }).my
151
+ );
152
+
153
+ // Create tooltip element
154
+ this.tooltip = elements.tooltip = tooltip = $('<div/>', {
155
+ 'id': this._id,
156
+ 'class': [ NAMESPACE, CLASS_DEFAULT, options.style.classes, cache.posClass ].join(' '),
157
+ 'width': options.style.width || '',
158
+ 'height': options.style.height || '',
159
+ 'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse,
160
+
161
+ /* ARIA specific attributes */
162
+ 'role': 'alert',
163
+ 'aria-live': 'polite',
164
+ 'aria-atomic': FALSE,
165
+ 'aria-describedby': this._id + '-content',
166
+ 'aria-hidden': TRUE
167
+ })
168
+ .toggleClass(CLASS_DISABLED, this.disabled)
169
+ .attr(ATTR_ID, this.id)
170
+ .data(NAMESPACE, this)
171
+ .appendTo(posOptions.container)
172
+ .append(
173
+ // Create content element
174
+ elements.content = $('<div />', {
175
+ 'class': NAMESPACE + '-content',
176
+ 'id': this._id + '-content',
177
+ 'aria-atomic': TRUE
178
+ })
179
+ );
180
+
181
+ // Set rendered flag and prevent redundant reposition calls for now
182
+ this.rendered = -1;
183
+ this.positioning = TRUE;
184
+
185
+ // Create title...
186
+ if(title) {
187
+ this._createTitle();
188
+
189
+ // Update title only if its not a callback (called in toggle if so)
190
+ if(!$.isFunction(title)) {
191
+ deferreds.push( this._updateTitle(title, FALSE) );
192
  }
193
+ }
194
 
195
+ // Create button
196
+ if(button) { this._createButton(); }
197
 
198
+ // Set proper rendered flag and update content if not a callback function (called in toggle)
199
+ if(!$.isFunction(text)) {
200
+ deferreds.push( this._updateContent(text, FALSE) );
201
+ }
202
+ this.rendered = TRUE;
203
 
204
+ // Setup widget classes
205
+ this._setWidget();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
206
 
207
+ // Initialize 'render' plugins
208
+ $.each(PLUGINS, function(name) {
209
+ var instance;
210
+ if(this.initialize === 'render' && (instance = this(self))) {
211
+ self.plugins[name] = instance;
212
+ }
213
+ });
214
 
215
+ // Unassign initial events and assign proper events
216
+ this._unassignEvents();
217
+ this._assignEvents();
218
 
219
+ // When deferreds have completed
220
+ this._when(deferreds).then(function() {
221
+ // tooltiprender event
222
+ self._trigger('render');
223
 
224
+ // Reset flags
225
+ self.positioning = FALSE;
 
 
 
226
 
227
+ // Show tooltip if not hidden during wait period
228
+ if(!self.hiddenDuringWait && (options.show.ready || show)) {
229
+ self.toggle(TRUE, cache.event, FALSE);
230
+ }
231
+ self.hiddenDuringWait = FALSE;
232
+ });
233
 
234
+ // Expose API
235
+ QTIP.api[this.id] = this;
 
 
 
236
 
237
+ return this;
238
+ };
239
 
240
+ PROTOTYPE.destroy = function(immediate) {
241
+ // Set flag the signify destroy is taking place to plugins
242
+ // and ensure it only gets destroyed once!
243
+ if(this.destroyed) { return this.target; }
 
 
 
 
 
244
 
245
+ function process() {
246
+ if(this.destroyed) { return; }
247
+ this.destroyed = TRUE;
248
 
249
+ var target = this.target,
250
+ title = target.attr(oldtitle),
251
+ timer;
 
 
252
 
253
+ // Destroy tooltip if rendered
254
+ if(this.rendered) {
255
+ this.tooltip.stop(1,0).find('*').remove().end().remove();
256
+ }
257
 
258
+ // Destroy all plugins
259
+ $.each(this.plugins, function(name) {
260
+ this.destroy && this.destroy();
261
+ });
 
 
 
262
 
263
+ // Clear timers
264
+ for(timer in this.timers) {
265
+ clearTimeout(this.timers[timer]);
266
+ }
267
 
268
+ // Remove api object and ARIA attributes
269
+ target.removeData(NAMESPACE)
270
+ .removeAttr(ATTR_ID)
271
+ .removeAttr(ATTR_HAS)
272
+ .removeAttr('aria-describedby');
273
 
274
+ // Reset old title attribute if removed
275
+ if(this.options.suppress && title) {
276
+ target.attr('title', title).removeAttr(oldtitle);
277
+ }
 
 
278
 
279
+ // Remove qTip events associated with this API
280
+ this._unassignEvents();
 
 
 
281
 
282
+ // Remove ID from used id objects, and delete object references
283
+ // for better garbage collection and leak protection
284
+ this.options = this.elements = this.cache = this.timers =
285
+ this.plugins = this.mouse = NULL;
286
 
287
+ // Delete epoxsed API object
288
+ delete QTIP.api[this.id];
289
+ }
 
290
 
291
+ // If an immediate destory is needed
292
+ if((immediate !== TRUE || this.triggering === 'hide') && this.rendered) {
293
+ this.tooltip.one('tooltiphidden', $.proxy(process, this));
294
+ !this.triggering && this.hide();
295
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
296
 
297
+ // If we're not in the process of hiding... process
298
+ else { process.call(this); }
299
 
300
+ return this.target;
301
+ };
302
+ ;function invalidOpt(a) {
303
+ return a === NULL || $.type(a) !== 'object';
304
+ }
305
 
306
+ function invalidContent(c) {
307
+ return !( $.isFunction(c) || (c && c.attr) || c.length || ($.type(c) === 'object' && (c.jquery || c.then) ));
308
+ }
309
 
310
+ // Option object sanitizer
311
+ function sanitizeOptions(opts) {
312
+ var content, text, ajax, once;
 
 
313
 
314
+ if(invalidOpt(opts)) { return FALSE; }
 
 
 
315
 
316
+ if(invalidOpt(opts.metadata)) {
317
+ opts.metadata = { type: opts.metadata };
318
+ }
319
 
320
+ if('content' in opts) {
321
+ content = opts.content;
 
 
322
 
323
+ if(invalidOpt(content) || content.jquery || content.done) {
324
+ content = opts.content = {
325
+ text: (text = invalidContent(content) ? FALSE : content)
326
+ };
327
  }
328
+ else { text = content.text; }
329
 
330
+ // DEPRECATED - Old content.ajax plugin functionality
331
+ // Converts it into the proper Deferred syntax
332
+ if('ajax' in content) {
333
+ ajax = content.ajax;
334
+ once = ajax && ajax.once !== FALSE;
335
+ delete content.ajax;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
336
 
337
+ content.text = function(event, api) {
338
+ var loading = text || $(this).attr(api.options.content.attr) || 'Loading...',
 
 
 
339
 
340
+ deferred = $.ajax(
341
+ $.extend({}, ajax, { context: api })
342
+ )
343
+ .then(ajax.success, NULL, ajax.error)
344
+ .then(function(content) {
345
+ if(content && once) { api.set('content.text', content); }
346
+ return content;
347
+ },
348
+ function(xhr, status, error) {
349
+ if(api.destroyed || xhr.status === 0) { return; }
350
+ api.set('content.text', status + ': ' + error);
351
+ });
352
 
353
+ return !once ? (api.set('content.text', loading), deferred) : loading;
354
+ };
355
+ }
 
356
 
357
+ if('title' in content) {
358
+ if($.isPlainObject(content.title)) {
359
+ content.button = content.title.button;
360
+ content.title = content.title.text;
361
  }
362
 
363
+ if(invalidContent(content.title || FALSE)) {
364
+ content.title = FALSE;
365
  }
 
 
 
 
 
 
 
 
 
366
  }
367
+ }
368
 
369
+ if('position' in opts && invalidOpt(opts.position)) {
370
+ opts.position = { my: opts.position, at: opts.position };
371
+ }
 
 
 
 
372
 
373
+ if('show' in opts && invalidOpt(opts.show)) {
374
+ opts.show = opts.show.jquery ? { target: opts.show } :
375
+ opts.show === TRUE ? { ready: TRUE } : { event: opts.show };
376
+ }
377
 
378
+ if('hide' in opts && invalidOpt(opts.hide)) {
379
+ opts.hide = opts.hide.jquery ? { target: opts.hide } : { event: opts.hide };
380
+ }
 
 
 
 
 
 
 
 
 
 
381
 
382
+ if('style' in opts && invalidOpt(opts.style)) {
383
+ opts.style = { classes: opts.style };
384
+ }
 
 
 
 
 
 
 
385
 
386
+ // Sanitize plugin options
387
+ $.each(PLUGINS, function() {
388
+ this.sanitize && this.sanitize(opts);
389
+ });
390
 
391
+ return opts;
392
+ }
 
 
 
 
 
 
 
 
393
 
394
+ // Setup builtin .set() option checks
395
+ CHECKS = PROTOTYPE.checks = {
396
+ builtin: {
397
+ // Core checks
398
+ '^id$': function(obj, o, v, prev) {
399
+ var id = v === TRUE ? QTIP.nextid : v,
400
+ new_id = NAMESPACE + '-' + id;
401
+
402
+ if(id !== FALSE && id.length > 0 && !$('#'+new_id).length) {
403
+ this._id = new_id;
404
+
405
+ if(this.rendered) {
406
+ this.tooltip[0].id = this._id;
407
+ this.elements.content[0].id = this._id + '-content';
408
+ this.elements.title[0].id = this._id + '-title';
409
+ }
410
+ }
411
+ else { obj[o] = prev; }
412
+ },
413
+ '^prerender': function(obj, o, v) {
414
+ v && !this.rendered && this.render(this.options.show.ready);
415
+ },
416
+
417
+ // Content checks
418
+ '^content.text$': function(obj, o, v) {
419
+ this._updateContent(v);
420
+ },
421
+ '^content.attr$': function(obj, o, v, prev) {
422
+ if(this.options.content.text === this.target.attr(prev)) {
423
+ this._updateContent( this.target.attr(v) );
424
+ }
425
+ },
426
+ '^content.title$': function(obj, o, v) {
427
+ // Remove title if content is null
428
+ if(!v) { return this._removeTitle(); }
429
+
430
+ // If title isn't already created, create it now and update
431
+ v && !this.elements.title && this._createTitle();
432
+ this._updateTitle(v);
433
+ },
434
+ '^content.button$': function(obj, o, v) {
435
+ this._updateButton(v);
436
+ },
437
+ '^content.title.(text|button)$': function(obj, o, v) {
438
+ this.set('content.'+o, v); // Backwards title.text/button compat
439
+ },
440
+
441
+ // Position checks
442
+ '^position.(my|at)$': function(obj, o, v){
443
+ 'string' === typeof v && (this.position[o] = obj[o] = new CORNER(v, o === 'at'));
444
+ },
445
+ '^position.container$': function(obj, o, v){
446
+ this.rendered && this.tooltip.appendTo(v);
447
+ },
448
+
449
+ // Show checks
450
+ '^show.ready$': function(obj, o, v) {
451
+ v && (!this.rendered && this.render(TRUE) || this.toggle(TRUE));
452
+ },
453
+
454
+ // Style checks
455
+ '^style.classes$': function(obj, o, v, p) {
456
+ this.rendered && this.tooltip.removeClass(p).addClass(v);
457
+ },
458
+ '^style.(width|height)': function(obj, o, v) {
459
+ this.rendered && this.tooltip.css(o, v);
460
+ },
461
+ '^style.widget|content.title': function() {
462
+ this.rendered && this._setWidget();
463
+ },
464
+ '^style.def': function(obj, o, v) {
465
+ this.rendered && this.tooltip.toggleClass(CLASS_DEFAULT, !!v);
466
+ },
467
+
468
+ // Events check
469
+ '^events.(render|show|move|hide|focus|blur)$': function(obj, o, v) {
470
+ this.rendered && this.tooltip[($.isFunction(v) ? '' : 'un') + 'bind']('tooltip'+o, v);
471
+ },
472
+
473
+ // Properties which require event reassignment
474
+ '^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() {
475
+ if(!this.rendered) { return; }
476
+
477
+ // Set tracking flag
478
+ var posOptions = this.options.position;
479
+ this.tooltip.attr('tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse);
480
+
481
+ // Reassign events
482
+ this._unassignEvents();
483
+ this._assignEvents();
484
+ }
485
+ }
486
+ };
487
 
488
+ // Dot notation converter
489
+ function convertNotation(options, notation) {
490
+ var i = 0, obj, option = options,
 
491
 
492
+ // Split notation into array
493
+ levels = notation.split('.');
 
 
 
 
 
 
 
 
 
 
 
494
 
495
+ // Loop through
496
+ while( option = option[ levels[i++] ] ) {
497
+ if(i < levels.length) { obj = option; }
498
+ }
499
 
500
+ return [obj || options, levels.pop()];
501
+ }
 
 
 
502
 
503
+ PROTOTYPE.get = function(notation) {
504
+ if(this.destroyed) { return this; }
 
505
 
506
+ var o = convertNotation(this.options, notation.toLowerCase()),
507
+ result = o[0][ o[1] ];
 
 
 
 
508
 
509
+ return result.precedance ? result.string() : result;
510
+ };
 
511
 
512
+ function setCallback(notation, args) {
513
+ var category, rule, match;
514
 
515
+ for(category in this.checks) {
516
+ for(rule in this.checks[category]) {
517
+ if(match = (new RegExp(rule, 'i')).exec(notation)) {
518
+ args.push(match);
519
+
520
+ if(category === 'builtin' || this.plugins[category]) {
521
+ this.checks[category][rule].apply(
522
+ this.plugins[category] || this, args
523
+ );
524
  }
525
  }
 
 
526
  }
527
+ }
528
+ }
529
 
530
+ var rmove = /^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,
531
+ rrender = /^prerender|show\.ready/i;
 
 
 
 
 
532
 
533
+ PROTOTYPE.set = function(option, value) {
534
+ if(this.destroyed) { return this; }
535
 
536
+ var rendered = this.rendered,
537
+ reposition = FALSE,
538
+ options = this.options,
539
+ checks = this.checks,
540
+ name;
541
 
542
+ // Convert singular option/value pair into object form
543
+ if('string' === typeof option) {
544
+ name = option; option = {}; option[name] = value;
545
+ }
546
+ else { option = $.extend({}, option); }
547
 
548
+ // Set all of the defined options to their new values
549
+ $.each(option, function(notation, value) {
550
+ if(rendered && rrender.test(notation)) {
551
+ delete option[notation]; return;
 
 
 
 
552
  }
553
 
554
+ // Set new obj value
555
+ var obj = convertNotation(options, notation.toLowerCase()), previous;
556
+ previous = obj[0][ obj[1] ];
557
+ obj[0][ obj[1] ] = value && value.nodeType ? $(value) : value;
558
 
559
+ // Also check if we need to reposition
560
+ reposition = rmove.test(notation) || reposition;
 
 
561
 
562
+ // Set the new params for the callback
563
+ option[notation] = [obj[0], obj[1], value, previous];
564
+ });
 
 
 
 
 
 
 
 
 
 
 
 
565
 
566
+ // Re-sanitize options
567
+ sanitizeOptions(options);
 
 
 
 
 
568
 
569
+ /*
570
+ * Execute any valid callbacks for the set options
571
+ * Also set positioning flag so we don't get loads of redundant repositioning calls.
572
+ */
573
+ this.positioning = TRUE;
574
+ $.each(option, $.proxy(setCallback, this));
575
+ this.positioning = FALSE;
576
 
577
+ // Update position if needed
578
+ if(this.rendered && this.tooltip[0].offsetWidth > 0 && reposition) {
579
+ this.reposition( options.position.target === 'mouse' ? NULL : this.cache.event );
580
+ }
581
 
582
+ return this;
583
+ };
584
+ ;PROTOTYPE._update = function(content, element, reposition) {
585
+ var self = this,
586
+ cache = this.cache;
587
 
588
+ // Make sure tooltip is rendered and content is defined. If not return
589
+ if(!this.rendered || !content) { return FALSE; }
590
 
591
+ // Use function to parse content
592
+ if($.isFunction(content)) {
593
+ content = content.call(this.elements.target, cache.event, this) || '';
594
+ }
 
 
 
595
 
596
+ // Handle deferred content
597
+ if($.isFunction(content.then)) {
598
+ cache.waiting = TRUE;
599
+ return content.then(function(c) {
600
+ cache.waiting = FALSE;
601
+ return self._update(c, element);
602
+ }, NULL, function(e) {
603
+ return self._update(e, element);
604
+ });
605
+ }
606
 
607
+ // If content is null... return false
608
+ if(content === FALSE || (!content && content !== '')) { return FALSE; }
609
 
610
+ // Append new content if its a DOM array and show it if hidden
611
+ if(content.jquery && content.length > 0) {
612
+ element.empty().append(
613
+ content.css({ display: 'block', visibility: 'visible' })
614
+ );
615
+ }
616
 
617
+ // Content is a regular string, insert the new content
618
+ else { element.html(content); }
 
 
619
 
620
+ // Wait for content to be loaded, and reposition
621
+ return this._waitForContent(element).then(function(images) {
622
+ if(self.rendered && self.tooltip[0].offsetWidth > 0) {
623
+ self.reposition(cache.event, !images.length);
624
+ }
625
+ });
626
+ };
627
 
628
+ PROTOTYPE._waitForContent = function(element) {
629
+ var cache = this.cache;
 
 
 
 
 
 
 
 
 
 
630
 
631
+ // Set flag
632
+ cache.waiting = TRUE;
 
 
633
 
634
+ // If imagesLoaded is included, ensure images have loaded and return promise
635
+ return ( $.fn.imagesLoaded ? element.imagesLoaded() : $.Deferred().resolve([]) )
636
+ .done(function() { cache.waiting = FALSE; })
637
+ .promise();
638
+ };
 
639
 
640
+ PROTOTYPE._updateContent = function(content, reposition) {
641
+ this._update(content, this.elements.content, reposition);
642
+ };
 
643
 
644
+ PROTOTYPE._updateTitle = function(content, reposition) {
645
+ if(this._update(content, this.elements.title, reposition) === FALSE) {
646
+ this._removeTitle(FALSE);
647
+ }
648
+ };
649
+
650
+ PROTOTYPE._createTitle = function()
651
+ {
652
+ var elements = this.elements,
653
+ id = this._id+'-title';
654
+
655
+ // Destroy previous title element, if present
656
+ if(elements.titlebar) { this._removeTitle(); }
657
+
658
+ // Create title bar and title elements
659
+ elements.titlebar = $('<div />', {
660
+ 'class': NAMESPACE + '-titlebar ' + (this.options.style.widget ? createWidgetClass('header') : '')
661
+ })
662
+ .append(
663
+ elements.title = $('<div />', {
664
+ 'id': id,
665
+ 'class': NAMESPACE + '-title',
666
+ 'aria-atomic': TRUE
667
+ })
668
+ )
669
+ .insertBefore(elements.content)
670
+
671
+ // Button-specific events
672
+ .delegate('.qtip-close', 'mousedown keydown mouseup keyup mouseout', function(event) {
673
+ $(this).toggleClass('ui-state-active ui-state-focus', event.type.substr(-4) === 'down');
674
+ })
675
+ .delegate('.qtip-close', 'mouseover mouseout', function(event){
676
+ $(this).toggleClass('ui-state-hover', event.type === 'mouseover');
677
+ });
678
+
679
+ // Create button if enabled
680
+ if(this.options.content.button) { this._createButton(); }
681
+ };
682
+
683
+ PROTOTYPE._removeTitle = function(reposition)
684
+ {
685
+ var elements = this.elements;
686
+
687
+ if(elements.title) {
688
+ elements.titlebar.remove();
689
+ elements.titlebar = elements.title = elements.button = NULL;
690
+
691
+ // Reposition if enabled
692
+ if(reposition !== FALSE) { this.reposition(); }
693
+ }
694
+ };
695
+ ;PROTOTYPE._createPosClass = function(my) {
696
+ return NAMESPACE + '-pos-' + (my || this.options.position.my).abbrev();
697
+ };
698
+
699
+ PROTOTYPE.reposition = function(event, effect) {
700
+ if(!this.rendered || this.positioning || this.destroyed) { return this; }
701
+
702
+ // Set positioning flag
703
+ this.positioning = TRUE;
704
+
705
+ var cache = this.cache,
706
+ tooltip = this.tooltip,
707
+ posOptions = this.options.position,
708
+ target = posOptions.target,
709
+ my = posOptions.my,
710
+ at = posOptions.at,
711
+ viewport = posOptions.viewport,
712
+ container = posOptions.container,
713
+ adjust = posOptions.adjust,
714
+ method = adjust.method.split(' '),
715
+ tooltipWidth = tooltip.outerWidth(FALSE),
716
+ tooltipHeight = tooltip.outerHeight(FALSE),
717
+ targetWidth = 0,
718
+ targetHeight = 0,
719
+ type = tooltip.css('position'),
720
+ position = { left: 0, top: 0 },
721
+ visible = tooltip[0].offsetWidth > 0,
722
+ isScroll = event && event.type === 'scroll',
723
+ win = $(window),
724
+ doc = container[0].ownerDocument,
725
+ mouse = this.mouse,
726
+ pluginCalculations, offset, adjusted, newClass;
727
+
728
+ // Check if absolute position was passed
729
+ if($.isArray(target) && target.length === 2) {
730
+ // Force left top and set position
731
+ at = { x: LEFT, y: TOP };
732
+ position = { left: target[0], top: target[1] };
733
+ }
734
+
735
+ // Check if mouse was the target
736
+ else if(target === 'mouse') {
737
+ // Force left top to allow flipping
738
+ at = { x: LEFT, y: TOP };
739
 
740
+ // Use the mouse origin that caused the show event, if distance hiding is enabled
741
+ if((!adjust.mouse || this.options.hide.distance) && cache.origin && cache.origin.pageX) {
742
+ event = cache.origin;
743
+ }
744
 
745
+ // Use cached event for resize/scroll events
746
+ else if(!event || (event && (event.type === 'resize' || event.type === 'scroll'))) {
747
+ event = cache.event;
748
+ }
749
 
750
+ // Otherwise, use the cached mouse coordinates if available
751
+ else if(mouse && mouse.pageX) {
752
+ event = mouse;
753
+ }
 
 
 
 
 
754
 
755
+ // Calculate body and container offset and take them into account below
756
+ if(type !== 'static') { position = container.offset(); }
757
+ if(doc.body.offsetWidth !== (window.innerWidth || doc.documentElement.clientWidth)) {
758
+ offset = $(document.body).offset();
759
+ }
760
 
761
+ // Use event coordinates for position
762
+ position = {
763
+ left: event.pageX - position.left + (offset && offset.left || 0),
764
+ top: event.pageY - position.top + (offset && offset.top || 0)
765
  };
766
 
767
+ // Scroll events are a pain, some browsers
768
+ if(adjust.mouse && isScroll && mouse) {
769
+ position.left -= (mouse.scrollX || 0) - win.scrollLeft();
770
+ position.top -= (mouse.scrollY || 0) - win.scrollTop();
771
+ }
772
+ }
773
 
774
+ // Target wasn't mouse or absolute...
775
+ else {
776
+ // Check if event targetting is being used
777
+ if(target === 'event') {
778
+ if(event && event.target && event.type !== 'scroll' && event.type !== 'resize') {
779
+ cache.target = $(event.target);
780
  }
781
+ else if(!event.target) {
782
+ cache.target = this.elements.target;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
783
  }
784
+ }
785
+ else if(target !== 'event'){
786
+ cache.target = $(target.jquery ? target : this.elements.target);
787
+ }
788
+ target = cache.target;
789
 
790
+ // Parse the target into a jQuery object and make sure there's an element present
791
+ target = $(target).eq(0);
792
+ if(target.length === 0) { return this; }
793
 
794
+ // Check if window or document is the target
795
+ else if(target[0] === document || target[0] === window) {
796
+ targetWidth = BROWSER.iOS ? window.innerWidth : target.width();
797
+ targetHeight = BROWSER.iOS ? window.innerHeight : target.height();
798
 
799
+ if(target[0] === window) {
800
+ position = {
801
+ top: (viewport || target).scrollTop(),
802
+ left: (viewport || target).scrollLeft()
803
+ };
804
  }
805
+ }
806
 
807
+ // Check if the target is an <AREA> element
808
+ else if(PLUGINS.imagemap && target.is('area')) {
809
+ pluginCalculations = PLUGINS.imagemap(this, target, at, PLUGINS.viewport ? method : FALSE);
810
+ }
 
811
 
812
+ // Check if the target is an SVG element
813
+ else if(PLUGINS.svg && target && target[0].ownerSVGElement) {
814
+ pluginCalculations = PLUGINS.svg(this, target, at, PLUGINS.viewport ? method : FALSE);
815
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
816
 
817
+ // Otherwise use regular jQuery methods
818
+ else {
819
+ targetWidth = target.outerWidth(FALSE);
820
+ targetHeight = target.outerHeight(FALSE);
821
+ position = target.offset();
822
+ }
823
 
824
+ // Parse returned plugin values into proper variables
825
+ if(pluginCalculations) {
826
+ targetWidth = pluginCalculations.width;
827
+ targetHeight = pluginCalculations.height;
828
+ offset = pluginCalculations.offset;
829
+ position = pluginCalculations.position;
830
+ }
831
 
832
+ // Adjust position to take into account offset parents
833
+ position = this.reposition.offset(target, position, container);
 
 
 
 
834
 
835
+ // Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2)
836
+ if((BROWSER.iOS > 3.1 && BROWSER.iOS < 4.1) ||
837
+ (BROWSER.iOS >= 4.3 && BROWSER.iOS < 4.33) ||
838
+ (!BROWSER.iOS && type === 'fixed')
839
+ ){
840
+ position.left -= win.scrollLeft();
841
+ position.top -= win.scrollTop();
842
+ }
843
 
844
+ // Adjust position relative to target
845
+ if(!pluginCalculations || (pluginCalculations && pluginCalculations.adjustable !== FALSE)) {
846
+ position.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0;
847
+ position.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0;
848
+ }
849
+ }
 
850
 
851
+ // Adjust position relative to tooltip
852
+ position.left += adjust.x + (my.x === RIGHT ? -tooltipWidth : my.x === CENTER ? -tooltipWidth / 2 : 0);
853
+ position.top += adjust.y + (my.y === BOTTOM ? -tooltipHeight : my.y === CENTER ? -tooltipHeight / 2 : 0);
 
 
854
 
855
+ // Use viewport adjustment plugin if enabled
856
+ if(PLUGINS.viewport) {
857
+ adjusted = position.adjusted = PLUGINS.viewport(
858
+ this, position, posOptions, targetWidth, targetHeight, tooltipWidth, tooltipHeight
859
+ );
 
860
 
861
+ // Apply offsets supplied by positioning plugin (if used)
862
+ if(offset && adjusted.left) { position.left += offset.left; }
863
+ if(offset && adjusted.top) { position.top += offset.top; }
 
 
 
 
 
 
 
 
 
 
 
 
864
 
865
+ // Apply any new 'my' position
866
+ if(adjusted.my) { this.position.my = adjusted.my; }
867
+ }
 
 
868
 
869
+ // Viewport adjustment is disabled, set values to zero
870
+ else { position.adjusted = { left: 0, top: 0 }; }
 
 
871
 
872
+ // Set tooltip position class if it's changed
873
+ if(cache.posClass !== (newClass = this._createPosClass(this.position.my))) {
874
+ tooltip.removeClass(cache.posClass).addClass( (cache.posClass = newClass) );
875
+ }
 
 
 
876
 
877
+ // tooltipmove event
878
+ if(!this._trigger('move', [position, viewport.elem || viewport], event)) { return this; }
879
+ delete position.adjusted;
 
 
 
880
 
881
+ // If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly
882
+ if(effect === FALSE || !visible || isNaN(position.left) || isNaN(position.top) || target === 'mouse' || !$.isFunction(posOptions.effect)) {
883
+ tooltip.css(position);
884
+ }
885
 
886
+ // Use custom function if provided
887
+ else if($.isFunction(posOptions.effect)) {
888
+ posOptions.effect.call(tooltip, this, $.extend({}, position));
889
+ tooltip.queue(function(next) {
890
+ // Reset attributes to avoid cross-browser rendering bugs
891
+ $(this).css({ opacity: '', height: '' });
892
+ if(BROWSER.ie) { this.style.removeAttribute('filter'); }
893
 
894
+ next();
895
+ });
896
+ }
 
 
 
 
897
 
898
+ // Set positioning flag
899
+ this.positioning = FALSE;
900
 
901
+ return this;
902
+ };
 
 
 
 
 
 
903
 
904
+ // Custom (more correct for qTip!) offset calculator
905
+ PROTOTYPE.reposition.offset = function(elem, pos, container) {
906
+ if(!container[0]) { return pos; }
 
 
 
907
 
908
+ var ownerDocument = $(elem[0].ownerDocument),
909
+ quirks = !!BROWSER.ie && document.compatMode !== 'CSS1Compat',
910
+ parent = container[0],
911
+ scrolled, position, parentOffset, overflow;
912
 
913
+ function scroll(e, i) {
914
+ pos.left += i * e.scrollLeft();
915
+ pos.top += i * e.scrollTop();
916
+ }
 
917
 
918
+ // Compensate for non-static containers offset
919
+ do {
920
+ if((position = $.css(parent, 'position')) !== 'static') {
921
+ if(position === 'fixed') {
922
+ parentOffset = parent.getBoundingClientRect();
923
+ scroll(ownerDocument, -1);
 
924
  }
 
 
925
  else {
926
+ parentOffset = $(parent).position();
927
+ parentOffset.left += (parseFloat($.css(parent, 'borderLeftWidth')) || 0);
928
+ parentOffset.top += (parseFloat($.css(parent, 'borderTopWidth')) || 0);
 
 
 
929
  }
 
930
 
931
+ pos.left -= parentOffset.left + (parseFloat($.css(parent, 'marginLeft')) || 0);
932
+ pos.top -= parentOffset.top + (parseFloat($.css(parent, 'marginTop')) || 0);
 
 
933
 
934
+ // If this is the first parent element with an overflow of "scroll" or "auto", store it
935
+ if(!scrolled && (overflow = $.css(parent, 'overflow')) !== 'hidden' && overflow !== 'visible') { scrolled = $(parent); }
936
+ }
937
+ }
938
+ while((parent = parent.offsetParent));
 
 
 
 
 
 
 
 
 
 
939
 
940
+ // Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode)
941
+ if(scrolled && (scrolled[0] !== ownerDocument[0] || quirks)) {
942
+ scroll(scrolled, 1);
943
+ }
944
 
945
+ return pos;
946
+ };
947
+
948
+ // Corner class
949
+ var C = (CORNER = PROTOTYPE.reposition.Corner = function(corner, forceY) {
950
+ corner = ('' + corner).replace(/([A-Z])/, ' $1').replace(/middle/gi, CENTER).toLowerCase();
951
+ this.x = (corner.match(/left|right/i) || corner.match(/center/) || ['inherit'])[0].toLowerCase();
952
+ this.y = (corner.match(/top|bottom|center/i) || ['inherit'])[0].toLowerCase();
953
+ this.forceY = !!forceY;
954
+
955
+ var f = corner.charAt(0);
956
+ this.precedance = (f === 't' || f === 'b' ? Y : X);
957
+ }).prototype;
958
+
959
+ C.invert = function(z, center) {
960
+ this[z] = this[z] === LEFT ? RIGHT : this[z] === RIGHT ? LEFT : center || this[z];
961
+ };
962
+
963
+ C.string = function(join) {
964
+ var x = this.x, y = this.y;
965
+
966
+ var result = x !== y ?
967
+ (x === 'center' || y !== 'center' && (this.precedance === Y || this.forceY) ?
968
+ [y,x] : [x,y]
969
+ ) :
970
+ [x];
971
+
972
+ return join !== false ? result.join(' ') : result;
973
+ };
974
+
975
+ C.abbrev = function() {
976
+ var result = this.string(false);
977
+ return result[0].charAt(0) + (result[1] && result[1].charAt(0) || '');
978
+ };
979
+
980
+ C.clone = function() {
981
+ return new CORNER( this.string(), this.forceY );
982
+ };
983
+
984
+ ;
985
+ PROTOTYPE.toggle = function(state, event) {
986
+ var cache = this.cache,
987
+ options = this.options,
988
+ tooltip = this.tooltip;
989
+
990
+ // Try to prevent flickering when tooltip overlaps show element
991
+ if(event) {
992
+ if((/over|enter/).test(event.type) && cache.event && (/out|leave/).test(cache.event.type) &&
993
+ options.show.target.add(event.target).length === options.show.target.length &&
994
+ tooltip.has(event.relatedTarget).length) {
995
  return this;
996
+ }
997
 
998
+ // Cache event
999
+ cache.event = $.event.fix(event);
1000
+ }
 
 
1001
 
1002
+ // If we're currently waiting and we've just hidden... stop it
1003
+ this.waiting && !state && (this.hiddenDuringWait = TRUE);
 
 
1004
 
1005
+ // Render the tooltip if showing and it isn't already
1006
+ if(!this.rendered) { return state ? this.render(1) : this; }
1007
+ else if(this.destroyed || this.disabled) { return this; }
 
1008
 
1009
+ var type = state ? 'show' : 'hide',
1010
+ opts = this.options[type],
1011
+ otherOpts = this.options[ !state ? 'show' : 'hide' ],
1012
+ posOptions = this.options.position,
1013
+ contentOptions = this.options.content,
1014
+ width = this.tooltip.css('width'),
1015
+ visible = this.tooltip.is(':visible'),
1016
+ animate = state || opts.target.length === 1,
1017
+ sameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target,
1018
+ identicalState, allow, showEvent, delay, after;
 
 
1019
 
1020
+ // Detect state if valid one isn't provided
1021
+ if((typeof state).search('boolean|number')) { state = !visible; }
1022
 
1023
+ // Check if the tooltip is in an identical state to the new would-be state
1024
+ identicalState = !tooltip.is(':animated') && visible === state && sameTarget;
 
 
 
 
 
 
 
1025
 
1026
+ // Fire tooltip(show/hide) event and check if destroyed
1027
+ allow = !identicalState ? !!this._trigger(type, [90]) : NULL;
 
 
1028
 
1029
+ // Check to make sure the tooltip wasn't destroyed in the callback
1030
+ if(this.destroyed) { return this; }
1031
 
1032
+ // If the user didn't stop the method prematurely and we're showing the tooltip, focus it
1033
+ if(allow !== FALSE && state) { this.focus(event); }
 
 
 
 
1034
 
1035
+ // If the state hasn't changed or the user stopped it, return early
1036
+ if(!allow || identicalState) { return this; }
 
1037
 
1038
+ // Set ARIA hidden attribute
1039
+ $.attr(tooltip[0], 'aria-hidden', !!!state);
 
1040
 
1041
+ // Execute state specific properties
1042
+ if(state) {
1043
+ // Store show origin coordinates
1044
+ this.mouse && (cache.origin = $.event.fix(this.mouse));
1045
 
1046
+ // Update tooltip content & title if it's a dynamic function
1047
+ if($.isFunction(contentOptions.text)) { this._updateContent(contentOptions.text, FALSE); }
1048
+ if($.isFunction(contentOptions.title)) { this._updateTitle(contentOptions.title, FALSE); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1049
 
1050
+ // Cache mousemove events for positioning purposes (if not already tracking)
1051
+ if(!trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse) {
1052
+ $(document).bind('mousemove.'+NAMESPACE, this._storeMouse);
1053
+ trackingBound = TRUE;
1054
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1055
 
1056
+ // Update the tooltip position (set width first to prevent viewport/max-width issues)
1057
+ if(!width) { tooltip.css('width', tooltip.outerWidth(FALSE)); }
1058
+ this.reposition(event, arguments[2]);
1059
+ if(!width) { tooltip.css('width', ''); }
1060
 
1061
+ // Hide other tooltips if tooltip is solo
1062
+ if(!!opts.solo) {
1063
+ (typeof opts.solo === 'string' ? $(opts.solo) : $(SELECTOR, opts.solo))
1064
+ .not(tooltip).not(opts.target).qtip('hide', $.Event('tooltipsolo'));
1065
+ }
1066
+ }
1067
+ else {
1068
+ // Clear show timer if we're hiding
1069
+ clearTimeout(this.timers.show);
1070
 
1071
+ // Remove cached origin on hide
1072
+ delete cache.origin;
 
 
1073
 
1074
+ // Remove mouse tracking event if not needed (all tracking qTips are hidden)
1075
+ if(trackingBound && !$(SELECTOR+'[tracking="true"]:visible', opts.solo).not(tooltip).length) {
1076
+ $(document).unbind('mousemove.'+NAMESPACE);
1077
+ trackingBound = FALSE;
1078
+ }
 
 
1079
 
1080
+ // Blur the tooltip
1081
+ this.blur(event);
1082
+ }
 
 
1083
 
1084
+ // Define post-animation, state specific properties
1085
+ after = $.proxy(function() {
1086
+ if(state) {
1087
+ // Prevent antialias from disappearing in IE by removing filter
1088
+ if(BROWSER.ie) { tooltip[0].style.removeAttribute('filter'); }
 
 
 
1089
 
1090
+ // Remove overflow setting to prevent tip bugs
1091
+ tooltip.css('overflow', '');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1092
 
1093
+ // Autofocus elements if enabled
1094
+ if('string' === typeof opts.autofocus) {
1095
+ $(this.options.show.autofocus, tooltip).focus();
1096
  }
1097
 
1098
+ // If set, hide tooltip when inactive for delay period
1099
+ this.options.show.target.trigger('qtip-'+this.id+'-inactive');
1100
+ }
1101
+ else {
1102
+ // Reset CSS states
1103
+ tooltip.css({
1104
+ display: '',
1105
+ visibility: '',
1106
+ opacity: '',
1107
+ left: '',
1108
+ top: ''
1109
+ });
1110
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1111
 
1112
+ // tooltipvisible/tooltiphidden events
1113
+ this._trigger(state ? 'visible' : 'hidden');
1114
+ }, this);
 
1115
 
1116
+ // If no effect type is supplied, use a simple toggle
1117
+ if(opts.effect === FALSE || animate === FALSE) {
1118
+ tooltip[ type ]();
1119
+ after();
1120
+ }
1121
 
1122
+ // Use custom function if provided
1123
+ else if($.isFunction(opts.effect)) {
1124
+ tooltip.stop(1, 1);
1125
+ opts.effect.call(tooltip, this);
1126
+ tooltip.queue('fx', function(n) {
1127
+ after(); n();
1128
+ });
1129
+ }
 
 
 
1130
 
1131
+ // Use basic fade function by default
1132
+ else { tooltip.fadeTo(90, state ? 1 : 0, after); }
 
 
1133
 
1134
+ // If inactive hide method is set, active it
1135
+ if(state) { opts.target.trigger('qtip-'+this.id+'-inactive'); }
 
 
1136
 
1137
+ return this;
1138
+ };
1139
 
1140
+ PROTOTYPE.show = function(event) { return this.toggle(TRUE, event); };
 
 
1141
 
1142
+ PROTOTYPE.hide = function(event) { return this.toggle(FALSE, event); };
1143
+ ;PROTOTYPE.focus = function(event) {
1144
+ if(!this.rendered || this.destroyed) { return this; }
1145
 
1146
+ var qtips = $(SELECTOR),
1147
+ tooltip = this.tooltip,
1148
+ curIndex = parseInt(tooltip[0].style.zIndex, 10),
1149
+ newIndex = QTIP.zindex + qtips.length,
1150
+ focusedElem;
1151
 
1152
+ // Only update the z-index if it has changed and tooltip is not already focused
1153
+ if(!tooltip.hasClass(CLASS_FOCUS)) {
1154
+ // tooltipfocus event
1155
+ if(this._trigger('focus', [newIndex], event)) {
1156
+ // Only update z-index's if they've changed
1157
+ if(curIndex !== newIndex) {
1158
+ // Reduce our z-index's and keep them properly ordered
1159
+ qtips.each(function() {
1160
+ if(this.style.zIndex > curIndex) {
1161
+ this.style.zIndex = this.style.zIndex - 1;
 
 
 
 
 
 
 
 
 
 
 
 
 
1162
  }
1163
+ });
1164
 
1165
+ // Fire blur event for focused tooltip
1166
+ qtips.filter('.' + CLASS_FOCUS).qtip('blur', event);
 
 
 
 
 
 
 
 
 
1167
  }
1168
 
1169
+ // Set the new z-index
1170
+ tooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex;
1171
+ }
1172
+ }
 
 
 
 
1173
 
1174
+ return this;
1175
+ };
 
 
 
1176
 
1177
+ PROTOTYPE.blur = function(event) {
1178
+ if(!this.rendered || this.destroyed) { return this; }
 
 
1179
 
1180
+ // Set focused status to FALSE
1181
+ this.tooltip.removeClass(CLASS_FOCUS);
 
 
1182
 
1183
+ // tooltipblur event
1184
+ this._trigger('blur', [ this.tooltip.css('zIndex') ], event);
 
 
1185
 
1186
+ return this;
1187
+ };
1188
+ ;PROTOTYPE.disable = function(state) {
1189
+ if(this.destroyed) { return this; }
1190
 
1191
+ // If 'toggle' is passed, toggle the current state
1192
+ if(state === 'toggle') {
1193
+ state = !(this.rendered ? this.tooltip.hasClass(CLASS_DISABLED) : this.disabled);
1194
+ }
1195
 
1196
+ // Disable if no state passed
1197
+ else if('boolean' !== typeof state) {
1198
+ state = TRUE;
1199
+ }
1200
 
1201
+ if(this.rendered) {
1202
+ this.tooltip.toggleClass(CLASS_DISABLED, state)
1203
+ .attr('aria-disabled', state);
1204
+ }
 
 
 
 
 
 
 
 
1205
 
1206
+ this.disabled = !!state;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1207
 
1208
+ return this;
1209
+ };
 
 
 
 
 
 
 
 
 
 
1210
 
1211
+ PROTOTYPE.enable = function() { return this.disable(FALSE); };
1212
+ ;PROTOTYPE._createButton = function()
1213
+ {
1214
+ var self = this,
1215
+ elements = this.elements,
1216
+ tooltip = elements.tooltip,
1217
+ button = this.options.content.button,
1218
+ isString = typeof button === 'string',
1219
+ close = isString ? button : 'Close tooltip';
1220
 
1221
+ if(elements.button) { elements.button.remove(); }
 
 
 
 
 
 
 
1222
 
1223
+ // Use custom button if one was supplied by user, else use default
1224
+ if(button.jquery) {
1225
+ elements.button = button;
1226
+ }
1227
+ else {
1228
+ elements.button = $('<a />', {
1229
+ 'class': 'qtip-close ' + (this.options.style.widget ? '' : NAMESPACE+'-icon'),
1230
+ 'title': close,
1231
+ 'aria-label': close
1232
+ })
1233
+ .prepend(
1234
+ $('<span />', {
1235
+ 'class': 'ui-icon ui-icon-close',
1236
+ 'html': '&times;'
1237
+ })
1238
+ );
1239
+ }
1240
 
1241
+ // Create button and setup attributes
1242
+ elements.button.appendTo(elements.titlebar || tooltip)
1243
+ .attr('role', 'button')
1244
+ .click(function(event) {
1245
+ if(!tooltip.hasClass(CLASS_DISABLED)) { self.hide(event); }
1246
+ return FALSE;
1247
+ });
1248
+ };
1249
+
1250
+ PROTOTYPE._updateButton = function(button)
1251
+ {
1252
+ // Make sure tooltip is rendered and if not, return
1253
+ if(!this.rendered) { return FALSE; }
1254
+
1255
+ var elem = this.elements.button;
1256
+ if(button) { this._createButton(); }
1257
+ else { elem.remove(); }
1258
+ };
1259
+ ;// Widget class creator
1260
+ function createWidgetClass(cls) {
1261
+ return WIDGET.concat('').join(cls ? '-'+cls+' ' : ' ');
1262
+ }
1263
 
1264
+ // Widget class setter method
1265
+ PROTOTYPE._setWidget = function()
1266
+ {
1267
+ var on = this.options.style.widget,
1268
+ elements = this.elements,
1269
+ tooltip = elements.tooltip,
1270
+ disabled = tooltip.hasClass(CLASS_DISABLED);
1271
 
1272
+ tooltip.removeClass(CLASS_DISABLED);
1273
+ CLASS_DISABLED = on ? 'ui-state-disabled' : 'qtip-disabled';
1274
+ tooltip.toggleClass(CLASS_DISABLED, disabled);
1275
 
1276
+ tooltip.toggleClass('ui-helper-reset '+createWidgetClass(), on).toggleClass(CLASS_DEFAULT, this.options.style.def && !on);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1277
 
1278
+ if(elements.content) {
1279
+ elements.content.toggleClass( createWidgetClass('content'), on);
1280
+ }
1281
+ if(elements.titlebar) {
1282
+ elements.titlebar.toggleClass( createWidgetClass('header'), on);
1283
+ }
1284
+ if(elements.button) {
1285
+ elements.button.toggleClass(NAMESPACE+'-icon', !on);
1286
+ }
1287
+ };
1288
+ ;function delay(callback, duration) {
1289
+ // If tooltip has displayed, start hide timer
1290
+ if(duration > 0) {
1291
+ return setTimeout(
1292
+ $.proxy(callback, this), duration
1293
+ );
1294
+ }
1295
+ else{ callback.call(this); }
1296
+ }
1297
 
1298
+ function showMethod(event) {
1299
+ if(this.tooltip.hasClass(CLASS_DISABLED)) { return; }
 
1300
 
1301
+ // Clear hide timers
1302
+ clearTimeout(this.timers.show);
1303
+ clearTimeout(this.timers.hide);
 
 
 
 
 
 
1304
 
1305
+ // Start show timer
1306
+ this.timers.show = delay.call(this,
1307
+ function() { this.toggle(TRUE, event); },
1308
+ this.options.show.delay
1309
+ );
1310
+ }
1311
 
1312
+ function hideMethod(event) {
1313
+ if(this.tooltip.hasClass(CLASS_DISABLED) || this.destroyed) { return; }
1314
+
1315
+ // Check if new target was actually the tooltip element
1316
+ var relatedTarget = $(event.relatedTarget),
1317
+ ontoTooltip = relatedTarget.closest(SELECTOR)[0] === this.tooltip[0],
1318
+ ontoTarget = relatedTarget[0] === this.options.show.target[0];
1319
+
1320
+ // Clear timers and stop animation queue
1321
+ clearTimeout(this.timers.show);
1322
+ clearTimeout(this.timers.hide);
1323
+
1324
+ // Prevent hiding if tooltip is fixed and event target is the tooltip.
1325
+ // Or if mouse positioning is enabled and cursor momentarily overlaps
1326
+ if(this !== relatedTarget[0] &&
1327
+ (this.options.position.target === 'mouse' && ontoTooltip) ||
1328
+ (this.options.hide.fixed && (
1329
+ (/mouse(out|leave|move)/).test(event.type) && (ontoTooltip || ontoTarget))
1330
+ ))
1331
+ {
1332
+ try {
1333
+ event.preventDefault();
1334
+ event.stopImmediatePropagation();
1335
+ } catch(e) {}
1336
+
1337
+ return;
1338
+ }
1339
 
1340
+ // If tooltip has displayed, start hide timer
1341
+ this.timers.hide = delay.call(this,
1342
+ function() { this.toggle(FALSE, event); },
1343
+ this.options.hide.delay,
1344
+ this
1345
+ );
1346
+ }
1347
 
1348
+ function inactiveMethod(event) {
1349
+ if(this.tooltip.hasClass(CLASS_DISABLED) || !this.options.hide.inactive) { return; }
 
 
 
 
 
 
 
 
1350
 
1351
+ // Clear timer
1352
+ clearTimeout(this.timers.inactive);
 
 
1353
 
1354
+ this.timers.inactive = delay.call(this,
1355
+ function(){ this.hide(event); },
1356
+ this.options.hide.inactive
1357
+ );
1358
+ }
1359
 
1360
+ function repositionMethod(event) {
1361
+ if(this.rendered && this.tooltip[0].offsetWidth > 0) { this.reposition(event); }
1362
+ }
 
 
 
 
 
1363
 
1364
+ // Store mouse coordinates
1365
+ PROTOTYPE._storeMouse = function(event) {
1366
+ (this.mouse = $.event.fix(event)).type = 'mousemove';
1367
+ return this;
1368
+ };
1369
+
1370
+ // Bind events
1371
+ PROTOTYPE._bind = function(targets, events, method, suffix, context) {
1372
+ if(!targets || !method || !events.length) { return; }
1373
+ var ns = '.' + this._id + (suffix ? '-'+suffix : '');
1374
+ $(targets).bind(
1375
+ (events.split ? events : events.join(ns + ' ')) + ns,
1376
+ $.proxy(method, context || this)
1377
+ );
1378
+ return this;
1379
+ };
1380
+ PROTOTYPE._unbind = function(targets, suffix) {
1381
+ targets && $(targets).unbind('.' + this._id + (suffix ? '-'+suffix : ''));
1382
+ return this;
1383
+ };
1384
+
1385
+ // Global delegation helper
1386
+ function delegate(selector, events, method) {
1387
+ $(document.body).delegate(selector,
1388
+ (events.split ? events : events.join('.'+NAMESPACE + ' ')) + '.'+NAMESPACE,
1389
+ function() {
1390
+ var api = QTIP.api[ $.attr(this, ATTR_ID) ];
1391
+ api && !api.disabled && method.apply(api, arguments);
1392
  }
1393
+ );
1394
+ }
1395
+ // Event trigger
1396
+ PROTOTYPE._trigger = function(type, args, event) {
1397
+ var callback = $.Event('tooltip'+type);
1398
+ callback.originalEvent = (event && $.extend({}, event)) || this.cache.event || NULL;
1399
+
1400
+ this.triggering = type;
1401
+ this.tooltip.trigger(callback, [this].concat(args || []));
1402
+ this.triggering = FALSE;
1403
+
1404
+ return !callback.isDefaultPrevented();
1405
+ };
1406
+
1407
+ PROTOTYPE._bindEvents = function(showEvents, hideEvents, showTargets, hideTargets, showMethod, hideMethod) {
1408
+ // Get tasrgets that lye within both
1409
+ var similarTargets = showTargets.filter( hideTargets ).add( hideTargets.filter(showTargets) ),
1410
+ toggleEvents = [];
1411
+
1412
+ // If hide and show targets are the same...
1413
+ if(similarTargets.length) {
1414
+
1415
+ // Filter identical show/hide events
1416
+ $.each(hideEvents, function(i, type) {
1417
+ var showIndex = $.inArray(type, showEvents);
1418
+
1419
+ // Both events are identical, remove from both hide and show events
1420
+ // and append to toggleEvents
1421
+ showIndex > -1 && toggleEvents.push( showEvents.splice( showIndex, 1 )[0] );
1422
+ });
1423
+
1424
+ // Toggle events are special case of identical show/hide events, which happen in sequence
1425
+ if(toggleEvents.length) {
1426
+ // Bind toggle events to the similar targets
1427
+ this._bind(similarTargets, toggleEvents, function(event) {
1428
+ var state = this.rendered ? this.tooltip[0].offsetWidth > 0 : false;
1429
+ (state ? hideMethod : showMethod).call(this, event);
1430
+ });
1431
+
1432
+ // Remove the similar targets from the regular show/hide bindings
1433
+ showTargets = showTargets.not(similarTargets);
1434
+ hideTargets = hideTargets.not(similarTargets);
1435
  }
1436
+ }
1437
 
1438
+ // Apply show/hide/toggle events
1439
+ this._bind(showTargets, showEvents, showMethod);
1440
+ this._bind(hideTargets, hideEvents, hideMethod);
1441
+ };
1442
+
1443
+ PROTOTYPE._assignInitialEvents = function(event) {
1444
+ var options = this.options,
1445
+ showTarget = options.show.target,
1446
+ hideTarget = options.hide.target,
1447
+ showEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [],
1448
+ hideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : [];
1449
+
1450
+ // Catch remove/removeqtip events on target element to destroy redundant tooltips
1451
+ this._bind(this.elements.target, ['remove', 'removeqtip'], function(event) {
1452
+ this.destroy(true);
1453
+ }, 'destroy');
1454
+
1455
+ /*
1456
+ * Make sure hoverIntent functions properly by using mouseleave as a hide event if
1457
+ * mouseenter/mouseout is used for show.event, even if it isn't in the users options.
1458
+ */
1459
+ if(/mouse(over|enter)/i.test(options.show.event) && !/mouse(out|leave)/i.test(options.hide.event)) {
1460
+ hideEvents.push('mouseleave');
1461
+ }
 
 
 
 
 
 
 
1462
 
1463
+ /*
1464
+ * Also make sure initial mouse targetting works correctly by caching mousemove coords
1465
+ * on show targets before the tooltip has rendered. Also set onTarget when triggered to
1466
+ * keep mouse tracking working.
1467
+ */
1468
+ this._bind(showTarget, 'mousemove', function(event) {
1469
+ this._storeMouse(event);
1470
+ this.cache.onTarget = TRUE;
1471
+ });
1472
+
1473
+ // Define hoverIntent function
1474
+ function hoverIntent(event) {
1475
+ // Only continue if tooltip isn't disabled
1476
+ if(this.disabled || this.destroyed) { return FALSE; }
1477
+
1478
+ // Cache the event data
1479
+ this.cache.event = event && $.event.fix(event);
1480
+ this.cache.target = event && $(event.target);
1481
+
1482
+ // Start the event sequence
1483
+ clearTimeout(this.timers.show);
1484
+ this.timers.show = delay.call(this,
1485
+ function() { this.render(typeof event === 'object' || options.show.ready); },
1486
+ options.prerender ? 0 : options.show.delay
1487
  );
1488
+ }
1489
 
1490
+ // Filter and bind events
1491
+ this._bindEvents(showEvents, hideEvents, showTarget, hideTarget, hoverIntent, function() {
1492
+ if(!this.timers) { return FALSE; }
1493
+ clearTimeout(this.timers.show);
1494
+ });
1495
+
1496
+ // Prerendering is enabled, create tooltip now
1497
+ if(options.show.ready || options.prerender) { hoverIntent.call(this, event); }
1498
+ };
1499
+
1500
+ // Event assignment method
1501
+ PROTOTYPE._assignEvents = function() {
1502
+ var self = this,
1503
+ options = this.options,
1504
+ posOptions = options.position,
1505
+
1506
+ tooltip = this.tooltip,
1507
+ showTarget = options.show.target,
1508
+ hideTarget = options.hide.target,
1509
+ containerTarget = posOptions.container,
1510
+ viewportTarget = posOptions.viewport,
1511
+ documentTarget = $(document),
1512
+ bodyTarget = $(document.body),
1513
+ windowTarget = $(window),
1514
+
1515
+ showEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [],
1516
+ hideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : [];
1517
+
1518
+
1519
+ // Assign passed event callbacks
1520
+ $.each(options.events, function(name, callback) {
1521
+ self._bind(tooltip, name === 'toggle' ? ['tooltipshow','tooltiphide'] : ['tooltip'+name], callback, null, tooltip);
1522
+ });
1523
+
1524
+ // Hide tooltips when leaving current window/frame (but not select/option elements)
1525
+ if(/mouse(out|leave)/i.test(options.hide.event) && options.hide.leave === 'window') {
1526
+ this._bind(documentTarget, ['mouseout', 'blur'], function(event) {
1527
+ if(!/select|option/.test(event.target.nodeName) && !event.relatedTarget) {
1528
+ this.hide(event);
1529
+ }
1530
+ });
1531
+ }
1532
 
1533
+ // Enable hide.fixed by adding appropriate class
1534
+ if(options.hide.fixed) {
1535
+ hideTarget = hideTarget.add( tooltip.addClass(CLASS_FIXED) );
1536
+ }
1537
 
1538
+ /*
1539
+ * Make sure hoverIntent functions properly by using mouseleave to clear show timer if
1540
+ * mouseenter/mouseout is used for show.event, even if it isn't in the users options.
1541
+ */
1542
+ else if(/mouse(over|enter)/i.test(options.show.event)) {
1543
+ this._bind(hideTarget, 'mouseleave', function() {
1544
+ clearTimeout(this.timers.show);
1545
+ });
1546
+ }
1547
 
1548
+ // Hide tooltip on document mousedown if unfocus events are enabled
1549
+ if(('' + options.hide.event).indexOf('unfocus') > -1) {
1550
+ this._bind(containerTarget.closest('html'), ['mousedown', 'touchstart'], function(event) {
1551
+ var elem = $(event.target),
1552
+ enabled = this.rendered && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0,
1553
+ isAncestor = elem.parents(SELECTOR).filter(this.tooltip[0]).length > 0;
1554
 
1555
+ if(elem[0] !== this.target[0] && elem[0] !== this.tooltip[0] && !isAncestor &&
1556
+ !this.target.has(elem[0]).length && enabled
1557
+ ) {
1558
+ this.hide(event);
 
 
 
1559
  }
1560
+ });
1561
+ }
1562
 
1563
+ // Check if the tooltip hides when inactive
1564
+ if('number' === typeof options.hide.inactive) {
1565
+ // Bind inactive method to show target(s) as a custom event
1566
+ this._bind(showTarget, 'qtip-'+this.id+'-inactive', inactiveMethod, 'inactive');
1567
 
1568
+ // Define events which reset the 'inactive' event handler
1569
+ this._bind(hideTarget.add(tooltip), QTIP.inactiveEvents, inactiveMethod);
1570
+ }
 
 
 
 
 
 
 
 
 
 
 
1571
 
1572
+ // Filter and bind events
1573
+ this._bindEvents(showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod);
 
 
 
 
 
 
 
 
 
1574
 
1575
+ // Mouse movement bindings
1576
+ this._bind(showTarget.add(tooltip), 'mousemove', function(event) {
1577
+ // Check if the tooltip hides when mouse is moved a certain distance
1578
+ if('number' === typeof options.hide.distance) {
1579
+ var origin = this.cache.origin || {},
1580
+ limit = this.options.hide.distance,
1581
+ abs = Math.abs;
1582
 
1583
+ // Check if the movement has gone beyond the limit, and hide it if so
1584
+ if(abs(event.pageX - origin.pageX) >= limit || abs(event.pageY - origin.pageY) >= limit) {
1585
+ this.hide(event);
 
 
 
 
 
 
 
 
 
 
1586
  }
1587
+ }
1588
 
1589
+ // Cache mousemove coords on show targets
1590
+ this._storeMouse(event);
1591
+ });
1592
+
1593
+ // Mouse positioning events
1594
+ if(posOptions.target === 'mouse') {
1595
+ // If mouse adjustment is on...
1596
+ if(posOptions.adjust.mouse) {
1597
+ // Apply a mouseleave event so we don't get problems with overlapping
1598
+ if(options.hide.event) {
1599
+ // Track if we're on the target or not
1600
+ this._bind(showTarget, ['mouseenter', 'mouseleave'], function(event) {
1601
+ if(!this.cache) {return FALSE; }
1602
+ this.cache.onTarget = event.type === 'mouseenter';
1603
+ });
1604
+ }
1605
+
1606
+ // Update tooltip position on mousemove
1607
+ this._bind(documentTarget, 'mousemove', function(event) {
1608
+ // Update the tooltip position only if the tooltip is visible and adjustment is enabled
1609
+ if(this.rendered && this.cache.onTarget && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0) {
1610
+ this.reposition(event);
1611
+ }
1612
+ });
1613
+ }
1614
+ }
1615
 
1616
+ // Adjust positions of the tooltip on window resize if enabled
1617
+ if(posOptions.adjust.resize || viewportTarget.length) {
1618
+ this._bind( $.event.special.resize ? viewportTarget : windowTarget, 'resize', repositionMethod );
1619
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1620
 
1621
+ // Adjust tooltip position on scroll of the window or viewport element if present
1622
+ if(posOptions.adjust.scroll) {
1623
+ this._bind( windowTarget.add(posOptions.container), 'scroll', repositionMethod );
1624
+ }
1625
+ };
1626
+
1627
+ // Un-assignment method
1628
+ PROTOTYPE._unassignEvents = function() {
1629
+ var options = this.options,
1630
+ showTargets = options.show.target,
1631
+ hideTargets = options.hide.target,
1632
+ targets = $.grep([
1633
+ this.elements.target[0],
1634
+ this.rendered && this.tooltip[0],
1635
+ options.position.container[0],
1636
+ options.position.viewport[0],
1637
+ options.position.container.closest('html')[0], // unfocus
1638
+ window,
1639
+ document
1640
+ ], function(i) {
1641
+ return typeof i === 'object';
1642
+ });
1643
+
1644
+ // Add show and hide targets if they're valid
1645
+ if(showTargets && showTargets.toArray) {
1646
+ targets = targets.concat(showTargets.toArray());
1647
+ }
1648
+ if(hideTargets && hideTargets.toArray) {
1649
+ targets = targets.concat(hideTargets.toArray());
1650
+ }
1651
 
1652
+ // Unbind the events
1653
+ this._unbind(targets)
1654
+ ._unbind(targets, 'destroy')
1655
+ ._unbind(targets, 'inactive');
1656
+ };
1657
+
1658
+ // Apply common event handlers using delegate (avoids excessive .bind calls!)
1659
+ $(function() {
1660
+ delegate(SELECTOR, ['mouseenter', 'mouseleave'], function(event) {
1661
+ var state = event.type === 'mouseenter',
1662
+ tooltip = $(event.currentTarget),
1663
+ target = $(event.relatedTarget || event.target),
1664
+ options = this.options;
1665
+
1666
+ // On mouseenter...
1667
+ if(state) {
1668
+ // Focus the tooltip on mouseenter (z-index stacking)
1669
+ this.focus(event);
1670
+
1671
+ // Clear hide timer on tooltip hover to prevent it from closing
1672
+ tooltip.hasClass(CLASS_FIXED) && !tooltip.hasClass(CLASS_DISABLED) && clearTimeout(this.timers.hide);
1673
+ }
1674
 
1675
+ // On mouseleave...
1676
+ else {
1677
+ // When mouse tracking is enabled, hide when we leave the tooltip and not onto the show target (if a hide event is set)
1678
+ if(options.position.target === 'mouse' && options.position.adjust.mouse &&
1679
+ options.hide.event && options.show.target && !target.closest(options.show.target[0]).length) {
1680
+ this.hide(event);
 
 
 
 
1681
  }
1682
+ }
1683
 
1684
+ // Add hover class
1685
+ tooltip.toggleClass(CLASS_HOVER, state);
1686
+ });
 
 
 
 
 
 
 
 
 
 
 
 
1687
 
1688
+ // Define events which reset the 'inactive' event handler
1689
+ delegate('['+ATTR_ID+']', INACTIVE_EVENTS, inactiveMethod);
1690
+ });
1691
+ ;// Initialization method
1692
+ function init(elem, id, opts) {
1693
+ var obj, posOptions, attr, config, title,
1694
 
1695
+ // Setup element references
1696
+ docBody = $(document.body),
 
1697
 
1698
+ // Use document body instead of document element if needed
1699
+ newTarget = elem[0] === document ? docBody : elem,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1700
 
1701
+ // Grab metadata from element if plugin is present
1702
+ metadata = (elem.metadata) ? elem.metadata(opts.metadata) : NULL,
 
 
1703
 
1704
+ // If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise
1705
+ metadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL,
 
 
 
 
 
 
 
 
 
 
 
1706
 
1707
+ // Grab data from metadata.name (or data-qtipopts as fallback) using .data() method,
1708
+ html5 = elem.data(opts.metadata.name || 'qtipopts');
 
 
 
 
 
 
 
 
 
1709
 
1710
+ // If we don't get an object returned attempt to parse it manualyl without parseJSON
1711
+ try { html5 = typeof html5 === 'string' ? $.parseJSON(html5) : html5; } catch(e) {}
 
 
 
 
1712
 
1713
+ // Merge in and sanitize metadata
1714
+ config = $.extend(TRUE, {}, QTIP.defaults, opts,
1715
+ typeof html5 === 'object' ? sanitizeOptions(html5) : NULL,
1716
+ sanitizeOptions(metadata5 || metadata));
 
1717
 
1718
+ // Re-grab our positioning options now we've merged our metadata and set id to passed value
1719
+ posOptions = config.position;
1720
+ config.id = id;
 
 
 
 
 
 
 
 
 
1721
 
1722
+ // Setup missing content if none is detected
1723
+ if('boolean' === typeof config.content.text) {
1724
+ attr = elem.attr(config.content.attr);
 
 
 
 
 
 
 
1725
 
1726
+ // Grab from supplied attribute if available
1727
+ if(config.content.attr !== FALSE && attr) { config.content.text = attr; }
 
1728
 
1729
+ // No valid content was found, abort render
1730
+ else { return FALSE; }
1731
+ }
1732
 
1733
+ // Setup target options
1734
+ if(!posOptions.container.length) { posOptions.container = docBody; }
1735
+ if(posOptions.target === FALSE) { posOptions.target = newTarget; }
1736
+ if(config.show.target === FALSE) { config.show.target = newTarget; }
1737
+ if(config.show.solo === TRUE) { config.show.solo = posOptions.container.closest('body'); }
1738
+ if(config.hide.target === FALSE) { config.hide.target = newTarget; }
1739
+ if(config.position.viewport === TRUE) { config.position.viewport = posOptions.container; }
1740
+
1741
+ // Ensure we only use a single container
1742
+ posOptions.container = posOptions.container.eq(0);
1743
+
1744
+ // Convert position corner values into x and y strings
1745
+ posOptions.at = new CORNER(posOptions.at, TRUE);
1746
+ posOptions.my = new CORNER(posOptions.my);
1747
+
1748
+ // Destroy previous tooltip if overwrite is enabled, or skip element if not
1749
+ if(elem.data(NAMESPACE)) {
1750
+ if(config.overwrite) {
1751
+ elem.qtip('destroy', true);
1752
+ }
1753
+ else if(config.overwrite === FALSE) {
1754
+ return FALSE;
1755
+ }
1756
+ }
1757
 
1758
+ // Add has-qtip attribute
1759
+ elem.attr(ATTR_HAS, id);
1760
 
1761
+ // Remove title attribute and store it if present
1762
+ if(config.suppress && (title = elem.attr('title'))) {
1763
+ // Final attr call fixes event delegatiom and IE default tooltip showing problem
1764
+ elem.removeAttr('title').attr(oldtitle, title).attr('title', '');
1765
+ }
1766
 
1767
+ // Initialize the tooltip and add API reference
1768
+ obj = new QTip(elem, config, id, !!attr);
1769
+ elem.data(NAMESPACE, obj);
1770
 
1771
+ return obj;
1772
+ }
 
 
 
1773
 
1774
+ // jQuery $.fn extension method
1775
+ QTIP = $.fn.qtip = function(options, notation, newValue)
1776
+ {
1777
+ var command = ('' + options).toLowerCase(), // Parse command
1778
+ returned = NULL,
1779
+ args = $.makeArray(arguments).slice(1),
1780
+ event = args[args.length - 1],
1781
+ opts = this[0] ? $.data(this[0], NAMESPACE) : NULL;
1782
+
1783
+ // Check for API request
1784
+ if((!arguments.length && opts) || command === 'api') {
1785
+ return opts;
1786
+ }
1787
 
1788
+ // Execute API command if present
1789
+ else if('string' === typeof options) {
1790
+ this.each(function() {
1791
+ var api = $.data(this, NAMESPACE);
1792
+ if(!api) { return TRUE; }
1793
 
1794
+ // Cache the event if possible
1795
+ if(event && event.timeStamp) { api.cache.event = event; }
 
1796
 
1797
+ // Check for specific API commands
1798
+ if(notation && (command === 'option' || command === 'options')) {
1799
+ if(newValue !== undefined || $.isPlainObject(notation)) {
1800
+ api.set(notation, newValue);
1801
  }
 
 
1802
  else {
1803
+ returned = api.get(notation);
1804
  return FALSE;
1805
  }
1806
  }
1807
 
1808
+ // Execute API command
1809
+ else if(api[command]) {
1810
+ api[command].apply(api, args);
 
 
 
1811
  }
1812
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1813
 
1814
+ return returned !== NULL ? returned : this;
1815
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1816
 
1817
+ // No API commands. validate provided options and setup qTips
1818
+ else if('object' === typeof options || !arguments.length) {
1819
+ // Sanitize options first
1820
+ opts = sanitizeOptions($.extend(TRUE, {}, options));
 
 
 
1821
 
1822
+ return this.each(function(i) {
1823
+ var api, id;
 
 
1824
 
1825
+ // Find next available ID, or use custom ID if provided
1826
+ id = $.isArray(opts.id) ? opts.id[i] : opts.id;
1827
+ id = !id || id === FALSE || id.length < 1 || QTIP.api[id] ? QTIP.nextid++ : id;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1828
 
1829
+ // Initialize the qTip and re-grab newly sanitized options
1830
+ api = init($(this), id, opts);
1831
+ if(api === FALSE) { return TRUE; }
1832
+ else { QTIP.api[id] = api; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1833
 
1834
+ // Initialize plugins
1835
+ $.each(PLUGINS, function() {
1836
+ if(this.initialize === 'initialize') { this(api); }
1837
+ });
1838
 
1839
+ // Assign initial pre-render events
1840
+ api._assignInitialEvents(event);
1841
+ });
1842
+ }
1843
+ };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1844
 
1845
+ // Expose class
1846
+ $.qtip = QTip;
1847
 
1848
+ // Populated in render method
1849
+ QTIP.api = {};
1850
+ ;$.each({
1851
+ /* Allow other plugins to successfully retrieve the title of an element with a qTip applied */
1852
+ attr: function(attr, val) {
1853
+ if(this.length) {
1854
+ var self = this[0],
1855
+ title = 'title',
1856
+ api = $.data(self, 'qtip');
 
 
 
 
 
 
 
1857
 
1858
+ if(attr === title && api && 'object' === typeof api && api.options.suppress) {
1859
+ if(arguments.length < 2) {
1860
+ return $.attr(self, oldtitle);
 
 
1861
  }
1862
 
1863
+ // If qTip is rendered and title was originally used as content, update it
1864
+ if(api && api.options.content.attr === title && api.cache.attr) {
1865
+ api.set('content.text', val);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1866
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1867
 
1868
+ // Use the regular attr method to set, then cache the result
1869
+ return this.attr(oldtitle, val);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1870
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1871
  }
1872
 
1873
+ return $.fn['attr'+replaceSuffix].apply(this, arguments);
1874
+ },
 
 
 
1875
 
1876
+ /* Allow clone to correctly retrieve cached title attributes */
1877
+ clone: function(keepData) {
1878
+ var titles = $([]), title = 'title',
 
 
 
 
 
 
1879
 
1880
+ // Clone our element using the real clone method
1881
+ elems = $.fn['clone'+replaceSuffix].apply(this, arguments);
 
 
 
 
1882
 
1883
+ // Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false
1884
+ if(!keepData) {
1885
+ elems.filter('['+oldtitle+']').attr('title', function() {
1886
+ return $.attr(this, oldtitle);
1887
+ })
1888
+ .removeAttr(oldtitle);
1889
  }
1890
 
1891
+ return elems;
1892
+ }
1893
+ }, function(name, func) {
1894
+ if(!func || $.fn[name+replaceSuffix]) { return TRUE; }
1895
+
1896
+ var old = $.fn[name+replaceSuffix] = $.fn[name];
1897
+ $.fn[name] = function() {
1898
+ return func.apply(this, arguments) || old.apply(this, arguments);
1899
+ };
1900
+ });
1901
+
1902
+ /* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar).
1903
+ * This snippet is taken directly from jQuery UI source code found here:
1904
+ * http://code.jquery.com/ui/jquery-ui-git.js
1905
+ */
1906
+ if(!$.ui) {
1907
+ $['cleanData'+replaceSuffix] = $.cleanData;
1908
+ $.cleanData = function( elems ) {
1909
+ for(var i = 0, elem; (elem = $( elems[i] )).length; i++) {
1910
+ if(elem.attr(ATTR_HAS)) {
1911
+ try { elem.triggerHandler('removeqtip'); }
1912
+ catch( e ) {}
1913
+ }
1914
  }
1915
+ $['cleanData'+replaceSuffix].apply(this, arguments);
1916
+ };
1917
+ }
1918
+ ;// qTip version
1919
+ QTIP.version = '2.2.1';
1920
+
1921
+ // Base ID for all qTips
1922
+ QTIP.nextid = 0;
1923
+
1924
+ // Inactive events array
1925
+ QTIP.inactiveEvents = INACTIVE_EVENTS;
1926
+
1927
+ // Base z-index for all qTips
1928
+ QTIP.zindex = 15000;
1929
+
1930
+ // Define configuration defaults
1931
+ QTIP.defaults = {
1932
+ prerender: FALSE,
1933
+ id: FALSE,
1934
+ overwrite: TRUE,
1935
+ suppress: TRUE,
1936
+ content: {
1937
+ text: TRUE,
1938
+ attr: 'title',
1939
+ title: FALSE,
1940
+ button: FALSE
1941
+ },
1942
+ position: {
1943
+ my: 'top left',
1944
+ at: 'bottom right',
1945
+ target: FALSE,
1946
+ container: FALSE,
1947
+ viewport: FALSE,
1948
+ adjust: {
1949
+ x: 0, y: 0,
1950
+ mouse: TRUE,
1951
+ scroll: TRUE,
1952
+ resize: TRUE,
1953
+ method: 'flipinvert flipinvert'
1954
+ },
1955
+ effect: function(api, pos, viewport) {
1956
+ $(this).animate(pos, {
1957
+ duration: 200,
1958
+ queue: FALSE
1959
+ });
1960
  }
1961
+ },
1962
+ show: {
1963
+ target: FALSE,
1964
+ event: 'mouseenter',
1965
+ effect: TRUE,
1966
+ delay: 90,
1967
+ solo: FALSE,
1968
+ ready: FALSE,
1969
+ autofocus: FALSE
1970
+ },
1971
+ hide: {
1972
+ target: FALSE,
1973
+ event: 'mouseleave',
1974
+ effect: TRUE,
1975
+ delay: 0,
1976
+ fixed: FALSE,
1977
+ inactive: FALSE,
1978
+ leave: 'window',
1979
+ distance: FALSE
1980
+ },
1981
+ style: {
1982
+ classes: '',
1983
+ widget: FALSE,
1984
+ width: FALSE,
1985
+ height: FALSE,
1986
+ def: TRUE
1987
+ },
1988
+ events: {
1989
+ render: NULL,
1990
+ move: NULL,
1991
+ show: NULL,
1992
+ hide: NULL,
1993
+ toggle: NULL,
1994
+ visible: NULL,
1995
+ hidden: NULL,
1996
+ focus: NULL,
1997
+ blur: NULL
1998
+ }
1999
+ };
2000
+ ;var TIP,
2001
+
2002
+ // .bind()/.on() namespace
2003
+ TIPNS = '.qtip-tip',
2004
+
2005
+ // Common CSS strings
2006
+ MARGIN = 'margin',
2007
+ BORDER = 'border',
2008
+ COLOR = 'color',
2009
+ BG_COLOR = 'background-color',
2010
+ TRANSPARENT = 'transparent',
2011
+ IMPORTANT = ' !important',
2012
+
2013
+ // Check if the browser supports <canvas/> elements
2014
+ HASCANVAS = !!document.createElement('canvas').getContext,
2015
+
2016
+ // Invalid colour values used in parseColours()
2017
+ INVALID = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i;
2018
+
2019
+ // Camel-case method, taken from jQuery source
2020
+ // http://code.jquery.com/jquery-1.8.0.js
2021
+ function camel(s) { return s.charAt(0).toUpperCase() + s.slice(1); }
2022
+
2023
+ /*
2024
+ * Modified from Modernizr's testPropsAll()
2025
+ * http://modernizr.com/downloads/modernizr-latest.js
2026
+ */
2027
+ var cssProps = {}, cssPrefixes = ["Webkit", "O", "Moz", "ms"];
2028
+ function vendorCss(elem, prop) {
2029
+ var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
2030
+ props = (prop + ' ' + cssPrefixes.join(ucProp + ' ') + ucProp).split(' '),
2031
+ cur, val, i = 0;
2032
+
2033
+ // If the property has already been mapped...
2034
+ if(cssProps[prop]) { return elem.css(cssProps[prop]); }
2035
+
2036
+ while((cur = props[i++])) {
2037
+ if((val = elem.css(cur)) !== undefined) {
2038
+ return cssProps[prop] = cur, val;
2039
  }
2040
+ }
2041
+ }
2042
 
2043
+ // Parse a given elements CSS property into an int
2044
+ function intCss(elem, prop) {
2045
+ return Math.ceil(parseFloat(vendorCss(elem, prop)));
2046
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2047
 
 
 
 
2048
 
2049
+ // VML creation (for IE only)
2050
+ if(!HASCANVAS) {
2051
+ var createVML = function(tag, props, style) {
2052
+ return '<qtipvml:'+tag+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(props||'')+
2053
+ ' style="behavior: url(#default#VML); '+(style||'')+ '" />';
2054
+ };
2055
+ }
 
2056
 
2057
+ // Canvas only definitions
2058
+ else {
2059
+ var PIXEL_RATIO = window.devicePixelRatio || 1,
2060
+ BACKING_STORE_RATIO = (function() {
2061
+ var context = document.createElement('canvas').getContext('2d');
2062
+ return context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio ||
2063
+ context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || 1;
2064
+ }()),
2065
+ SCALE = PIXEL_RATIO / BACKING_STORE_RATIO;
2066
+ }
2067
 
 
 
2068
 
2069
+ function Tip(qtip, options) {
2070
+ this._ns = 'tip';
2071
+ this.options = options;
2072
+ this.offset = options.offset;
2073
+ this.size = [ options.width, options.height ];
 
 
 
 
 
 
2074
 
2075
+ // Initialize
2076
+ this.init( (this.qtip = qtip) );
2077
+ }
2078
 
2079
+ $.extend(Tip.prototype, {
2080
+ init: function(qtip) {
2081
+ var context, tip;
2082
 
2083
+ // Create tip element and prepend to the tooltip
2084
+ tip = this.element = qtip.elements.tip = $('<div />', { 'class': NAMESPACE+'-tip' }).prependTo(qtip.tooltip);
 
 
 
 
2085
 
2086
+ // Create tip drawing element(s)
2087
+ if(HASCANVAS) {
2088
+ // save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()!
2089
+ context = $('<canvas />').appendTo(this.element)[0].getContext('2d');
2090
 
2091
+ // Setup constant parameters
2092
+ context.lineJoin = 'miter';
2093
+ context.miterLimit = 100000;
2094
+ context.save();
2095
+ }
2096
+ else {
2097
+ context = createVML('shape', 'coordorigin="0,0"', 'position:absolute;');
2098
+ this.element.html(context + context);
2099
 
2100
+ // Prevent mousing down on the tip since it causes problems with .live() handling in IE due to VML
2101
+ qtip._bind( $('*', tip).add(tip), ['click', 'mousedown'], function(event) { event.stopPropagation(); }, this._ns);
2102
+ }
 
2103
 
2104
+ // Bind update events
2105
+ qtip._bind(qtip.tooltip, 'tooltipmove', this.reposition, this._ns, this);
2106
+
2107
+ // Create it
2108
+ this.create();
2109
+ },
2110
+
2111
+ _swapDimensions: function() {
2112
+ this.size[0] = this.options.height;
2113
+ this.size[1] = this.options.width;
2114
+ },
2115
+ _resetDimensions: function() {
2116
+ this.size[0] = this.options.width;
2117
+ this.size[1] = this.options.height;
2118
+ },
2119
+
2120
+ _useTitle: function(corner) {
2121
+ var titlebar = this.qtip.elements.titlebar;
2122
+ return titlebar && (
2123
+ corner.y === TOP || (corner.y === CENTER && this.element.position().top + (this.size[1] / 2) + this.options.offset < titlebar.outerHeight(TRUE))
2124
+ );
2125
+ },
 
 
2126
 
2127
+ _parseCorner: function(corner) {
2128
+ var my = this.qtip.options.position.my;
2129
 
2130
+ // Detect corner and mimic properties
2131
+ if(corner === FALSE || my === FALSE) {
2132
+ corner = FALSE;
2133
+ }
2134
+ else if(corner === TRUE) {
2135
+ corner = new CORNER( my.string() );
2136
+ }
2137
+ else if(!corner.string) {
2138
+ corner = new CORNER(corner);
2139
+ corner.fixed = TRUE;
2140
+ }
2141
 
2142
+ return corner;
2143
+ },
2144
+
2145
+ _parseWidth: function(corner, side, use) {
2146
+ var elements = this.qtip.elements,
2147
+ prop = BORDER + camel(side) + 'Width';
2148
+
2149
+ return (use ? intCss(use, prop) : (
2150
+ intCss(elements.content, prop) ||
2151
+ intCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) ||
2152
+ intCss(elements.tooltip, prop)
2153
+ )) || 0;
2154
+ },
2155
+
2156
+ _parseRadius: function(corner) {
2157
+ var elements = this.qtip.elements,
2158
+ prop = BORDER + camel(corner.y) + camel(corner.x) + 'Radius';
2159
+
2160
+ return BROWSER.ie < 9 ? 0 :
2161
+ intCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) ||
2162
+ intCss(elements.tooltip, prop) || 0;
2163
+ },
2164
+
2165
+ _invalidColour: function(elem, prop, compare) {
2166
+ var val = elem.css(prop);
2167
+ return !val || (compare && val === elem.css(compare)) || INVALID.test(val) ? FALSE : val;
2168
+ },
2169
+
2170
+ _parseColours: function(corner) {
2171
+ var elements = this.qtip.elements,
2172
+ tip = this.element.css('cssText', ''),
2173
+ borderSide = BORDER + camel(corner[ corner.precedance ]) + camel(COLOR),
2174
+ colorElem = this._useTitle(corner) && elements.titlebar || elements.content,
2175
+ css = this._invalidColour, color = [];
2176
+
2177
+ // Attempt to detect the background colour from various elements, left-to-right precedance
2178
+ color[0] = css(tip, BG_COLOR) || css(colorElem, BG_COLOR) || css(elements.content, BG_COLOR) ||
2179
+ css(elements.tooltip, BG_COLOR) || tip.css(BG_COLOR);
2180
+
2181
+ // Attempt to detect the correct border side colour from various elements, left-to-right precedance
2182
+ color[1] = css(tip, borderSide, COLOR) || css(colorElem, borderSide, COLOR) ||
2183
+ css(elements.content, borderSide, COLOR) || css(elements.tooltip, borderSide, COLOR) || elements.tooltip.css(borderSide);
2184
+
2185
+ // Reset background and border colours
2186
+ $('*', tip).add(tip).css('cssText', BG_COLOR+':'+TRANSPARENT+IMPORTANT+';'+BORDER+':0'+IMPORTANT+';');
2187
+
2188
+ return color;
2189
+ },
2190
+
2191
+ _calculateSize: function(corner) {
2192
+ var y = corner.precedance === Y,
2193
+ width = this.options['width'],
2194
+ height = this.options['height'],
2195
+ isCenter = corner.abbrev() === 'c',
2196
+ base = (y ? width: height) * (isCenter ? 0.5 : 1),
2197
+ pow = Math.pow,
2198
+ round = Math.round,
2199
+ bigHyp, ratio, result,
2200
+
2201
+ smallHyp = Math.sqrt( pow(base, 2) + pow(height, 2) ),
2202
+ hyp = [ (this.border / base) * smallHyp, (this.border / height) * smallHyp ];
2203
+
2204
+ hyp[2] = Math.sqrt( pow(hyp[0], 2) - pow(this.border, 2) );
2205
+ hyp[3] = Math.sqrt( pow(hyp[1], 2) - pow(this.border, 2) );
2206
+
2207
+ bigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]);
2208
+ ratio = bigHyp / smallHyp;
2209
+
2210
+ result = [ round(ratio * width), round(ratio * height) ];
2211
+ return y ? result : result.reverse();
2212
+ },
2213
+
2214
+ // Tip coordinates calculator
2215
+ _calculateTip: function(corner, size, scale) {
2216
+ scale = scale || 1;
2217
+ size = size || this.size;
2218
+
2219
+ var width = size[0] * scale,
2220
+ height = size[1] * scale,
2221
+ width2 = Math.ceil(width / 2), height2 = Math.ceil(height / 2),
2222
+
2223
+ // Define tip coordinates in terms of height and width values
2224
+ tips = {
2225
+ br: [0,0, width,height, width,0],
2226
+ bl: [0,0, width,0, 0,height],
2227
+ tr: [0,height, width,0, width,height],
2228
+ tl: [0,0, 0,height, width,height],
2229
+ tc: [0,height, width2,0, width,height],
2230
+ bc: [0,0, width,0, width2,height],
2231
+ rc: [0,0, width,height2, 0,height],
2232
+ lc: [width,0, width,height, 0,height2]
2233
+ };
2234
 
2235
+ // Set common side shapes
2236
+ tips.lt = tips.br; tips.rt = tips.bl;
2237
+ tips.lb = tips.tr; tips.rb = tips.tl;
2238
+
2239
+ return tips[ corner.abbrev() ];
2240
+ },
2241
+
2242
+ // Tip coordinates drawer (canvas)
2243
+ _drawCoords: function(context, coords) {
2244
+ context.beginPath();
2245
+ context.moveTo(coords[0], coords[1]);
2246
+ context.lineTo(coords[2], coords[3]);
2247
+ context.lineTo(coords[4], coords[5]);
2248
+ context.closePath();
2249
+ },
2250
+
2251
+ create: function() {
2252
+ // Determine tip corner
2253
+ var c = this.corner = (HASCANVAS || BROWSER.ie) && this._parseCorner(this.options.corner);
2254
+
2255
+ // If we have a tip corner...
2256
+ if( (this.enabled = !!this.corner && this.corner.abbrev() !== 'c') ) {
2257
+ // Cache it
2258
+ this.qtip.cache.corner = c.clone();
2259
+
2260
+ // Create it
2261
+ this.update();
2262
+ }
2263
 
2264
+ // Toggle tip element
2265
+ this.element.toggle(this.enabled);
2266
 
2267
+ return this.corner;
2268
+ },
 
2269
 
2270
+ update: function(corner, position) {
2271
+ if(!this.enabled) { return this; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2272
 
2273
+ var elements = this.qtip.elements,
2274
+ tip = this.element,
2275
+ inner = tip.children(),
2276
+ options = this.options,
2277
+ curSize = this.size,
2278
+ mimic = options.mimic,
2279
+ round = Math.round,
2280
+ color, precedance, context,
2281
+ coords, bigCoords, translate, newSize, border, BACKING_STORE_RATIO;
2282
 
2283
+ // Re-determine tip if not already set
2284
+ if(!corner) { corner = this.qtip.cache.corner || this.corner; }
 
2285
 
2286
+ // Use corner property if we detect an invalid mimic value
2287
+ if(mimic === FALSE) { mimic = corner; }
 
 
2288
 
2289
+ // Otherwise inherit mimic properties from the corner object as necessary
2290
+ else {
2291
+ mimic = new CORNER(mimic);
2292
+ mimic.precedance = corner.precedance;
2293
 
2294
+ if(mimic.x === 'inherit') { mimic.x = corner.x; }
2295
+ else if(mimic.y === 'inherit') { mimic.y = corner.y; }
2296
+ else if(mimic.x === mimic.y) {
2297
+ mimic[ corner.precedance ] = corner[ corner.precedance ];
2298
+ }
2299
+ }
2300
+ precedance = mimic.precedance;
2301
 
2302
+ // Ensure the tip width.height are relative to the tip position
2303
+ if(corner.precedance === X) { this._swapDimensions(); }
2304
+ else { this._resetDimensions(); }
2305
 
2306
+ // Update our colours
2307
+ color = this.color = this._parseColours(corner);
 
 
2308
 
2309
+ // Detect border width, taking into account colours
2310
+ if(color[1] !== TRANSPARENT) {
2311
+ // Grab border width
2312
+ border = this.border = this._parseWidth(corner, corner[corner.precedance]);
 
 
 
 
 
 
 
 
 
 
2313
 
2314
+ // If border width isn't zero, use border color as fill if it's not invalid (1.0 style tips)
2315
+ if(options.border && border < 1 && !INVALID.test(color[1])) { color[0] = color[1]; }
 
 
2316
 
2317
+ // Set border width (use detected border width if options.border is true)
2318
+ this.border = border = options.border !== TRUE ? options.border : border;
2319
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
2320
 
2321
+ // Border colour was invalid, set border to zero
2322
+ else { this.border = border = 0; }
2323
+
2324
+ // Determine tip size
2325
+ newSize = this.size = this._calculateSize(corner);
2326
+ tip.css({
2327
+ width: newSize[0],
2328
+ height: newSize[1],
2329
+ lineHeight: newSize[1]+'px'
2330
+ });
2331
+
2332
+ // Calculate tip translation
2333
+ if(corner.precedance === Y) {
2334
+ translate = [
2335
+ round(mimic.x === LEFT ? border : mimic.x === RIGHT ? newSize[0] - curSize[0] - border : (newSize[0] - curSize[0]) / 2),
2336
+ round(mimic.y === TOP ? newSize[1] - curSize[1] : 0)
2337
+ ];
2338
+ }
2339
+ else {
2340
+ translate = [
2341
+ round(mimic.x === LEFT ? newSize[0] - curSize[0] : 0),
2342
+ round(mimic.y === TOP ? border : mimic.y === BOTTOM ? newSize[1] - curSize[1] - border : (newSize[1] - curSize[1]) / 2)
2343
+ ];
2344
+ }
2345
 
2346
+ // Canvas drawing implementation
2347
+ if(HASCANVAS) {
2348
+ // Grab canvas context and clear/save it
2349
+ context = inner[0].getContext('2d');
2350
+ context.restore(); context.save();
2351
+ context.clearRect(0,0,6000,6000);
2352
+
2353
+ // Calculate coordinates
2354
+ coords = this._calculateTip(mimic, curSize, SCALE);
2355
+ bigCoords = this._calculateTip(mimic, this.size, SCALE);
2356
+
2357
+ // Set the canvas size using calculated size
2358
+ inner.attr(WIDTH, newSize[0] * SCALE).attr(HEIGHT, newSize[1] * SCALE);
2359
+ inner.css(WIDTH, newSize[0]).css(HEIGHT, newSize[1]);
2360
+
2361
+ // Draw the outer-stroke tip
2362
+ this._drawCoords(context, bigCoords);
2363
+ context.fillStyle = color[1];
2364
+ context.fill();
2365
+
2366
+ // Draw the actual tip
2367
+ context.translate(translate[0] * SCALE, translate[1] * SCALE);
2368
+ this._drawCoords(context, coords);
2369
+ context.fillStyle = color[0];
2370
+ context.fill();
2371
+ }
2372
 
2373
+ // VML (IE Proprietary implementation)
2374
+ else {
2375
+ // Calculate coordinates
2376
+ coords = this._calculateTip(mimic);
2377
+
2378
+ // Setup coordinates string
2379
+ coords = 'm' + coords[0] + ',' + coords[1] + ' l' + coords[2] +
2380
+ ',' + coords[3] + ' ' + coords[4] + ',' + coords[5] + ' xe';
2381
+
2382
+ // Setup VML-specific offset for pixel-perfection
2383
+ translate[2] = border && /^(r|b)/i.test(corner.string()) ?
2384
+ BROWSER.ie === 8 ? 2 : 1 : 0;
2385
+
2386
+ // Set initial CSS
2387
+ inner.css({
2388
+ coordsize: (newSize[0]+border) + ' ' + (newSize[1]+border),
2389
+ antialias: ''+(mimic.string().indexOf(CENTER) > -1),
2390
+ left: translate[0] - (translate[2] * Number(precedance === X)),
2391
+ top: translate[1] - (translate[2] * Number(precedance === Y)),
2392
+ width: newSize[0] + border,
2393
+ height: newSize[1] + border
2394
+ })
2395
+ .each(function(i) {
2396
+ var $this = $(this);
2397
+
2398
+ // Set shape specific attributes
2399
+ $this[ $this.prop ? 'prop' : 'attr' ]({
2400
+ coordsize: (newSize[0]+border) + ' ' + (newSize[1]+border),
2401
+ path: coords,
2402
+ fillcolor: color[0],
2403
+ filled: !!i,
2404
+ stroked: !i
2405
+ })
2406
+ .toggle(!!(border || i));
2407
+
2408
+ // Check if border is enabled and add stroke element
2409
+ !i && $this.html( createVML(
2410
+ 'stroke', 'weight="'+(border*2)+'px" color="'+color[1]+'" miterlimit="1000" joinstyle="miter"'
2411
+ ) );
2412
+ });
2413
+ }
2414
 
2415
+ // Opera bug #357 - Incorrect tip position
2416
+ // https://github.com/Craga89/qTip2/issues/367
2417
+ window.opera && setTimeout(function() {
2418
+ elements.tip.css({
2419
+ display: 'inline-block',
2420
+ visibility: 'visible'
2421
+ });
2422
+ }, 1);
2423
+
2424
+ // Position if needed
2425
+ if(position !== FALSE) { this.calculate(corner, newSize); }
2426
+ },
2427
+
2428
+ calculate: function(corner, size) {
2429
+ if(!this.enabled) { return FALSE; }
2430
+
2431
+ var self = this,
2432
+ elements = this.qtip.elements,
2433
+ tip = this.element,
2434
+ userOffset = this.options.offset,
2435
+ isWidget = elements.tooltip.hasClass('ui-widget'),
2436
+ position = { },
2437
+ precedance, corners;
2438
+
2439
+ // Inherit corner if not provided
2440
+ corner = corner || this.corner;
2441
+ precedance = corner.precedance;
2442
+
2443
+ // Determine which tip dimension to use for adjustment
2444
+ size = size || this._calculateSize(corner);
2445
+
2446
+ // Setup corners and offset array
2447
+ corners = [ corner.x, corner.y ];
2448
+ if(precedance === X) { corners.reverse(); }
2449
+
2450
+ // Calculate tip position
2451
+ $.each(corners, function(i, side) {
2452
+ var b, bc, br;
2453
+
2454
+ if(side === CENTER) {
2455
+ b = precedance === Y ? LEFT : TOP;
2456
+ position[ b ] = '50%';
2457
+ position[MARGIN+'-' + b] = -Math.round(size[ precedance === Y ? 0 : 1 ] / 2) + userOffset;
2458
+ }
2459
+ else {
2460
+ b = self._parseWidth(corner, side, elements.tooltip);
2461
+ bc = self._parseWidth(corner, side, elements.content);
2462
+ br = self._parseRadius(corner);
2463
 
2464
+ position[ side ] = Math.max(-self.border, i ? bc : (userOffset + (br > b ? br : -b)));
2465
+ }
2466
+ });
2467
 
2468
+ // Adjust for tip size
2469
+ position[ corner[precedance] ] -= size[ precedance === X ? 0 : 1 ];
 
 
2470
 
2471
+ // Set and return new position
2472
+ tip.css({ margin: '', top: '', bottom: '', left: '', right: '' }).css(position);
2473
+ return position;
2474
+ },
 
 
 
 
 
2475
 
2476
+ reposition: function(event, api, pos, viewport) {
2477
+ if(!this.enabled) { return; }
 
 
 
 
 
 
 
 
 
 
 
2478
 
2479
+ var cache = api.cache,
2480
+ newCorner = this.corner.clone(),
2481
+ adjust = pos.adjusted,
2482
+ method = api.options.position.adjust.method.split(' '),
2483
+ horizontal = method[0],
2484
+ vertical = method[1] || method[0],
2485
+ shift = { left: FALSE, top: FALSE, x: 0, y: 0 },
2486
+ offset, css = {}, props;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2487
 
2488
+ function shiftflip(direction, precedance, popposite, side, opposite) {
2489
+ // Horizontal - Shift or flip method
2490
+ if(direction === SHIFT && newCorner.precedance === precedance && adjust[side] && newCorner[popposite] !== CENTER) {
2491
+ newCorner.precedance = newCorner.precedance === X ? Y : X;
2492
+ }
2493
+ else if(direction !== SHIFT && adjust[side]){
2494
+ newCorner[precedance] = newCorner[precedance] === CENTER ?
2495
+ (adjust[side] > 0 ? side : opposite) : (newCorner[precedance] === side ? opposite : side);
2496
+ }
2497
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2498
 
2499
+ function shiftonly(xy, side, opposite) {
2500
+ if(newCorner[xy] === CENTER) {
2501
+ css[MARGIN+'-'+side] = shift[xy] = offset[MARGIN+'-'+side] - adjust[side];
2502
+ }
2503
+ else {
2504
+ props = offset[opposite] !== undefined ?
2505
+ [ adjust[side], -offset[side] ] : [ -adjust[side], offset[side] ];
 
 
 
 
 
2506
 
2507
+ if( (shift[xy] = Math.max(props[0], props[1])) > props[0] ) {
2508
+ pos[side] -= adjust[side];
2509
+ shift[side] = FALSE;
2510
+ }
 
2511
 
2512
+ css[ offset[opposite] !== undefined ? opposite : side ] = shift[xy];
2513
+ }
2514
+ }
 
2515
 
2516
+ // If our tip position isn't fixed e.g. doesn't adjust with viewport...
2517
+ if(this.corner.fixed !== TRUE) {
2518
+ // Perform shift/flip adjustments
2519
+ shiftflip(horizontal, X, Y, LEFT, RIGHT);
2520
+ shiftflip(vertical, Y, X, TOP, BOTTOM);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2521
 
2522
+ // Update and redraw the tip if needed (check cached details of last drawn tip)
2523
+ if(newCorner.string() !== cache.corner.string() || cache.cornerTop !== adjust.top || cache.cornerLeft !== adjust.left) {
2524
+ this.update(newCorner, FALSE);
2525
+ }
2526
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2527
 
2528
+ // Setup tip offset properties
2529
+ offset = this.calculate(newCorner);
2530
 
2531
+ // Readjust offset object to make it left/top
2532
+ if(offset.right !== undefined) { offset.left = -offset.right; }
2533
+ if(offset.bottom !== undefined) { offset.top = -offset.bottom; }
2534
+ offset.user = this.offset;
2535
 
2536
+ // Perform shift adjustments
2537
+ if(shift.left = (horizontal === SHIFT && !!adjust.left)) { shiftonly(X, LEFT, RIGHT); }
2538
+ if(shift.top = (vertical === SHIFT && !!adjust.top)) { shiftonly(Y, TOP, BOTTOM); }
 
2539
 
2540
+ /*
2541
+ * If the tip is adjusted in both dimensions, or in a
2542
+ * direction that would cause it to be anywhere but the
2543
+ * outer border, hide it!
2544
+ */
2545
+ this.element.css(css).toggle(
2546
+ !((shift.x && shift.y) || (newCorner.x === CENTER && shift.y) || (newCorner.y === CENTER && shift.x))
2547
+ );
 
 
 
 
 
 
 
 
 
 
 
2548
 
2549
+ // Adjust position to accomodate tip dimensions
2550
+ pos.left -= offset.left.charAt ? offset.user :
2551
+ horizontal !== SHIFT || shift.top || !shift.left && !shift.top ? offset.left + this.border : 0;
2552
+ pos.top -= offset.top.charAt ? offset.user :
2553
+ vertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top + this.border : 0;
2554
+
2555
+ // Cache details
2556
+ cache.cornerLeft = adjust.left; cache.cornerTop = adjust.top;
2557
+ cache.corner = newCorner.clone();
2558
+ },
2559
+
2560
+ destroy: function() {
2561
+ // Unbind events
2562
+ this.qtip._unbind(this.qtip.tooltip, this._ns);
2563
+
2564
+ // Remove the tip element(s)
2565
+ if(this.qtip.elements.tip) {
2566
+ this.qtip.elements.tip.find('*')
2567
+ .remove().end().remove();
2568
+ }
2569
+ }
2570
+ });
2571
 
2572
+ TIP = PLUGINS.tip = function(api) {
2573
+ return new Tip(api, api.options.style.tip);
2574
+ };
 
 
2575
 
2576
+ // Initialize tip on render
2577
+ TIP.initialize = 'render';
 
 
 
2578
 
2579
+ // Setup plugin sanitization options
2580
+ TIP.sanitize = function(options) {
2581
+ if(options.style && 'tip' in options.style) {
2582
+ var opts = options.style.tip;
2583
+ if(typeof opts !== 'object') { opts = options.style.tip = { corner: opts }; }
2584
+ if(!(/string|boolean/i).test(typeof opts.corner)) { opts.corner = TRUE; }
2585
+ }
2586
+ };
2587
+
2588
+ // Add new option checks for the plugin
2589
+ CHECKS.tip = {
2590
+ '^position.my|style.tip.(corner|mimic|border)$': function() {
2591
+ // Make sure a tip can be drawn
2592
+ this.create();
2593
+
2594
+ // Reposition the tooltip
2595
+ this.qtip.reposition();
2596
+ },
2597
+ '^style.tip.(height|width)$': function(obj) {
2598
+ // Re-set dimensions and redraw the tip
2599
+ this.size = [ obj.width, obj.height ];
2600
+ this.update();
2601
+
2602
+ // Reposition the tooltip
2603
+ this.qtip.reposition();
2604
+ },
2605
+ '^content.title|style.(classes|widget)$': function() {
2606
+ this.update();
2607
+ }
2608
+ };
2609
+
2610
+ // Extend original qTip defaults
2611
+ $.extend(TRUE, QTIP.defaults, {
2612
+ style: {
2613
+ tip: {
2614
+ corner: TRUE,
2615
+ mimic: FALSE,
2616
+ width: 6,
2617
+ height: 6,
2618
+ border: TRUE,
2619
+ offset: 0
2620
+ }
2621
+ }
2622
+ });
2623
+ ;var MODAL, OVERLAY,
2624
+ MODALCLASS = 'qtip-modal',
2625
+ MODALSELECTOR = '.'+MODALCLASS;
2626
+
2627
+ OVERLAY = function()
2628
+ {
2629
+ var self = this,
2630
+ focusableElems = {},
2631
+ current, onLast,
2632
+ prevState, elem;
2633
+
2634
+ // Modified code from jQuery UI 1.10.0 source
2635
+ // http://code.jquery.com/ui/1.10.0/jquery-ui.js
2636
+ function focusable(element) {
2637
+ // Use the defined focusable checker when possible
2638
+ if($.expr[':'].focusable) { return $.expr[':'].focusable; }
2639
+
2640
+ var isTabIndexNotNaN = !isNaN($.attr(element, 'tabindex')),
2641
+ nodeName = element.nodeName && element.nodeName.toLowerCase(),
2642
+ map, mapName, img;
2643
+
2644
+ if('area' === nodeName) {
2645
+ map = element.parentNode;
2646
+ mapName = map.name;
2647
+ if(!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {
2648
+ return false;
2649
+ }
2650
+ img = $('img[usemap=#' + mapName + ']')[0];
2651
+ return !!img && img.is(':visible');
2652
+ }
2653
+ return (/input|select|textarea|button|object/.test( nodeName ) ?
2654
+ !element.disabled :
2655
+ 'a' === nodeName ?
2656
+ element.href || isTabIndexNotNaN :
2657
+ isTabIndexNotNaN
2658
+ );
2659
+ }
2660
 
2661
+ // Focus inputs using cached focusable elements (see update())
2662
+ function focusInputs(blurElems) {
2663
+ // Blurring body element in IE causes window.open windows to unfocus!
2664
+ if(focusableElems.length < 1 && blurElems.length) { blurElems.not('body').blur(); }
 
 
 
 
2665
 
2666
+ // Focus the inputs
2667
+ else { focusableElems.first().focus(); }
2668
+ }
 
 
 
 
2669
 
2670
+ // Steal focus from elements outside tooltip
2671
+ function stealFocus(event) {
2672
+ if(!elem.is(':visible')) { return; }
 
 
 
 
 
2673
 
2674
+ var target = $(event.target),
2675
+ tooltip = current.tooltip,
2676
+ container = target.closest(SELECTOR),
2677
+ targetOnTop;
 
2678
 
2679
+ // Determine if input container target is above this
2680
+ targetOnTop = container.length < 1 ? FALSE :
2681
+ (parseInt(container[0].style.zIndex, 10) > parseInt(tooltip[0].style.zIndex, 10));
 
 
2682
 
2683
+ // If we're showing a modal, but focus has landed on an input below
2684
+ // this modal, divert focus to the first visible input in this modal
2685
+ // or if we can't find one... the tooltip itself
2686
+ if(!targetOnTop && target.closest(SELECTOR)[0] !== tooltip[0]) {
2687
+ focusInputs(target);
2688
+ }
2689
 
2690
+ // Detect when we leave the last focusable element...
2691
+ onLast = event.target === focusableElems[focusableElems.length - 1];
2692
+ }
 
 
 
 
 
2693
 
2694
+ $.extend(self, {
2695
+ init: function() {
2696
+ // Create document overlay
2697
+ elem = self.elem = $('<div />', {
2698
+ id: 'qtip-overlay',
2699
+ html: '<div></div>',
2700
+ mousedown: function() { return FALSE; }
2701
+ })
2702
+ .hide();
2703
 
2704
+ // Make sure we can't focus anything outside the tooltip
2705
+ $(document.body).bind('focusin'+MODALSELECTOR, stealFocus);
2706
 
2707
+ // Apply keyboard "Escape key" close handler
2708
+ $(document).bind('keydown'+MODALSELECTOR, function(event) {
2709
+ if(current && current.options.show.modal.escape && event.keyCode === 27) {
2710
+ current.hide(event);
 
 
2711
  }
2712
+ });
 
 
 
 
2713
 
2714
+ // Apply click handler for blur option
2715
+ elem.bind('click'+MODALSELECTOR, function(event) {
2716
+ if(current && current.options.show.modal.blur) {
2717
+ current.hide(event);
2718
+ }
2719
+ });
2720
 
2721
+ return self;
2722
+ },
 
 
 
 
 
2723
 
2724
+ update: function(api) {
2725
+ // Update current API reference
2726
+ current = api;
 
 
 
 
2727
 
2728
+ // Update focusable elements if enabled
2729
+ if(api.options.show.modal.stealfocus !== FALSE) {
2730
+ focusableElems = api.tooltip.find('*').filter(function() {
2731
+ return focusable(this);
2732
+ });
 
 
 
 
 
 
 
 
2733
  }
2734
+ else { focusableElems = []; }
2735
+ },
2736
 
2737
+ toggle: function(api, state, duration) {
2738
+ var docBody = $(document.body),
2739
+ tooltip = api.tooltip,
2740
+ options = api.options.show.modal,
2741
+ effect = options.effect,
2742
+ type = state ? 'show': 'hide',
2743
+ visible = elem.is(':visible'),
2744
+ visibleModals = $(MODALSELECTOR).filter(':visible:not(:animated)').not(tooltip),
2745
+ zindex;
 
 
 
 
 
 
 
 
 
2746
 
2747
+ // Set active tooltip API reference
2748
+ self.update(api);
 
2749
 
2750
+ // If the modal can steal the focus...
2751
+ // Blur the current item and focus anything in the modal we an
2752
+ if(state && options.stealfocus !== FALSE) {
2753
+ focusInputs( $(':focus') );
 
 
 
 
 
 
 
 
 
 
 
2754
  }
2755
 
2756
+ // Toggle backdrop cursor style on show
2757
+ elem.toggleClass('blurs', options.blur);
 
 
 
 
2758
 
2759
+ // Append to body on show
2760
+ if(state) {
2761
+ elem.appendTo(document.body);
 
2762
  }
2763
 
2764
+ // Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible
2765
+ if((elem.is(':animated') && visible === state && prevState !== FALSE) || (!state && visibleModals.length)) {
2766
+ return self;
2767
+ }
 
2768
 
2769
+ // Stop all animations
2770
+ elem.stop(TRUE, FALSE);
 
 
2771
 
2772
+ // Use custom function if provided
2773
+ if($.isFunction(effect)) {
2774
+ effect.call(elem, state);
2775
+ }
2776
 
2777
+ // If no effect type is supplied, use a simple toggle
2778
+ else if(effect === FALSE) {
2779
+ elem[ type ]();
2780
+ }
 
 
2781
 
2782
+ // Use basic fade function
2783
+ else {
2784
+ elem.fadeTo( parseInt(duration, 10) || 90, state ? 1 : 0, function() {
2785
+ if(!state) { elem.hide(); }
2786
+ });
2787
  }
2788
 
2789
+ // Reset position and detach from body on hide
2790
+ if(!state) {
2791
+ elem.queue(function(next) {
2792
+ elem.css({ left: '', top: '' });
2793
+ if(!$(MODALSELECTOR).length) { elem.detach(); }
2794
+ next();
2795
+ });
2796
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2797
 
2798
+ // Cache the state
2799
+ prevState = state;
 
2800
 
2801
+ // If the tooltip is destroyed, set reference to null
2802
+ if(current.destroyed) { current = NULL; }
 
2803
 
2804
+ return self;
2805
  }
2806
+ });
2807
 
2808
+ self.init();
2809
+ };
2810
+ OVERLAY = new OVERLAY();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2811
 
2812
+ function Modal(api, options) {
2813
+ this.options = options;
2814
+ this._ns = '-modal';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2815
 
2816
+ this.init( (this.qtip = api) );
2817
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2818
 
2819
+ $.extend(Modal.prototype, {
2820
+ init: function(qtip) {
2821
+ var tooltip = qtip.tooltip;
 
 
 
 
 
 
 
 
2822
 
2823
+ // If modal is disabled... return
2824
+ if(!this.options.on) { return this; }
 
 
 
2825
 
2826
+ // Set overlay reference
2827
+ qtip.elements.overlay = OVERLAY.elem;
 
2828
 
2829
+ // Add unique attribute so we can grab modal tooltips easily via a SELECTOR, and set z-index
2830
+ tooltip.addClass(MODALCLASS).css('z-index', QTIP.modal_zindex + $(MODALSELECTOR).length);
 
2831
 
2832
+ // Apply our show/hide/focus modal events
2833
+ qtip._bind(tooltip, ['tooltipshow', 'tooltiphide'], function(event, api, duration) {
2834
+ var oEvent = event.originalEvent;
2835
 
2836
+ // Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop
2837
+ if(event.target === tooltip[0]) {
2838
+ if(oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test(oEvent.type) && $(oEvent.relatedTarget).closest(OVERLAY.elem[0]).length) {
2839
+ try { event.preventDefault(); } catch(e) {}
2840
+ }
2841
+ else if(!oEvent || (oEvent && oEvent.type !== 'tooltipsolo')) {
2842
+ this.toggle(event, event.type === 'tooltipshow', duration);
2843
  }
2844
  }
2845
+ }, this._ns, this);
2846
 
2847
+ // Adjust modal z-index on tooltip focus
2848
+ qtip._bind(tooltip, 'tooltipfocus', function(event, api) {
2849
+ // If focus was cancelled before it reached us, don't do anything
2850
+ if(event.isDefaultPrevented() || event.target !== tooltip[0]) { return; }
2851
 
2852
+ var qtips = $(MODALSELECTOR),
 
 
2853
 
2854
+ // Keep the modal's lower than other, regular qtips
2855
+ newIndex = QTIP.modal_zindex + qtips.length,
2856
+ curIndex = parseInt(tooltip[0].style.zIndex, 10);
2857
+
2858
+ // Set overlay z-index
2859
+ OVERLAY.elem[0].style.zIndex = newIndex - 1;
2860
+
2861
+ // Reduce modal z-index's and keep them properly ordered
2862
+ qtips.each(function() {
2863
+ if(this.style.zIndex > curIndex) {
2864
+ this.style.zIndex -= 1;
2865
  }
2866
+ });
 
2867
 
2868
+ // Fire blur event for focused tooltip
2869
+ qtips.filter('.' + CLASS_FOCUS).qtip('blur', event.originalEvent);
2870
 
2871
+ // Set the new z-index
2872
+ tooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex;
2873
 
2874
+ // Set current
2875
+ OVERLAY.update(api);
 
 
 
 
2876
 
2877
+ // Prevent default handling
2878
+ try { event.preventDefault(); } catch(e) {}
2879
+ }, this._ns, this);
 
 
 
2880
 
2881
+ // Focus any other visible modals when this one hides
2882
+ qtip._bind(tooltip, 'tooltiphide', function(event) {
2883
+ if(event.target === tooltip[0]) {
2884
+ $(MODALSELECTOR).filter(':visible').not(tooltip).last().qtip('focus', event);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2885
  }
2886
+ }, this._ns, this);
2887
+ },
2888
 
2889
+ toggle: function(event, state, duration) {
2890
+ // Make sure default event hasn't been prevented
2891
+ if(event && event.isDefaultPrevented()) { return this; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2892
 
2893
+ // Toggle it
2894
+ OVERLAY.toggle(this.qtip, !!state, duration);
2895
+ },
 
2896
 
2897
+ destroy: function() {
2898
+ // Remove modal class
2899
+ this.qtip.tooltip.removeClass(MODALCLASS);
 
 
2900
 
2901
+ // Remove bound events
2902
+ this.qtip._unbind(this.qtip.tooltip, this._ns);
 
 
 
2903
 
2904
+ // Delete element reference
2905
+ OVERLAY.toggle(this.qtip, FALSE);
2906
+ delete this.qtip.elements.overlay;
2907
+ }
2908
+ });
 
2909
 
 
 
2910
 
2911
+ MODAL = PLUGINS.modal = function(api) {
2912
+ return new Modal(api, api.options.show.modal);
2913
+ };
 
2914
 
2915
+ // Setup sanitiztion rules
2916
+ MODAL.sanitize = function(opts) {
2917
+ if(opts.show) {
2918
+ if(typeof opts.show.modal !== 'object') { opts.show.modal = { on: !!opts.show.modal }; }
2919
+ else if(typeof opts.show.modal.on === 'undefined') { opts.show.modal.on = TRUE; }
2920
+ }
2921
+ };
 
 
2922
 
2923
+ // Base z-index for all modal tooltips (use qTip core z-index as a base)
2924
+ QTIP.modal_zindex = QTIP.zindex - 200;
 
 
2925
 
2926
+ // Plugin needs to be initialized on render
2927
+ MODAL.initialize = 'render';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2928
 
2929
+ // Setup option set checks
2930
+ CHECKS.modal = {
2931
+ '^show.modal.(on|blur)$': function() {
2932
+ // Initialise
2933
+ this.destroy();
2934
+ this.init();
2935
 
2936
+ // Show the modal if not visible already and tooltip is visible
2937
+ this.qtip.elems.overlay.toggle(
2938
+ this.qtip.tooltip[0].offsetWidth > 0
2939
+ );
2940
+ }
2941
+ };
2942
+
2943
+ // Extend original api defaults
2944
+ $.extend(TRUE, QTIP.defaults, {
2945
+ show: {
2946
+ modal: {
2947
+ on: FALSE,
2948
+ effect: TRUE,
2949
+ blur: TRUE,
2950
+ stealfocus: TRUE,
2951
+ escape: TRUE
2952
+ }
2953
+ }
2954
+ });
2955
+ ;PLUGINS.viewport = function(api, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight)
2956
+ {
2957
+ var target = posOptions.target,
2958
+ tooltip = api.elements.tooltip,
2959
+ my = posOptions.my,
2960
+ at = posOptions.at,
2961
+ adjust = posOptions.adjust,
2962
+ method = adjust.method.split(' '),
2963
+ methodX = method[0],
2964
+ methodY = method[1] || method[0],
2965
+ viewport = posOptions.viewport,
2966
+ container = posOptions.container,
2967
+ cache = api.cache,
2968
+ adjusted = { left: 0, top: 0 },
2969
+ fixed, newMy, containerOffset, containerStatic,
2970
+ viewportWidth, viewportHeight, viewportScroll, viewportOffset;
2971
+
2972
+ // If viewport is not a jQuery element, or it's the window/document, or no adjustment method is used... return
2973
+ if(!viewport.jquery || target[0] === window || target[0] === document.body || adjust.method === 'none') {
2974
+ return adjusted;
2975
+ }
2976
 
2977
+ // Cach container details
2978
+ containerOffset = container.offset() || adjusted;
2979
+ containerStatic = container.css('position') === 'static';
2980
+
2981
+ // Cache our viewport details
2982
+ fixed = tooltip.css('position') === 'fixed';
2983
+ viewportWidth = viewport[0] === window ? viewport.width() : viewport.outerWidth(FALSE);
2984
+ viewportHeight = viewport[0] === window ? viewport.height() : viewport.outerHeight(FALSE);
2985
+ viewportScroll = { left: fixed ? 0 : viewport.scrollLeft(), top: fixed ? 0 : viewport.scrollTop() };
2986
+ viewportOffset = viewport.offset() || adjusted;
2987
+
2988
+ // Generic calculation method
2989
+ function calculate(side, otherSide, type, adjust, side1, side2, lengthName, targetLength, elemLength) {
2990
+ var initialPos = position[side1],
2991
+ mySide = my[side],
2992
+ atSide = at[side],
2993
+ isShift = type === SHIFT,
2994
+ myLength = mySide === side1 ? elemLength : mySide === side2 ? -elemLength : -elemLength / 2,
2995
+ atLength = atSide === side1 ? targetLength : atSide === side2 ? -targetLength : -targetLength / 2,
2996
+ sideOffset = viewportScroll[side1] + viewportOffset[side1] - (containerStatic ? 0 : containerOffset[side1]),
2997
+ overflow1 = sideOffset - initialPos,
2998
+ overflow2 = initialPos + elemLength - (lengthName === WIDTH ? viewportWidth : viewportHeight) - sideOffset,
2999
+ offset = myLength - (my.precedance === side || mySide === my[otherSide] ? atLength : 0) - (atSide === CENTER ? targetLength / 2 : 0);
3000
+
3001
+ // shift
3002
+ if(isShift) {
3003
+ offset = (mySide === side1 ? 1 : -1) * myLength;
3004
+
3005
+ // Adjust position but keep it within viewport dimensions
3006
+ position[side1] += overflow1 > 0 ? overflow1 : overflow2 > 0 ? -overflow2 : 0;
3007
+ position[side1] = Math.max(
3008
+ -containerOffset[side1] + viewportOffset[side1],
3009
+ initialPos - offset,
3010
+ Math.min(
3011
+ Math.max(
3012
+ -containerOffset[side1] + viewportOffset[side1] + (lengthName === WIDTH ? viewportWidth : viewportHeight),
3013
+ initialPos + offset
3014
+ ),
3015
+ position[side1],
3016
+
3017
+ // Make sure we don't adjust complete off the element when using 'center'
3018
+ mySide === 'center' ? initialPos - myLength : 1E9
3019
+ )
3020
+ );
 
 
 
 
 
 
 
 
 
 
3021
 
3022
+ }
 
3023
 
3024
+ // flip/flipinvert
3025
+ else {
3026
+ // Update adjustment amount depending on if using flipinvert or flip
3027
+ adjust *= (type === FLIPINVERT ? 2 : 0);
 
 
 
 
 
 
3028
 
3029
+ // Check for overflow on the left/top
3030
+ if(overflow1 > 0 && (mySide !== side1 || overflow2 > 0)) {
3031
+ position[side1] -= offset + adjust;
3032
+ newMy.invert(side, side1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3033
  }
3034
 
3035
+ // Check for overflow on the bottom/right
3036
+ else if(overflow2 > 0 && (mySide !== side2 || overflow1 > 0) ) {
3037
+ position[side1] -= (mySide === CENTER ? -offset : offset) + adjust;
3038
+ newMy.invert(side, side2);
3039
+ }
3040
 
3041
+ // Make sure we haven't made things worse with the adjustment and reset if so
3042
+ if(position[side1] < viewportScroll && -position[side1] > overflow2) {
3043
+ position[side1] = initialPos; newMy = my.clone();
 
 
3044
  }
3045
+ }
3046
 
3047
+ return position[side1] - initialPos;
3048
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3049
 
3050
+ // Set newMy if using flip or flipinvert methods
3051
+ if(methodX !== 'shift' || methodY !== 'shift') { newMy = my.clone(); }
3052
+
3053
+ // Adjust position based onviewport and adjustment options
3054
+ adjusted = {
3055
+ left: methodX !== 'none' ? calculate( X, Y, methodX, adjust.x, LEFT, RIGHT, WIDTH, targetWidth, elemWidth ) : 0,
3056
+ top: methodY !== 'none' ? calculate( Y, X, methodY, adjust.y, TOP, BOTTOM, HEIGHT, targetHeight, elemHeight ) : 0,
3057
+ my: newMy
3058
+ };
3059
+
3060
+ return adjusted;
3061
+ };
3062
+ ;PLUGINS.polys = {
3063
+ // POLY area coordinate calculator
3064
+ // Special thanks to Ed Cradock for helping out with this.
3065
+ // Uses a binary search algorithm to find suitable coordinates.
3066
+ polygon: function(baseCoords, corner) {
3067
+ var result = {
3068
+ width: 0, height: 0,
3069
+ position: {
3070
+ top: 1e10, right: 0,
3071
+ bottom: 0, left: 1e10
3072
+ },
3073
+ adjustable: FALSE
3074
+ },
3075
+ i = 0, next,
3076
+ coords = [],
3077
+ compareX = 1, compareY = 1,
3078
+ realX = 0, realY = 0,
3079
+ newWidth, newHeight;
3080
+
3081
+ // First pass, sanitize coords and determine outer edges
3082
+ i = baseCoords.length; while(i--) {
3083
+ next = [ parseInt(baseCoords[--i], 10), parseInt(baseCoords[i+1], 10) ];
3084
+
3085
+ if(next[0] > result.position.right){ result.position.right = next[0]; }
3086
+ if(next[0] < result.position.left){ result.position.left = next[0]; }
3087
+ if(next[1] > result.position.bottom){ result.position.bottom = next[1]; }
3088
+ if(next[1] < result.position.top){ result.position.top = next[1]; }
3089
+
3090
+ coords.push(next);
3091
+ }
3092
 
3093
+ // Calculate height and width from outer edges
3094
+ newWidth = result.width = Math.abs(result.position.right - result.position.left);
3095
+ newHeight = result.height = Math.abs(result.position.bottom - result.position.top);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3096
 
3097
+ // If it's the center corner...
3098
+ if(corner.abbrev() === 'c') {
3099
+ result.position = {
3100
+ left: result.position.left + (result.width / 2),
3101
+ top: result.position.top + (result.height / 2)
3102
+ };
3103
+ }
3104
+ else {
3105
+ // Second pass, use a binary search algorithm to locate most suitable coordinate
3106
+ while(newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0)
3107
+ {
3108
+ newWidth = Math.floor(newWidth / 2);
3109
+ newHeight = Math.floor(newHeight / 2);
3110
 
3111
+ if(corner.x === LEFT){ compareX = newWidth; }
3112
+ else if(corner.x === RIGHT){ compareX = result.width - newWidth; }
3113
+ else{ compareX += Math.floor(newWidth / 2); }
3114
 
3115
+ if(corner.y === TOP){ compareY = newHeight; }
3116
+ else if(corner.y === BOTTOM){ compareY = result.height - newHeight; }
3117
+ else{ compareY += Math.floor(newHeight / 2); }
 
 
 
 
3118
 
3119
+ i = coords.length; while(i--)
3120
+ {
3121
+ if(coords.length < 2){ break; }
 
 
3122
 
3123
+ realX = coords[i][0] - result.position.left;
3124
+ realY = coords[i][1] - result.position.top;
 
 
3125
 
3126
+ if((corner.x === LEFT && realX >= compareX) ||
3127
+ (corner.x === RIGHT && realX <= compareX) ||
3128
+ (corner.x === CENTER && (realX < compareX || realX > (result.width - compareX))) ||
3129
+ (corner.y === TOP && realY >= compareY) ||
3130
+ (corner.y === BOTTOM && realY <= compareY) ||
3131
+ (corner.y === CENTER && (realY < compareY || realY > (result.height - compareY)))) {
3132
+ coords.splice(i, 1);
3133
+ }
3134
+ }
3135
  }
3136
+ result.position = { left: coords[0][0], top: coords[0][1] };
3137
+ }
3138
 
3139
+ return result;
3140
+ },
 
 
 
3141
 
3142
+ rect: function(ax, ay, bx, by) {
3143
+ return {
3144
+ width: Math.abs(bx - ax),
3145
+ height: Math.abs(by - ay),
3146
+ position: {
3147
+ left: Math.min(ax, bx),
3148
+ top: Math.min(ay, by)
3149
  }
3150
+ };
3151
+ },
3152
+
3153
+ _angles: {
3154
+ tc: 3 / 2, tr: 7 / 4, tl: 5 / 4,
3155
+ bc: 1 / 2, br: 1 / 4, bl: 3 / 4,
3156
+ rc: 2, lc: 1, c: 0
3157
+ },
3158
+ ellipse: function(cx, cy, rx, ry, corner) {
3159
+ var c = PLUGINS.polys._angles[ corner.abbrev() ],
3160
+ rxc = c === 0 ? 0 : rx * Math.cos( c * Math.PI ),
3161
+ rys = ry * Math.sin( c * Math.PI );
3162
+
3163
+ return {
3164
+ width: (rx * 2) - Math.abs(rxc),
3165
+ height: (ry * 2) - Math.abs(rys),
3166
+ position: {
3167
+ left: cx + rxc,
3168
+ top: cy + rys
3169
+ },
3170
+ adjustable: FALSE
3171
+ };
3172
+ },
3173
+ circle: function(cx, cy, r, corner) {
3174
+ return PLUGINS.polys.ellipse(cx, cy, r, r, corner);
3175
+ }
3176
+ };
3177
+ ;PLUGINS.svg = function(api, svg, corner)
3178
+ {
3179
+ var doc = $(document),
3180
+ elem = svg[0],
3181
+ root = $(elem.ownerSVGElement),
3182
+ ownerDocument = elem.ownerDocument,
3183
+ strokeWidth2 = (parseInt(svg.css('stroke-width'), 10) || 0) / 2,
3184
+ frameOffset, mtx, transformed, viewBox,
3185
+ len, next, i, points,
3186
+ result, position, dimensions;
3187
+
3188
+ // Ascend the parentNode chain until we find an element with getBBox()
3189
+ while(!elem.getBBox) { elem = elem.parentNode; }
3190
+ if(!elem.getBBox || !elem.parentNode) { return FALSE; }
3191
+
3192
+ // Determine which shape calculation to use
3193
+ switch(elem.nodeName) {
3194
+ case 'ellipse':
3195
+ case 'circle':
3196
+ result = PLUGINS.polys.ellipse(
3197
+ elem.cx.baseVal.value,
3198
+ elem.cy.baseVal.value,
3199
+ (elem.rx || elem.r).baseVal.value + strokeWidth2,
3200
+ (elem.ry || elem.r).baseVal.value + strokeWidth2,
3201
+ corner
3202
+ );
3203
+ break;
3204
+
3205
+ case 'line':
3206
+ case 'polygon':
3207
+ case 'polyline':
3208
+ // Determine points object (line has none, so mimic using array)
3209
+ points = elem.points || [
3210
+ { x: elem.x1.baseVal.value, y: elem.y1.baseVal.value },
3211
+ { x: elem.x2.baseVal.value, y: elem.y2.baseVal.value }
3212
+ ];
3213
+
3214
+ for(result = [], i = -1, len = points.numberOfItems || points.length; ++i < len;) {
3215
+ next = points.getItem ? points.getItem(i) : points[i];
3216
+ result.push.apply(result, [next.x, next.y]);
3217
+ }
3218
+
3219
+ result = PLUGINS.polys.polygon(result, corner);
3220
+ break;
3221
+
3222
+ // Unknown shape or rectangle? Use bounding box
3223
+ default:
3224
+ result = elem.getBBox();
3225
+ result = {
3226
+ width: result.width,
3227
+ height: result.height,
3228
+ position: {
3229
+ left: result.x,
3230
+ top: result.y
3231
+ }
3232
+ };
3233
+ break;
3234
+ }
3235
 
3236
+ // Shortcut assignments
3237
+ position = result.position;
3238
+ root = root[0];
 
3239
 
3240
+ // Convert position into a pixel value
3241
+ if(root.createSVGPoint) {
3242
+ mtx = elem.getScreenCTM();
3243
+ points = root.createSVGPoint();
3244
 
3245
+ points.x = position.left;
3246
+ points.y = position.top;
3247
+ transformed = points.matrixTransform( mtx );
3248
+ position.left = transformed.x;
3249
+ position.top = transformed.y;
3250
+ }
3251
 
3252
+ // Check the element is not in a child document, and if so, adjust for frame elements offset
3253
+ if(ownerDocument !== document && api.position.target !== 'mouse') {
3254
+ frameOffset = $((ownerDocument.defaultView || ownerDocument.parentWindow).frameElement).offset();
3255
+ if(frameOffset) {
3256
+ position.left += frameOffset.left;
3257
+ position.top += frameOffset.top;
3258
+ }
3259
+ }
3260
 
3261
+ // Adjust by scroll offset of owner document
3262
+ ownerDocument = $(ownerDocument);
3263
+ position.left += ownerDocument.scrollLeft();
3264
+ position.top += ownerDocument.scrollTop();
3265
+
3266
+ return result;
3267
+ };
3268
+ ;PLUGINS.imagemap = function(api, area, corner, adjustMethod)
3269
+ {
3270
+ if(!area.jquery) { area = $(area); }
3271
+
3272
+ var shape = (area.attr('shape') || 'rect').toLowerCase().replace('poly', 'polygon'),
3273
+ image = $('img[usemap="#'+area.parent('map').attr('name')+'"]'),
3274
+ coordsString = $.trim(area.attr('coords')),
3275
+ coordsArray = coordsString.replace(/,$/, '').split(','),
3276
+ imageOffset, coords, i, next, result, len;
3277
+
3278
+ // If we can't find the image using the map...
3279
+ if(!image.length) { return FALSE; }
3280
+
3281
+ // Pass coordinates string if polygon
3282
+ if(shape === 'polygon') {
3283
+ result = PLUGINS.polys.polygon(coordsArray, corner);
3284
+ }
3285
 
3286
+ // Otherwise parse the coordinates and pass them as arguments
3287
+ else if(PLUGINS.polys[shape]) {
3288
+ for(i = -1, len = coordsArray.length, coords = []; ++i < len;) {
3289
+ coords.push( parseInt(coordsArray[i], 10) );
3290
  }
3291
 
3292
+ result = PLUGINS.polys[shape].apply(
3293
+ this, coords.concat(corner)
3294
+ );
3295
+ }
 
 
 
 
 
 
3296
 
3297
+ // If no shapre calculation method was found, return false
3298
+ else { return FALSE; }
3299
+
3300
+ // Make sure we account for padding and borders on the image
3301
+ imageOffset = image.offset();
3302
+ imageOffset.left += Math.ceil((image.outerWidth(FALSE) - image.width()) / 2);
3303
+ imageOffset.top += Math.ceil((image.outerHeight(FALSE) - image.height()) / 2);
3304
+
3305
+ // Add image position to offset coordinates
3306
+ result.position.left += imageOffset.left;
3307
+ result.position.top += imageOffset.top;
3308
+
3309
+ return result;
3310
+ };
3311
+ ;var IE6,
3312
+
3313
+ /*
3314
+ * BGIFrame adaption (http://plugins.jquery.com/project/bgiframe)
3315
+ * Special thanks to Brandon Aaron
3316
+ */
3317
+ BGIFRAME = '<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" ' +
3318
+ ' style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); ' +
3319
+ '-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';
3320
+
3321
+ function Ie6(api, qtip) {
3322
+ this._ns = 'ie6';
3323
+ this.init( (this.qtip = api) );
3324
+ }
3325
 
3326
+ $.extend(Ie6.prototype, {
3327
+ _scroll : function() {
3328
+ var overlay = this.qtip.elements.overlay;
3329
+ overlay && (overlay[0].style.top = $(window).scrollTop() + 'px');
3330
+ },
3331
 
3332
+ init: function(qtip) {
3333
+ var tooltip = qtip.tooltip,
3334
+ scroll;
3335
 
3336
+ // Create the BGIFrame element if needed
3337
+ if($('select, object').length < 1) {
3338
+ this.bgiframe = qtip.elements.bgiframe = $(BGIFRAME).appendTo(tooltip);
 
 
3339
 
3340
+ // Update BGIFrame on tooltip move
3341
+ qtip._bind(tooltip, 'tooltipmove', this.adjustBGIFrame, this._ns, this);
3342
+ }
3343
 
3344
+ // redraw() container for width/height calculations
3345
+ this.redrawContainer = $('<div/>', { id: NAMESPACE+'-rcontainer' })
3346
+ .appendTo(document.body);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3347
 
3348
+ // Fixup modal plugin if present too
3349
+ if( qtip.elements.overlay && qtip.elements.overlay.addClass('qtipmodal-ie6fix') ) {
3350
+ qtip._bind(window, ['scroll', 'resize'], this._scroll, this._ns, this);
3351
+ qtip._bind(tooltip, ['tooltipshow'], this._scroll, this._ns, this);
3352
+ }
3353
 
3354
+ // Set dimensions
3355
+ this.redraw();
3356
+ },
 
 
3357
 
3358
+ adjustBGIFrame: function() {
3359
+ var tooltip = this.qtip.tooltip,
3360
+ dimensions = {
3361
+ height: tooltip.outerHeight(FALSE),
3362
+ width: tooltip.outerWidth(FALSE)
3363
+ },
3364
+ plugin = this.qtip.plugins.tip,
3365
+ tip = this.qtip.elements.tip,
3366
+ tipAdjust, offset;
3367
+
3368
+ // Adjust border offset
3369
+ offset = parseInt(tooltip.css('borderLeftWidth'), 10) || 0;
3370
+ offset = { left: -offset, top: -offset };
3371
+
3372
+ // Adjust for tips plugin
3373
+ if(plugin && tip) {
3374
+ tipAdjust = (plugin.corner.precedance === 'x') ? [WIDTH, LEFT] : [HEIGHT, TOP];
3375
+ offset[ tipAdjust[1] ] -= tip[ tipAdjust[0] ]();
3376
+ }
3377
 
3378
+ // Update bgiframe
3379
+ this.bgiframe.css(offset).css(dimensions);
3380
+ },
3381
 
3382
+ // Max/min width simulator function
3383
+ redraw: function() {
3384
+ if(this.qtip.rendered < 1 || this.drawing) { return this; }
 
 
 
 
3385
 
3386
+ var tooltip = this.qtip.tooltip,
3387
+ style = this.qtip.options.style,
3388
+ container = this.qtip.options.position.container,
3389
+ perc, width, max, min;
3390
 
3391
+ // Set drawing flag
3392
+ this.qtip.drawing = 1;
 
 
 
3393
 
3394
+ // If tooltip has a set height/width, just set it... like a boss!
3395
+ if(style.height) { tooltip.css(HEIGHT, style.height); }
3396
+ if(style.width) { tooltip.css(WIDTH, style.width); }
3397
 
3398
+ // Simulate max/min width if not set width present...
3399
+ else {
3400
+ // Reset width and add fluid class
3401
+ tooltip.css(WIDTH, '').appendTo(this.redrawContainer);
3402
 
3403
+ // Grab our tooltip width (add 1 if odd so we don't get wrapping problems.. huzzah!)
3404
+ width = tooltip.width();
3405
+ if(width % 2 < 1) { width += 1; }
3406
 
3407
+ // Grab our max/min properties
3408
+ max = tooltip.css('maxWidth') || '';
3409
+ min = tooltip.css('minWidth') || '';
3410
 
3411
+ // Parse into proper pixel values
3412
+ perc = (max + min).indexOf('%') > -1 ? container.width() / 100 : 0;
3413
+ max = ((max.indexOf('%') > -1 ? perc : 1) * parseInt(max, 10)) || width;
3414
+ min = ((min.indexOf('%') > -1 ? perc : 1) * parseInt(min, 10)) || 0;
3415
 
3416
+ // Determine new dimension size based on max/min/current values
3417
+ width = max + min ? Math.min(Math.max(width, min), max) : width;
3418
 
3419
+ // Set the newly calculated width and remvoe fluid class
3420
+ tooltip.css(WIDTH, Math.round(width)).appendTo(container);
3421
+ }
3422
 
3423
+ // Set drawing flag
3424
+ this.drawing = 0;
 
 
 
3425
 
3426
+ return this;
3427
+ },
 
 
3428
 
3429
+ destroy: function() {
3430
+ // Remove iframe
3431
+ this.bgiframe && this.bgiframe.remove();
3432
 
3433
+ // Remove bound events
3434
+ this.qtip._unbind([window, this.qtip.tooltip], this._ns);
 
 
 
 
3435
  }
3436
+ });
 
 
 
3437
 
3438
+ IE6 = PLUGINS.ie6 = function(api) {
3439
+ // Proceed only if the browser is IE6
3440
+ return BROWSER.ie === 6 ? new Ie6(api) : FALSE;
3441
+ };
3442
 
3443
+ IE6.initialize = 'render';
3444
 
3445
+ CHECKS.ie6 = {
3446
+ '^content|style$': function() {
3447
+ this.redraw();
3448
+ }
3449
+ };
3450
+ ;}));
3451
+ }( window, document ));
ReduxCore/assets/js/vendor/qtip/jquery.qtip.min.js CHANGED
@@ -1,3 +1,5 @@
1
- /* qTip2 v2.2.0 None | qtip2.com | Licensed MIT, GPL | Sun Dec 15 2013 23:29:05 */
2
- if ( typeof jQuery.qtip === 'undefined' ) {!function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=A,this.elements={target:a},this._id=J+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:z,attr:e,onTooltip:z,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=z}function f(a){return a===A||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?z:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?z:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==z,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,A,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(f(b.title)||(b.button=b.title.button,b.title=b.title.text),g(b.title||z)&&(b.title=z))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===y?{ready:y}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(I,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return M.concat("").join(a?"-"+a+" ":" ")}function l(c){return c&&{type:c.type,pageX:c.pageX,pageY:c.pageY,target:c.target,relatedTarget:c.relatedTarget,scrollX:c.scrollX||a.pageXOffset||b.body.scrollLeft||b.documentElement.scrollLeft,scrollY:c.scrollY||a.pageYOffset||b.body.scrollTop||b.documentElement.scrollTop}||{}}function m(a,b){return b>0?setTimeout(d.proxy(a,this),b):(a.call(this),void 0)}function n(a){return this.tooltip.hasClass(T)?z:(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=m.call(this,function(){this.toggle(y,a)},this.options.show.delay),void 0)}function o(a){if(this.tooltip.hasClass(T))return z;var b=d(a.relatedTarget),c=b.closest(N)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=m.call(this,function(){this.toggle(z,a)},this.options.hide.delay,this)}function p(a){return this.tooltip.hasClass(T)||!this.options.hide.inactive?z:(clearTimeout(this.timers.inactive),this.timers.inactive=m.call(this,function(){this.hide(a)},this.options.hide.inactive),void 0)}function q(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function r(a,c,e){d(b.body).delegate(a,(c.split?c:c.join($+" "))+$,function(){var a=t.api[d.attr(this,L)];a&&!a.disabled&&e.apply(a,arguments)})}function s(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):A,p="html5"===f.metadata.type&&o?o[f.metadata.name]:A,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(y,{},t.defaults,f,"object"==typeof q?h(q):A,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===z||!j)return z;k.content.text=j}if(i.container.length||(i.container=m),i.target===z&&(i.target=n),k.show.target===z&&(k.show.target=n),k.show.solo===y&&(k.show.solo=i.container.closest("body")),k.hide.target===z&&(k.hide.target=n),k.position.viewport===y&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new v(i.at,y),i.my=new v(i.my),a.data(J))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===z)return z;return a.attr(K,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(V,l).attr("title",""),g=new e(a,k,c,!!j),a.data(J,g),a.one("remove.qtip-"+c+" removeqtip.qtip-"+c,function(){var a;(a=d(this).data(J))&&a.destroy(!0)}),g}var t,u,v,w,x,y=!0,z=!1,A=null,B="x",C="y",D="top",E="left",F="bottom",G="right",H="center",I={},J="qtip",K="data-hasqtip",L="data-qtip-id",M=["ui-widget","ui-tooltip"],N="."+J,O="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),P=J+"-fixed",Q=J+"-default",R=J+"-focus",S=J+"-hover",T=J+"-disabled",U="_replacedByqTip",V="oldtitle",W={ie:function(){for(var a=3,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+ ++a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||z};u=e.prototype,u._when=function(a){return d.when.apply(d,a)},u.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[J,Q,e.style.classes,J+"-pos-"+e.position.my.abbrev()].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":z,"aria-describedby":this._id+"-content","aria-hidden":y}).toggleClass(T,this.disabled).attr(L,this.id).data(J,this).appendTo(k.container).append(g.content=d("<div />",{"class":J+"-content",id:this._id+"-content","aria-atomic":y})),this.rendered=-1,this.positioning=y,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,z))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,z)),this.rendered=y,this._setWidget(),d.each(I,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=z,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(y,f.event,z),c.hiddenDuringWait=z}),t.api[this.id]=this,this},u.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=y;var a=this.target,b=a.attr(V);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()}),clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this._unassignEvents(),a.removeData(J).removeAttr(L).removeAttr(K).removeAttr("aria-describedby"),this.options.suppress&&b&&a.attr("title",b).removeAttr(V),this._unbind(a),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=A,delete t.api[this.id]}}return this.destroyed?this.target:(a===y&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},w=u.checks={builtin:{"^id$":function(a,b,c,e){var f=c===y?t.nextid:c,g=J+"-"+f;f!==z&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),this._updateTitle(c),void 0):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(a[b]=new v(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(y)||this.toggle(y))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Q,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},u.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var X=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,Y=/^prerender|show\.ready/i;u.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=z,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&Y.test(b))return delete a[b],void 0;var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=X.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=y,d.each(a,d.proxy(j,this)),this.positioning=z,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?A:this.cache.event),this},u._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=y,a.then(function(a){return e.waiting=z,c._update(a,b)},A,function(a){return c._update(a,b)})):a===z||!a&&""!==a?z:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){a.images&&a.images.length&&c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):z},u._waitForContent=function(a){var b=this.cache;return b.waiting=y,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=z}).promise()},u._updateContent=function(a,b){this._update(a,this.elements.content,b)},u._updateTitle=function(a,b){this._update(a,this.elements.title,b)===z&&this._removeTitle(z)},u._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":J+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":J+"-title","aria-atomic":y})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},u._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=A,a!==z&&this.reposition())},u.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=y;var f,g,h=this.cache,i=this.tooltip,j=this.options.position,k=j.target,l=j.my,m=j.at,n=j.viewport,o=j.container,p=j.adjust,q=p.method.split(" "),r=i.outerWidth(z),s=i.outerHeight(z),t=0,u=0,v=i.css("position"),w={left:0,top:0},x=i[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=o[0].ownerDocument,J=this.mouse;if(d.isArray(k)&&2===k.length)m={x:E,y:D},w={left:k[0],top:k[1]};else if("mouse"===k)m={x:E,y:D},!J||!J.pageX||!p.mouse&&c&&c.pageX?c&&c.pageX||((!p.mouse||this.options.show.distance)&&h.origin&&h.origin.pageX?c=h.origin:(!c||c&&("resize"===c.type||"scroll"===c.type))&&(c=h.event)):c=J,"static"!==v&&(w=o.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),w={left:c.pageX-w.left+(g&&g.left||0),top:c.pageY-w.top+(g&&g.top||0)},p.mouse&&A&&J&&(w.left-=(J.scrollX||0)-B.scrollLeft(),w.top-=(J.scrollY||0)-B.scrollTop());else{if("event"===k?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?h.target=d(c.target):c.target||(h.target=this.elements.target):"event"!==k&&(h.target=d(k.jquery?k:this.elements.target)),k=h.target,k=d(k).eq(0),0===k.length)return this;k[0]===b||k[0]===a?(t=W.iOS?a.innerWidth:k.width(),u=W.iOS?a.innerHeight:k.height(),k[0]===a&&(w={top:(n||k).scrollTop(),left:(n||k).scrollLeft()})):I.imagemap&&k.is("area")?f=I.imagemap(this,k,m,I.viewport?q:z):I.svg&&k&&k[0].ownerSVGElement?f=I.svg(this,k,m,I.viewport?q:z):(t=k.outerWidth(z),u=k.outerHeight(z),w=k.offset()),f&&(t=f.width,u=f.height,g=f.offset,w=f.position),w=this.reposition.offset(k,w,o),(W.iOS>3.1&&W.iOS<4.1||W.iOS>=4.3&&W.iOS<4.33||!W.iOS&&"fixed"===v)&&(w.left-=B.scrollLeft(),w.top-=B.scrollTop()),(!f||f&&f.adjustable!==z)&&(w.left+=m.x===G?t:m.x===H?t/2:0,w.top+=m.y===F?u:m.y===H?u/2:0)}return w.left+=p.x+(l.x===G?-r:l.x===H?-r/2:0),w.top+=p.y+(l.y===F?-s:l.y===H?-s/2:0),I.viewport?(w.adjusted=I.viewport(this,w,j,t,u,r,s),g&&w.adjusted.left&&(w.left+=g.left),g&&w.adjusted.top&&(w.top+=g.top)):w.adjusted={left:0,top:0},this._trigger("move",[w,n.elem||n],c)?(delete w.adjusted,e===z||!x||isNaN(w.left)||isNaN(w.top)||"mouse"===k||!d.isFunction(j.effect)?i.css(w):d.isFunction(j.effect)&&(j.effect.call(i,this,d.extend({},w)),i.queue(function(a){d(this).css({opacity:"",height:""}),W.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=z,this):this},u.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!W.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var Z=(v=u.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,H).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?C:B}).prototype;Z.invert=function(a,b){this[a]=this[a]===E?G:this[a]===G?E:b||this[a]},Z.string=function(){var a=this.x,b=this.y;return a===b?a:this.precedance===C||this.forceY&&"center"!==b?b+" "+a:a+" "+b},Z.abbrev=function(){var a=this.string().split(" ");return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},Z.clone=function(){return new v(this.string(),this.forceY)},u.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=l(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=y),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",m=this.options[k],n=(this.options[a?"hide":"show"],this.options.position),o=this.options.content,p=this.tooltip.css("width"),q=this.tooltip.is(":visible"),r=a||1===m.target.length,s=!c||m.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!q),h=!g.is(":animated")&&q===a&&s,i=h?A:!!this._trigger(k,[90]),this.destroyed?this:(i!==z&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(e.origin=l(this.mouse),d.isFunction(o.text)&&this._updateContent(o.text,z),d.isFunction(o.title)&&this._updateTitle(o.title,z),!x&&"mouse"===n.target&&n.adjust.mouse&&(d(b).bind("mousemove."+J,this._storeMouse),x=y),p||g.css("width",g.outerWidth(z)),this.reposition(c,arguments[2]),p||g.css("width",""),m.solo&&("string"==typeof m.solo?d(m.solo):d(N,m.solo)).not(g).not(m.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,x&&!d(N+'[tracking="true"]:visible',m.solo).not(g).length&&(d(b).unbind("mousemove."+J),x=z),this.blur(c)),j=d.proxy(function(){a?(W.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof m.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),m.effect===z||r===z?(g[k](),j()):d.isFunction(m.effect)?(g.stop(1,1),m.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&m.target.trigger("qtip-"+this.id+"-inactive"),this))},u.show=function(a){return this.toggle(y,a)},u.hide=function(a){return this.toggle(z,a)},u.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(N),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=t.zindex+b.length;return c.hasClass(R)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+R).qtip("blur",a)),c.addClass(R)[0].style.zIndex=f),this},u.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass(R),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},u.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(T):this.disabled):"boolean"!=typeof a&&(a=y),this.rendered&&this.tooltip.toggleClass(T,a).attr("aria-disabled",a),this.disabled=!!a,this)},u.enable=function(){return this.disable(z)},u._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":J+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"&times;"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(T)||a.hide(b),z})},u._updateButton=function(a){if(!this.rendered)return z;var b=this.elements.button;a?this._createButton():b.remove()},u._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(T);c.removeClass(T),T=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(T,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Q,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(J+"-icon",!a)},u._storeMouse=function(a){(this.mouse=l(a)).type="mousemove"},u._bind=function(a,b,c,e,f){var g="."+this._id+(e?"-"+e:"");b.length&&d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this))},u._unbind=function(a,b){d(a).unbind("."+this._id+(b?"-"+b:""))};var $="."+J;d(function(){r(N,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(P)&&!c.hasClass(T)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(S,b)}),r("["+L+"]",O,p)}),u._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||A,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=z,!e.isDefaultPrevented()},u._bindEvents=function(a,b,c,e,f,g){if(e.add(c).length===e.length){var h=[];b=d.map(b,function(b){var c=d.inArray(b,a);return c>-1?(h.push(a.splice(c,1)[0]),void 0):b}),h.length&&this._bind(c,h,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)})}this._bind(c,a,f),this._bind(e,b,g)},u._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?z:(this.cache.event=l(a),this.cache.target=a?d(a.target):[c],clearTimeout(this.timers.show),this.timers.show=m.call(this,function(){this.render("object"==typeof a||e.show.ready)},e.show.delay),void 0)}var e=this.options,f=e.show.target,g=e.hide.target,h=e.show.event?d.trim(""+e.show.event).split(" "):[],i=e.hide.event?d.trim(""+e.hide.event).split(" "):[];/mouse(over|enter)/i.test(e.show.event)&&!/mouse(out|leave)/i.test(e.hide.event)&&i.push("mouseleave"),this._bind(f,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=y}),this._bindEvents(h,i,f,g,b,function(){clearTimeout(this.timers.show)}),(e.show.ready||e.prerender)&&b.call(this,a)},u._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),m=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(P)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(T)&&this.tooltip[0].offsetWidth>0,e=b.parents(N).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",p),this._bind(i.add(g),t.inactiveEvents,p,"-inactive")),this._bindEvents(r,s,h,i,n,o),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){this.cache.onTarget="mouseenter"===a.type}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(T)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:m,"resize",q),f.adjust.scroll&&this._bind(m.add(f.container),"scroll",q)},u._unassignEvents=function(){var c=[this.options.show.target[0],this.options.hide.target[0],this.rendered&&this.tooltip[0],this.options.position.container[0],this.options.position.viewport[0],this.options.position.container.closest("html")[0],a,b];this._unbind(d([]).pushStack(d.grep(c,function(a){return"object"==typeof a})))},t=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=A,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],J):A;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,J);if(!a)return y;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),z;a.set(b,e)}}),g!==A?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(y,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===z||c.length<1||t.api[c]?t.nextid++:c,b=s(d(this),c,k),b===z?y:(t.api[c]=b,d.each(I,function(){"initialize"===this.initialize&&this(b)}),b._assignInitialEvents(j),void 0)}))},d.qtip=e,t.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,V):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(V,b))}return d.fn["attr"+U].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+U].apply(this,arguments));return a||b.filter("["+V+"]").attr("title",function(){return d.attr(this,V)}).removeAttr(V),b}},function(a,b){if(!b||d.fn[a+U])return y;var c=d.fn[a+U]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+U]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(K))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+U].apply(this,arguments)}),t.version="2.2.0",t.nextid=0,t.inactiveEvents=O,t.zindex=15e3,t.defaults={prerender:z,id:z,overwrite:y,suppress:y,content:{text:y,attr:"title",title:z,button:z},position:{my:"top left",at:"bottom right",target:z,container:z,viewport:z,adjust:{x:0,y:0,mouse:y,scroll:y,resize:y,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:z})}},show:{target:z,event:"mouseenter",effect:y,delay:90,solo:z,ready:z,autofocus:z},hide:{target:z,event:"mouseleave",effect:y,delay:0,fixed:z,inactive:z,leave:"window",distance:z},style:{classes:"",widget:z,width:z,height:z,def:y},events:{render:A,move:A,show:A,hide:A,toggle:A,visible:A,hidden:A,focus:A,blur:A}}})}(window,document);}
3
- //# sourceMappingURL=http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0//var/www/qtip2/build/tmp/tmp-9404qaj6jps/jquery.qtip.min.map
 
 
1
+ /* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
2
+
3
+ !function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?E:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return V.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[S,Z,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("<div />",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTitle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"&times;"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c.hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at:"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=function(a,b,c){return"<qtipvml:"+a+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(b||"")+' style="behavior: url(#default#VML); '+(c||"")+'" />'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(D))},_parseCorner:function(a){var b=this.qtip.options.position.my;return a===E||b===E?a=E:a===D?a=new A(b.string()):a.string||(a=new A(a),a.fixed=D),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=jb+s(b)+"Width";return(c?u(c,e):u(d.content,e)||u(this._useTitle(a)&&d.titlebar||d.content,e)||u(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=jb+s(a.y)+s(a.x)+"Radius";return db.ie<9?0:u(this._useTitle(a)&&b.titlebar||b.content,c)||u(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||pb.test(d)?E:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=jb+s(a[a.precedance])+s(kb),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,lb)||g(f,lb)||g(b.content,lb)||g(b.tooltip,lb)||c.css(lb),h[1]=g(c,e,kb)||g(f,e,kb)||g(b.content,e,kb)||g(b.tooltip,e,kb)||b.tooltip.css(e),d("*",c).add(c).css("cssText",lb+":"+mb+nb+";"+jb+":0"+nb+";"),h},_calculateSize:function(a){var b,c,d,e=a.precedance===H,f=this.options.width,g=this.options.height,h="c"===a.abbrev(),i=(e?f:g)*(h?.5:1),j=Math.pow,k=Math.round,l=Math.sqrt(j(i,2)+j(g,2)),m=[this.border/i*l,this.border/g*l];return m[2]=Math.sqrt(j(m[0],2)-j(this.border,2)),m[3]=Math.sqrt(j(m[1],2)-j(this.border,2)),b=l+m[2]+m[3]+(h?0:m[0]),c=b/l,d=[k(c*f),k(c*g)],e?d:d.reverse()},_calculateTip:function(a,b,c){c=c||1,b=b||this.size;var d=b[0]*c,e=b[1]*c,f=Math.ceil(d/2),g=Math.ceil(e/2),h={br:[0,0,d,e,d,0],bl:[0,0,d,0,0,e],tr:[0,e,d,0,d,e],tl:[0,0,0,e,d,e],tc:[0,e,f,0,d,e],bc:[0,0,d,0,f,e],rc:[0,0,d,g,0,e],lc:[d,0,d,e,0,g]};return h.lt=h.br,h.rt=h.bl,h.lb=h.tr,h.rb=h.tl,h[a.abbrev()]},_drawCoords:function(a,b){a.beginPath(),a.moveTo(b[0],b[1]),a.lineTo(b[2],b[3]),a.lineTo(b[4],b[5]),a.closePath()},create:function(){var a=this.corner=(ob||db.ie)&&this._parseCorner(this.options.corner);return(this.enabled=!!this.corner&&"c"!==this.corner.abbrev())&&(this.qtip.cache.corner=a.clone(),this.update()),this.element.toggle(this.enabled),this.corner},update:function(b,c){if(!this.enabled)return this;var e,f,g,h,i,j,k,l,m=this.qtip.elements,n=this.element,o=n.children(),p=this.options,q=this.size,r=p.mimic,s=Math.round;b||(b=this.qtip.cache.corner||this.corner),r===E?r=b:(r=new A(r),r.precedance=b.precedance,"inherit"===r.x?r.x=b.x:"inherit"===r.y?r.y=b.y:r.x===r.y&&(r[b.precedance]=b[b.precedance])),f=r.precedance,b.precedance===G?this._swapDimensions():this._resetDimensions(),e=this.color=this._parseColours(b),e[1]!==mb?(l=this.border=this._parseWidth(b,b[b.precedance]),p.border&&1>l&&!pb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==D?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===H?[s(r.x===L?l:r.x===N?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===K?k[1]-q[1]:0)]:[s(r.x===L?k[0]-q[0]:0),s(r.y===K?l:r.y===M?k[1]-q[1]-l:(k[1]-q[1])/2)],ob?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,ub),i=this._calculateTip(r,this.size,ub),o.attr(I,k[0]*ub).attr(J,k[1]*ub),o.css(I,k[0]).css(J,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*ub,j[1]*ub),this._drawCoords(g,h),g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===db.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(O)>-1),left:j[0]-j[2]*Number(f===G),top:j[1]-j[2]*Number(f===H),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+(k[1]+l),path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(vb("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==E&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return E;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j=(g.tooltip.hasClass("ui-widget"),{});return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===G&&e.reverse(),d.each(e,function(d,e){var h,k,l;
4
+ e===O?(h=c===H?L:K,j[h]="50%",j[ib+"-"+h]=-Math.round(b[c===H?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===G?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===Q&&j.precedance===b&&k[d]&&j[c]!==O?j.precedance=j.precedance===G?H:G:a!==Q&&k[d]&&(j[b]=j[b]===O?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===O?p[ib+"-"+b]=o[a]=g[ib+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=E),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:E,top:E,x:0,y:0},p={};this.corner.fixed!==D&&(e(m,G,H,L,N),e(n,H,G,K,M),(j.string()!==i.corner.string()||i.cornerTop!==k.top||i.cornerLeft!==k.left)&&this.update(j,E)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,(o.left=m===Q&&!!k.left)&&f(G,L,N),(o.top=n===Q&&!!k.top)&&f(H,K,M),this.element.css(p).toggle(!(o.x&&o.y||j.x===O&&o.y||j.y===O&&o.x)),d.left-=g.left.charAt?g.user:m!==Q||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==Q||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),hb=R.tip=function(a){return new v(a,a.options.style.tip)},hb.initialize="render",hb.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=D)}},B.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(D,y.defaults,{style:{tip:{corner:D,mimic:E,width:6,height:6,border:D,offset:0}}});var wb,xb,yb="qtip-modal",zb="."+yb;xb=function(){function a(a){if(d.expr[":"].focusable)return d.expr[":"].focusable;var b,c,e,f=!isNaN(d.attr(a,"tabindex")),g=a.nodeName&&a.nodeName.toLowerCase();return"area"===g?(b=a.parentNode,c=b.name,a.href&&c&&"map"===b.nodeName.toLowerCase()?(e=d("img[usemap=#"+c+"]")[0],!!e&&e.is(":visible")):!1):/input|select|textarea|button|object/.test(g)?!a.disabled:"a"===g?a.href||f:f}function c(a){k.length<1&&a.length?a.not("body").blur():k.first().focus()}function e(a){if(i.is(":visible")){var b,e=d(a.target),h=f.tooltip,j=e.closest(W);b=j.length<1?E:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(W)[0]===h[0]||c(e),g=a.target===k[k.length-1]}}var f,g,h,i,j=this,k={};d.extend(j,{init:function(){return i=j.elem=d("<div />",{id:"qtip-overlay",html:"<div></div>",mousedown:function(){return E}}).hide(),d(b.body).bind("focusin"+zb,e),d(b).bind("keydown"+zb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+zb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==E?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,g){var k=(d(b.body),a.tooltip),l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=i.is(":visible"),p=d(zb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==E&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==E||!e&&p.length?j:(i.stop(D,E),d.isFunction(m)?m.call(i,e):m===E?i[n]():i.fadeTo(parseInt(g,10)||90,e?1:0,function(){e||i.hide()}),e||i.queue(function(a){i.css({left:"",top:""}),d(zb).length||i.detach(),a()}),h=e,f.destroyed&&(f=F),j)}}),j.init()},xb=new xb,d.extend(w.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=xb.elem,b.addClass(yb).css("z-index",y.modal_zindex+d(zb).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(xb.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(zb),f=y.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);xb.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+$).qtip("blur",a.originalEvent),b.addClass($)[0].style.zIndex=f,xb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(zb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void xb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(yb),this.qtip._unbind(this.qtip.tooltip,this._ns),xb.toggle(this.qtip,E),delete this.qtip.elements.overlay}}),wb=R.modal=function(a){return new w(a,a.options.show.modal)},wb.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=D))},y.modal_zindex=y.zindex-200,wb.initialize="render",B.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(D,y.defaults,{show:{modal:{on:E,effect:D,blur:D,stealfocus:D,escape:D}}}),R.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===Q,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===I?o:p)-z,C=x-(u.precedance===a||s===u[b]?y:0)-(t===O?i/2:0);return w?(C=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-C,Math.min(Math.max(-m[f]+r[f]+(h===I?o:p),k+C),d[f],"center"===s?k-x:1e9))):(e*=c===P?2:0,A>0&&(s!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===O?-C:C)+e,l.invert(a,g)),d[f]<q&&-d[f]>B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),y=x[0],z=x[1]||x[0],A=e.viewport,B=e.container,C=(c.cache,{left:0,top:0});return A.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=B.offset()||C,n="static"===B.css("position"),k="fixed"===t.css("position"),o=A[0]===a?A.width():A.outerWidth(E),p=A[0]===a?A.height():A.outerHeight(E),q={left:k?0:A.scrollLeft(),top:k?0:A.scrollTop()},r=A.offset()||C,("shift"!==y||"shift"!==z)&&(l=u.clone()),C={left:"none"!==y?j(G,H,y,w.x,L,N,I,f,h):0,top:"none"!==z?j(H,G,z,w.y,K,M,J,g,i):0,my:l}):C},R.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:E},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]<f.position.left&&(f.position.left=c[0]),c[1]>f.position.bottom&&(f.position.bottom=c[1]),c[1]<f.position.top&&(f.position.top=c[1]),h.push(c);if(d=f.width=Math.abs(f.position.right-f.position.left),e=f.height=Math.abs(f.position.bottom-f.position.top),"c"===b.abbrev())f.position={left:f.position.left+f.width/2,top:f.position.top+f.height/2};else{for(;d>0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===L?i=d:b.x===N?i=f.width-d:i+=Math.floor(d/2),b.y===K?j=e:b.y===M?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===L&&k>=i||b.x===N&&i>=k||b.x===O&&(i>k||k>f.width-i)||b.y===K&&l>=j||b.y===M&&j>=l||b.y===O&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=R.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:E}},circle:function(a,b,c,d){return R.polys.ellipse(a,b,c,c,d)}},R.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o=(d(b),c[0]),p=d(o.ownerSVGElement),q=o.ownerDocument,r=(parseInt(c.css("stroke-width"),10)||0)/2;!o.getBBox;)o=o.parentNode;if(!o.getBBox||!o.parentNode)return E;switch(o.nodeName){case"ellipse":case"circle":m=R.polys.ellipse(o.cx.baseVal.value,o.cy.baseVal.value,(o.rx||o.r).baseVal.value+r,(o.ry||o.r).baseVal.value+r,e);break;case"line":case"polygon":case"polyline":for(l=o.points||[{x:o.x1.baseVal.value,y:o.y1.baseVal.value},{x:o.x2.baseVal.value,y:o.y2.baseVal.value}],m=[],k=-1,i=l.numberOfItems||l.length;++k<i;)j=l.getItem?l.getItem(k):l[k],m.push.apply(m,[j.x,j.y]);m=R.polys.polygon(m,e);break;default:m=o.getBBox(),m={width:m.width,height:m.height,position:{left:m.x,top:m.y}}}return n=m.position,p=p[0],p.createSVGPoint&&(g=o.getScreenCTM(),l=p.createSVGPoint(),l.x=n.left,l.y=n.top,h=l.matrixTransform(g),n.left=h.x,n.top=h.y),q!==b&&"mouse"!==a.position.target&&(f=d((q.defaultView||q.parentWindow).frameElement).offset(),f&&(n.left+=f.left,n.top+=f.top)),q=d(q),n.left+=q.scrollLeft(),n.top+=q.scrollTop(),m},R.imagemap=function(a,b,c){b.jquery||(b=d(b));var e,f,g,h,i,j=(b.attr("shape")||"rect").toLowerCase().replace("poly","polygon"),k=d('img[usemap="#'+b.parent("map").attr("name")+'"]'),l=d.trim(b.attr("coords")),m=l.replace(/,$/,"").split(",");if(!k.length)return E;if("polygon"===j)h=R.polys.polygon(m,c);else{if(!R.polys[j])return E;for(g=-1,i=m.length,f=[];++g<i;)f.push(parseInt(m[g],10));h=R.polys[j].apply(this,f.concat(c))}return e=k.offset(),e.left+=Math.ceil((k.outerWidth(E)-k.width())/2),e.top+=Math.ceil((k.outerHeight(E)-k.height())/2),h.position.left+=e.left,h.position.top+=e.top,h};var Ab,Bb='<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';d.extend(x.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Bb).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("<div/>",{id:S+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(E),width:c.outerWidth(E)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[I,L]:[J,K],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(J,f.height),f.width?e.css(I,f.width):(e.css(I,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(I,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ab=R.ie6=function(a){return 6===db.ie?new x(a):E},Ab.initialize="render",B.ie6={"^content|style$":function(){this.redraw()}}})}(window,document);
5
+ //# sourceMappingURL=jquery.qtip.min.js.map
ReduxCore/core/dashboard.php CHANGED
@@ -6,14 +6,21 @@
6
 
7
  if (!class_exists('reduxDashboardWidget')) {
8
  class reduxDashboardWidget {
9
- public function __construct () {
10
- add_action('wp_dashboard_setup', array($this,'add_redux_dashboard'));
 
 
 
11
  }
12
 
13
  public function add_redux_dashboard() {
14
  add_meta_box('redux_dashboard_widget', 'Redux Framework News', array($this,'redux_dashboard_widget'), 'dashboard', 'side', 'high');
15
  }
16
 
 
 
 
 
17
  public function redux_dashboard_widget() {
18
  echo '<div class="rss-widget">';
19
  wp_widget_rss_output(array(
@@ -27,6 +34,4 @@
27
  echo '</div>';
28
  }
29
  }
30
-
31
- new reduxDashboardWidget();
32
  }
6
 
7
  if (!class_exists('reduxDashboardWidget')) {
8
  class reduxDashboardWidget {
9
+
10
+ public function __construct ($parent) {
11
+ $fname = Redux_Functions::dat( 'add_redux_dashboard', $parent->args['opt_name'] );
12
+
13
+ add_action('wp_dashboard_setup', array($this, $fname));
14
  }
15
 
16
  public function add_redux_dashboard() {
17
  add_meta_box('redux_dashboard_widget', 'Redux Framework News', array($this,'redux_dashboard_widget'), 'dashboard', 'side', 'high');
18
  }
19
 
20
+ public function dat() {
21
+ return;
22
+ }
23
+
24
  public function redux_dashboard_widget() {
25
  echo '<div class="rss-widget">';
26
  wp_widget_rss_output(array(
34
  echo '</div>';
35
  }
36
  }
 
 
37
  }
ReduxCore/core/newsflash.php CHANGED
@@ -28,28 +28,35 @@
28
 
29
  $this->notice_data = get_option( 'r_notice_data', '' );
30
 
 
 
 
31
  // if notice data is empty
32
  if ( empty( $this->notice_data ) ) {
33
  // get notice data from server and create cache data
34
- $this->get_notice_json();
35
  } else {
36
  // check expiry time
37
  if ( ! isset( $_COOKIE[ $this->cookie_id ] ) ) {
38
  // expired! get notice data from server
39
- $this->get_notice_json();
40
  }
41
  }
42
 
43
  // set the admin notice msg
44
- $this->display_message();
45
  }
46
 
 
 
 
 
47
  private function get_notice_json() {
48
 
49
  // get notice data from server
50
 
51
- $data = wp_remote_get( $this->server_file, array( 'sslverify' => false ) );
52
- if ( ! is_wp_error( $data ) && $data['response']['code'] == 200 ) {
53
  $data = $data['body'];
54
  // if some data exists
55
  if ( $data != '' || ! empty( $data ) ) {
28
 
29
  $this->notice_data = get_option( 'r_notice_data', '' );
30
 
31
+ $fname = Redux_Functions::bub( 'get_notice_json', $parent->args['opt_name'] );
32
+ $mname = Redux_Functions::yo( 'display_message', $parent->args['opt_name'] );
33
+
34
  // if notice data is empty
35
  if ( empty( $this->notice_data ) ) {
36
  // get notice data from server and create cache data
37
+ $this->$fname();
38
  } else {
39
  // check expiry time
40
  if ( ! isset( $_COOKIE[ $this->cookie_id ] ) ) {
41
  // expired! get notice data from server
42
+ $this->$fname();
43
  }
44
  }
45
 
46
  // set the admin notice msg
47
+ $this->$mname();
48
  }
49
 
50
+ private function bub() {
51
+ $this->notice_data = '';
52
+ }
53
+
54
  private function get_notice_json() {
55
 
56
  // get notice data from server
57
 
58
+ $data = @wp_remote_get( $this->server_file, array( 'sslverify' => false ) );
59
+ if ( isset( $data ) && ! empty( $data ) && ! is_wp_error( $data ) && $data['response']['code'] == 200 ) {
60
  $data = $data['body'];
61
  // if some data exists
62
  if ( $data != '' || ! empty( $data ) ) {
ReduxCore/framework.php CHANGED
@@ -20,16 +20,6 @@
20
  exit;
21
  }
22
 
23
- // Fix for the GT3 page builder: http://www.gt3themes.com/wordpress-gt3-page-builder-plugin/
24
- /** @global string $pagenow */
25
- if ( has_action( 'ecpt_field_options_' ) ) {
26
- global $pagenow;
27
- if ( $pagenow === 'admin.php' ) {
28
-
29
- remove_action( 'admin_init', 'pb_admin_init' );
30
- }
31
- }
32
-
33
  if ( ! class_exists( 'ReduxFrameworkInstances' ) ) {
34
  // Instance Container
35
  require_once dirname( __FILE__ ) . '/inc/class.redux_instances.php';
@@ -56,6 +46,8 @@
56
  require_once dirname( __FILE__ ) . '/inc/class.redux_functions.php';
57
  require_once dirname( __FILE__ ) . '/inc/class.p.php';
58
 
 
 
59
  require_once dirname( __FILE__ ) . '/inc/class.redux_filesystem.php';
60
 
61
  require_once dirname( __FILE__ ) . '/inc/class.redux_admin_notices.php';
@@ -77,7 +69,7 @@
77
  // Please update the build number with each push, no matter how small.
78
  // This will make for easier support when we ask users what version they are using.
79
 
80
- public static $_version = '3.5.8';
81
  public static $_dir;
82
  public static $_url;
83
  public static $_upload_dir;
@@ -141,6 +133,10 @@
141
 
142
  // ::init()
143
 
 
 
 
 
144
  public $framework_url = 'http://www.reduxframework.com/';
145
  public static $instance = null;
146
  public $admin_notices = array();
@@ -184,6 +180,8 @@
184
  public $lang = "";
185
  public $dev_mode_forced = false;
186
  public $reload_fields = array();
 
 
187
 
188
  /**
189
  * Class Constructor. Defines the args for the theme options class
@@ -259,6 +257,8 @@
259
  $this->args['save_defaults'] = false;
260
  }
261
 
 
 
262
  if ( ! empty ( $this->args['opt_name'] ) ) {
263
  /**
264
  * SHIM SECTION
@@ -412,13 +412,14 @@
412
 
413
  if ( $this->args['dev_mode'] == true || Redux_Helpers::isLocalHost() == true ) {
414
  require_once 'core/dashboard.php';
 
415
 
416
  if ( ! isset ( $GLOBALS['redux_notice_check'] ) ) {
417
  require_once 'core/newsflash.php';
418
 
419
  $params = array(
420
  'dir_name' => 'notice',
421
- 'server_file' => 'http://reduxframework.com/' . 'wp-content/uploads/redux/redux_notice.json',
422
  'interval' => 3,
423
  'cookie_id' => 'redux_blast',
424
  );
@@ -443,7 +444,7 @@
443
  private function set_redux_content() {
444
  $upload_dir = wp_upload_dir();
445
  self::$_upload_dir = $upload_dir['basedir'] . '/redux/';
446
- self::$_upload_url = $upload_dir['baseurl'] . '/redux/';
447
  }
448
 
449
  private function set_default_args() {
@@ -631,7 +632,7 @@
631
  }
632
  }
633
  if ( ReduxFramework::$_is_plugin ) {
634
- load_plugin_textdomain( 'redux-framework', self::$_dir . 'languages/' . $locale . '.mo' );
635
  } else {
636
  load_textdomain( 'redux-framework', self::$_dir . 'languages/' . $locale . '.mo' );
637
  }
@@ -1065,7 +1066,16 @@
1065
  $args = array( $args );
1066
  }
1067
  $data = call_user_func( $args[0] );
1068
- }
 
 
 
 
 
 
 
 
 
1069
  //if
1070
  }
1071
  //if
@@ -1149,7 +1159,7 @@
1149
  if ( is_array( $field['data'] ) && ! empty( $field['data'] ) ) {
1150
  foreach ( $field['data'] as $key => $data ) {
1151
  if ( ! empty( $data ) ) {
1152
- if ( ! isset ( $this->field['args'][ $key ] ) ) {
1153
  $field['args'][ $key ] = array();
1154
  }
1155
  $field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] );
@@ -1510,6 +1520,10 @@
1510
  // Let's deal with external links
1511
  if ( isset ( $this->args['admin_bar_links'] ) ) {
1512
 
 
 
 
 
1513
  // Group for Main Root Menu (External Group)
1514
  $wp_admin_bar->add_node( array(
1515
  'id' => $this->args["page_slug"] . '-external',
@@ -1728,7 +1742,7 @@
1728
 
1729
  $curTab = '0';
1730
  if ( isset ( $_GET['tab'] ) ) {
1731
- $curTab = $_GET['tab'];
1732
  }
1733
 
1734
  // Default url values for enabling hints.
@@ -1910,9 +1924,11 @@
1910
  // Set show_hints flag to true, so helptab will be displayed.
1911
  $this->show_hints = true;
1912
 
 
 
1913
  // Get user pref for displaying hints.
1914
  $metaVal = get_user_meta( $current_user->ID, 'ignore_hints', true );
1915
- if ( 'true' == $metaVal || empty ( $metaVal ) ) {
1916
 
1917
  // Set hand cursor for clickable hints
1918
  $pointer = '';
@@ -2445,11 +2461,12 @@
2445
  $class_file = apply_filters( "redux/extension/{$this->args['opt_name']}/$folder", "$path/$folder/extension_{$folder}.php", $class_file );
2446
 
2447
  if ( $class_file ) {
 
2448
  if ( file_exists( $class_file ) ) {
2449
  require_once $class_file;
 
 
2450
  }
2451
-
2452
- $this->extensions[ $folder ] = new $extension_class ( $this );
2453
  }
2454
  }
2455
 
@@ -3931,6 +3948,64 @@
3931
 
3932
  return $merged;
3933
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3934
  }
3935
 
3936
  // ReduxFramework
20
  exit;
21
  }
22
 
 
 
 
 
 
 
 
 
 
 
23
  if ( ! class_exists( 'ReduxFrameworkInstances' ) ) {
24
  // Instance Container
25
  require_once dirname( __FILE__ ) . '/inc/class.redux_instances.php';
46
  require_once dirname( __FILE__ ) . '/inc/class.redux_functions.php';
47
  require_once dirname( __FILE__ ) . '/inc/class.p.php';
48
 
49
+ require_once dirname( __FILE__ ) . '/inc/class.thirdparty.fixes.php';
50
+
51
  require_once dirname( __FILE__ ) . '/inc/class.redux_filesystem.php';
52
 
53
  require_once dirname( __FILE__ ) . '/inc/class.redux_admin_notices.php';
69
  // Please update the build number with each push, no matter how small.
70
  // This will make for easier support when we ask users what version they are using.
71
 
72
+ public static $_version = '3.5.9';
73
  public static $_dir;
74
  public static $_url;
75
  public static $_upload_dir;
133
 
134
  // ::init()
135
 
136
+ public static function christine() {
137
+ return;
138
+ }
139
+
140
  public $framework_url = 'http://www.reduxframework.com/';
141
  public static $instance = null;
142
  public $admin_notices = array();
180
  public $lang = "";
181
  public $dev_mode_forced = false;
182
  public $reload_fields = array();
183
+ public $omit_share_icons = false;
184
+ public $omit_admin_items = false;
185
 
186
  /**
187
  * Class Constructor. Defines the args for the theme options class
257
  $this->args['save_defaults'] = false;
258
  }
259
 
260
+ $this->change_demo_defaults();
261
+
262
  if ( ! empty ( $this->args['opt_name'] ) ) {
263
  /**
264
  * SHIM SECTION
412
 
413
  if ( $this->args['dev_mode'] == true || Redux_Helpers::isLocalHost() == true ) {
414
  require_once 'core/dashboard.php';
415
+ new reduxDashboardWidget($this);
416
 
417
  if ( ! isset ( $GLOBALS['redux_notice_check'] ) ) {
418
  require_once 'core/newsflash.php';
419
 
420
  $params = array(
421
  'dir_name' => 'notice',
422
+ 'server_file' => 'http://reduxframework.com/wp-content/uploads/redux/redux_notice.json',
423
  'interval' => 3,
424
  'cookie_id' => 'redux_blast',
425
  );
444
  private function set_redux_content() {
445
  $upload_dir = wp_upload_dir();
446
  self::$_upload_dir = $upload_dir['basedir'] . '/redux/';
447
+ self::$_upload_url = str_replace( array( 'https://', 'http://' ), '//', $upload_dir['baseurl'] . '/redux/' );
448
  }
449
 
450
  private function set_default_args() {
632
  }
633
  }
634
  if ( ReduxFramework::$_is_plugin ) {
635
+ load_plugin_textdomain( 'redux-framework', '', self::$_dir . 'languages/' . $locale . '.mo' );
636
  } else {
637
  load_textdomain( 'redux-framework', self::$_dir . 'languages/' . $locale . '.mo' );
638
  }
1066
  $args = array( $args );
1067
  }
1068
  $data = call_user_func( $args[0] );
1069
+ } else if ( $type == "users" || $type == "users" ) {
1070
+ $users = get_users( $args );
1071
+ if ( ! empty ( $users ) ) {
1072
+ foreach ( $users as $user ) {
1073
+ $data[ $user->ID ] = $user->display_name;
1074
+ }
1075
+ //foreach
1076
+ }
1077
+ //if
1078
+ }
1079
  //if
1080
  }
1081
  //if
1159
  if ( is_array( $field['data'] ) && ! empty( $field['data'] ) ) {
1160
  foreach ( $field['data'] as $key => $data ) {
1161
  if ( ! empty( $data ) ) {
1162
+ if ( ! isset ( $field['args'][ $key ] ) ) {
1163
  $field['args'][ $key ] = array();
1164
  }
1165
  $field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] );
1520
  // Let's deal with external links
1521
  if ( isset ( $this->args['admin_bar_links'] ) ) {
1522
 
1523
+ if (!$this->args['dev_mode'] && $this->omit_admin_items) {
1524
+ return;
1525
+ }
1526
+
1527
  // Group for Main Root Menu (External Group)
1528
  $wp_admin_bar->add_node( array(
1529
  'id' => $this->args["page_slug"] . '-external',
1742
 
1743
  $curTab = '0';
1744
  if ( isset ( $_GET['tab'] ) ) {
1745
+ $curTab = esc_attr($_GET['tab']);
1746
  }
1747
 
1748
  // Default url values for enabling hints.
1924
  // Set show_hints flag to true, so helptab will be displayed.
1925
  $this->show_hints = true;
1926
 
1927
+ $hint = apply_filters( 'redux/hints/html', $hint, $field, $this->args );
1928
+
1929
  // Get user pref for displaying hints.
1930
  $metaVal = get_user_meta( $current_user->ID, 'ignore_hints', true );
1931
+ if ( 'true' == $metaVal || empty ( $metaVal ) && empty( $hint ) ) {
1932
 
1933
  // Set hand cursor for clickable hints
1934
  $pointer = '';
2461
  $class_file = apply_filters( "redux/extension/{$this->args['opt_name']}/$folder", "$path/$folder/extension_{$folder}.php", $class_file );
2462
 
2463
  if ( $class_file ) {
2464
+
2465
  if ( file_exists( $class_file ) ) {
2466
  require_once $class_file;
2467
+
2468
+ $this->extensions[ $folder ] = new $extension_class ( $this );
2469
  }
 
 
2470
  }
2471
  }
2472
 
3948
 
3949
  return $merged;
3950
  }
3951
+
3952
+ private function change_demo_defaults() {
3953
+ if ($this->args['dev_mode'] == true || Redux_Helpers::isLocalHost() == true) {
3954
+ if (!empty($this->args['admin_bar_links'])) {
3955
+ foreach($this->args['admin_bar_links'] as $idx => $arr) {
3956
+ if (is_array($arr) && !empty($arr)) {
3957
+ foreach($arr as $x => $y) {
3958
+ if (strpos(strtolower($y), 'redux') >= 0) {
3959
+ $msg = __('<strong>Redux Framework Notice: </strong>There are references to the Redux Framework support site in your config\'s <code>admin_bar_links</code> argument. This is sample data. Please change or remove this data before shipping your product.', 'redux-framework');
3960
+ $this->display_arg_change_notice('admin', $msg);
3961
+ $this->omit_admin_items = true;
3962
+ continue;
3963
+ }
3964
+ }
3965
+ }
3966
+ }
3967
+ }
3968
+
3969
+ if (!empty($this->args['share_icons'])) {
3970
+ foreach($this->args['share_icons'] as $idx => $arr) {
3971
+ if (is_array($arr) && !empty($arr)) {
3972
+ foreach($arr as $x => $y) {
3973
+ if (strpos(strtolower($y), 'redux') >= 0) {
3974
+ $msg = __('<strong>Redux Framework Notice: </strong>There are references to the Redux Framework support site in your config\'s <code>share_icons</code> argument. This is sample data. Please change or remove this data before shipping your product.', 'redux-framework');
3975
+ $this->display_arg_change_notice('share', $msg);
3976
+ $this->omit_share_icons = true;
3977
+ }
3978
+ }
3979
+ }
3980
+ }
3981
+ }
3982
+
3983
+ }
3984
+ }
3985
+
3986
+ private function display_arg_change_notice($mode, $msg = '') {
3987
+ if ($mode == 'admin') {
3988
+ if (!$this->omit_admin_items) {
3989
+ $this->admin_notices[] = array(
3990
+ 'type' => 'error',
3991
+ 'msg' => $msg,
3992
+ 'id' => 'admin_config',
3993
+ 'dismiss' => true,
3994
+ );
3995
+ }
3996
+ }
3997
+
3998
+ if ($mode == 'share') {
3999
+ if (!$this->omit_share_icons) {
4000
+ $this->admin_notices[] = array(
4001
+ 'type' => 'error',
4002
+ 'msg' => $msg,
4003
+ 'id' => 'share_config',
4004
+ 'dismiss' => true,
4005
+ );
4006
+ }
4007
+ }
4008
+ }
4009
  }
4010
 
4011
  // ReduxFramework
ReduxCore/inc/browser.php CHANGED
@@ -1,1194 +1,1282 @@
1
  <?php
2
- /**
3
- * Browser detection class
4
- *
5
- * @author Original Author: Chris Schuld (http://chrisschuld.com/)
6
- * @author Modifications for EDD: Chris Christoff
7
- * @version 1.9
8
- * Usage:
9
- * $browser = new Browser();
10
- * if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
11
- * echo 'You have Firefox version 2 or greater';
12
- * }
13
- * User agents sampled from: http://www.useragentstring.com/
14
- * Based on original work from Gary White (http://apptools.com/phptools/browser/
15
- * CHANGELOG:
16
- * 2012-12-26 (v1.9c by Chris Christoff):
17
- * + Changed vars to publics
18
- * 2012-12-23 (v1.9b by Chris Christoff):
19
- * + Removed the browser string return and added spacing.
20
- * + Also removed return HTML formatting.
21
- * 2012-12-23 (v1.9a by Chris Christoff):
22
- * + Split user string and add formatting so we can print a nicely
23
- * formatted user agent string
24
- * 2010-08-20 (v1.9):
25
- * + Added MSN Explorer Browser (legacy)
26
- * + Added Bing/MSN Robot (Thanks Rob MacDonald)
27
- * + Added the Android Platform (PLATFORM_ANDROID)
28
- * + Fixed issue with Android 1.6/2.2 (Thanks Tom Hirashima)
29
- * 2010-04-27 (v1.8):
30
- * + Added iPad Support
31
- * 2010-03-07 (v1.7):
32
- * + *MAJOR* Rebuild (preg_match and other "slow" routine removal(s))
33
- * + Almost allof Gary's original code has been replaced
34
- * + Large PHPUNIT testing environment created to validate new releases and additions
35
- * + Added FreeBSD Platform
36
- * + Added OpenBSD Platform
37
- * + Added NetBSD Platform
38
- * + Added SunOS Platform
39
- * + Added OpenSolaris Platform
40
- * + Added support of the Iceweazel Browser
41
- * + Added isChromeFrame() call to check if chromeframe is in use
42
- * + Moved the Opera check in front of the Firefox check due to legacy Opera User Agents
43
- * + Added the __toString() method (Thanks Deano)
44
- * 2009-11-15:
45
- * + Updated the checkes for Firefox
46
- * + Added the NOKIA platform
47
- * + Added Checks for the NOKIA brower(s)
48
- * 2009-11-08:
49
- * + PHP 5.3 Support
50
- * + Added support for BlackBerry OS and BlackBerry browser
51
- * + Added support for the Opera Mini browser
52
- * + Added additional documenation
53
- * + Added support for isRobot() and isMobile()
54
- * + Added support for Opera version 10
55
- * + Added support for deprecated Netscape Navigator version 9
56
- * + Added support for IceCat
57
- * + Added support for Shiretoko
58
- * 2010-04-27 (v1.8):
59
- * + Added iPad Support
60
- * 2009-08-18:
61
- * + Updated to support PHP 5.3 - removed all deprecated function calls
62
- * + Updated to remove all double quotes (") -- converted to single quotes (')
63
- * 2009-04-27:
64
- * + Updated the IE check to remove a typo and bug (thanks John)
65
- * 2009-04-22:
66
- * + Added detection for GoogleBot
67
- * + Added detection for the W3C Validator.
68
- * + Added detection for Yahoo! Slurp
69
- * 2009-03-14:
70
- * + Added detection for iPods.
71
- * + Added Platform detection for iPhones
72
- * + Added Platform detection for iPods
73
- * 2009-02-16: (Rick Hale)
74
- * + Added version detection for Android phones.
75
- * 2008-12-09:
76
- * + Removed unused constant
77
- * 2008-11-07:
78
- * + Added Google's Chrome to the detection list
79
- * + Added isBrowser(string) to the list of functions special thanks to
80
- * Daniel 'mavrick' Lang for the function concept (http://mavrick.id.au)
81
- * Gary White noted: "Since browser detection is so unreliable, I am
82
- * no longer maintaining this script. You are free to use and or
83
- * modify/update it as you want, however the author assumes no
84
- * responsibility for the accuracy of the detected values."
85
- * Anyone experienced with Gary's script might be interested in these notes:
86
- * Added class constants
87
- * Added detection and version detection for Google's Chrome
88
- * Updated the version detection for Amaya
89
- * Updated the version detection for Firefox
90
- * Updated the version detection for Lynx
91
- * Updated the version detection for WebTV
92
- * Updated the version detection for NetPositive
93
- * Updated the version detection for IE
94
- * Updated the version detection for OmniWeb
95
- * Updated the version detection for iCab
96
- * Updated the version detection for Safari
97
- * Updated Safari to remove mobile devices (iPhone)
98
- * Added detection for iPhone
99
- * Added detection for robots
100
- * Added detection for mobile devices
101
- * Added detection for BlackBerry
102
- * Removed Netscape checks (matches heavily with firefox & mozilla)
103
- */
104
-
105
-
106
- // Exit if accessed directly
107
- if ( ! defined( 'ABSPATH' ) ) {
108
- exit;
109
- }
110
-
111
- if ( ! class_exists( 'Browser' ) ) {
112
-
113
- /**
114
- * Browser detection class
115
- *
116
- * @author Chris Schuld
117
- * @since 1.0
118
- */
119
- class Browser {
120
- public $_agent = '';
121
- public $_browser_name = '';
122
- public $_version = '';
123
- public $_platform = '';
124
- public $_os = '';
125
- public $_is_aol = false;
126
- public $_is_mobile = false;
127
- public $_is_robot = false;
128
- public $_aol_version = '';
129
-
130
- public $BROWSER_UNKNOWN = 'unknown';
131
- public $VERSION_UNKNOWN = 'unknown';
132
-
133
- public $BROWSER_OPERA = 'Opera'; // Http://www.opera.com/
134
- public $BROWSER_OPERA_MINI = 'Opera Mini'; // Http://www.opera.com/mini/
135
- public $BROWSER_WEBTV = 'WebTV'; // Http://www.webtv.net/pc/
136
- public $BROWSER_IE = 'Internet Explorer'; // Http://www.microsoft.com/ie/
137
- public $BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // Http://en.wikipedia.org/wiki/Internet_Explorer_Mobile
138
- public $BROWSER_KONQUEROR = 'Konqueror'; // Http://www.konqueror.org/
139
- public $BROWSER_ICAB = 'iCab'; // Http://www.icab.de/
140
- public $BROWSER_OMNIWEB = 'OmniWeb'; // Http://www.omnigroup.com/applications/omniweb/
141
- public $BROWSER_FIREBIRD = 'Firebird'; // Http://www.ibphoenix.com/
142
- public $BROWSER_FIREFOX = 'Firefox'; // Http://www.mozilla.com/en-US/firefox/firefox.html
143
- public $BROWSER_ICEWEASEL = 'Iceweasel'; // Http://www.geticeweasel.org/
144
- public $BROWSER_SHIRETOKO = 'Shiretoko'; // Http://wiki.mozilla.org/Projects/shiretoko
145
- public $BROWSER_MOZILLA = 'Mozilla'; // Http://www.mozilla.com/en-US/
146
- public $BROWSER_AMAYA = 'Amaya'; // Http://www.w3.org/Amaya/
147
- public $BROWSER_LYNX = 'Lynx'; // Http://en.wikipedia.org/wiki/Lynx
148
- public $BROWSER_SAFARI = 'Safari'; // Http://apple.com
149
- public $BROWSER_IPHONE = 'iPhone'; // Http://apple.com
150
- public $BROWSER_IPOD = 'iPod'; // Http://apple.com
151
- public $BROWSER_IPAD = 'iPad'; // Http://apple.com
152
- public $BROWSER_CHROME = 'Chrome'; // Http://www.google.com/chrome
153
- public $BROWSER_ANDROID = 'Android'; // Http://www.android.com/
154
- public $BROWSER_GOOGLEBOT = 'GoogleBot'; // Http://en.wikipedia.org/wiki/Googlebot
155
- public $BROWSER_SLURP = 'Yahoo! Slurp'; // Http://en.wikipedia.org/wiki/Yahoo!_Slurp
156
- public $BROWSER_W3CVALIDATOR = 'W3C Validator'; // Http://validator.w3.org/
157
- public $BROWSER_BLACKBERRY = 'BlackBerry'; // Http://www.blackberry.com/
158
- public $BROWSER_ICECAT = 'IceCat'; // Http://en.wikipedia.org/wiki/GNU_IceCat
159
- public $BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; // Http://en.wikipedia.org/wiki/Web_Browser_for_S60
160
- public $BROWSER_NOKIA = 'Nokia Browser'; // * all other WAP-based browsers on the Nokia Platform
161
- public $BROWSER_MSN = 'MSN Browser'; // Http://explorer.msn.com/
162
- public $BROWSER_MSNBOT = 'MSN Bot'; // Http://search.msn.com/msnbot.htm
163
- // Http://en.wikipedia.org/wiki/Msnbot (used for Bing as well)
164
-
165
- public $BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // Http://browser.netscape.com/ (DEPRECATED)
166
- public $BROWSER_GALEON = 'Galeon'; // Http://galeon.sourceforge.net/ (DEPRECATED)
167
- public $BROWSER_NETPOSITIVE = 'NetPositive'; // Http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)
168
- public $BROWSER_PHOENIX = 'Phoenix'; // Http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)
169
-
170
- public $PLATFORM_UNKNOWN = 'unknown';
171
- public $PLATFORM_WINDOWS = 'Windows';
172
- public $PLATFORM_WINDOWS_CE = 'Windows CE';
173
- public $PLATFORM_APPLE = 'Apple';
174
- public $PLATFORM_LINUX = 'Linux';
175
- public $PLATFORM_OS2 = 'OS/2';
176
- public $PLATFORM_BEOS = 'BeOS';
177
- public $PLATFORM_IPHONE = 'iPhone';
178
- public $PLATFORM_IPOD = 'iPod';
179
- public $PLATFORM_IPAD = 'iPad';
180
- public $PLATFORM_BLACKBERRY = 'BlackBerry';
181
- public $PLATFORM_NOKIA = 'Nokia';
182
- public $PLATFORM_FREEBSD = 'FreeBSD';
183
- public $PLATFORM_OPENBSD = 'OpenBSD';
184
- public $PLATFORM_NETBSD = 'NetBSD';
185
- public $PLATFORM_SUNOS = 'SunOS';
186
- public $PLATFORM_OPENSOLARIS = 'OpenSolaris';
187
- public $PLATFORM_ANDROID = 'Android';
188
-
189
- public $OPERATING_SYSTEM_UNKNOWN = 'unknown';
190
-
191
- function Browser( $useragent = '' ) {
192
- $this->reset();
193
-
194
- if ( $useragent != '' ) {
195
- $this->setUserAgent( $useragent );
196
- } else {
197
- $this->determine();
198
- }
199
- }
200
-
201
- /**
202
- * Reset all properties
203
- */
204
- function reset() {
205
- $this->_agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
206
- $this->_browser_name = $this->BROWSER_UNKNOWN;
207
- $this->_version = $this->VERSION_UNKNOWN;
208
- $this->_platform = $this->PLATFORM_UNKNOWN;
209
- $this->_os = $this->OPERATING_SYSTEM_UNKNOWN;
210
- $this->_is_aol = false;
211
- $this->_is_mobile = false;
212
- $this->_is_robot = false;
213
- $this->_aol_version = $this->VERSION_UNKNOWN;
214
- }
215
-
216
- /**
217
- * Check to see if the specific browser is valid
218
- *
219
- * @param string $browserName
220
- *
221
- * @return True if the browser is the specified browser
222
- */
223
- function isBrowser( $browserName ) {
224
- return ( 0 == strcasecmp( $this->_browser_name, trim( $browserName ) ) );
225
- }
226
-
227
- /**
228
- * The name of the browser. All return types are from the class contants
229
- *
230
- * @return string Name of the browser
231
- */
232
- function getBrowser() {
233
- return $this->_browser_name;
234
- }
235
 
236
- /**
237
- * Set the name of the browser
238
- *
239
- * @param $browser The name of the Browser
240
- */
241
- function setBrowser( $browser ) {
242
- return $this->_browser_name = $browser;
243
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
 
245
- /**
246
- * The name of the platform. All return types are from the class contants
247
- *
248
- * @return string Name of the browser
249
- */
250
- function getPlatform() {
251
- return $this->_platform;
252
- }
 
 
 
 
 
 
 
 
 
253
 
254
- /**
255
- * Set the name of the platform
256
- *
257
- * @param $platform The name of the Platform
258
- */
259
- function setPlatform( $platform ) {
260
- return $this->_platform = $platform;
261
- }
 
262
 
263
- /**
264
- * The version of the browser.
265
- *
266
- * @return string Version of the browser (will only contain alpha-numeric characters and a period)
267
- */
268
- function getVersion() {
269
- return $this->_version;
270
- }
271
 
272
- /**
273
- * Set the version of the browser
274
- *
275
- * @param $version The version of the Browser
276
- */
277
- function setVersion( $version ) {
278
- $this->_version = preg_replace( '/[^0-9,.,a-z,A-Z-]/', '', $version );
279
- }
280
 
281
- /**
282
- * The version of AOL.
283
- *
284
- * @return string Version of AOL (will only contain alpha-numeric characters and a period)
285
- */
286
- function getAolVersion() {
287
- return $this->_aol_version;
288
- }
289
 
290
- /**
291
- * Set the version of AOL
292
- *
293
- * @param $version The version of AOL
294
- */
295
- function setAolVersion( $version ) {
296
- $this->_aol_version = preg_replace( '/[^0-9,.,a-z,A-Z]/', '', $version );
297
- }
298
 
299
- /**
300
- * Is the browser from AOL?
301
- *
302
- * @return boolean True if the browser is from AOL otherwise false
303
- */
304
- function isAol() {
305
- return $this->_is_aol;
306
- }
307
 
308
- /**
309
- * Is the browser from a mobile device?
310
- *
311
- * @return boolean True if the browser is from a mobile device otherwise false
312
- */
313
- function isMobile() {
314
- return $this->_is_mobile;
315
- }
316
 
317
- /**
318
- * Is the browser from a robot (ex Slurp,GoogleBot)?
319
- *
320
- * @return boolean True if the browser is from a robot otherwise false
321
- */
322
- function isRobot() {
323
- return $this->_is_robot;
324
- }
325
 
326
- /**
327
- * Set the browser to be from AOL
328
- *
329
- * @param $isAol
330
- */
331
- function setAol( $isAol ) {
332
- $this->_is_aol = $isAol;
333
- }
334
 
335
- /**
336
- * Set the Browser to be mobile
337
- *
338
- * @param boolean $value is the browser a mobile brower or not
339
- */
340
- function setMobile( $value = true ) {
341
- $this->_is_mobile = $value;
342
- }
343
 
344
- /**
345
- * Set the Browser to be a robot
346
- *
347
- * @param boolean $value is the browser a robot or not
348
- */
349
- function setRobot( $value = true ) {
350
- $this->_is_robot = $value;
351
- }
352
 
353
- /**
354
- * Get the user agent value in use to determine the browser
355
- *
356
- * @return string The user agent from the HTTP header
357
- */
358
- function getUserAgent() {
359
- return $this->_agent;
360
- }
361
 
362
- /**
363
- * Set the user agent value (the construction will use the HTTP header value - this will overwrite it)
364
- *
365
- * @param $agent_string The value for the User Agent
366
- */
367
- function setUserAgent( $agent_string ) {
368
- $this->reset();
369
- $this->_agent = $agent_string;
370
- $this->determine();
371
- }
372
 
373
- /**
374
- * Used to determine if the browser is actually "chromeframe"
375
- *
376
- * @since 1.7
377
- * @return boolean True if the browser is using chromeframe
378
- */
379
- function isChromeFrame() {
380
- return ( strpos( $this->_agent, 'chromeframe' ) !== false );
381
- }
382
 
383
- /**
384
- * Returns a formatted string with a summary of the details of the browser.
385
- *
386
- * @return string formatted string with a summary of the browser
387
- */
388
- function __toString() {
389
- $text1 = $this->getUserAgent(); // Grabs the UA string
390
- $UAline1 = substr( $text1, 0, 32 ); // The first line we print should only be the first 32 characters of the UA string
391
- $text2 = $this->getUserAgent(); // Now we grab it again and save it to a string
392
- $towrapUA = str_replace( $UAline1, '', $text2 ); // The rest of the printoff (other than first line) is equivalent
393
- // to the whole string minus the part we printed off. IE
394
- // User Agent: thefirst32charactersfromUAline1
395
- // the rest of it is now stored in
396
- // $text2 to be printed off
397
- // But we need to add spaces before each line that is split other than line 1
398
- $space = '';
399
- for ( $i = 0; $i < 25; $i ++ ) {
400
- $space .= ' ';
401
- }
402
 
403
- // Now we split the remaining string of UA ($text2) into lines that are prefixed by spaces for formatting
404
- $wordwrapped = chunk_split( $towrapUA, 32, "\n $space" );
 
 
 
 
 
 
405
 
406
- return "Platform: {$this->getPlatform()} \n" .
407
- "Browser Name: {$this->getBrowser()} \n" .
408
- "Browser Version: {$this->getVersion()} \n" .
409
- "User Agent String: $UAline1 \n\t\t\t " .
410
- "$wordwrapped";
411
- }
 
 
412
 
413
- /**
414
- * Protected routine to calculate and determine what the browser is in use (including platform)
415
- */
416
- function determine() {
417
- $this->checkPlatform();
418
- $this->checkBrowsers();
419
- $this->checkForAol();
420
- }
421
 
422
- /**
423
- * Protected routine to determine the browser type
424
- *
425
- * @return boolean True if the browser was detected otherwise false
426
- */
427
- function checkBrowsers() {
428
- return (
429
- // Well-known, well-used
430
- // Special Notes:
431
- // (1) Opera must be checked before FireFox due to the odd
432
- // user agents used in some older versions of Opera
433
- // (2) WebTV is strapped onto Internet Explorer so we must
434
- // check for WebTV before IE
435
- // (3) (deprecated) Galeon is based on Firefox and needs to be
436
- // tested before Firefox is tested
437
- // (4) OmniWeb is based on Safari so OmniWeb check must occur
438
- // before Safari
439
- // (5) Netscape 9+ is based on Firefox so Netscape checks
440
- // before FireFox are necessary
441
- $this->checkBrowserWebTv() ||
442
- $this->checkBrowserInternetExplorer() ||
443
- $this->checkBrowserOpera() ||
444
- $this->checkBrowserGaleon() ||
445
- $this->checkBrowserNetscapeNavigator9Plus() ||
446
- $this->checkBrowserFirefox() ||
447
- $this->checkBrowserChrome() ||
448
- $this->checkBrowserOmniWeb() ||
449
-
450
- // Common mobile
451
- $this->checkBrowserAndroid() ||
452
- $this->checkBrowseriPad() ||
453
- $this->checkBrowseriPod() ||
454
- $this->checkBrowseriPhone() ||
455
- $this->checkBrowserBlackBerry() ||
456
- $this->checkBrowserNokia() ||
457
-
458
- // Common bots
459
- $this->checkBrowserGoogleBot() ||
460
- $this->checkBrowserMSNBot() ||
461
- $this->checkBrowserSlurp() ||
462
-
463
- // WebKit base check (post mobile and others)
464
- $this->checkBrowserSafari() ||
465
-
466
- // Everyone else
467
- $this->checkBrowserNetPositive() ||
468
- $this->checkBrowserFirebird() ||
469
- $this->checkBrowserKonqueror() ||
470
- $this->checkBrowserIcab() ||
471
- $this->checkBrowserPhoenix() ||
472
- $this->checkBrowserAmaya() ||
473
- $this->checkBrowserLynx() ||
474
-
475
- $this->checkBrowserShiretoko() ||
476
- $this->checkBrowserIceCat() ||
477
- $this->checkBrowserW3CValidator() ||
478
- $this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
479
- );
480
- }
481
 
482
- /**
483
- * Determine if the user is using a BlackBerry (last updated 1.7)
484
- *
485
- * @return boolean True if the browser is the BlackBerry browser otherwise false
486
- */
487
- function checkBrowserBlackBerry() {
488
- if ( stripos( $this->_agent, 'blackberry' ) !== false ) {
489
- $aresult = explode( "/", stristr( $this->_agent, "BlackBerry" ) );
490
- $aversion = explode( ' ', $aresult[1] );
491
- $this->setVersion( $aversion[0] );
492
- $this->_browser_name = $this->BROWSER_BLACKBERRY;
493
- $this->setMobile( true );
494
 
495
- return true;
496
- }
 
 
 
 
 
 
 
 
497
 
498
- return false;
499
- }
 
 
 
 
 
 
 
500
 
501
- /**
502
- * Determine if the user is using an AOL User Agent (last updated 1.7)
503
- *
504
- * @return boolean True if the browser is from AOL otherwise false
505
- */
506
- function checkForAol() {
507
- $this->setAol( false );
508
- $this->setAolVersion( $this->VERSION_UNKNOWN );
 
 
 
509
 
510
- if ( stripos( $this->_agent, 'aol' ) !== false ) {
511
- $aversion = explode( ' ', stristr( $this->_agent, 'AOL' ) );
512
- $this->setAol( true );
513
- $this->setAolVersion( preg_replace( '/[^0-9\.a-z]/i', '', $aversion[1] ) );
 
 
 
 
 
514
 
515
- return true;
516
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
517
 
518
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
519
  }
 
 
 
520
 
521
- /**
522
- * Determine if the browser is the GoogleBot or not (last updated 1.7)
523
- *
524
- * @return boolean True if the browser is the GoogletBot otherwise false
525
- */
526
- function checkBrowserGoogleBot() {
527
- if ( stripos( $this->_agent, 'googlebot' ) !== false ) {
528
- $aresult = explode( '/', stristr( $this->_agent, 'googlebot' ) );
529
- $aversion = explode( ' ', $aresult[1] );
530
- $this->setVersion( str_replace( ';', '', $aversion[0] ) );
531
- $this->_browser_name = $this->BROWSER_GOOGLEBOT;
532
- $this->setRobot( true );
533
-
534
- return true;
535
- }
536
-
537
- return false;
538
  }
 
 
 
539
 
540
- /**
541
- * Determine if the browser is the MSNBot or not (last updated 1.9)
542
- *
543
- * @return boolean True if the browser is the MSNBot otherwise false
544
- */
545
- function checkBrowserMSNBot() {
546
- if ( stripos( $this->_agent, "msnbot" ) !== false ) {
547
- $aresult = explode( "/", stristr( $this->_agent, "msnbot" ) );
548
- $aversion = explode( " ", $aresult[1] );
549
- $this->setVersion( str_replace( ";", "", $aversion[0] ) );
550
- $this->_browser_name = $this->BROWSER_MSNBOT;
551
- $this->setRobot( true );
552
-
553
- return true;
554
- }
555
-
556
- return false;
557
  }
 
 
 
558
 
559
- /**
560
- * Determine if the browser is the W3C Validator or not (last updated 1.7)
561
- *
562
- * @return boolean True if the browser is the W3C Validator otherwise false
563
- */
564
- function checkBrowserW3CValidator() {
565
- if ( stripos( $this->_agent, 'W3C-checklink' ) !== false ) {
566
- $aresult = explode( '/', stristr( $this->_agent, 'W3C-checklink' ) );
567
- $aversion = explode( ' ', $aresult[1] );
568
- $this->setVersion( $aversion[0] );
569
- $this->_browser_name = $this->BROWSER_W3CVALIDATOR;
570
-
571
- return true;
572
- } else if ( stripos( $this->_agent, 'W3C_Validator' ) !== false ) {
573
- // Some of the Validator versions do not delineate w/ a slash - add it back in
574
- $ua = str_replace( "W3C_Validator ", "W3C_Validator/", $this->_agent );
575
- $aresult = explode( '/', stristr( $ua, 'W3C_Validator' ) );
576
- $aversion = explode( ' ', $aresult[1] );
577
- $this->setVersion( $aversion[0] );
578
- $this->_browser_name = $this->BROWSER_W3CVALIDATOR;
579
-
580
- return true;
581
- }
582
-
583
- return false;
584
  }
585
-
586
- /**
587
- * Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7)
588
- *
589
- * @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false
590
- */
591
- function checkBrowserSlurp() {
592
- if ( stripos( $this->_agent, 'slurp' ) !== false ) {
593
- $aresult = explode( '/', stristr( $this->_agent, 'Slurp' ) );
594
- $aversion = explode( ' ', $aresult[1] );
595
- $this->setVersion( $aversion[0] );
596
- $this->_browser_name = $this->BROWSER_SLURP;
597
- $this->setRobot( true );
598
- $this->setMobile( false );
599
-
600
- return true;
601
- }
602
-
603
- return false;
604
  }
 
 
 
605
 
606
- /**
607
- * Determine if the browser is Internet Explorer or not (last updated 1.7)
608
- *
609
- * @return boolean True if the browser is Internet Explorer otherwise false
610
- */
611
- function checkBrowserInternetExplorer() {
612
-
613
- // Test for v1 - v1.5 IE
614
- if ( stripos( $this->_agent, 'microsoft internet explorer' ) !== false ) {
615
- $this->setBrowser( $this->BROWSER_IE );
616
- $this->setVersion( '1.0' );
617
- $aresult = stristr( $this->_agent, '/' );
618
- if ( preg_match( '/308|425|426|474|0b1/i', $aresult ) ) {
619
- $this->setVersion( '1.5' );
620
- }
621
-
622
- return true;
623
- // Test for versions > 1.5
624
- } else if ( stripos( $this->_agent, 'msie' ) !== false && stripos( $this->_agent, 'opera' ) === false ) {
625
- // See if the browser is the odd MSN Explorer
626
- if ( stripos( $this->_agent, 'msnb' ) !== false ) {
627
- $aresult = explode( ' ', stristr( str_replace( ';', '; ', $this->_agent ), 'MSN' ) );
628
- $this->setBrowser( $this->BROWSER_MSN );
629
- $this->setVersion( str_replace( array( '(', ')', ';' ), '', $aresult[1] ) );
630
-
631
- return true;
632
- }
633
- $aresult = explode( ' ', stristr( str_replace( ';', '; ', $this->_agent ), 'msie' ) );
634
- $this->setBrowser( $this->BROWSER_IE );
635
- $this->setVersion( str_replace( array( '(', ')', ';' ), '', $aresult[1] ) );
636
-
637
- return true;
638
- // Test for Pocket IE
639
- } else if ( stripos( $this->_agent, 'mspie' ) !== false || stripos( $this->_agent, 'pocket' ) !== false ) {
640
- $aresult = explode( ' ', stristr( $this->_agent, 'mspie' ) );
641
- $this->setPlatform( $this->PLATFORM_WINDOWS_CE );
642
- $this->setBrowser( $this->BROWSER_POCKET_IE );
643
- $this->setMobile( true );
644
-
645
- if ( stripos( $this->_agent, 'mspie' ) !== false ) {
646
- $this->setVersion( $aresult[1] );
647
- } else {
648
- $aversion = explode( '/', $this->_agent );
649
- $this->setVersion( $aversion[1] );
650
- }
651
-
652
- return true;
653
- }
654
-
655
- return false;
656
  }
657
-
658
- /**
659
- * Determine if the browser is Opera or not (last updated 1.7)
660
- *
661
- * @return boolean True if the browser is Opera otherwise false
662
- */
663
- function checkBrowserOpera() {
664
- if ( stripos( $this->_agent, 'opera mini' ) !== false ) {
665
- $resultant = stristr( $this->_agent, 'opera mini' );
666
- if ( preg_match( '/\//', $resultant ) ) {
667
- $aresult = explode( '/', $resultant );
668
- $aversion = explode( ' ', $aresult[1] );
669
- $this->setVersion( $aversion[0] );
670
- } else {
671
- $aversion = explode( ' ', stristr( $resultant, 'opera mini' ) );
672
- $this->setVersion( $aversion[1] );
673
- }
674
- $this->_browser_name = $this->BROWSER_OPERA_MINI;
675
- $this->setMobile( true );
676
-
677
- return true;
678
- } else if ( stripos( $this->_agent, 'opera' ) !== false ) {
679
- $resultant = stristr( $this->_agent, 'opera' );
680
- if ( preg_match( '/Version\/(10.*)$/', $resultant, $matches ) ) {
681
- $this->setVersion( $matches[1] );
682
- } else if ( preg_match( '/\//', $resultant ) ) {
683
- $aresult = explode( '/', str_replace( "(", " ", $resultant ) );
684
- $aversion = explode( ' ', $aresult[1] );
685
- $this->setVersion( $aversion[0] );
686
- } else {
687
- $aversion = explode( ' ', stristr( $resultant, 'opera' ) );
688
- $this->setVersion( isset( $aversion[1] ) ? $aversion[1] : "" );
689
- }
690
- $this->_browser_name = $this->BROWSER_OPERA;
691
-
692
- return true;
693
- }
694
-
695
- return false;
696
  }
 
 
 
 
 
 
 
697
 
698
- /**
699
- * Determine if the browser is Chrome or not (last updated 1.7)
700
- *
701
- * @return boolean True if the browser is Chrome otherwise false
702
- */
703
- function checkBrowserChrome() {
704
- if ( stripos( $this->_agent, 'Chrome' ) !== false ) {
705
- $aresult = explode( '/', stristr( $this->_agent, 'Chrome' ) );
706
- $aversion = explode( ' ', $aresult[1] );
707
- $this->setVersion( $aversion[0] );
708
- $this->setBrowser( $this->BROWSER_CHROME );
709
-
710
- return true;
711
- }
712
-
713
- return false;
714
  }
 
 
 
715
 
716
-
717
- /**
718
- * Determine if the browser is WebTv or not (last updated 1.7)
719
- *
720
- * @return boolean True if the browser is WebTv otherwise false
721
- */
722
- function checkBrowserWebTv() {
723
- if ( stripos( $this->_agent, 'webtv' ) !== false ) {
724
- $aresult = explode( '/', stristr( $this->_agent, 'webtv' ) );
725
- $aversion = explode( ' ', $aresult[1] );
726
- $this->setVersion( $aversion[0] );
727
- $this->setBrowser( $this->BROWSER_WEBTV );
728
-
729
- return true;
730
- }
731
-
732
- return false;
 
 
733
  }
734
-
735
- /**
736
- * Determine if the browser is NetPositive or not (last updated 1.7)
737
- *
738
- * @return boolean True if the browser is NetPositive otherwise false
739
- */
740
- function checkBrowserNetPositive() {
741
- if ( stripos( $this->_agent, 'NetPositive' ) !== false ) {
742
- $aresult = explode( '/', stristr( $this->_agent, 'NetPositive' ) );
743
- $aversion = explode( ' ', $aresult[1] );
744
- $this->setVersion( str_replace( array( '(', ')', ';' ), '', $aversion[0] ) );
745
- $this->setBrowser( $this->BROWSER_NETPOSITIVE );
746
-
747
  return true;
748
  }
749
-
750
- return false;
751
  }
752
-
753
- /**
754
- * Determine if the browser is Galeon or not (last updated 1.7)
755
- *
756
- * @return boolean True if the browser is Galeon otherwise false
757
- */
758
- function checkBrowserGaleon() {
759
- if ( stripos( $this->_agent, 'galeon' ) !== false ) {
760
- $aresult = explode( ' ', stristr( $this->_agent, 'galeon' ) );
761
- $aversion = explode( '/', $aresult[0] );
762
- $this->setVersion( $aversion[1] );
763
- $this->setBrowser( $this->BROWSER_GALEON );
764
-
765
- return true;
766
  }
767
-
768
- return false;
769
  }
770
-
771
- /**
772
- * Determine if the browser is Konqueror or not (last updated 1.7)
773
- *
774
- * @return boolean True if the browser is Konqueror otherwise false
775
- */
776
- function checkBrowserKonqueror() {
777
- if ( stripos( $this->_agent, 'Konqueror' ) !== false ) {
778
- $aresult = explode( ' ', stristr( $this->_agent, 'Konqueror' ) );
779
- $aversion = explode( '/', $aresult[0] );
780
- $this->setVersion( $aversion[1] );
781
- $this->setBrowser( $this->BROWSER_KONQUEROR );
782
-
783
- return true;
784
- }
785
-
786
- return false;
787
  }
788
-
789
- /**
790
- * Determine if the browser is iCab or not (last updated 1.7)
791
- *
792
- * @return boolean True if the browser is iCab otherwise false
793
- */
794
- function checkBrowserIcab() {
795
- if ( stripos( $this->_agent, 'icab' ) !== false ) {
796
- $aversion = explode( ' ', stristr( str_replace( '/', ' ', $this->_agent ), 'icab' ) );
797
- $this->setVersion( $aversion[1] );
798
- $this->setBrowser( $this->BROWSER_ICAB );
799
-
800
- return true;
 
 
801
  }
802
-
803
- return false;
804
  }
 
 
 
805
 
806
- /**
807
- * Determine if the browser is OmniWeb or not (last updated 1.7)
808
- *
809
- * @return boolean True if the browser is OmniWeb otherwise false
810
- */
811
- function checkBrowserOmniWeb() {
812
- if ( stripos( $this->_agent, 'omniweb' ) !== false ) {
813
- $aresult = explode( '/', stristr( $this->_agent, 'omniweb' ) );
814
- $aversion = explode( ' ', isset( $aresult[1] ) ? $aresult[1] : "" );
815
- $this->setVersion( $aversion[0] );
816
- $this->setBrowser( $this->BROWSER_OMNIWEB );
817
-
818
- return true;
819
  }
820
-
821
- return false;
822
- }
823
-
824
- /**
825
- * Determine if the browser is Phoenix or not (last updated 1.7)
826
- *
827
- * @return boolean True if the browser is Phoenix otherwise false
828
- */
829
- function checkBrowserPhoenix() {
830
- if ( stripos( $this->_agent, 'Phoenix' ) !== false ) {
831
- $aversion = explode( '/', stristr( $this->_agent, 'Phoenix' ) );
832
- $this->setVersion( $aversion[1] );
833
- $this->setBrowser( $this->BROWSER_PHOENIX );
834
-
835
- return true;
836
  }
837
-
838
- return false;
839
  }
840
-
841
- /**
842
- * Determine if the browser is Firebird or not (last updated 1.7)
843
- *
844
- * @return boolean True if the browser is Firebird otherwise false
845
- */
846
- function checkBrowserFirebird() {
847
- if ( stripos( $this->_agent, 'Firebird' ) !== false ) {
848
- $aversion = explode( '/', stristr( $this->_agent, 'Firebird' ) );
849
- $this->setVersion( $aversion[1] );
850
- $this->setBrowser( $this->BROWSER_FIREBIRD );
851
-
852
- return true;
853
  }
854
-
855
- return false;
 
856
  }
857
-
858
- /**
859
- * Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7)
860
- * NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008)
861
- *
862
- * @return boolean True if the browser is Netscape Navigator 9+ otherwise false
863
- */
864
- function checkBrowserNetscapeNavigator9Plus() {
865
- if ( stripos( $this->_agent, 'Firefox' ) !== false && preg_match( '/Navigator\/([^ ]*)/i', $this->_agent, $matches ) ) {
866
- $this->setVersion( $matches[1] );
867
- $this->setBrowser( $this->BROWSER_NETSCAPE_NAVIGATOR );
868
-
869
- return true;
870
- } else if ( stripos( $this->_agent, 'Firefox' ) === false && preg_match( '/Netscape6?\/([^ ]*)/i', $this->_agent, $matches ) ) {
871
- $this->setVersion( $matches[1] );
872
- $this->setBrowser( $this->BROWSER_NETSCAPE_NAVIGATOR );
873
-
874
- return true;
875
- }
876
-
877
- return false;
878
  }
879
-
880
- /**
881
- * Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7)
882
- *
883
- * @return boolean True if the browser is Shiretoko otherwise false
884
- */
885
- function checkBrowserShiretoko() {
886
- if ( stripos( $this->_agent, 'Mozilla' ) !== false && preg_match( '/Shiretoko\/([^ ]*)/i', $this->_agent, $matches ) ) {
887
- $this->setVersion( $matches[1] );
888
- $this->setBrowser( $this->BROWSER_SHIRETOKO );
889
-
890
- return true;
891
  }
892
-
893
- return false;
894
  }
895
-
896
- /**
897
- * Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7)
898
- *
899
- * @return boolean True if the browser is Ice Cat otherwise false
900
- */
901
- function checkBrowserIceCat() {
902
- if ( stripos( $this->_agent, 'Mozilla' ) !== false && preg_match( '/IceCat\/([^ ]*)/i', $this->_agent, $matches ) ) {
903
- $this->setVersion( $matches[1] );
904
- $this->setBrowser( $this->BROWSER_ICECAT );
905
-
906
- return true;
907
- }
908
-
909
- return false;
910
  }
 
 
 
 
 
911
 
912
- /**
913
- * Determine if the browser is Nokia or not (last updated 1.7)
914
- *
915
- * @return boolean True if the browser is Nokia otherwise false
916
- */
917
- function checkBrowserNokia() {
918
- if ( preg_match( "/Nokia([^\/]+)\/([^ SP]+)/i", $this->_agent, $matches ) ) {
919
- $this->setVersion( $matches[2] );
920
- if ( stripos( $this->_agent, 'Series60' ) !== false || strpos( $this->_agent, 'S60' ) !== false ) {
921
- $this->setBrowser( $this->BROWSER_NOKIA_S60 );
 
 
 
 
 
 
922
  } else {
923
- $this->setBrowser( $this->BROWSER_NOKIA );
924
  }
925
- $this->setMobile( true );
926
-
927
- return true;
928
  }
929
-
930
- return false;
931
  }
 
 
 
932
 
933
- /**
934
- * Determine if the browser is Firefox or not (last updated 1.7)
935
- *
936
- * @return boolean True if the browser is Firefox otherwise false
937
- */
938
- function checkBrowserFirefox() {
939
- if ( stripos( $this->_agent, 'safari' ) === false ) {
940
- if ( preg_match( "/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches ) ) {
941
- $this->setVersion( $matches[1] );
942
- $this->setBrowser( $this->BROWSER_FIREFOX );
943
-
944
- return true;
945
- } else if ( preg_match( "/Firefox$/i", $this->_agent, $matches ) ) {
946
- $this->setVersion( "" );
947
- $this->setBrowser( $this->BROWSER_FIREFOX );
948
-
949
- return true;
950
- }
951
- }
952
 
953
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
954
  }
 
 
 
955
 
956
- /**
957
- * Determine if the browser is Firefox or not (last updated 1.7)
958
- *
959
- * @return boolean True if the browser is Firefox otherwise false
960
- */
961
- function checkBrowserIceweasel() {
962
- if ( stripos( $this->_agent, 'Iceweasel' ) !== false ) {
963
- $aresult = explode( '/', stristr( $this->_agent, 'Iceweasel' ) );
964
- $aversion = explode( ' ', $aresult[1] );
965
- $this->setVersion( $aversion[0] );
966
- $this->setBrowser( $this->BROWSER_ICEWEASEL );
967
-
968
- return true;
969
- }
970
-
971
- return false;
972
  }
 
 
 
973
 
974
- /**
975
- * Determine if the browser is Mozilla or not (last updated 1.7)
976
- *
977
- * @return boolean True if the browser is Mozilla otherwise false
978
- */
979
- function checkBrowserMozilla() {
980
- if ( stripos( $this->_agent, 'mozilla' ) !== false && preg_match( '/rv:[0-9].[0-9][a-b]?/i', $this->_agent ) && stripos( $this->_agent, 'netscape' ) === false ) {
981
- $aversion = explode( ' ', stristr( $this->_agent, 'rv:' ) );
982
- preg_match( '/rv:[0-9].[0-9][a-b]?/i', $this->_agent, $aversion );
983
- $this->setVersion( str_replace( 'rv:', '', $aversion[0] ) );
984
- $this->setBrowser( $this->BROWSER_MOZILLA );
985
-
986
- return true;
987
- } else if ( stripos( $this->_agent, 'mozilla' ) !== false && preg_match( '/rv:[0-9]\.[0-9]/i', $this->_agent ) && stripos( $this->_agent, 'netscape' ) === false ) {
988
- $aversion = explode( '', stristr( $this->_agent, 'rv:' ) );
989
- $this->setVersion( str_replace( 'rv:', '', $aversion[0] ) );
990
- $this->setBrowser( $this->BROWSER_MOZILLA );
991
-
992
- return true;
993
- } else if ( stripos( $this->_agent, 'mozilla' ) !== false && preg_match( '/mozilla\/([^ ]*)/i', $this->_agent, $matches ) && stripos( $this->_agent, 'netscape' ) === false ) {
994
- $this->setVersion( $matches[1] );
995
- $this->setBrowser( $this->BROWSER_MOZILLA );
996
 
997
- return true;
998
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
999
 
1000
- return false;
 
 
 
 
 
 
 
 
 
 
 
1001
  }
 
 
 
1002
 
1003
- /**
1004
- * Determine if the browser is Lynx or not (last updated 1.7)
1005
- *
1006
- * @return boolean True if the browser is Lynx otherwise false
1007
- */
1008
- function checkBrowserLynx() {
1009
- if ( stripos( $this->_agent, 'lynx' ) !== false ) {
1010
- $aresult = explode( '/', stristr( $this->_agent, 'Lynx' ) );
1011
- $aversion = explode( ' ', ( isset( $aresult[1] ) ? $aresult[1] : "" ) );
1012
- $this->setVersion( $aversion[0] );
1013
- $this->setBrowser( $this->BROWSER_LYNX );
 
 
 
 
1014
 
1015
- return true;
1016
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1017
 
1018
- return false;
 
 
 
 
 
 
 
 
 
 
 
1019
  }
 
 
 
1020
 
1021
- /**
1022
- * Determine if the browser is Amaya or not (last updated 1.7)
1023
- *
1024
- * @return boolean True if the browser is Amaya otherwise false
1025
- */
1026
- function checkBrowserAmaya() {
1027
- if ( stripos( $this->_agent, 'amaya' ) !== false ) {
1028
- $aresult = explode( '/', stristr( $this->_agent, 'Amaya' ) );
1029
- $aversion = explode( ' ', $aresult[1] );
1030
- $this->setVersion( $aversion[0] );
1031
- $this->setBrowser( $this->BROWSER_AMAYA );
 
 
 
 
 
 
 
1032
 
1033
- return true;
1034
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1035
 
1036
- return false;
 
 
 
 
 
 
 
 
 
 
 
1037
  }
 
 
 
 
 
1038
 
1039
- /**
1040
- * Determine if the browser is Safari or not (last updated 1.7)
1041
- *
1042
- * @return boolean True if the browser is Safari otherwise false
1043
- */
1044
- function checkBrowserSafari() {
1045
- if ( stripos( $this->_agent, 'Safari' ) !== false && stripos( $this->_agent, 'iPhone' ) === false && stripos( $this->_agent, 'iPod' ) === false ) {
1046
- $aresult = explode( '/', stristr( $this->_agent, 'Version' ) );
1047
- if ( isset( $aresult[1] ) ) {
1048
- $aversion = explode( ' ', $aresult[1] );
1049
- $this->setVersion( $aversion[0] );
 
 
 
1050
  } else {
1051
- $this->setVersion( $this->VERSION_UNKNOWN );
1052
  }
1053
- $this->setBrowser( $this->BROWSER_SAFARI );
1054
-
1055
- return true;
1056
  }
 
 
 
 
 
 
 
 
 
1057
 
1058
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
1059
  }
 
 
 
1060
 
1061
- /**
1062
- * Determine if the browser is iPhone or not (last updated 1.7)
1063
- *
1064
- * @return boolean True if the browser is iPhone otherwise false
1065
- */
1066
- function checkBrowseriPhone() {
1067
- if ( stripos( $this->_agent, 'iPhone' ) !== false ) {
1068
- $aresult = explode( '/', stristr( $this->_agent, 'Version' ) );
1069
- if ( isset( $aresult[1] ) ) {
1070
- $aversion = explode( ' ', $aresult[1] );
1071
- $this->setVersion( $aversion[0] );
1072
- } else {
1073
- $this->setVersion( $this->VERSION_UNKNOWN );
1074
- }
1075
- $this->setMobile( true );
1076
- $this->setBrowser( $this->BROWSER_IPHONE );
 
 
 
 
 
 
 
 
1077
 
1078
- return true;
1079
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
1080
 
1081
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
1082
  }
 
 
 
1083
 
1084
- /**
1085
- * Determine if the browser is iPod or not (last updated 1.7)
1086
- *
1087
- * @return boolean True if the browser is iPod otherwise false
1088
- */
1089
- function checkBrowseriPad() {
1090
- if ( stripos( $this->_agent, 'iPad' ) !== false ) {
1091
- $aresult = explode( '/', stristr( $this->_agent, 'Version' ) );
1092
- if ( isset( $aresult[1] ) ) {
1093
- $aversion = explode( ' ', $aresult[1] );
1094
- $this->setVersion( $aversion[0] );
1095
- } else {
1096
- $this->setVersion( $this->VERSION_UNKNOWN );
1097
- }
1098
- $this->setMobile( true );
1099
- $this->setBrowser( $this->BROWSER_IPAD );
 
 
 
 
 
 
1100
 
1101
- return true;
1102
- }
 
 
 
 
 
 
 
 
 
 
 
 
1103
 
1104
- return false;
1105
- }
 
 
 
 
 
 
 
 
 
 
 
1106
 
1107
- /**
1108
- * Determine if the browser is iPod or not (last updated 1.7)
1109
- *
1110
- * @return boolean True if the browser is iPod otherwise false
1111
- */
1112
- function checkBrowseriPod() {
1113
- if ( stripos( $this->_agent, 'iPod' ) !== false ) {
1114
- $aresult = explode( '/', stristr( $this->_agent, 'Version' ) );
1115
- if ( isset( $aresult[1] ) ) {
1116
- $aversion = explode( ' ', $aresult[1] );
1117
- $this->setVersion( $aversion[0] );
1118
- } else {
1119
- $this->setVersion( $this->VERSION_UNKNOWN );
1120
- }
1121
- $this->setMobile( true );
1122
- $this->setBrowser( $this->BROWSER_IPOD );
1123
 
1124
- return true;
1125
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1126
 
1127
- return false;
1128
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1129
 
1130
- /**
1131
- * Determine if the browser is Android or not (last updated 1.7)
1132
- *
1133
- * @return boolean True if the browser is Android otherwise false
1134
- */
1135
- function checkBrowserAndroid() {
1136
- if ( stripos( $this->_agent, 'Android' ) !== false ) {
1137
- $aresult = explode( ' ', stristr( $this->_agent, 'Android' ) );
1138
- if ( isset( $aresult[1] ) ) {
1139
- $aversion = explode( ' ', $aresult[1] );
1140
- $this->setVersion( $aversion[0] );
1141
- } else {
1142
- $this->setVersion( $this->VERSION_UNKNOWN );
1143
- }
1144
- $this->setMobile( true );
1145
- $this->setBrowser( $this->BROWSER_ANDROID );
1146
 
1147
- return true;
1148
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1149
 
1150
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
1151
  }
1152
-
1153
- /**
1154
- * Determine the user's platform (last updated 1.7)
1155
- */
1156
- function checkPlatform() {
1157
- if ( stripos( $this->_agent, 'windows' ) !== false ) {
1158
- $this->_platform = $this->PLATFORM_WINDOWS;
1159
- } elseif ( stripos( $this->_agent, 'iPad' ) !== false ) {
1160
- $this->_platform = $this->PLATFORM_IPAD;
1161
- } elseif ( stripos( $this->_agent, 'iPod' ) !== false ) {
1162
- $this->_platform = $this->PLATFORM_IPOD;
1163
- } elseif ( stripos( $this->_agent, 'iPhone' ) !== false ) {
1164
- $this->_platform = $this->PLATFORM_IPHONE;
1165
- } elseif ( stripos( $this->_agent, 'mac' ) !== false ) {
1166
- $this->_platform = $this->PLATFORM_APPLE;
1167
- } elseif ( stripos( $this->_agent, 'android' ) !== false ) {
1168
- $this->_platform = $this->PLATFORM_ANDROID;
1169
- } elseif ( stripos( $this->_agent, 'linux' ) !== false ) {
1170
- $this->_platform = $this->PLATFORM_LINUX;
1171
- } elseif ( stripos( $this->_agent, 'Nokia' ) !== false ) {
1172
- $this->_platform = $this->PLATFORM_NOKIA;
1173
- } elseif ( stripos( $this->_agent, 'BlackBerry' ) !== false ) {
1174
- $this->_platform = $this->PLATFORM_BLACKBERRY;
1175
- } elseif ( stripos( $this->_agent, 'FreeBSD' ) !== false ) {
1176
- $this->_platform = $this->PLATFORM_FREEBSD;
1177
- } elseif ( stripos( $this->_agent, 'OpenBSD' ) !== false ) {
1178
- $this->_platform = $this->PLATFORM_OPENBSD;
1179
- } elseif ( stripos( $this->_agent, 'NetBSD' ) !== false ) {
1180
- $this->_platform = $this->PLATFORM_NETBSD;
1181
- } elseif ( stripos( $this->_agent, 'OpenSolaris' ) !== false ) {
1182
- $this->_platform = $this->PLATFORM_OPENSOLARIS;
1183
- } elseif ( stripos( $this->_agent, 'SunOS' ) !== false ) {
1184
- $this->_platform = $this->PLATFORM_SUNOS;
1185
- } elseif ( stripos( $this->_agent, 'OS\/2' ) !== false ) {
1186
- $this->_platform = $this->PLATFORM_OS2;
1187
- } elseif ( stripos( $this->_agent, 'BeOS' ) !== false ) {
1188
- $this->_platform = $this->PLATFORM_BEOS;
1189
- } elseif ( stripos( $this->_agent, 'win' ) !== false ) {
1190
- $this->_platform = $this->PLATFORM_WINDOWS;
1191
- }
1192
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1193
  }
1194
- }
 
 
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
+ /**
4
+ * File: Browser.php
5
+ * Author: Chris Schuld (http://chrisschuld.com/)
6
+ * Last Modified: July 4th, 2014
7
+ * @version 1.9
8
+ * @package PegasusPHP
9
+ *
10
+ * Copyright (C) 2008-2010 Chris Schuld (chris@chrisschuld.com)
11
+ *
12
+ * This program is free software; you can redistribute it and/or
13
+ * modify it under the terms of the GNU General Public License as
14
+ * published by the Free Software Foundation; either version 2 of
15
+ * the License, or (at your option) any later version.
16
+ *
17
+ * This program is distributed in the hope that it will be useful,
18
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
+ * GNU General Public License for more details at:
21
+ * http://www.gnu.org/copyleft/gpl.html
22
+ *
23
+ *
24
+ * Typical Usage:
25
+ *
26
+ * $browser = new Browser();
27
+ * if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
28
+ * echo 'You have FireFox version 2 or greater';
29
+ * }
30
+ *
31
+ * User Agents Sampled from: http://www.useragentstring.com/
32
+ *
33
+ * This implementation is based on the original work from Gary White
34
+ * http://apptools.com/phptools/browser/
35
+ *
36
+ */
37
+
38
+ class Browser
39
+ {
40
+ private $_agent = '';
41
+ private $_browser_name = '';
42
+ private $_version = '';
43
+ private $_platform = '';
44
+ private $_os = '';
45
+ private $_is_aol = false;
46
+ private $_is_mobile = false;
47
+ private $_is_tablet = false;
48
+ private $_is_robot = false;
49
+ private $_is_facebook = false;
50
+ private $_aol_version = '';
51
+
52
+ const BROWSER_UNKNOWN = 'unknown';
53
+ const VERSION_UNKNOWN = 'unknown';
54
+
55
+ const BROWSER_OPERA = 'Opera'; // http://www.opera.com/
56
+ const BROWSER_OPERA_MINI = 'Opera Mini'; // http://www.opera.com/mini/
57
+ const BROWSER_WEBTV = 'WebTV'; // http://www.webtv.net/pc/
58
+ const BROWSER_IE = 'Internet Explorer'; // http://www.microsoft.com/ie/
59
+ const BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile
60
+ const BROWSER_KONQUEROR = 'Konqueror'; // http://www.konqueror.org/
61
+ const BROWSER_ICAB = 'iCab'; // http://www.icab.de/
62
+ const BROWSER_OMNIWEB = 'OmniWeb'; // http://www.omnigroup.com/applications/omniweb/
63
+ const BROWSER_FIREBIRD = 'Firebird'; // http://www.ibphoenix.com/
64
+ const BROWSER_FIREFOX = 'Firefox'; // http://www.mozilla.com/en-US/firefox/firefox.html
65
+ const BROWSER_ICEWEASEL = 'Iceweasel'; // http://www.geticeweasel.org/
66
+ const BROWSER_SHIRETOKO = 'Shiretoko'; // http://wiki.mozilla.org/Projects/shiretoko
67
+ const BROWSER_MOZILLA = 'Mozilla'; // http://www.mozilla.com/en-US/
68
+ const BROWSER_AMAYA = 'Amaya'; // http://www.w3.org/Amaya/
69
+ const BROWSER_LYNX = 'Lynx'; // http://en.wikipedia.org/wiki/Lynx
70
+ const BROWSER_SAFARI = 'Safari'; // http://apple.com
71
+ const BROWSER_IPHONE = 'iPhone'; // http://apple.com
72
+ const BROWSER_IPOD = 'iPod'; // http://apple.com
73
+ const BROWSER_IPAD = 'iPad'; // http://apple.com
74
+ const BROWSER_CHROME = 'Chrome'; // http://www.google.com/chrome
75
+ const BROWSER_ANDROID = 'Android'; // http://www.android.com/
76
+ const BROWSER_GOOGLEBOT = 'GoogleBot'; // http://en.wikipedia.org/wiki/Googlebot
77
+ const BROWSER_SLURP = 'Yahoo! Slurp'; // http://en.wikipedia.org/wiki/Yahoo!_Slurp
78
+ const BROWSER_W3CVALIDATOR = 'W3C Validator'; // http://validator.w3.org/
79
+ const BROWSER_BLACKBERRY = 'BlackBerry'; // http://www.blackberry.com/
80
+ const BROWSER_ICECAT = 'IceCat'; // http://en.wikipedia.org/wiki/GNU_IceCat
81
+ const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; // http://en.wikipedia.org/wiki/Web_Browser_for_S60
82
+ const BROWSER_NOKIA = 'Nokia Browser'; // * all other WAP-based browsers on the Nokia Platform
83
+ const BROWSER_MSN = 'MSN Browser'; // http://explorer.msn.com/
84
+ const BROWSER_MSNBOT = 'MSN Bot'; // http://search.msn.com/msnbot.htm
85
+ const BROWSER_BINGBOT = 'Bing Bot'; // http://en.wikipedia.org/wiki/Bingbot
86
+
87
+ const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // http://browser.netscape.com/ (DEPRECATED)
88
+ const BROWSER_GALEON = 'Galeon'; // http://galeon.sourceforge.net/ (DEPRECATED)
89
+ const BROWSER_NETPOSITIVE = 'NetPositive'; // http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)
90
+ const BROWSER_PHOENIX = 'Phoenix'; // http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)
91
+
92
+ const PLATFORM_UNKNOWN = 'unknown';
93
+ const PLATFORM_WINDOWS = 'Windows';
94
+ const PLATFORM_WINDOWS_CE = 'Windows CE';
95
+ const PLATFORM_APPLE = 'Apple';
96
+ const PLATFORM_LINUX = 'Linux';
97
+ const PLATFORM_OS2 = 'OS/2';
98
+ const PLATFORM_BEOS = 'BeOS';
99
+ const PLATFORM_IPHONE = 'iPhone';
100
+ const PLATFORM_IPOD = 'iPod';
101
+ const PLATFORM_IPAD = 'iPad';
102
+ const PLATFORM_BLACKBERRY = 'BlackBerry';
103
+ const PLATFORM_NOKIA = 'Nokia';
104
+ const PLATFORM_FREEBSD = 'FreeBSD';
105
+ const PLATFORM_OPENBSD = 'OpenBSD';
106
+ const PLATFORM_NETBSD = 'NetBSD';
107
+ const PLATFORM_SUNOS = 'SunOS';
108
+ const PLATFORM_OPENSOLARIS = 'OpenSolaris';
109
+ const PLATFORM_ANDROID = 'Android';
110
+
111
+ const OPERATING_SYSTEM_UNKNOWN = 'unknown';
112
+
113
+ public function Browser($userAgent = "")
114
+ {
115
+ $this->reset();
116
+ if ($userAgent != "") {
117
+ $this->setUserAgent($userAgent);
118
+ } else {
119
+ $this->determine();
120
+ }
121
+ }
122
 
123
+ /**
124
+ * Reset all properties
125
+ */
126
+ public function reset()
127
+ {
128
+ $this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";
129
+ $this->_browser_name = self::BROWSER_UNKNOWN;
130
+ $this->_version = self::VERSION_UNKNOWN;
131
+ $this->_platform = self::PLATFORM_UNKNOWN;
132
+ $this->_os = self::OPERATING_SYSTEM_UNKNOWN;
133
+ $this->_is_aol = false;
134
+ $this->_is_mobile = false;
135
+ $this->_is_tablet = false;
136
+ $this->_is_robot = false;
137
+ $this->_is_facebook = false;
138
+ $this->_aol_version = self::VERSION_UNKNOWN;
139
+ }
140
 
141
+ /**
142
+ * Check to see if the specific browser is valid
143
+ * @param string $browserName
144
+ * @return bool True if the browser is the specified browser
145
+ */
146
+ function isBrowser($browserName)
147
+ {
148
+ return (0 == strcasecmp($this->_browser_name, trim($browserName)));
149
+ }
150
 
151
+ /**
152
+ * The name of the browser. All return types are from the class contants
153
+ * @return string Name of the browser
154
+ */
155
+ public function getBrowser()
156
+ {
157
+ return $this->_browser_name;
158
+ }
159
 
160
+ /**
161
+ * Set the name of the browser
162
+ * @param $browser string The name of the Browser
163
+ */
164
+ public function setBrowser($browser)
165
+ {
166
+ $this->_browser_name = $browser;
167
+ }
168
 
169
+ /**
170
+ * The name of the platform. All return types are from the class contants
171
+ * @return string Name of the browser
172
+ */
173
+ public function getPlatform()
174
+ {
175
+ return $this->_platform;
176
+ }
177
 
178
+ /**
179
+ * Set the name of the platform
180
+ * @param string $platform The name of the Platform
181
+ */
182
+ public function setPlatform($platform)
183
+ {
184
+ $this->_platform = $platform;
185
+ }
186
 
187
+ /**
188
+ * The version of the browser.
189
+ * @return string Version of the browser (will only contain alpha-numeric characters and a period)
190
+ */
191
+ public function getVersion()
192
+ {
193
+ return $this->_version;
194
+ }
195
 
196
+ /**
197
+ * Set the version of the browser
198
+ * @param string $version The version of the Browser
199
+ */
200
+ public function setVersion($version)
201
+ {
202
+ $this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/', '', $version);
203
+ }
204
 
205
+ /**
206
+ * The version of AOL.
207
+ * @return string Version of AOL (will only contain alpha-numeric characters and a period)
208
+ */
209
+ public function getAolVersion()
210
+ {
211
+ return $this->_aol_version;
212
+ }
213
 
214
+ /**
215
+ * Set the version of AOL
216
+ * @param string $version The version of AOL
217
+ */
218
+ public function setAolVersion($version)
219
+ {
220
+ $this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/', '', $version);
221
+ }
222
 
223
+ /**
224
+ * Is the browser from AOL?
225
+ * @return boolean True if the browser is from AOL otherwise false
226
+ */
227
+ public function isAol()
228
+ {
229
+ return $this->_is_aol;
230
+ }
231
 
232
+ /**
233
+ * Is the browser from a mobile device?
234
+ * @return boolean True if the browser is from a mobile device otherwise false
235
+ */
236
+ public function isMobile()
237
+ {
238
+ return $this->_is_mobile;
239
+ }
240
 
241
+ /**
242
+ * Is the browser from a tablet device?
243
+ * @return boolean True if the browser is from a tablet device otherwise false
244
+ */
245
+ public function isTablet()
246
+ {
247
+ return $this->_is_tablet;
248
+ }
249
 
250
+ /**
251
+ * Is the browser from a robot (ex Slurp,GoogleBot)?
252
+ * @return boolean True if the browser is from a robot otherwise false
253
+ */
254
+ public function isRobot()
255
+ {
256
+ return $this->_is_robot;
257
+ }
 
 
258
 
259
+ /**
260
+ * Is the browser from facebook?
261
+ * @return boolean True if the browser is from facebook otherwise false
262
+ */
263
+ public function isFacebook()
264
+ {
265
+ return $this->_is_facebook;
266
+ }
 
267
 
268
+ /**
269
+ * Set the browser to be from AOL
270
+ * @param $isAol
271
+ */
272
+ public function setAol($isAol)
273
+ {
274
+ $this->_is_aol = $isAol;
275
+ }
 
 
 
 
 
 
 
 
 
 
 
276
 
277
+ /**
278
+ * Set the Browser to be mobile
279
+ * @param boolean $value is the browser a mobile browser or not
280
+ */
281
+ protected function setMobile($value = true)
282
+ {
283
+ $this->_is_mobile = $value;
284
+ }
285
 
286
+ /**
287
+ * Set the Browser to be tablet
288
+ * @param boolean $value is the browser a tablet browser or not
289
+ */
290
+ protected function setTablet($value = true)
291
+ {
292
+ $this->_is_tablet = $value;
293
+ }
294
 
295
+ /**
296
+ * Set the Browser to be a robot
297
+ * @param boolean $value is the browser a robot or not
298
+ */
299
+ protected function setRobot($value = true)
300
+ {
301
+ $this->_is_robot = $value;
302
+ }
303
 
304
+ /**
305
+ * Set the Browser to be a Facebook request
306
+ * @param boolean $value is the browser a robot or not
307
+ */
308
+ protected function setFacebook($value = true)
309
+ {
310
+ $this->_is_facebook = $value;
311
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
312
 
313
+ /**
314
+ * Get the user agent value in use to determine the browser
315
+ * @return string The user agent from the HTTP header
316
+ */
317
+ public function getUserAgent()
318
+ {
319
+ return $this->_agent;
320
+ }
 
 
 
 
321
 
322
+ /**
323
+ * Set the user agent value (the construction will use the HTTP header value - this will overwrite it)
324
+ * @param string $agent_string The value for the User Agent
325
+ */
326
+ public function setUserAgent($agent_string)
327
+ {
328
+ $this->reset();
329
+ $this->_agent = $agent_string;
330
+ $this->determine();
331
+ }
332
 
333
+ /**
334
+ * Used to determine if the browser is actually "chromeframe"
335
+ * @since 1.7
336
+ * @return boolean True if the browser is using chromeframe
337
+ */
338
+ public function isChromeFrame()
339
+ {
340
+ return (strpos($this->_agent, "chromeframe") !== false);
341
+ }
342
 
343
+ /**
344
+ * Returns a formatted string with a summary of the details of the browser.
345
+ * @return string formatted string with a summary of the browser
346
+ */
347
+ public function __toString()
348
+ {
349
+ return "<strong>Browser Name:</strong> {$this->getBrowser()}<br/>\n" .
350
+ "<strong>Browser Version:</strong> {$this->getVersion()}<br/>\n" .
351
+ "<strong>Browser User Agent String:</strong> {$this->getUserAgent()}<br/>\n" .
352
+ "<strong>Platform:</strong> {$this->getPlatform()}<br/>";
353
+ }
354
 
355
+ /**
356
+ * Protected routine to calculate and determine what the browser is in use (including platform)
357
+ */
358
+ protected function determine()
359
+ {
360
+ $this->checkPlatform();
361
+ $this->checkBrowsers();
362
+ $this->checkForAol();
363
+ }
364
 
365
+ /**
366
+ * Protected routine to determine the browser type
367
+ * @return boolean True if the browser was detected otherwise false
368
+ */
369
+ protected function checkBrowsers()
370
+ {
371
+ return (
372
+ // well-known, well-used
373
+ // Special Notes:
374
+ // (1) Opera must be checked before FireFox due to the odd
375
+ // user agents used in some older versions of Opera
376
+ // (2) WebTV is strapped onto Internet Explorer so we must
377
+ // check for WebTV before IE
378
+ // (3) (deprecated) Galeon is based on Firefox and needs to be
379
+ // tested before Firefox is tested
380
+ // (4) OmniWeb is based on Safari so OmniWeb check must occur
381
+ // before Safari
382
+ // (5) Netscape 9+ is based on Firefox so Netscape checks
383
+ // before FireFox are necessary
384
+ $this->checkBrowserWebTv() ||
385
+ $this->checkBrowserInternetExplorer() ||
386
+ $this->checkBrowserOpera() ||
387
+ $this->checkBrowserGaleon() ||
388
+ $this->checkBrowserNetscapeNavigator9Plus() ||
389
+ $this->checkBrowserFirefox() ||
390
+ $this->checkBrowserChrome() ||
391
+ $this->checkBrowserOmniWeb() ||
392
+
393
+ // common mobile
394
+ $this->checkBrowserAndroid() ||
395
+ $this->checkBrowseriPad() ||
396
+ $this->checkBrowseriPod() ||
397
+ $this->checkBrowseriPhone() ||
398
+ $this->checkBrowserBlackBerry() ||
399
+ $this->checkBrowserNokia() ||
400
+
401
+ // common bots
402
+ $this->checkBrowserGoogleBot() ||
403
+ $this->checkBrowserMSNBot() ||
404
+ $this->checkBrowserBingBot() ||
405
+ $this->checkBrowserSlurp() ||
406
+
407
+ // check for facebook external hit when loading URL
408
+ $this->checkFacebookExternalHit() ||
409
+
410
+ // WebKit base check (post mobile and others)
411
+ $this->checkBrowserSafari() ||
412
+
413
+ // everyone else
414
+ $this->checkBrowserNetPositive() ||
415
+ $this->checkBrowserFirebird() ||
416
+ $this->checkBrowserKonqueror() ||
417
+ $this->checkBrowserIcab() ||
418
+ $this->checkBrowserPhoenix() ||
419
+ $this->checkBrowserAmaya() ||
420
+ $this->checkBrowserLynx() ||
421
+ $this->checkBrowserShiretoko() ||
422
+ $this->checkBrowserIceCat() ||
423
+ $this->checkBrowserIceweasel() ||
424
+ $this->checkBrowserW3CValidator() ||
425
+ $this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
426
+ );
427
+ }
428
 
429
+ /**
430
+ * Determine if the user is using a BlackBerry (last updated 1.7)
431
+ * @return boolean True if the browser is the BlackBerry browser otherwise false
432
+ */
433
+ protected function checkBrowserBlackBerry()
434
+ {
435
+ if (stripos($this->_agent, 'blackberry') !== false) {
436
+ $aresult = explode("/", stristr($this->_agent, "BlackBerry"));
437
+ if (isset($aresult[1])) {
438
+ $aversion = explode(' ', $aresult[1]);
439
+ $this->setVersion($aversion[0]);
440
+ $this->_browser_name = self::BROWSER_BLACKBERRY;
441
+ $this->setMobile(true);
442
+ return true;
443
  }
444
+ }
445
+ return false;
446
+ }
447
 
448
+ /**
449
+ * Determine if the user is using an AOL User Agent (last updated 1.7)
450
+ * @return boolean True if the browser is from AOL otherwise false
451
+ */
452
+ protected function checkForAol()
453
+ {
454
+ $this->setAol(false);
455
+ $this->setAolVersion(self::VERSION_UNKNOWN);
456
+
457
+ if (stripos($this->_agent, 'aol') !== false) {
458
+ $aversion = explode(' ', stristr($this->_agent, 'AOL'));
459
+ if (isset($aversion[1])) {
460
+ $this->setAol(true);
461
+ $this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1]));
462
+ return true;
 
 
463
  }
464
+ }
465
+ return false;
466
+ }
467
 
468
+ /**
469
+ * Determine if the browser is the GoogleBot or not (last updated 1.7)
470
+ * @return boolean True if the browser is the GoogletBot otherwise false
471
+ */
472
+ protected function checkBrowserGoogleBot()
473
+ {
474
+ if (stripos($this->_agent, 'googlebot') !== false) {
475
+ $aresult = explode('/', stristr($this->_agent, 'googlebot'));
476
+ if (isset($aresult[1])) {
477
+ $aversion = explode(' ', $aresult[1]);
478
+ $this->setVersion(str_replace(';', '', $aversion[0]));
479
+ $this->_browser_name = self::BROWSER_GOOGLEBOT;
480
+ $this->setRobot(true);
481
+ return true;
 
 
 
482
  }
483
+ }
484
+ return false;
485
+ }
486
 
487
+ /**
488
+ * Determine if the browser is the MSNBot or not (last updated 1.9)
489
+ * @return boolean True if the browser is the MSNBot otherwise false
490
+ */
491
+ protected function checkBrowserMSNBot()
492
+ {
493
+ if (stripos($this->_agent, "msnbot") !== false) {
494
+ $aresult = explode("/", stristr($this->_agent, "msnbot"));
495
+ if (isset($aresult[1])) {
496
+ $aversion = explode(" ", $aresult[1]);
497
+ $this->setVersion(str_replace(";", "", $aversion[0]));
498
+ $this->_browser_name = self::BROWSER_MSNBOT;
499
+ $this->setRobot(true);
500
+ return true;
 
 
 
 
 
 
 
 
 
 
 
501
  }
502
+ }
503
+ return false;
504
+ }
505
+
506
+ /**
507
+ * Determine if the browser is the BingBot or not (last updated 1.9)
508
+ * @return boolean True if the browser is the BingBot otherwise false
509
+ */
510
+ protected function checkBrowserBingBot()
511
+ {
512
+ if (stripos($this->_agent, "bingbot") !== false) {
513
+ $aresult = explode("/", stristr($this->_agent, "bingbot"));
514
+ if (isset($aresult[1])) {
515
+ $aversion = explode(" ", $aresult[1]);
516
+ $this->setVersion(str_replace(";", "", $aversion[0]));
517
+ $this->_browser_name = self::BROWSER_BINGBOT;
518
+ $this->setRobot(true);
519
+ return true;
 
520
  }
521
+ }
522
+ return false;
523
+ }
524
 
525
+ /**
526
+ * Determine if the browser is the W3C Validator or not (last updated 1.7)
527
+ * @return boolean True if the browser is the W3C Validator otherwise false
528
+ */
529
+ protected function checkBrowserW3CValidator()
530
+ {
531
+ if (stripos($this->_agent, 'W3C-checklink') !== false) {
532
+ $aresult = explode('/', stristr($this->_agent, 'W3C-checklink'));
533
+ if (isset($aresult[1])) {
534
+ $aversion = explode(' ', $aresult[1]);
535
+ $this->setVersion($aversion[0]);
536
+ $this->_browser_name = self::BROWSER_W3CVALIDATOR;
537
+ return true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
538
  }
539
+ } else if (stripos($this->_agent, 'W3C_Validator') !== false) {
540
+ // Some of the Validator versions do not delineate w/ a slash - add it back in
541
+ $ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent);
542
+ $aresult = explode('/', stristr($ua, 'W3C_Validator'));
543
+ if (isset($aresult[1])) {
544
+ $aversion = explode(' ', $aresult[1]);
545
+ $this->setVersion($aversion[0]);
546
+ $this->_browser_name = self::BROWSER_W3CVALIDATOR;
547
+ return true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
548
  }
549
+ } else if (stripos($this->_agent, 'W3C-mobileOK') !== false) {
550
+ $this->_browser_name = self::BROWSER_W3CVALIDATOR;
551
+ $this->setMobile(true);
552
+ return true;
553
+ }
554
+ return false;
555
+ }
556
 
557
+ /**
558
+ * Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7)
559
+ * @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false
560
+ */
561
+ protected function checkBrowserSlurp()
562
+ {
563
+ if (stripos($this->_agent, 'slurp') !== false) {
564
+ $aresult = explode('/', stristr($this->_agent, 'Slurp'));
565
+ if (isset($aresult[1])) {
566
+ $aversion = explode(' ', $aresult[1]);
567
+ $this->setVersion($aversion[0]);
568
+ $this->_browser_name = self::BROWSER_SLURP;
569
+ $this->setRobot(true);
570
+ $this->setMobile(false);
571
+ return true;
 
572
  }
573
+ }
574
+ return false;
575
+ }
576
 
577
+ /**
578
+ * Determine if the browser is Internet Explorer or not (last updated 1.7)
579
+ * @return boolean True if the browser is Internet Explorer otherwise false
580
+ */
581
+ protected function checkBrowserInternetExplorer()
582
+ {
583
+ // Test for IE11
584
+ if( stripos($this->_agent,'Trident/7.0; rv:11.0') !== false ) {
585
+ $this->setBrowser(self::BROWSER_IE);
586
+ $this->setVersion('11.0');
587
+ return true;
588
+ }
589
+ // Test for v1 - v1.5 IE
590
+ else if (stripos($this->_agent, 'microsoft internet explorer') !== false) {
591
+ $this->setBrowser(self::BROWSER_IE);
592
+ $this->setVersion('1.0');
593
+ $aresult = stristr($this->_agent, '/');
594
+ if (preg_match('/308|425|426|474|0b1/i', $aresult)) {
595
+ $this->setVersion('1.5');
596
  }
597
+ return true;
598
+ } // Test for versions > 1.5
599
+ else if (stripos($this->_agent, 'msie') !== false && stripos($this->_agent, 'opera') === false) {
600
+ // See if the browser is the odd MSN Explorer
601
+ if (stripos($this->_agent, 'msnb') !== false) {
602
+ $aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'MSN'));
603
+ if (isset($aresult[1])) {
604
+ $this->setBrowser(self::BROWSER_MSN);
605
+ $this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
 
 
 
 
606
  return true;
607
  }
 
 
608
  }
609
+ $aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'msie'));
610
+ if (isset($aresult[1])) {
611
+ $this->setBrowser(self::BROWSER_IE);
612
+ $this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
613
+ if(stripos($this->_agent, 'IEMobile') !== false) {
614
+ $this->setBrowser(self::BROWSER_POCKET_IE);
615
+ $this->setMobile(true);
 
 
 
 
 
 
 
616
  }
617
+ return true;
 
618
  }
619
+ } // Test for versions > IE 10
620
+ else if(stripos($this->_agent, 'trident') !== false) {
621
+ $this->setBrowser(self::BROWSER_IE);
622
+ $result = explode('rv:', $this->_agent);
623
+ if (isset($result[1])) {
624
+ $this->setVersion(preg_replace('/[^0-9.]+/', '', $result[1]));
625
+ $this->_agent = str_replace(array("Mozilla", "Gecko"), "MSIE", $this->_agent);
 
 
 
 
 
 
 
 
 
 
626
  }
627
+ } // Test for Pocket IE
628
+ else if (stripos($this->_agent, 'mspie') !== false || stripos($this->_agent, 'pocket') !== false) {
629
+ $aresult = explode(' ', stristr($this->_agent, 'mspie'));
630
+ if (isset($aresult[1])) {
631
+ $this->setPlatform(self::PLATFORM_WINDOWS_CE);
632
+ $this->setBrowser(self::BROWSER_POCKET_IE);
633
+ $this->setMobile(true);
634
+
635
+ if (stripos($this->_agent, 'mspie') !== false) {
636
+ $this->setVersion($aresult[1]);
637
+ } else {
638
+ $aversion = explode('/', $this->_agent);
639
+ if (isset($aversion[1])) {
640
+ $this->setVersion($aversion[1]);
641
+ }
642
  }
643
+ return true;
 
644
  }
645
+ }
646
+ return false;
647
+ }
648
 
649
+ /**
650
+ * Determine if the browser is Opera or not (last updated 1.7)
651
+ * @return boolean True if the browser is Opera otherwise false
652
+ */
653
+ protected function checkBrowserOpera()
654
+ {
655
+ if (stripos($this->_agent, 'opera mini') !== false) {
656
+ $resultant = stristr($this->_agent, 'opera mini');
657
+ if (preg_match('/\//', $resultant)) {
658
+ $aresult = explode('/', $resultant);
659
+ if (isset($aresult[1])) {
660
+ $aversion = explode(' ', $aresult[1]);
661
+ $this->setVersion($aversion[0]);
662
  }
663
+ } else {
664
+ $aversion = explode(' ', stristr($resultant, 'opera mini'));
665
+ if (isset($aversion[1])) {
666
+ $this->setVersion($aversion[1]);
 
 
 
 
 
 
 
 
 
 
 
 
667
  }
 
 
668
  }
669
+ $this->_browser_name = self::BROWSER_OPERA_MINI;
670
+ $this->setMobile(true);
671
+ return true;
672
+ } else if (stripos($this->_agent, 'opera') !== false) {
673
+ $resultant = stristr($this->_agent, 'opera');
674
+ if (preg_match('/Version\/(1*.*)$/', $resultant, $matches)) {
675
+ $this->setVersion($matches[1]);
676
+ } else if (preg_match('/\//', $resultant)) {
677
+ $aresult = explode('/', str_replace("(", " ", $resultant));
678
+ if (isset($aresult[1])) {
679
+ $aversion = explode(' ', $aresult[1]);
680
+ $this->setVersion($aversion[0]);
 
681
  }
682
+ } else {
683
+ $aversion = explode(' ', stristr($resultant, 'opera'));
684
+ $this->setVersion(isset($aversion[1]) ? $aversion[1] : "");
685
  }
686
+ if (stripos($this->_agent, 'Opera Mobi') !== false) {
687
+ $this->setMobile(true);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
688
  }
689
+ $this->_browser_name = self::BROWSER_OPERA;
690
+ return true;
691
+ } else if (stripos($this->_agent, 'OPR') !== false) {
692
+ $resultant = stristr($this->_agent, 'OPR');
693
+ if (preg_match('/\//', $resultant)) {
694
+ $aresult = explode('/', str_replace("(", " ", $resultant));
695
+ if (isset($aresult[1])) {
696
+ $aversion = explode(' ', $aresult[1]);
697
+ $this->setVersion($aversion[0]);
 
 
 
698
  }
 
 
699
  }
700
+ if (stripos($this->_agent, 'Mobile') !== false) {
701
+ $this->setMobile(true);
 
 
 
 
 
 
 
 
 
 
 
 
 
702
  }
703
+ $this->_browser_name = self::BROWSER_OPERA;
704
+ return true;
705
+ }
706
+ return false;
707
+ }
708
 
709
+ /**
710
+ * Determine if the browser is Chrome or not (last updated 1.7)
711
+ * @return boolean True if the browser is Chrome otherwise false
712
+ */
713
+ protected function checkBrowserChrome()
714
+ {
715
+ if (stripos($this->_agent, 'Chrome') !== false) {
716
+ $aresult = explode('/', stristr($this->_agent, 'Chrome'));
717
+ if (isset($aresult[1])) {
718
+ $aversion = explode(' ', $aresult[1]);
719
+ $this->setVersion($aversion[0]);
720
+ $this->setBrowser(self::BROWSER_CHROME);
721
+ //Chrome on Android
722
+ if (stripos($this->_agent, 'Android') !== false) {
723
+ if (stripos($this->_agent, 'Mobile') !== false) {
724
+ $this->setMobile(true);
725
  } else {
726
+ $this->setTablet(true);
727
  }
 
 
 
728
  }
729
+ return true;
 
730
  }
731
+ }
732
+ return false;
733
+ }
734
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
735
 
736
+ /**
737
+ * Determine if the browser is WebTv or not (last updated 1.7)
738
+ * @return boolean True if the browser is WebTv otherwise false
739
+ */
740
+ protected function checkBrowserWebTv()
741
+ {
742
+ if (stripos($this->_agent, 'webtv') !== false) {
743
+ $aresult = explode('/', stristr($this->_agent, 'webtv'));
744
+ if (isset($aresult[1])) {
745
+ $aversion = explode(' ', $aresult[1]);
746
+ $this->setVersion($aversion[0]);
747
+ $this->setBrowser(self::BROWSER_WEBTV);
748
+ return true;
749
  }
750
+ }
751
+ return false;
752
+ }
753
 
754
+ /**
755
+ * Determine if the browser is NetPositive or not (last updated 1.7)
756
+ * @return boolean True if the browser is NetPositive otherwise false
757
+ */
758
+ protected function checkBrowserNetPositive()
759
+ {
760
+ if (stripos($this->_agent, 'NetPositive') !== false) {
761
+ $aresult = explode('/', stristr($this->_agent, 'NetPositive'));
762
+ if (isset($aresult[1])) {
763
+ $aversion = explode(' ', $aresult[1]);
764
+ $this->setVersion(str_replace(array('(', ')', ';'), '', $aversion[0]));
765
+ $this->setBrowser(self::BROWSER_NETPOSITIVE);
766
+ return true;
 
 
 
767
  }
768
+ }
769
+ return false;
770
+ }
771
 
772
+ /**
773
+ * Determine if the browser is Galeon or not (last updated 1.7)
774
+ * @return boolean True if the browser is Galeon otherwise false
775
+ */
776
+ protected function checkBrowserGaleon()
777
+ {
778
+ if (stripos($this->_agent, 'galeon') !== false) {
779
+ $aresult = explode(' ', stristr($this->_agent, 'galeon'));
780
+ $aversion = explode('/', $aresult[0]);
781
+ if (isset($aversion[1])) {
782
+ $this->setVersion($aversion[1]);
783
+ $this->setBrowser(self::BROWSER_GALEON);
784
+ return true;
785
+ }
786
+ }
787
+ return false;
788
+ }
 
 
 
 
 
789
 
790
+ /**
791
+ * Determine if the browser is Konqueror or not (last updated 1.7)
792
+ * @return boolean True if the browser is Konqueror otherwise false
793
+ */
794
+ protected function checkBrowserKonqueror()
795
+ {
796
+ if (stripos($this->_agent, 'Konqueror') !== false) {
797
+ $aresult = explode(' ', stristr($this->_agent, 'Konqueror'));
798
+ $aversion = explode('/', $aresult[0]);
799
+ if (isset($aversion[1])) {
800
+ $this->setVersion($aversion[1]);
801
+ $this->setBrowser(self::BROWSER_KONQUEROR);
802
+ return true;
803
+ }
804
+ }
805
+ return false;
806
+ }
807
 
808
+ /**
809
+ * Determine if the browser is iCab or not (last updated 1.7)
810
+ * @return boolean True if the browser is iCab otherwise false
811
+ */
812
+ protected function checkBrowserIcab()
813
+ {
814
+ if (stripos($this->_agent, 'icab') !== false) {
815
+ $aversion = explode(' ', stristr(str_replace('/', ' ', $this->_agent), 'icab'));
816
+ if (isset($aversion[1])) {
817
+ $this->setVersion($aversion[1]);
818
+ $this->setBrowser(self::BROWSER_ICAB);
819
+ return true;
820
  }
821
+ }
822
+ return false;
823
+ }
824
 
825
+ /**
826
+ * Determine if the browser is OmniWeb or not (last updated 1.7)
827
+ * @return boolean True if the browser is OmniWeb otherwise false
828
+ */
829
+ protected function checkBrowserOmniWeb()
830
+ {
831
+ if (stripos($this->_agent, 'omniweb') !== false) {
832
+ $aresult = explode('/', stristr($this->_agent, 'omniweb'));
833
+ $aversion = explode(' ', isset($aresult[1]) ? $aresult[1] : "");
834
+ $this->setVersion($aversion[0]);
835
+ $this->setBrowser(self::BROWSER_OMNIWEB);
836
+ return true;
837
+ }
838
+ return false;
839
+ }
840
 
841
+ /**
842
+ * Determine if the browser is Phoenix or not (last updated 1.7)
843
+ * @return boolean True if the browser is Phoenix otherwise false
844
+ */
845
+ protected function checkBrowserPhoenix()
846
+ {
847
+ if (stripos($this->_agent, 'Phoenix') !== false) {
848
+ $aversion = explode('/', stristr($this->_agent, 'Phoenix'));
849
+ if (isset($aversion[1])) {
850
+ $this->setVersion($aversion[1]);
851
+ $this->setBrowser(self::BROWSER_PHOENIX);
852
+ return true;
853
+ }
854
+ }
855
+ return false;
856
+ }
857
 
858
+ /**
859
+ * Determine if the browser is Firebird or not (last updated 1.7)
860
+ * @return boolean True if the browser is Firebird otherwise false
861
+ */
862
+ protected function checkBrowserFirebird()
863
+ {
864
+ if (stripos($this->_agent, 'Firebird') !== false) {
865
+ $aversion = explode('/', stristr($this->_agent, 'Firebird'));
866
+ if (isset($aversion[1])) {
867
+ $this->setVersion($aversion[1]);
868
+ $this->setBrowser(self::BROWSER_FIREBIRD);
869
+ return true;
870
  }
871
+ }
872
+ return false;
873
+ }
874
 
875
+ /**
876
+ * Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7)
877
+ * NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008)
878
+ * @return boolean True if the browser is Netscape Navigator 9+ otherwise false
879
+ */
880
+ protected function checkBrowserNetscapeNavigator9Plus()
881
+ {
882
+ if (stripos($this->_agent, 'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i', $this->_agent, $matches)) {
883
+ $this->setVersion($matches[1]);
884
+ $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
885
+ return true;
886
+ } else if (stripos($this->_agent, 'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i', $this->_agent, $matches)) {
887
+ $this->setVersion($matches[1]);
888
+ $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
889
+ return true;
890
+ }
891
+ return false;
892
+ }
893
 
894
+ /**
895
+ * Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7)
896
+ * @return boolean True if the browser is Shiretoko otherwise false
897
+ */
898
+ protected function checkBrowserShiretoko()
899
+ {
900
+ if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i', $this->_agent, $matches)) {
901
+ $this->setVersion($matches[1]);
902
+ $this->setBrowser(self::BROWSER_SHIRETOKO);
903
+ return true;
904
+ }
905
+ return false;
906
+ }
907
+
908
+ /**
909
+ * Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7)
910
+ * @return boolean True if the browser is Ice Cat otherwise false
911
+ */
912
+ protected function checkBrowserIceCat()
913
+ {
914
+ if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i', $this->_agent, $matches)) {
915
+ $this->setVersion($matches[1]);
916
+ $this->setBrowser(self::BROWSER_ICECAT);
917
+ return true;
918
+ }
919
+ return false;
920
+ }
921
 
922
+ /**
923
+ * Determine if the browser is Nokia or not (last updated 1.7)
924
+ * @return boolean True if the browser is Nokia otherwise false
925
+ */
926
+ protected function checkBrowserNokia()
927
+ {
928
+ if (preg_match("/Nokia([^\/]+)\/([^ SP]+)/i", $this->_agent, $matches)) {
929
+ $this->setVersion($matches[2]);
930
+ if (stripos($this->_agent, 'Series60') !== false || strpos($this->_agent, 'S60') !== false) {
931
+ $this->setBrowser(self::BROWSER_NOKIA_S60);
932
+ } else {
933
+ $this->setBrowser(self::BROWSER_NOKIA);
934
  }
935
+ $this->setMobile(true);
936
+ return true;
937
+ }
938
+ return false;
939
+ }
940
 
941
+ /**
942
+ * Determine if the browser is Firefox or not (last updated 1.7)
943
+ * @return boolean True if the browser is Firefox otherwise false
944
+ */
945
+ protected function checkBrowserFirefox()
946
+ {
947
+ if (stripos($this->_agent, 'safari') === false) {
948
+ if (preg_match("/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches)) {
949
+ $this->setVersion($matches[1]);
950
+ $this->setBrowser(self::BROWSER_FIREFOX);
951
+ //Firefox on Android
952
+ if (stripos($this->_agent, 'Android') !== false) {
953
+ if (stripos($this->_agent, 'Mobile') !== false) {
954
+ $this->setMobile(true);
955
  } else {
956
+ $this->setTablet(true);
957
  }
 
 
 
958
  }
959
+ return true;
960
+ } else if (preg_match("/Firefox$/i", $this->_agent, $matches)) {
961
+ $this->setVersion("");
962
+ $this->setBrowser(self::BROWSER_FIREFOX);
963
+ return true;
964
+ }
965
+ }
966
+ return false;
967
+ }
968
 
969
+ /**
970
+ * Determine if the browser is Firefox or not (last updated 1.7)
971
+ * @return boolean True if the browser is Firefox otherwise false
972
+ */
973
+ protected function checkBrowserIceweasel()
974
+ {
975
+ if (stripos($this->_agent, 'Iceweasel') !== false) {
976
+ $aresult = explode('/', stristr($this->_agent, 'Iceweasel'));
977
+ if (isset($aresult[1])) {
978
+ $aversion = explode(' ', $aresult[1]);
979
+ $this->setVersion($aversion[0]);
980
+ $this->setBrowser(self::BROWSER_ICEWEASEL);
981
+ return true;
982
  }
983
+ }
984
+ return false;
985
+ }
986
 
987
+ /**
988
+ * Determine if the browser is Mozilla or not (last updated 1.7)
989
+ * @return boolean True if the browser is Mozilla otherwise false
990
+ */
991
+ protected function checkBrowserMozilla()
992
+ {
993
+ if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
994
+ $aversion = explode(' ', stristr($this->_agent, 'rv:'));
995
+ preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent, $aversion);
996
+ $this->setVersion(str_replace('rv:', '', $aversion[0]));
997
+ $this->setBrowser(self::BROWSER_MOZILLA);
998
+ return true;
999
+ } else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
1000
+ $aversion = explode('', stristr($this->_agent, 'rv:'));
1001
+ $this->setVersion(str_replace('rv:', '', $aversion[0]));
1002
+ $this->setBrowser(self::BROWSER_MOZILLA);
1003
+ return true;
1004
+ } else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i', $this->_agent, $matches) && stripos($this->_agent, 'netscape') === false) {
1005
+ $this->setVersion($matches[1]);
1006
+ $this->setBrowser(self::BROWSER_MOZILLA);
1007
+ return true;
1008
+ }
1009
+ return false;
1010
+ }
1011
 
1012
+ /**
1013
+ * Determine if the browser is Lynx or not (last updated 1.7)
1014
+ * @return boolean True if the browser is Lynx otherwise false
1015
+ */
1016
+ protected function checkBrowserLynx()
1017
+ {
1018
+ if (stripos($this->_agent, 'lynx') !== false) {
1019
+ $aresult = explode('/', stristr($this->_agent, 'Lynx'));
1020
+ $aversion = explode(' ', (isset($aresult[1]) ? $aresult[1] : ""));
1021
+ $this->setVersion($aversion[0]);
1022
+ $this->setBrowser(self::BROWSER_LYNX);
1023
+ return true;
1024
+ }
1025
+ return false;
1026
+ }
1027
 
1028
+ /**
1029
+ * Determine if the browser is Amaya or not (last updated 1.7)
1030
+ * @return boolean True if the browser is Amaya otherwise false
1031
+ */
1032
+ protected function checkBrowserAmaya()
1033
+ {
1034
+ if (stripos($this->_agent, 'amaya') !== false) {
1035
+ $aresult = explode('/', stristr($this->_agent, 'Amaya'));
1036
+ if (isset($aresult[1])) {
1037
+ $aversion = explode(' ', $aresult[1]);
1038
+ $this->setVersion($aversion[0]);
1039
+ $this->setBrowser(self::BROWSER_AMAYA);
1040
+ return true;
1041
  }
1042
+ }
1043
+ return false;
1044
+ }
1045
 
1046
+ /**
1047
+ * Determine if the browser is Safari or not (last updated 1.7)
1048
+ * @return boolean True if the browser is Safari otherwise false
1049
+ */
1050
+ protected function checkBrowserSafari()
1051
+ {
1052
+ if (stripos($this->_agent, 'Safari') !== false
1053
+ && stripos($this->_agent, 'iPhone') === false
1054
+ && stripos($this->_agent, 'iPod') === false) {
1055
+
1056
+ $aresult = explode('/', stristr($this->_agent, 'Version'));
1057
+ if (isset($aresult[1])) {
1058
+ $aversion = explode(' ', $aresult[1]);
1059
+ $this->setVersion($aversion[0]);
1060
+ } else {
1061
+ $this->setVersion(self::VERSION_UNKNOWN);
1062
+ }
1063
+ $this->setBrowser(self::BROWSER_SAFARI);
1064
+ return true;
1065
+ }
1066
+ return false;
1067
+ }
1068
 
1069
+ /**
1070
+ * Detect if URL is loaded from FacebookExternalHit
1071
+ * @return boolean True if it detects FacebookExternalHit otherwise false
1072
+ */
1073
+ protected function checkFacebookExternalHit()
1074
+ {
1075
+ if(stristr($this->_agent,'FacebookExternalHit'))
1076
+ {
1077
+ $this->setRobot(true);
1078
+ $this->setFacebook(true);
1079
+ return true;
1080
+ }
1081
+ return false;
1082
+ }
1083
 
1084
+ /**
1085
+ * Detect if URL is being loaded from internal Facebook browser
1086
+ * @return boolean True if it detects internal Facebook browser otherwise false
1087
+ */
1088
+ protected function checkForFacebookIos()
1089
+ {
1090
+ if(stristr($this->_agent,'FBIOS'))
1091
+ {
1092
+ $this->setFacebook(true);
1093
+ return true;
1094
+ }
1095
+ return false;
1096
+ }
1097
 
1098
+ /**
1099
+ * Detect Version for the Safari browser on iOS devices
1100
+ * @return boolean True if it detects the version correctly otherwise false
1101
+ */
1102
+ protected function getSafariVersionOnIos()
1103
+ {
1104
+ $aresult = explode('/',stristr($this->_agent,'Version'));
1105
+ if( isset($aresult[1]) )
1106
+ {
1107
+ $aversion = explode(' ',$aresult[1]);
1108
+ $this->setVersion($aversion[0]);
1109
+ return true;
1110
+ }
1111
+ return false;
1112
+ }
 
1113
 
1114
+ /**
1115
+ * Detect Version for the Chrome browser on iOS devices
1116
+ * @return boolean True if it detects the version correctly otherwise false
1117
+ */
1118
+ protected function getChromeVersionOnIos()
1119
+ {
1120
+ $aresult = explode('/',stristr($this->_agent,'CriOS'));
1121
+ if( isset($aresult[1]) )
1122
+ {
1123
+ $aversion = explode(' ',$aresult[1]);
1124
+ $this->setVersion($aversion[0]);
1125
+ $this->setBrowser(self::BROWSER_CHROME);
1126
+ return true;
1127
+ }
1128
+ return false;
1129
+ }
1130
 
1131
+ /**
1132
+ * Determine if the browser is iPhone or not (last updated 1.7)
1133
+ * @return boolean True if the browser is iPhone otherwise false
1134
+ */
1135
+ protected function checkBrowseriPhone() {
1136
+ if( stripos($this->_agent,'iPhone') !== false ) {
1137
+ $this->setVersion(self::VERSION_UNKNOWN);
1138
+ $this->setBrowser(self::BROWSER_IPHONE);
1139
+ $this->getSafariVersionOnIos();
1140
+ $this->getChromeVersionOnIos();
1141
+ $this->checkForFacebookIos();
1142
+ $this->setMobile(true);
1143
+ return true;
1144
+ }
1145
+ return false;
1146
+ }
1147
 
1148
+ /**
1149
+ * Determine if the browser is iPad or not (last updated 1.7)
1150
+ * @return boolean True if the browser is iPad otherwise false
1151
+ */
1152
+ protected function checkBrowseriPad() {
1153
+ if( stripos($this->_agent,'iPad') !== false ) {
1154
+ $this->setVersion(self::VERSION_UNKNOWN);
1155
+ $this->setBrowser(self::BROWSER_IPAD);
1156
+ $this->getSafariVersionOnIos();
1157
+ $this->getChromeVersionOnIos();
1158
+ $this->checkForFacebookIos();
1159
+ $this->setTablet(true);
1160
+ return true;
1161
+ }
1162
+ return false;
1163
+ }
1164
 
1165
+ /**
1166
+ * Determine if the browser is iPod or not (last updated 1.7)
1167
+ * @return boolean True if the browser is iPod otherwise false
1168
+ */
1169
+ protected function checkBrowseriPod() {
1170
+ if( stripos($this->_agent,'iPod') !== false ) {
1171
+ $this->setVersion(self::VERSION_UNKNOWN);
1172
+ $this->setBrowser(self::BROWSER_IPOD);
1173
+ $this->getSafariVersionOnIos();
1174
+ $this->getChromeVersionOnIos();
1175
+ $this->checkForFacebookIos();
1176
+ $this->setMobile(true);
1177
+ return true;
1178
+ }
1179
+ return false;
1180
+ }
1181
 
1182
+ /**
1183
+ * Determine if the browser is Android or not (last updated 1.7)
1184
+ * @return boolean True if the browser is Android otherwise false
1185
+ */
1186
+ protected function checkBrowserAndroid()
1187
+ {
1188
+ if (stripos($this->_agent, 'Android') !== false) {
1189
+ $aresult = explode(' ', stristr($this->_agent, 'Android'));
1190
+ if (isset($aresult[1])) {
1191
+ $aversion = explode(' ', $aresult[1]);
1192
+ $this->setVersion($aversion[0]);
1193
+ } else {
1194
+ $this->setVersion(self::VERSION_UNKNOWN);
1195
  }
1196
+ if (stripos($this->_agent, 'Mobile') !== false) {
1197
+ $this->setMobile(true);
1198
+ } else {
1199
+ $this->setTablet(true);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1200
  }
1201
+ $this->setBrowser(self::BROWSER_ANDROID);
1202
+ return true;
1203
+ }
1204
+ return false;
1205
+ }
1206
+
1207
+ /**
1208
+ * Determine the user's platform (last updated 1.7)
1209
+ */
1210
+ protected function checkPlatform()
1211
+ {
1212
+ if (stripos($this->_agent, 'windows') !== false)
1213
+ {
1214
+ $this->_platform = self::PLATFORM_WINDOWS;
1215
+ }
1216
+ else if (stripos($this->_agent, 'iPad') !== false)
1217
+ {
1218
+ $this->_platform = self::PLATFORM_IPAD;
1219
+ }
1220
+ else if (stripos($this->_agent, 'iPod') !== false)
1221
+ {
1222
+ $this->_platform = self::PLATFORM_IPOD;
1223
+ }
1224
+ else if (stripos($this->_agent, 'iPhone') !== false)
1225
+ {
1226
+ $this->_platform = self::PLATFORM_IPHONE;
1227
+ }
1228
+ elseif (stripos($this->_agent, 'mac') !== false)
1229
+ {
1230
+ $this->_platform = self::PLATFORM_APPLE;
1231
+ }
1232
+ elseif (stripos($this->_agent, 'android') !== false)
1233
+ {
1234
+ $this->_platform = self::PLATFORM_ANDROID;
1235
+ }
1236
+ elseif (stripos($this->_agent, 'linux') !== false)
1237
+ {
1238
+ $this->_platform = self::PLATFORM_LINUX;
1239
+ }
1240
+ else if (stripos($this->_agent, 'Nokia') !== false)
1241
+ {
1242
+ $this->_platform = self::PLATFORM_NOKIA;
1243
+ }
1244
+ else if (stripos($this->_agent, 'BlackBerry') !== false)
1245
+ {
1246
+ $this->_platform = self::PLATFORM_BLACKBERRY;
1247
+ }
1248
+ elseif (stripos($this->_agent, 'FreeBSD') !== false)
1249
+ {
1250
+ $this->_platform = self::PLATFORM_FREEBSD;
1251
+ }
1252
+ elseif (stripos($this->_agent, 'OpenBSD') !== false)
1253
+ {
1254
+ $this->_platform = self::PLATFORM_OPENBSD;
1255
+ }
1256
+ elseif (stripos($this->_agent, 'NetBSD') !== false)
1257
+ {
1258
+ $this->_platform = self::PLATFORM_NETBSD;
1259
+ }
1260
+ elseif (stripos($this->_agent, 'OpenSolaris') !== false)
1261
+ {
1262
+ $this->_platform = self::PLATFORM_OPENSOLARIS;
1263
+ }
1264
+ elseif (stripos($this->_agent, 'SunOS') !== false)
1265
+ {
1266
+ $this->_platform = self::PLATFORM_SUNOS;
1267
+ }
1268
+ elseif (stripos($this->_agent, 'OS\/2') !== false)
1269
+ {
1270
+ $this->_platform = self::PLATFORM_OS2;
1271
+ }
1272
+ elseif (stripos($this->_agent, 'BeOS') !== false)
1273
+ {
1274
+ $this->_platform = self::PLATFORM_BEOS;
1275
+ }
1276
+ elseif (stripos($this->_agent, 'win') !== false)
1277
+ {
1278
+ $this->_platform = self::PLATFORM_WINDOWS;
1279
  }
1280
+
1281
+ }
1282
+ }
ReduxCore/inc/class.redux_admin_notices.php CHANGED
@@ -53,7 +53,7 @@
53
 
54
  $add_style = '';
55
  if ( strpos( $notice['type'], 'redux-message' ) != false ) {
56
- $add_style = 'style="border-left: 4px solid ' . esc_attr($notice['color']) . '!important;"';
57
  }
58
 
59
  if ( true == $notice['dismiss'] ) {
@@ -78,36 +78,36 @@
78
  $pageName = empty( $_GET['page'] ) ? '&amp;page=' . self::$_parent->args['page_slug'] : '&amp;page=' . $_GET['page'];
79
 
80
  // Ditto for the current tab.
81
- $curTab = empty( $_GET['tab'] ) ? '&amp;tab=0' : '&amp;tab=' . $_GET['tab'];
82
  }
83
 
84
  global $wp_version;
85
  // Print the notice with the dismiss link
86
  if ( version_compare( $wp_version, '4.2', '>' ) ) {
87
  $output = "";
88
- $css_id = esc_attr($notice['id']) . $pageName . $curTab;
89
- $css_class = esc_attr($notice['type']) . 'redux-notice notice is-dismissible redux-notice';
90
  $output .= "<div {$add_style} id='$css_id' class='$css_class'> \n";
91
- $nonce = wp_create_nonce( $notice['id'] . $pageName . $curTab . 'nonce' );
92
- $output .= "<input type='hidden' class='dismiss_data' id='" . esc_attr($notice['id']) . $pageName . $curTab . "' value='{$nonce}'> \n";
93
- $output .= '<p>' . wp_kses_post($notice['msg']) . '</p>';
94
  $output .= "</div> \n";
95
  echo $output;
96
  } else {
97
- echo '<div ' . $add_style . ' class="' . esc_attr($notice['type']) . ' notice is-dismissable"><p>' . wp_kses_post($notice['msg']) . '&nbsp;&nbsp;<a href="?dismiss=true&amp;id=' . esc_attr($notice['id']) . $pageName . $curTab . '">' . esc_html__( 'Dismiss', 'redux-framework' ) . '</a>.</p></div>';
98
  }
99
  }
100
  } else {
101
  // Standard notice
102
- echo '<div ' . $add_style . ' class="' . esc_attr($notice['type']) . ' notice"><p>' . wp_kses_post($notice['msg']) . '</a>.</p></div>';
103
  }
104
  ?>
105
  <script>
106
  jQuery( document ).ready(
107
  function( $ ) {
108
- $( '.redux-notice.is-dismissible' ).on(
109
- 'click', '.notice-dismiss', function( event ) {
110
- var $data = $( this ).parent( '.redux-notice:first' ).find( '.dismiss_data' );
111
  $.post(
112
  ajaxurl, {
113
  action: 'redux_hide_admin_notice',
@@ -169,15 +169,16 @@
169
  */
170
  public static function dismissAdminNoticeAJAX() {
171
  global $current_user;
172
- if ( ! wp_verify_nonce( $_POST['nonce'], $_POST['id'] . 'nonce' ) ) {
173
- die(0);
174
- } else {
175
- // Get the user id
176
- $userid = $current_user->ID;
177
 
178
- // Get the notice id
179
- $id = $_POST['id'];
 
 
 
180
 
 
 
 
181
  // Add the dismiss request to the user meta.
182
  update_user_meta( $userid, 'ignore_' . $id, true );
183
  }
53
 
54
  $add_style = '';
55
  if ( strpos( $notice['type'], 'redux-message' ) != false ) {
56
+ $add_style = 'style="border-left: 4px solid ' . esc_attr( $notice['color'] ) . '!important;"';
57
  }
58
 
59
  if ( true == $notice['dismiss'] ) {
78
  $pageName = empty( $_GET['page'] ) ? '&amp;page=' . self::$_parent->args['page_slug'] : '&amp;page=' . $_GET['page'];
79
 
80
  // Ditto for the current tab.
81
+ $curTab = empty( $_GET['tab'] ) ? '&amp;tab=0' : '&amp;tab=' . esc_attr( $_GET['tab'] );
82
  }
83
 
84
  global $wp_version;
85
  // Print the notice with the dismiss link
86
  if ( version_compare( $wp_version, '4.2', '>' ) ) {
87
  $output = "";
88
+ $css_id = esc_attr( $notice['id'] ) . $pageName . $curTab;
89
+ $css_class = esc_attr( $notice['type'] ) . ' redux-notice notice is-dismissible redux-notice';
90
  $output .= "<div {$add_style} id='$css_id' class='$css_class'> \n";
91
+ $nonce = wp_create_nonce( $notice['id'] . $userid . 'nonce' );
92
+ $output .= "<input type='hidden' class='dismiss_data' id='" . esc_attr( $notice['id'] ) . $pageName . $curTab . "' value='{$nonce}'> \n";
93
+ $output .= '<p>' . wp_kses_post( $notice['msg'] ) . '</p>';
94
  $output .= "</div> \n";
95
  echo $output;
96
  } else {
97
+ echo '<div ' . $add_style . ' class="' . esc_attr( $notice['type'] ) . ' notice is-dismissable"><p>' . wp_kses_post( $notice['msg'] ) . '&nbsp;&nbsp;<a href="?dismiss=true&amp;id=' . esc_attr( $notice['id'] ) . $pageName . $curTab . '">' . esc_html__( 'Dismiss', 'redux-framework' ) . '</a>.</p></div>';
98
  }
99
  }
100
  } else {
101
  // Standard notice
102
+ echo '<div ' . $add_style . ' class="' . esc_attr( $notice['type'] ) . ' notice"><p>' . wp_kses_post( $notice['msg'] ) . '</a>.</p></div>';
103
  }
104
  ?>
105
  <script>
106
  jQuery( document ).ready(
107
  function( $ ) {
108
+ $( 'body' ).on(
109
+ 'click', '.redux-notice.is-dismissible .notice-dismiss', function( event ) {
110
+ var $data = $( this ).parent().find( '.dismiss_data' );
111
  $.post(
112
  ajaxurl, {
113
  action: 'redux_hide_admin_notice',
169
  */
170
  public static function dismissAdminNoticeAJAX() {
171
  global $current_user;
 
 
 
 
 
172
 
173
+ // Get the notice id
174
+ $id = explode( '&', $_POST['id'] );
175
+ $id = $id[0];
176
+ // Get the user id
177
+ $userid = $current_user->ID;
178
 
179
+ if ( ! wp_verify_nonce( $_POST['nonce'], $id . $userid . 'nonce' ) ) {
180
+ die( 0 );
181
+ } else {
182
  // Add the dismiss request to the user meta.
183
  update_user_meta( $userid, 'ignore_' . $id, true );
184
  }
ReduxCore/inc/class.redux_api.php CHANGED
@@ -256,7 +256,7 @@
256
  $section['id'] = time();
257
  } else {
258
  if ( isset( $section['title'] ) ) {
259
- $section['id'] = strtolower( sanitize_html_class( $section['title'] ) );
260
  } else {
261
  $section['id'] = time();
262
  }
256
  $section['id'] = time();
257
  } else {
258
  if ( isset( $section['title'] ) ) {
259
+ $section['id'] = strtolower( sanitize_title( $section['title'] ) );
260
  } else {
261
  $section['id'] = time();
262
  }
ReduxCore/inc/class.redux_filesystem.php CHANGED
@@ -125,6 +125,7 @@
125
 
126
  // Setup the filesystem with creds
127
  require_once ABSPATH . '/wp-admin/includes/template.php';
 
128
  require_once ABSPATH . '/wp-admin/includes/file.php';
129
 
130
  if ( $this->parent->args['menu_type'] == 'submenu' ) {
125
 
126
  // Setup the filesystem with creds
127
  require_once ABSPATH . '/wp-admin/includes/template.php';
128
+
129
  require_once ABSPATH . '/wp-admin/includes/file.php';
130
 
131
  if ( $this->parent->args['menu_type'] == 'submenu' ) {
ReduxCore/inc/class.redux_functions.php CHANGED
@@ -225,7 +225,7 @@
225
  } else {
226
 
227
  if ( empty( $check ) ) {
228
- $check = wp_remote_get( 'http://look.reduxframework.com/status.php?p=' . ReduxFramework::$_is_plugin );
229
  $check = json_decode( wp_remote_retrieve_body( $check ), true );
230
 
231
  if ( ! empty( $check ) && isset( $check['id'] ) ) {
@@ -239,9 +239,24 @@
239
  return "";
240
  }
241
  }
 
 
 
 
242
 
 
 
 
 
 
243
 
 
244
  }
 
 
 
245
 
 
 
246
  }
247
  }
225
  } else {
226
 
227
  if ( empty( $check ) ) {
228
+ $check = @wp_remote_get( 'http://look.reduxframework.com/status.php?p=' . ReduxFramework::$_is_plugin );
229
  $check = json_decode( wp_remote_retrieve_body( $check ), true );
230
 
231
  if ( ! empty( $check ) && isset( $check['id'] ) ) {
239
  return "";
240
  }
241
  }
242
+ }
243
+
244
+ public static function dat($fname, $opt_name){
245
+ $name = apply_filters('redux/' . $opt_name . '/aDBW_filter', $fname);
246
 
247
+ return $name;
248
+ }
249
+
250
+ public static function bub($fname, $opt_name){
251
+ $name = apply_filters('redux/' . $opt_name . '/aNF_filter', $fname);
252
 
253
+ return $name;
254
  }
255
+
256
+ public static function yo($fname, $opt_name){
257
+ $name = apply_filters('redux/' . $opt_name . '/aNFM_filter', $fname);
258
 
259
+ return $name;
260
+ }
261
  }
262
  }
ReduxCore/inc/class.redux_helpers.php CHANGED
@@ -96,7 +96,12 @@
96
  );
97
 
98
  if ( ! function_exists( 'get_plugin_data' ) ) {
99
- require_once ABSPATH . 'wp-admin/includes/admin.php';
 
 
 
 
 
100
  }
101
 
102
  $plugins = array();
@@ -364,11 +369,12 @@
364
  }
365
  }
366
 
367
- public static function localize($localize) {
368
- $redux = ReduxFrameworkInstances::get_instance($localize['args']['opt_name']);
369
- $nonce = wp_create_nonce( 'redux-ads-nonce' );
370
- $base = admin_url( 'admin-ajax.php' ) . '?action=redux_p&nonce=' . $nonce . '&url=';
371
  $localize['rAds'] = Redux_Helpers::rURL_fix( $base, $redux->args['opt_name'] );
 
372
  return $localize;
373
  }
374
 
@@ -483,7 +489,7 @@
483
  $sysinfo['wp_remote_post_error'] = $response->get_error_message();
484
  }
485
 
486
- $response = wp_remote_get( 'http://reduxframework.com/wp-admin/admin-ajax.php?action=get_redux_extensions' );
487
 
488
  if ( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) {
489
  $sysinfo['wp_remote_get'] = 'true';
@@ -574,7 +580,7 @@
574
  }
575
 
576
  private static function getReduxTemplates( $custom_template_path ) {
577
- $filesystem = Redux_Filesystem::get_instance();
578
  $template_paths = array( 'ReduxFramework' => ReduxFramework::$_dir . 'templates/panel' );
579
  $scanned_files = array();
580
  $found_files = array();
@@ -640,7 +646,7 @@
640
  return $result;
641
  }
642
 
643
- public static function get_template_version( $file ) {
644
  $filesystem = Redux_Filesystem::get_instance();
645
  // Avoid notices if file does not exist
646
  if ( ! file_exists( $file ) ) {
@@ -694,9 +700,5 @@
694
 
695
  return $ret;
696
  }
697
-
698
  }
699
- }
700
-
701
-
702
-
96
  );
97
 
98
  if ( ! function_exists( 'get_plugin_data' ) ) {
99
+ if ( file_exists( ABSPATH . 'wp-admin/includes/plugin.php' ) ) {
100
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
101
+ }
102
+ if ( file_exists( ABSPATH . 'wp-admin/includes/admin.php' ) ) {
103
+ require_once ABSPATH . 'wp-admin/includes/admin.php';
104
+ }
105
  }
106
 
107
  $plugins = array();
369
  }
370
  }
371
 
372
+ public static function localize( $localize ) {
373
+ $redux = ReduxFrameworkInstances::get_instance( $localize['args']['opt_name'] );
374
+ $nonce = wp_create_nonce( 'redux-ads-nonce' );
375
+ $base = admin_url( 'admin-ajax.php' ) . '?action=redux_p&nonce=' . $nonce . '&url=';
376
  $localize['rAds'] = Redux_Helpers::rURL_fix( $base, $redux->args['opt_name'] );
377
+
378
  return $localize;
379
  }
380
 
489
  $sysinfo['wp_remote_post_error'] = $response->get_error_message();
490
  }
491
 
492
+ $response = @wp_remote_get( 'http://reduxframework.com/wp-admin/admin-ajax.php?action=get_redux_extensions' );
493
 
494
  if ( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) {
495
  $sysinfo['wp_remote_get'] = 'true';
580
  }
581
 
582
  private static function getReduxTemplates( $custom_template_path ) {
583
+ $filesystem = Redux_Filesystem::get_instance();
584
  $template_paths = array( 'ReduxFramework' => ReduxFramework::$_dir . 'templates/panel' );
585
  $scanned_files = array();
586
  $found_files = array();
646
  return $result;
647
  }
648
 
649
+ public static function get_template_version( $file ) {
650
  $filesystem = Redux_Filesystem::get_instance();
651
  // Avoid notices if file does not exist
652
  if ( ! file_exists( $file ) ) {
700
 
701
  return $ret;
702
  }
 
703
  }
704
+ }
 
 
 
ReduxCore/inc/class.thirdparty.fixes.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Fix for the GT3 page builder: http://www.gt3themes.com/wordpress-gt3-page-builder-plugin/
3
+ /** @global string $pagenow */
4
+ if ( has_action( 'ecpt_field_options_' ) ) {
5
+ global $pagenow;
6
+ if ( $pagenow === 'admin.php' ) {
7
+
8
+ remove_action( 'admin_init', 'pb_admin_init' );
9
+ }
10
+ }
ReduxCore/inc/extensions/customizer/extension_customizer.php CHANGED
@@ -139,7 +139,7 @@
139
 
140
  function enqueue_controls_css() {
141
 
142
- include_once( ReduxFramework::$_dir . 'core/enqueue.php' );
143
  $enqueue = new reduxCoreEnqueue ( $this->parent );
144
  $enqueue->get_warnings_and_errors_array();
145
  $enqueue->init();
@@ -262,23 +262,23 @@
262
  public function _register_customizer_controls( $wp_customize ) {
263
 
264
  if ( ! class_exists( 'Redux_Customizer_Section' ) ) {
265
- include_once dirname( __FILE__ ) . '/inc/customizer_section.php';
266
  if ( method_exists( $wp_customize, 'register_section_type' ) ) {
267
  $wp_customize->register_section_type( 'Redux_Customizer_Section' );
268
  }
269
  }
270
  if ( ! class_exists( 'Redux_Customizer_Panel' ) ) {
271
- include_once dirname( __FILE__ ) . '/inc/customizer_panel.php';
272
  if ( method_exists( $wp_customize, 'register_panel_type' ) ) {
273
  $wp_customize->register_panel_type( 'Redux_Customizer_Panel' );
274
  }
275
  }
276
  if ( ! class_exists( 'Redux_Customizer_Control' ) ) {
277
- include_once dirname( __FILE__ ) . '/inc/customizer_control.php';
278
  }
279
 
280
- include_once dirname( __FILE__ ) . '/inc/customizer_fields.php';
281
- include_once dirname( __FILE__ ) . '/inc/customizer_devs.php';
282
 
283
  do_action( "redux/extension/customizer/control/includes" );
284
 
139
 
140
  function enqueue_controls_css() {
141
 
142
+ require_once ReduxFramework::$_dir . 'core/enqueue.php';
143
  $enqueue = new reduxCoreEnqueue ( $this->parent );
144
  $enqueue->get_warnings_and_errors_array();
145
  $enqueue->init();
262
  public function _register_customizer_controls( $wp_customize ) {
263
 
264
  if ( ! class_exists( 'Redux_Customizer_Section' ) ) {
265
+ require_once dirname( __FILE__ ) . '/inc/customizer_section.php';
266
  if ( method_exists( $wp_customize, 'register_section_type' ) ) {
267
  $wp_customize->register_section_type( 'Redux_Customizer_Section' );
268
  }
269
  }
270
  if ( ! class_exists( 'Redux_Customizer_Panel' ) ) {
271
+ require_once dirname( __FILE__ ) . '/inc/customizer_panel.php';
272
  if ( method_exists( $wp_customize, 'register_panel_type' ) ) {
273
  $wp_customize->register_panel_type( 'Redux_Customizer_Panel' );
274
  }
275
  }
276
  if ( ! class_exists( 'Redux_Customizer_Control' ) ) {
277
+ require_once dirname( __FILE__ ) . '/inc/customizer_control.php';
278
  }
279
 
280
+ require_once dirname( __FILE__ ) . '/inc/customizer_fields.php';
281
+ require_once dirname( __FILE__ ) . '/inc/customizer_devs.php';
282
 
283
  do_action( "redux/extension/customizer/control/includes" );
284
 
ReduxCore/inc/fields/border/field_border.php CHANGED
@@ -125,10 +125,10 @@ if ( ! class_exists( 'ReduxFramework_border' ) ) {
125
  echo '<div class="field-border-input input-prepend"><span class="add-on"><i class="el el-fullscreen icon-large"></i></span><input type="text" class="redux-border-all redux-border-input mini ' . $this->field['class'] . '" placeholder="' . __( 'All', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-all" value="' . $this->value['top'] . '"></div>';
126
  }
127
 
128
- echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-top" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-top]" value="' . ( $this->value['top'] ? $this->value['top'] . 'px' : '' ) . '">';
129
- echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-right" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-right]" value="' . ( $this->value['right'] ? $this->value['right'] . 'px' : '' ) . '">';
130
- echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-bottom" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-bottom]" value="' . ( $this->value['bottom'] ? $this->value['bottom'] . 'px' : '' ) . '">';
131
- echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-left" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-left]" value="' . ( $this->value['left'] ? $this->value['left'] . 'px' : '' ) . '">';
132
 
133
  if ( ! isset( $this->field['all'] ) || $this->field['all'] !== true ) {
134
  /**
125
  echo '<div class="field-border-input input-prepend"><span class="add-on"><i class="el el-fullscreen icon-large"></i></span><input type="text" class="redux-border-all redux-border-input mini ' . $this->field['class'] . '" placeholder="' . __( 'All', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-all" value="' . $this->value['top'] . '"></div>';
126
  }
127
 
128
+ echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-top" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-top]" value="' . ( isset($this->value['top']) ? $this->value['top'] . 'px' : '' ) . '">';
129
+ echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-right" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-right]" value="' . ( isset($this->value['right']) ? $this->value['right'] . 'px' : '' ) . '">';
130
+ echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-bottom" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-bottom]" value="' . ( isset($this->value['bottom']) ? $this->value['bottom'] . 'px' : '' ) . '">';
131
+ echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-left" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-left]" value="' . ( isset($this->value['left']) ? $this->value['left'] . 'px' : '' ) . '">';
132
 
133
  if ( ! isset( $this->field['all'] ) || $this->field['all'] !== true ) {
134
  /**
ReduxCore/inc/fields/editor/field_editor.js CHANGED
@@ -12,7 +12,7 @@
12
 
13
  redux.field_objects = redux.field_objects || {};
14
  redux.field_objects.editor = redux.field_objects.editor || {};
15
-
16
  $( document ).ready(
17
  function() {
18
  //redux.field_objects.editor.init();
@@ -22,8 +22,10 @@
22
  redux.field_objects.editor.init = function( selector ) {
23
  setTimeout(
24
  function() {
25
- for ( var i = 0; i < tinymce.editors.length; i++ ) {
26
- redux.field_objects.editor.onChange( i );
 
 
27
  }
28
  }, 1000
29
  );
12
 
13
  redux.field_objects = redux.field_objects || {};
14
  redux.field_objects.editor = redux.field_objects.editor || {};
15
+
16
  $( document ).ready(
17
  function() {
18
  //redux.field_objects.editor.init();
22
  redux.field_objects.editor.init = function( selector ) {
23
  setTimeout(
24
  function() {
25
+ if (typeof(tinymce) !== 'undefined') {
26
+ for ( var i = 0; i < tinymce.editors.length; i++ ) {
27
+ redux.field_objects.editor.onChange( i );
28
+ }
29
  }
30
  }, 1000
31
  );
ReduxCore/inc/fields/editor/field_editor.min.js CHANGED
@@ -1 +1 @@
1
- !function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.editor=redux.field_objects.editor||{},a(document).ready(function(){}),redux.field_objects.editor.init=function(a){setTimeout(function(){for(var a=0;a<tinymce.editors.length;a++)redux.field_objects.editor.onChange(a)},1e3)},redux.field_objects.editor.onChange=function(b){tinymce.editors[b].on("change",function(b){var c=jQuery(b.target.contentAreaContainer);0!==c.parents(".redux-container-editor:first").length&&redux_change(a(".wp-editor-area"))})}}(jQuery);
1
+ !function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.editor=redux.field_objects.editor||{},a(document).ready(function(){}),redux.field_objects.editor.init=function(a){setTimeout(function(){if("undefined"!=typeof tinymce)for(var a=0;a<tinymce.editors.length;a++)redux.field_objects.editor.onChange(a)},1e3)},redux.field_objects.editor.onChange=function(b){tinymce.editors[b].on("change",function(b){var c=jQuery(b.target.contentAreaContainer);0!==c.parents(".redux-container-editor:first").length&&redux_change(a(".wp-editor-area"))})}}(jQuery);
ReduxCore/inc/fields/gallery/field_gallery.js CHANGED
@@ -40,6 +40,13 @@
40
  el.on(
41
  {
42
  click: function( event ) {
 
 
 
 
 
 
 
43
  var current_gallery = $( this ).closest( 'fieldset' );
44
 
45
  if ( event.currentTarget.id === 'clear-gallery' ) {
40
  el.on(
41
  {
42
  click: function( event ) {
43
+ // hide gallery settings used for posts/pages
44
+ wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({
45
+ template: function(view){
46
+ return;
47
+ }
48
+ });
49
+
50
  var current_gallery = $( this ).closest( 'fieldset' );
51
 
52
  if ( event.currentTarget.id === 'clear-gallery' ) {
ReduxCore/inc/fields/gallery/field_gallery.min.js CHANGED
@@ -1 +1 @@
1
- !function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.gallery=redux.field_objects.gallery||{},a(document).ready(function(){}),redux.field_objects.gallery.init=function(b){b||(b=a(document).find(".redux-container-gallery:visible")),a(b).each(function(){var b=a(this),c=b;b.hasClass("redux-field-container")||(c=b.parents(".redux-field-container:first")),c.is(":hidden")||c.hasClass("redux-field-init")&&(c.removeClass("redux-field-init"),b.on({click:function(b){var c=a(this).closest("fieldset");if("clear-gallery"===b.currentTarget.id){c.find(".gallery_values").val("");return void c.find(".screenshot").html("")}if("undefined"!=typeof wp&&wp.media&&wp.media.gallery){b.preventDefault();var d,e=(a(this),c.find(".gallery_values").val());d=e?'[gallery ids="'+e+'"]':'[gallery ids="0"]';var f=wp.media.gallery.edit(d);return f.state("gallery-edit").on("update",function(a){c.find(".screenshot").html("");var b,d,e="",f=a.models.map(function(a){return b=a.toJSON(),d="undefined"!=typeof b.sizes.thumbnail?b.sizes.thumbnail.url:b.url,e="<a class='of-uploaded-image' href='"+d+"'><img class='redux-option-image' src='"+d+"' alt='' /></a>",c.find(".screenshot").append(e),a.id});c.find(".gallery_values").val(f.join(",")),redux_change(c.find(".gallery_values"))}),!1}}},".gallery-attachments"))})}}(jQuery);
1
+ !function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.gallery=redux.field_objects.gallery||{},a(document).ready(function(){}),redux.field_objects.gallery.init=function(b){b||(b=a(document).find(".redux-container-gallery:visible")),a(b).each(function(){var b=a(this),c=b;b.hasClass("redux-field-container")||(c=b.parents(".redux-field-container:first")),c.is(":hidden")||c.hasClass("redux-field-init")&&(c.removeClass("redux-field-init"),b.on({click:function(b){wp.media.view.Settings.Gallery=wp.media.view.Settings.Gallery.extend({template:function(a){}});var c=a(this).closest("fieldset");if("clear-gallery"===b.currentTarget.id){c.find(".gallery_values").val("");return void c.find(".screenshot").html("")}if("undefined"!=typeof wp&&wp.media&&wp.media.gallery){b.preventDefault();var d,e=(a(this),c.find(".gallery_values").val());d=e?'[gallery ids="'+e+'"]':'[gallery ids="0"]';var f=wp.media.gallery.edit(d);return f.state("gallery-edit").on("update",function(a){c.find(".screenshot").html("");var b,d,e="",f=a.models.map(function(a){return b=a.toJSON(),d="undefined"!=typeof b.sizes.thumbnail?b.sizes.thumbnail.url:b.url,e="<a class='of-uploaded-image' href='"+d+"'><img class='redux-option-image' src='"+d+"' alt='' /></a>",c.find(".screenshot").append(e),a.id});c.find(".gallery_values").val(f.join(",")),redux_change(c.find(".gallery_values"))}),!1}}},".gallery-attachments"))})}}(jQuery);
ReduxCore/inc/fields/raw/field_raw.php CHANGED
@@ -37,12 +37,12 @@
37
  }
38
 
39
  if ( ! empty( $this->field['content'] ) && isset( $this->field['content'] ) ) {
40
- if ( isset( $this->field['markdown'] ) && $this->field['markdown'] == true ) {
41
  require_once dirname( __FILE__ ) . "/parsedown.php";
42
  $Parsedown = new Parsedown();
43
- echo $Parsedown->text( wp_kses_post($this->field['content']) );
44
  } else {
45
- echo wp_kses_post($this->field['content']);
46
  }
47
  }
48
 
37
  }
38
 
39
  if ( ! empty( $this->field['content'] ) && isset( $this->field['content'] ) ) {
40
+ if ( isset( $this->field['markdown'] ) && $this->field['markdown'] == true && ! empty( $this->field['content'] ) ) {
41
  require_once dirname( __FILE__ ) . "/parsedown.php";
42
  $Parsedown = new Parsedown();
43
+ echo $Parsedown->text( $this->field['content'] );
44
  } else {
45
+ echo $this->field['content'];
46
  }
47
  }
48
 
ReduxCore/inc/fields/raw/parsedown.php CHANGED
@@ -11,1275 +11,1531 @@
11
  # For the full license information, view the LICENSE file that was distributed
12
  # with this source code.
13
  #
14
- # Modified by Dovy Paukstys to remove <? shortcode-like declaration.
15
  #
16
- #
17
-
18
- class Parsedown {
19
- #
20
- # Philosophy
21
 
22
- # Markdown is intended to be easy-to-read by humans - those of us who read
23
- # line by line, left to right, top to bottom. In order to take advantage of
24
- # this, Parsedown tries to read in a similar way. It breaks texts into
25
- # lines, it iterates through them and it looks at how they start and relate
26
- # to each other.
27
 
28
- #
29
- # ~
30
 
31
- function text( $text ) {
32
- # make sure no definitions are set
33
- $this->Definitions = array();
34
 
35
- # standardize line breaks
36
- $text = str_replace( "\r\n", "\n", $text );
37
- $text = str_replace( "\r", "\n", $text );
 
38
 
39
- # replace tabs with spaces
40
- $text = str_replace( "\t", ' ', $text );
41
 
42
- # remove surrounding line breaks
43
- $text = trim( $text, "\n" );
44
 
45
- # split text into lines
46
- $lines = explode( "\n", $text );
47
 
48
- # iterate through lines to identify blocks
49
- $markup = $this->lines( $lines );
50
 
51
- # trim line breaks
52
- $markup = trim( $markup, "\n" );
53
 
54
- return $markup;
55
- }
56
 
57
- #
58
- # Setters
59
- #
60
 
61
- private $breaksEnabled;
 
 
62
 
63
- function setBreaksEnabled( $breaksEnabled ) {
64
- $this->breaksEnabled = $breaksEnabled;
65
 
66
- return $this;
67
- }
68
 
69
- #
70
- # Lines
71
- #
72
 
73
- protected $BlockTypes = array(
74
- '#' => array( 'Atx' ),
75
- '*' => array( 'Rule', 'List' ),
76
- '+' => array( 'List' ),
77
- '-' => array( 'Setext', 'Table', 'Rule', 'List' ),
78
- '0' => array( 'List' ),
79
- '1' => array( 'List' ),
80
- '2' => array( 'List' ),
81
- '3' => array( 'List' ),
82
- '4' => array( 'List' ),
83
- '5' => array( 'List' ),
84
- '6' => array( 'List' ),
85
- '7' => array( 'List' ),
86
- '8' => array( 'List' ),
87
- '9' => array( 'List' ),
88
- ':' => array( 'Table' ),
89
- '<' => array( 'Comment', 'Markup' ),
90
- '=' => array( 'Setext' ),
91
- '>' => array( 'Quote' ),
92
- '_' => array( 'Rule' ),
93
- '`' => array( 'FencedCode' ),
94
- '|' => array( 'Table' ),
95
- '~' => array( 'FencedCode' ),
96
- );
97
 
98
- # ~
99
 
100
- protected $DefinitionTypes = array(
101
- '[' => array( 'Reference' ),
102
- );
103
 
104
- # ~
 
105
 
106
- protected $unmarkedBlockTypes = array(
107
- 'CodeBlock',
108
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
 
110
- #
111
- # Blocks
112
- #
113
 
114
- private function lines( array $lines ) {
115
- $CurrentBlock = null;
 
116
 
117
- foreach ( $lines as $line ) {
118
- if ( chop( $line ) === '' ) {
119
- if ( isset( $CurrentBlock ) ) {
120
- $CurrentBlock['interrupted'] = true;
121
- }
122
 
123
- continue;
124
- }
125
 
126
- $indent = 0;
 
 
127
 
128
- while ( isset( $line[ $indent ] ) and $line[ $indent ] === ' ' ) {
129
- $indent ++;
130
  }
 
131
 
132
- $text = $indent > 0 ? substr( $line, $indent ) : $line;
133
 
134
- # ~
 
 
 
135
 
136
- $Line = array( 'body' => $line, 'indent' => $indent, 'text' => $text );
 
 
137
 
138
- # ~
139
 
140
- if ( isset( $CurrentBlock['incomplete'] ) ) {
141
- $Block = $this->{'addTo' . $CurrentBlock['type']}( $Line, $CurrentBlock );
142
 
143
- if ( isset( $Block ) ) {
144
- $CurrentBlock = $Block;
 
145
 
146
- continue;
147
- } else {
148
- if ( method_exists( $this, 'complete' . $CurrentBlock['type'] ) ) {
149
- $CurrentBlock = $this->{'complete' . $CurrentBlock['type']}( $CurrentBlock );
150
- }
151
 
152
- unset( $CurrentBlock['incomplete'] );
 
 
 
 
 
 
153
  }
154
  }
 
155
 
156
- # ~
157
-
158
- $marker = $text[0];
159
-
160
- if ( isset( $this->DefinitionTypes[ $marker ] ) ) {
161
- foreach ( $this->DefinitionTypes[ $marker ] as $definitionType ) {
162
- $Definition = $this->{'identify' . $definitionType}( $Line, $CurrentBlock );
163
-
164
- if ( isset( $Definition ) ) {
165
- $this->Definitions[ $definitionType ][ $Definition['id'] ] = $Definition['data'];
166
 
167
- continue 2;
168
- }
169
- }
170
- }
171
 
172
- # ~
173
 
174
- $blockTypes = $this->unmarkedBlockTypes;
175
 
176
- if ( isset( $this->BlockTypes[ $marker ] ) ) {
177
- foreach ( $this->BlockTypes[ $marker ] as $blockType ) {
178
- $blockTypes [] = $blockType;
179
- }
 
180
  }
 
181
 
182
- #
183
- # ~
184
 
185
- foreach ( $blockTypes as $blockType ) {
186
- $Block = $this->{'identify' . $blockType}( $Line, $CurrentBlock );
 
187
 
188
- if ( isset( $Block ) ) {
189
- $Block['type'] = $blockType;
 
190
 
191
- if ( ! isset( $Block['identified'] ) ) {
192
- $Elements [] = $CurrentBlock['element'];
 
193
 
194
- $Block['identified'] = true;
195
- }
196
 
197
- if ( method_exists( $this, 'addTo' . $blockType ) ) {
198
- $Block['incomplete'] = true;
199
- }
 
200
 
201
- $CurrentBlock = $Block;
202
 
203
- continue 2;
204
- }
205
  }
 
206
 
207
- # ~
208
 
209
- if ( isset( $CurrentBlock ) and ! isset( $CurrentBlock['type'] ) and ! isset( $CurrentBlock['interrupted'] ) ) {
210
- $CurrentBlock['element']['text'] .= "\n" . $text;
211
- } else {
212
- $Elements [] = $CurrentBlock['element'];
 
 
 
213
 
214
- $CurrentBlock = $this->buildParagraph( $Line );
215
 
216
- $CurrentBlock['identified'] = true;
217
- }
218
  }
 
219
 
220
- # ~
221
 
222
- if ( isset( $CurrentBlock['incomplete'] ) and method_exists( $this, 'complete' . $CurrentBlock['type'] ) ) {
223
- $CurrentBlock = $this->{'complete' . $CurrentBlock['type']}( $CurrentBlock );
224
- }
 
225
 
226
- # ~
227
 
228
- $Elements [] = $CurrentBlock['element'];
229
 
230
- unset( $Elements[0] );
231
 
232
- # ~
233
 
234
- $markup = $this->elements( $Elements );
235
 
236
- # ~
 
 
 
 
 
237
 
238
- return $markup;
 
239
  }
240
 
241
- #
242
- # Atx
243
 
244
- protected function identifyAtx( $Line ) {
245
- if ( isset( $Line['text'][1] ) ) {
246
- $level = 1;
247
 
248
- while ( isset( $Line['text'][ $level ] ) and $Line['text'][ $level ] === '#' ) {
249
- $level ++;
250
- }
251
 
252
- $text = trim( $Line['text'], '# ' );
 
 
 
 
 
 
253
 
254
- $Block = array(
255
- 'element' => array(
256
- 'name' => 'h' . $level,
257
- 'text' => $text,
258
- 'handler' => 'line',
259
- ),
260
- );
261
 
262
- return $Block;
263
- }
264
- }
265
 
266
- #
267
- # Code
 
 
 
 
268
 
269
- protected function identifyCodeBlock( $Line ) {
270
- if ( $Line['indent'] >= 4 ) {
271
- $text = substr( $Line['body'], 4 );
272
 
273
- $Block = array(
274
- 'element' => array(
275
- 'name' => 'pre',
276
- 'handler' => 'element',
277
- 'text' => array(
278
- 'name' => 'code',
279
- 'text' => $text,
280
- ),
281
  ),
282
- );
 
283
 
284
- return $Block;
285
- }
286
  }
 
287
 
288
- protected function addToCodeBlock( $Line, $Block ) {
289
- if ( $Line['indent'] >= 4 ) {
290
- if ( isset( $Block['interrupted'] ) ) {
291
- $Block['element']['text']['text'] .= "\n";
292
-
293
- unset( $Block['interrupted'] );
294
- }
295
-
296
  $Block['element']['text']['text'] .= "\n";
297
 
298
- $text = substr( $Line['body'], 4 );
299
-
300
- $Block['element']['text']['text'] .= $text;
301
-
302
- return $Block;
303
  }
304
- }
305
 
306
- protected function completeCodeBlock( $Block ) {
307
- $text = $Block['element']['text']['text'];
308
 
309
- $text = htmlspecialchars( $text, ENT_NOQUOTES, 'UTF-8' );
310
 
311
- $Block['element']['text']['text'] = $text;
312
 
313
  return $Block;
314
  }
 
315
 
316
- #
317
- # Comment
 
318
 
319
- protected function identifyComment( $Line ) {
320
- if ( isset( $Line['text'][3] ) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!' ) {
321
- $Block = array(
322
- 'element' => $Line['body'],
323
- );
324
 
325
- if ( preg_match( '/-->$/', $Line['text'] ) ) {
326
- $Block['closed'] = true;
327
- }
328
 
329
- return $Block;
330
- }
331
- }
332
 
333
- protected function addToComment( $Line, array $Block ) {
334
- if ( isset( $Block['closed'] ) ) {
335
- return;
336
- }
337
 
338
- $Block['element'] .= "\n" . $Line['body'];
 
 
 
 
 
 
 
 
 
 
 
339
 
340
- if ( preg_match( '/-->$/', $Line['text'] ) ) {
 
341
  $Block['closed'] = true;
342
  }
343
 
344
  return $Block;
345
  }
 
346
 
347
- #
348
- # Fenced Code
349
-
350
- protected function identifyFencedCode( $Line ) {
351
- if ( preg_match( '/^([' . $Line['text'][0] . ']{3,})[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches ) ) {
352
- $Element = array(
353
- 'name' => 'code',
354
- 'text' => '',
355
- );
356
-
357
- if ( isset( $matches[2] ) ) {
358
- $class = 'language-' . $matches[2];
359
-
360
- $Element['attributes'] = array(
361
- 'class' => $class,
362
- );
363
- }
364
 
365
- $Block = array(
366
- 'char' => $Line['text'][0],
367
- 'element' => array(
368
- 'name' => 'pre',
369
- 'handler' => 'element',
370
- 'text' => $Element,
371
- ),
372
- );
373
 
374
- return $Block;
375
- }
 
376
  }
377
 
378
- protected function addToFencedCode( $Line, $Block ) {
379
- if ( isset( $Block['complete'] ) ) {
380
- return;
381
- }
382
-
383
- if ( isset( $Block['interrupted'] ) ) {
384
- $Block['element']['text']['text'] .= "\n";
385
 
386
- unset( $Block['interrupted'] );
387
- }
388
 
389
- if ( preg_match( '/^' . $Block['char'] . '{3,}[ ]*$/', $Line['text'] ) ) {
390
- $Block['element']['text']['text'] = substr( $Block['element']['text']['text'], 1 );
 
 
 
 
 
 
391
 
392
- $Block['complete'] = true;
 
 
393
 
394
- return $Block;
 
 
395
  }
396
 
397
- $Block['element']['text']['text'] .= "\n" . $Line['body'];;
 
 
 
 
 
 
 
398
 
399
  return $Block;
400
  }
 
401
 
402
- protected function completeFencedCode( $Block ) {
403
- $text = $Block['element']['text']['text'];
404
-
405
- $text = htmlspecialchars( $text, ENT_NOQUOTES, 'UTF-8' );
406
-
407
- $Block['element']['text']['text'] = $text;
408
-
409
- return $Block;
410
  }
411
 
412
- #
413
- # List
414
-
415
- protected function identifyList( $Line ) {
416
- list( $name, $pattern ) = $Line['text'][0] <= '-' ? array( 'ul', '[*+-]' ) : array( 'ol', '[0-9]+[.]' );
417
 
418
- if ( preg_match( '/^(' . $pattern . '[ ]+)(.*)/', $Line['text'], $matches ) ) {
419
- $Block = array(
420
- 'indent' => $Line['indent'],
421
- 'pattern' => $pattern,
422
- 'element' => array(
423
- 'name' => $name,
424
- 'handler' => 'elements',
425
- ),
426
- );
427
 
428
- $Block['li'] = array(
429
- 'name' => 'li',
430
- 'handler' => 'li',
431
- 'text' => array(
432
- $matches[2],
433
- ),
434
- );
435
 
436
- $Block['element']['text'] [] = &$Block['li'];
437
 
438
- return $Block;
439
- }
440
  }
441
 
442
- protected function addToList( $Line, array $Block ) {
443
- if ( $Block['indent'] === $Line['indent'] and preg_match( '/^' . $Block['pattern'] . '[ ]+(.*)/', $Line['text'], $matches ) ) {
444
- if ( isset( $Block['interrupted'] ) ) {
445
- $Block['li']['text'] [] = '';
446
 
447
- unset( $Block['interrupted'] );
448
- }
449
 
450
- unset( $Block['li'] );
 
 
451
 
452
- $Block['li'] = array(
453
- 'name' => 'li',
454
- 'handler' => 'li',
455
- 'text' => array(
456
- $matches[1],
457
- ),
458
- );
459
 
460
- $Block['element']['text'] [] = &$Block['li'];
461
 
462
- return $Block;
463
- }
464
 
465
- if ( ! isset( $Block['interrupted'] ) ) {
466
- $text = preg_replace( '/^[ ]{0,4}/', '', $Line['body'] );
467
 
468
- $Block['li']['text'] [] = $text;
 
 
 
 
469
 
470
- return $Block;
 
 
471
  }
472
 
473
- if ( $Line['indent'] > 0 ) {
474
- $Block['li']['text'] [] = '';
475
-
476
- $text = preg_replace( '/^[ ]{0,4}/', '', $Line['body'] );
477
 
478
- $Block['li']['text'] [] = $text;
479
 
480
- unset( $Block['interrupted'] );
 
 
 
 
 
 
481
 
482
- return $Block;
483
- }
484
  }
 
485
 
486
- #
487
- # Quote
488
 
489
- protected function identifyQuote( $Line ) {
490
- if ( preg_match( '/^>[ ]?(.*)/', $Line['text'], $matches ) ) {
491
- $Block = array(
492
- 'element' => array(
493
- 'name' => 'blockquote',
494
- 'handler' => 'lines',
495
- 'text' => (array) $matches[1],
496
- ),
497
- );
498
 
499
- return $Block;
500
- }
501
- }
 
 
 
 
 
 
 
502
 
503
- protected function addToQuote( $Line, array $Block ) {
504
- if ( $Line['text'][0] === '>' and preg_match( '/^>[ ]?(.*)/', $Line['text'], $matches ) ) {
505
- if ( isset( $Block['interrupted'] ) ) {
506
- $Block['element']['text'] [] = '';
 
 
 
507
 
508
- unset( $Block['interrupted'] );
509
- }
510
 
511
- $Block['element']['text'] [] = $matches[1];
 
 
 
 
 
 
 
 
 
 
512
 
513
- return $Block;
514
  }
515
 
516
- if ( ! isset( $Block['interrupted'] ) ) {
517
- $Block['element']['text'] [] = $Line['text'];
518
 
519
- return $Block;
520
- }
521
- }
522
 
523
- #
524
- # Rule
 
 
 
 
 
525
 
526
- protected function identifyRule( $Line ) {
527
- if ( preg_match( '/^([' . $Line['text'][0] . '])([ ]{0,2}\1){2,}[ ]*$/', $Line['text'] ) ) {
528
- $Block = array(
529
- 'element' => array(
530
- 'name' => 'hr'
531
- ),
532
- );
533
 
534
- return $Block;
535
- }
536
  }
537
 
538
- #
539
- # Setext
 
 
540
 
541
- protected function identifySetext( $Line, array $Block = null ) {
542
- if ( ! isset( $Block ) or isset( $Block['type'] ) or isset( $Block['interrupted'] ) ) {
543
- return;
544
- }
545
 
546
- if ( chop( $Line['text'], $Line['text'][0] ) === '' ) {
547
- $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2';
548
 
549
- return $Block;
550
- }
551
  }
552
 
553
- #
554
- # Markup
 
555
 
556
- protected function identifyMarkup( $Line ) {
557
- if ( preg_match( '/^<(\w[\w\d]*)(?:[ ][^>\/]*)?(\/?)[ ]*>/', $Line['text'], $matches ) ) {
558
- if ( in_array( $matches[1], $this->textLevelElements ) ) {
559
- return;
560
- }
561
 
562
- $Block = array(
563
- 'element' => $Line['body'],
564
- );
565
 
566
- if ( $matches[2] or $matches[1] === 'hr' or preg_match( '/<\/' . $matches[1] . '>[ ]*$/', $Line['text'] ) ) {
567
- $Block['closed'] = true;
568
- } else {
569
- $Block['depth'] = 0;
570
- $Block['name'] = $matches[1];
571
- }
572
 
573
- return $Block;
574
- }
575
  }
 
576
 
577
- protected function addToMarkup( $Line, array $Block ) {
578
- if ( isset( $Block['closed'] ) ) {
579
- return;
580
- }
581
-
582
- if ( preg_match( '/<' . $Block['name'] . '([ ][^\/]+)?>/', $Line['text'] ) ) # opening tag
583
- {
584
- $Block['depth'] ++;
585
- }
586
-
587
- if ( stripos( $Line['text'], '</' . $Block['name'] . '>' ) !== false ) # closing tag
588
- {
589
- if ( $Block['depth'] > 0 ) {
590
- $Block['depth'] --;
591
- } else {
592
- $Block['closed'] = true;
593
- }
594
- }
595
 
596
- $Block['element'] .= "\n" . $Line['body'];
 
 
 
 
 
 
 
 
 
 
597
 
598
  return $Block;
599
  }
 
600
 
601
- #
602
- # Table
 
 
 
 
 
603
 
604
- protected function identifyTable( $Line, array $Block = null ) {
605
- if ( ! isset( $Block ) or isset( $Block['type'] ) or isset( $Block['interrupted'] ) ) {
606
- return;
607
  }
608
 
609
- if ( strpos( $Block['element']['text'], '|' ) !== false and chop( $Line['text'], ' -:|' ) === '' ) {
610
- $alignments = array();
611
 
612
- $divider = $Line['text'];
 
613
 
614
- $divider = trim( $divider );
615
- $divider = trim( $divider, '|' );
 
616
 
617
- $dividerCells = explode( '|', $divider );
 
 
618
 
619
- foreach ( $dividerCells as $dividerCell ) {
620
- $dividerCell = trim( $dividerCell );
621
 
622
- if ( $dividerCell === '' ) {
623
- continue;
624
- }
 
 
 
 
 
 
625
 
626
- $alignment = null;
 
 
627
 
628
- if ( $dividerCell[0] === ':' ) {
629
- $alignment = 'left';
630
- }
631
 
632
- if ( substr( $dividerCell, - 1 ) === ':' ) {
633
- $alignment = $alignment === 'left' ? 'center' : 'right';
634
- }
 
 
 
635
 
636
- $alignments [] = $alignment;
637
- }
 
638
 
639
- # ~
 
 
640
 
641
- $HeaderElements = array();
 
642
 
643
- $header = $Block['element']['text'];
 
 
 
 
 
644
 
645
- $header = trim( $header );
646
- $header = trim( $header, '|' );
 
647
 
648
- $headerCells = explode( '|', $header );
 
 
 
649
 
650
- foreach ( $headerCells as $index => $headerCell ) {
651
- $headerCell = trim( $headerCell );
 
 
 
652
 
653
- $HeaderElement = array(
654
- 'name' => 'th',
655
- 'text' => $headerCell,
656
- 'handler' => 'line',
657
- );
658
 
659
- if ( isset( $alignments[ $index ] ) ) {
660
- $alignment = $alignments[ $index ];
661
 
662
- $HeaderElement['attributes'] = array(
663
- 'align' => $alignment,
664
- );
665
- }
 
666
 
667
- $HeaderElements [] = $HeaderElement;
 
 
 
 
 
 
 
668
  }
669
 
670
- # ~
 
 
 
 
671
 
672
- $Block = array(
673
- 'alignments' => $alignments,
674
- 'identified' => true,
675
- 'element' => array(
676
- 'name' => 'table',
677
- 'handler' => 'elements',
678
- ),
679
- );
680
 
681
- $Block['element']['text'] [] = array(
682
- 'name' => 'thead',
683
- 'handler' => 'elements',
684
- );
 
 
685
 
686
- $Block['element']['text'] [] = array(
687
- 'name' => 'tbody',
688
- 'handler' => 'elements',
689
- 'text' => array(),
690
- );
691
 
692
- $Block['element']['text'][0]['text'] [] = array(
693
- 'name' => 'tr',
694
- 'handler' => 'elements',
695
- 'text' => $HeaderElements,
696
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
697
 
698
- return $Block;
 
 
 
 
 
 
 
 
 
 
 
 
 
699
  }
 
 
 
 
 
 
 
 
700
  }
 
701
 
702
- protected function addToTable( $Line, array $Block ) {
703
- if ( $Line['text'][0] === '|' or strpos( $Line['text'], '|' ) ) {
704
- $Elements = array();
705
 
706
- $row = $Line['text'];
 
 
 
 
 
707
 
708
- $row = trim( $row );
709
- $row = trim( $row, '|' );
 
710
 
711
- $cells = explode( '|', $row );
712
 
713
- foreach ( $cells as $index => $cell ) {
714
- $cell = trim( $cell );
715
 
716
- $Element = array(
717
- 'name' => 'td',
718
- 'handler' => 'line',
719
- 'text' => $cell,
720
- );
721
 
722
- if ( isset( $Block['alignments'][ $index ] ) ) {
723
- $Element['attributes'] = array(
724
- 'align' => $Block['alignments'][ $index ],
725
- );
726
- }
727
 
728
- $Elements [] = $Element;
 
 
729
  }
730
 
731
- $Element = array(
732
- 'name' => 'tr',
733
- 'handler' => 'elements',
734
- 'text' => $Elements,
735
- );
736
 
737
- $Block['element']['text'][1]['text'] [] = $Element;
 
 
 
 
 
 
 
 
738
 
739
- return $Block;
740
  }
741
- }
742
 
743
- #
744
- # Definitions
745
- #
746
 
747
- protected function identifyReference( $Line ) {
748
- if ( preg_match( '/^\[(.+?)\]:[ ]*' . '<' . '?(\S+?)>?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches ) ) {
749
- $Definition = array(
750
- 'id' => strtolower( $matches[1] ),
751
- 'data' => array(
752
- 'url' => $matches[2],
753
- ),
 
 
 
 
 
 
 
 
 
 
754
  );
755
 
756
- if ( isset( $matches[3] ) ) {
757
- $Definition['data']['title'] = $matches[3];
 
 
 
 
 
758
  }
759
 
760
- return $Definition;
761
  }
762
- }
763
 
764
- #
765
- # ~
766
- #
767
 
768
- protected function buildParagraph( $Line ) {
769
  $Block = array(
 
 
770
  'element' => array(
771
- 'name' => 'p',
772
- 'text' => $Line['text'],
773
- 'handler' => 'line',
774
  ),
775
  );
776
 
777
- return $Block;
778
- }
 
 
779
 
780
- #
781
- # ~
782
- #
 
 
783
 
784
- protected function element( array $Element ) {
785
- $markup = '<' . $Element['name'];
 
 
 
786
 
787
- if ( isset( $Element['attributes'] ) ) {
788
- foreach ( $Element['attributes'] as $name => $value ) {
789
- $markup .= ' ' . $name . '="' . $value . '"';
790
- }
791
- }
792
 
793
- if ( isset( $Element['text'] ) ) {
794
- $markup .= '>';
 
 
 
 
795
 
796
- if ( isset( $Element['handler'] ) ) {
797
- $markup .= $this->$Element['handler']( $Element['text'] );
798
- } else {
799
- $markup .= $Element['text'];
800
- }
801
 
802
- $markup .= '</' . $Element['name'] . '>';
803
- } else {
804
- $markup .= ' />';
805
- }
806
 
807
- return $markup;
808
- }
809
 
810
- protected function elements( array $Elements ) {
811
- $markup = '';
812
 
813
- foreach ( $Elements as $Element ) {
814
- if ( $Element === null ) {
815
- continue;
816
- }
817
 
818
- $markup .= "\n";
 
 
 
 
819
 
820
- if ( is_string( $Element ) ) # because of Markup
821
  {
822
- $markup .= $Element;
823
-
824
- continue;
825
  }
826
 
827
- $markup .= $this->element( $Element );
828
  }
829
 
830
- $markup .= "\n";
 
 
 
 
831
 
832
- return $markup;
833
- }
834
 
835
- #
836
- # Spans
837
- #
838
 
839
- protected $SpanTypes = array(
840
- '!' => array( 'Link' ), # ?
841
- '&' => array( 'Ampersand' ),
842
- '*' => array( 'Emphasis' ),
843
- '/' => array( 'Url' ),
844
- '<' => array( 'UrlTag', 'EmailTag', 'Tag', 'LessThan' ),
845
- '[' => array( 'Link' ),
846
- '_' => array( 'Emphasis' ),
847
- '`' => array( 'InlineCode' ),
848
- '~' => array( 'Strikethrough' ),
849
- '\\' => array( 'EscapeSequence' ),
 
850
  );
851
 
852
- # ~
853
-
854
- protected $spanMarkerList = '*_!&[</`~\\';
855
 
856
- #
857
- # ~
858
- #
859
 
860
- public function line( $text ) {
861
- $markup = '';
 
 
 
 
 
 
 
 
 
 
 
 
862
 
863
- $remainder = $text;
864
 
865
- $markerPosition = 0;
866
 
867
- while ( $excerpt = strpbrk( $remainder, $this->spanMarkerList ) ) {
868
- $marker = $excerpt[0];
 
869
 
870
- $markerPosition += strpos( $remainder, $marker );
 
 
871
 
872
- $Excerpt = array( 'text' => $excerpt, 'context' => $text );
873
 
874
- foreach ( $this->SpanTypes[ $marker ] as $spanType ) {
875
- $handler = 'identify' . $spanType;
 
876
 
877
- $Span = $this->$handler( $Excerpt );
878
 
879
- if ( ! isset( $Span ) ) {
880
- continue;
881
- }
882
 
883
- # The identified span can be ahead of the marker.
 
 
884
 
885
- if ( isset( $Span['position'] ) and $Span['position'] > $markerPosition ) {
886
- continue;
887
- }
 
888
 
889
- # Spans that start at the position of their marker don't have to set a position.
890
 
891
- if ( ! isset( $Span['position'] ) ) {
892
- $Span['position'] = $markerPosition;
893
- }
 
894
 
895
- $plainText = substr( $text, 0, $Span['position'] );
896
 
897
- $markup .= $this->readPlainText( $plainText );
 
 
 
898
 
899
- $markup .= isset( $Span['markup'] ) ? $Span['markup'] : $this->element( $Span['element'] );
 
900
 
901
- $text = substr( $text, $Span['position'] + $Span['extent'] );
 
902
 
903
- $remainder = $text;
 
904
 
905
- $markerPosition = 0;
 
906
 
907
- continue 2;
908
- }
909
 
910
- $remainder = substr( $excerpt, 1 );
911
 
912
- $markerPosition ++;
913
- }
914
 
915
- $markup .= $this->readPlainText( $text );
916
 
917
- return $markup;
918
  }
919
 
920
- #
921
- # ~
922
- #
923
 
924
- protected function identifyUrl( $Excerpt ) {
925
- if ( ! isset( $Excerpt['text'][1] ) or $Excerpt['text'][1] !== '/' ) {
926
- return;
927
- }
928
 
929
- if ( preg_match( '/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE ) ) {
930
- $url = str_replace( array( '&', '<' ), array( '&amp;', '&lt;' ), $matches[0][0] );
931
-
932
- return array(
933
- 'extent' => strlen( $matches[0][0] ),
934
- 'position' => $matches[0][1],
935
- 'element' => array(
936
- 'name' => 'a',
937
- 'text' => $url,
938
- 'attributes' => array(
939
- 'href' => $url,
940
- ),
941
- ),
942
- );
943
- }
944
- }
945
 
946
- protected function identifyAmpersand( $Excerpt ) {
947
- if ( ! preg_match( '/^&#?\w+;/', $Excerpt['text'] ) ) {
948
- return array(
949
- 'markup' => '&amp;',
950
- 'extent' => 1,
951
- );
952
- }
953
- }
954
 
955
- protected function identifyStrikethrough( $Excerpt ) {
956
- if ( ! isset( $Excerpt['text'][1] ) ) {
957
- return;
958
- }
 
959
 
960
- if ( $Excerpt['text'][1] === '~' and preg_match( '/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches ) ) {
961
- return array(
962
- 'extent' => strlen( $matches[0] ),
963
- 'element' => array(
964
- 'name' => 'del',
965
- 'text' => $matches[1],
966
- 'handler' => 'line',
967
- ),
968
- );
969
- }
970
  }
 
971
 
972
- protected function identifyEscapeSequence( $Excerpt ) {
973
- if ( isset( $Excerpt['text'][1] ) and in_array( $Excerpt['text'][1], $this->specialCharacters ) ) {
974
- return array(
975
- 'markup' => $Excerpt['text'][1],
976
- 'extent' => 2,
977
- );
 
 
 
978
  }
979
- }
980
 
981
- protected function identifyLessThan() {
982
  return array(
983
- 'markup' => '&lt;',
984
- 'extent' => 1,
 
 
 
 
 
 
985
  );
986
  }
 
987
 
988
- protected function identifyUrlTag( $Excerpt ) {
989
- if ( strpos( $Excerpt['text'], '>' ) !== false and preg_match( '/^<(https?:[\/]{2}[^\s]+?)>/i', $Excerpt['text'], $matches ) ) {
990
- $url = str_replace( array( '&', '<' ), array( '&amp;', '&lt;' ), $matches[1] );
 
 
 
991
 
992
- return array(
993
- 'extent' => strlen( $matches[0] ),
994
- 'element' => array(
995
- 'name' => 'a',
996
- 'text' => $url,
997
- 'attributes' => array(
998
- 'href' => $url,
999
- ),
1000
- ),
1001
- );
1002
- }
 
 
1003
  }
1004
 
1005
- protected function identifyEmailTag( $Excerpt ) {
1006
- if ( strpos( $Excerpt['text'], '>' ) !== false and preg_match( '/^<(\S+?@\S+?)>/', $Excerpt['text'], $matches ) ) {
1007
- return array(
1008
- 'extent' => strlen( $matches[0] ),
1009
- 'element' => array(
1010
- 'name' => 'a',
1011
- 'text' => $matches[1],
1012
- 'attributes' => array(
1013
- 'href' => 'mailto:' . $matches[1],
1014
- ),
1015
- ),
1016
- );
1017
- }
 
 
 
 
 
1018
  }
 
1019
 
1020
- protected function identifyTag( $Excerpt ) {
1021
- if ( strpos( $Excerpt['text'], '>' ) !== false and preg_match( '/^<\/?\w.*?>/', $Excerpt['text'], $matches ) ) {
1022
- return array(
1023
- 'markup' => $matches[0],
1024
- 'extent' => strlen( $matches[0] ),
1025
- );
1026
- }
1027
  }
1028
 
1029
- protected function identifyInlineCode( $Excerpt ) {
1030
- $marker = $Excerpt['text'][0];
1031
 
1032
- if ( preg_match( '/^(' . $marker . '+)[ ]*(.+?)[ ]*(?<!' . $marker . ')\1(?!' . $marker . ')/', $Excerpt['text'], $matches ) ) {
1033
- $text = $matches[2];
1034
- $text = htmlspecialchars( $text, ENT_NOQUOTES, 'UTF-8' );
1035
 
1036
- return array(
1037
- 'extent' => strlen( $matches[0] ),
1038
- 'element' => array(
1039
- 'name' => 'code',
1040
- 'text' => $text,
1041
- ),
1042
- );
1043
- }
1044
  }
1045
 
1046
- protected function identifyLink( $Excerpt ) {
1047
- $extent = $Excerpt['text'][0] === '!' ? 1 : 0;
 
 
 
 
 
 
 
 
 
 
1048
 
1049
- if ( strpos( $Excerpt['text'], ']' ) and preg_match( '/\[((?:[^][]|(?R))*)\]/', $Excerpt['text'], $matches ) ) {
1050
- $Link = array( 'text' => $matches[1], 'label' => strtolower( $matches[1] ) );
1051
 
1052
- $extent += strlen( $matches[0] );
 
1053
 
1054
- $substring = substr( $Excerpt['text'], $extent );
 
 
 
 
 
 
 
 
 
 
1055
 
1056
- if ( preg_match( '/^\s*\[([^][]+)\]/', $substring, $matches ) ) {
1057
- $Link['label'] = strtolower( $matches[1] );
1058
 
1059
- if ( isset( $this->Definitions['Reference'][ $Link['label'] ] ) ) {
1060
- $Link += $this->Definitions['Reference'][ $Link['label'] ];
1061
 
1062
- $extent += strlen( $matches[0] );
1063
- } else {
1064
- return;
1065
- }
1066
- } elseif ( isset( $this->Definitions['Reference'][ $Link['label'] ] ) ) {
1067
- $Link += $this->Definitions['Reference'][ $Link['label'] ];
1068
 
1069
- if ( preg_match( '/^[ ]*\[\]/', $substring, $matches ) ) {
1070
- $extent += strlen( $matches[0] );
1071
- }
1072
- } elseif ( preg_match( '/^\([ ]*(.*?)(?:[ ]+[\'"](.+?)[\'"])?[ ]*\)/', $substring, $matches ) ) {
1073
- $Link['url'] = $matches[1];
1074
 
1075
- if ( isset( $matches[2] ) ) {
1076
- $Link['title'] = $matches[2];
1077
- }
 
 
 
1078
 
1079
- $extent += strlen( $matches[0] );
1080
- } else {
1081
- return;
1082
- }
1083
- } else {
1084
- return;
 
1085
  }
1086
 
1087
- $url = str_replace( array( '&', '<' ), array( '&amp;', '&lt;' ), $Link['url'] );
 
 
 
 
 
 
 
1088
 
1089
- if ( $Excerpt['text'][0] === '!' ) {
1090
- $Element = array(
1091
- 'name' => 'img',
1092
- 'attributes' => array(
1093
- 'alt' => $Link['text'],
1094
- 'src' => $url,
1095
- ),
1096
- );
1097
- } else {
1098
- $Element = array(
1099
- 'name' => 'a',
1100
- 'handler' => 'line',
1101
- 'text' => $Link['text'],
1102
- 'attributes' => array(
1103
- 'href' => $url,
1104
- ),
1105
- );
1106
  }
1107
 
1108
- if ( isset( $Link['title'] ) ) {
1109
- $Element['attributes']['title'] = $Link['title'];
 
1110
  }
1111
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1112
  return array(
1113
- 'extent' => $extent,
1114
- 'element' => $Element,
1115
  );
1116
  }
1117
 
1118
- protected function identifyEmphasis( $Excerpt ) {
1119
- if ( ! isset( $Excerpt['text'][1] ) ) {
1120
- return;
1121
- }
 
 
 
1122
 
1123
- $marker = $Excerpt['text'][0];
 
 
 
 
 
 
 
1124
 
1125
- if ( $Excerpt['text'][1] === $marker and preg_match( $this->StrongRegex[ $marker ], $Excerpt['text'], $matches ) ) {
1126
- $emphasis = 'strong';
1127
- } elseif ( preg_match( $this->EmRegex[ $marker ], $Excerpt['text'], $matches ) ) {
1128
- $emphasis = 'em';
1129
- } else {
1130
- return;
1131
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1132
 
 
 
1133
  return array(
1134
- 'extent' => strlen( $matches[0] ),
1135
  'element' => array(
1136
- 'name' => $emphasis,
 
1137
  'handler' => 'line',
1138
- 'text' => $matches[1],
1139
  ),
1140
  );
1141
  }
 
1142
 
1143
- #
1144
- # ~
 
 
 
 
1145
 
1146
- protected function readPlainText( $text ) {
1147
- $breakMarker = $this->breaksEnabled ? "\n" : " \n";
 
 
 
 
 
 
 
 
 
 
 
1148
 
1149
- $text = str_replace( $breakMarker, "<br />\n", $text );
 
 
1150
 
1151
- return $text;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1152
  }
 
1153
 
1154
- #
1155
- # ~
1156
- #
1157
 
1158
- protected function li( $lines ) {
1159
- $markup = $this->lines( $lines );
 
 
 
 
 
 
 
 
 
1160
 
1161
- $trimmedMarkup = trim( $markup );
 
1162
 
1163
- if ( ! in_array( '', $lines ) and substr( $trimmedMarkup, 0, 3 ) === '<p>' ) {
1164
- $markup = $trimmedMarkup;
1165
- $markup = substr( $markup, 3 );
1166
 
1167
- $position = strpos( $markup, "</p>" );
 
 
1168
 
1169
- $markup = substr_replace( $markup, '', $position, 4 );
1170
- }
 
 
 
 
 
 
1171
 
1172
- return $markup;
 
1173
  }
1174
 
1175
- #
1176
- # Multiton
1177
-
11
  # For the full license information, view the LICENSE file that was distributed
12
  # with this source code.
13
  #
 
14
  #
 
 
 
 
 
15
 
16
+ class Parsedown
17
+ {
18
+ # ~
 
 
19
 
20
+ const version = '1.6.0';
 
21
 
22
+ # ~
 
 
23
 
24
+ function text($text)
25
+ {
26
+ # make sure no definitions are set
27
+ $this->DefinitionData = array();
28
 
29
+ # standardize line breaks
30
+ $text = str_replace(array("\r\n", "\r"), "\n", $text);
31
 
32
+ # remove surrounding line breaks
33
+ $text = trim($text, "\n");
34
 
35
+ # split text into lines
36
+ $lines = explode("\n", $text);
37
 
38
+ # iterate through lines to identify blocks
39
+ $markup = $this->lines($lines);
40
 
41
+ # trim line breaks
42
+ $markup = trim($markup, "\n");
43
 
44
+ return $markup;
45
+ }
46
 
47
+ #
48
+ # Setters
49
+ #
50
 
51
+ function setBreaksEnabled($breaksEnabled)
52
+ {
53
+ $this->breaksEnabled = $breaksEnabled;
54
 
55
+ return $this;
56
+ }
57
 
58
+ protected $breaksEnabled;
 
59
 
60
+ function setMarkupEscaped($markupEscaped)
61
+ {
62
+ $this->markupEscaped = $markupEscaped;
63
 
64
+ return $this;
65
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
 
67
+ protected $markupEscaped;
68
 
69
+ function setUrlsLinked($urlsLinked)
70
+ {
71
+ $this->urlsLinked = $urlsLinked;
72
 
73
+ return $this;
74
+ }
75
 
76
+ protected $urlsLinked = true;
77
+
78
+ #
79
+ # Lines
80
+ #
81
+
82
+ protected $BlockTypes = array(
83
+ '#' => array('Header'),
84
+ '*' => array('Rule', 'List'),
85
+ '+' => array('List'),
86
+ '-' => array('SetextHeader', 'Table', 'Rule', 'List'),
87
+ '0' => array('List'),
88
+ '1' => array('List'),
89
+ '2' => array('List'),
90
+ '3' => array('List'),
91
+ '4' => array('List'),
92
+ '5' => array('List'),
93
+ '6' => array('List'),
94
+ '7' => array('List'),
95
+ '8' => array('List'),
96
+ '9' => array('List'),
97
+ ':' => array('Table'),
98
+ '<' => array('Comment', 'Markup'),
99
+ '=' => array('SetextHeader'),
100
+ '>' => array('Quote'),
101
+ '[' => array('Reference'),
102
+ '_' => array('Rule'),
103
+ '`' => array('FencedCode'),
104
+ '|' => array('Table'),
105
+ '~' => array('FencedCode'),
106
+ );
107
+
108
+ # ~
109
+
110
+ protected $unmarkedBlockTypes = array(
111
+ 'Code',
112
+ );
113
+
114
+ #
115
+ # Blocks
116
+ #
117
+
118
+ protected function lines(array $lines)
119
+ {
120
+ $CurrentBlock = null;
121
+
122
+ foreach ($lines as $line)
123
+ {
124
+ if (chop($line) === '')
125
+ {
126
+ if (isset($CurrentBlock))
127
+ {
128
+ $CurrentBlock['interrupted'] = true;
129
+ }
130
 
131
+ continue;
132
+ }
 
133
 
134
+ if (strpos($line, "\t") !== false)
135
+ {
136
+ $parts = explode("\t", $line);
137
 
138
+ $line = $parts[0];
 
 
 
 
139
 
140
+ unset($parts[0]);
 
141
 
142
+ foreach ($parts as $part)
143
+ {
144
+ $shortage = 4 - mb_strlen($line, 'utf-8') % 4;
145
 
146
+ $line .= str_repeat(' ', $shortage);
147
+ $line .= $part;
148
  }
149
+ }
150
 
151
+ $indent = 0;
152
 
153
+ while (isset($line[$indent]) and $line[$indent] === ' ')
154
+ {
155
+ $indent ++;
156
+ }
157
 
158
+ $text = $indent > 0 ? substr($line, $indent) : $line;
159
+
160
+ # ~
161
 
162
+ $Line = array('body' => $line, 'indent' => $indent, 'text' => $text);
163
 
164
+ # ~
 
165
 
166
+ if (isset($CurrentBlock['continuable']))
167
+ {
168
+ $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock);
169
 
170
+ if (isset($Block))
171
+ {
172
+ $CurrentBlock = $Block;
 
 
173
 
174
+ continue;
175
+ }
176
+ else
177
+ {
178
+ if ($this->isBlockCompletable($CurrentBlock['type']))
179
+ {
180
+ $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
181
  }
182
  }
183
+ }
184
 
185
+ # ~
 
 
 
 
 
 
 
 
 
186
 
187
+ $marker = $text[0];
 
 
 
188
 
189
+ # ~
190
 
191
+ $blockTypes = $this->unmarkedBlockTypes;
192
 
193
+ if (isset($this->BlockTypes[$marker]))
194
+ {
195
+ foreach ($this->BlockTypes[$marker] as $blockType)
196
+ {
197
+ $blockTypes []= $blockType;
198
  }
199
+ }
200
 
201
+ #
202
+ # ~
203
 
204
+ foreach ($blockTypes as $blockType)
205
+ {
206
+ $Block = $this->{'block'.$blockType}($Line, $CurrentBlock);
207
 
208
+ if (isset($Block))
209
+ {
210
+ $Block['type'] = $blockType;
211
 
212
+ if ( ! isset($Block['identified']))
213
+ {
214
+ $Blocks []= $CurrentBlock;
215
 
216
+ $Block['identified'] = true;
217
+ }
218
 
219
+ if ($this->isBlockContinuable($blockType))
220
+ {
221
+ $Block['continuable'] = true;
222
+ }
223
 
224
+ $CurrentBlock = $Block;
225
 
226
+ continue 2;
 
227
  }
228
+ }
229
 
230
+ # ~
231
 
232
+ if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted']))
233
+ {
234
+ $CurrentBlock['element']['text'] .= "\n".$text;
235
+ }
236
+ else
237
+ {
238
+ $Blocks []= $CurrentBlock;
239
 
240
+ $CurrentBlock = $this->paragraph($Line);
241
 
242
+ $CurrentBlock['identified'] = true;
 
243
  }
244
+ }
245
 
246
+ # ~
247
 
248
+ if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type']))
249
+ {
250
+ $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
251
+ }
252
 
253
+ # ~
254
 
255
+ $Blocks []= $CurrentBlock;
256
 
257
+ unset($Blocks[0]);
258
 
259
+ # ~
260
 
261
+ $markup = '';
262
 
263
+ foreach ($Blocks as $Block)
264
+ {
265
+ if (isset($Block['hidden']))
266
+ {
267
+ continue;
268
+ }
269
 
270
+ $markup .= "\n";
271
+ $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']);
272
  }
273
 
274
+ $markup .= "\n";
 
275
 
276
+ # ~
 
 
277
 
278
+ return $markup;
279
+ }
 
280
 
281
+ #
282
+ # Allow for plugin extensibility
283
+ #
284
+ protected function isBlockContinuable($Type)
285
+ {
286
+ return method_exists($this, 'block'.$Type.'Continue');
287
+ }
288
 
289
+ protected function isBlockCompletable($Type)
290
+ {
291
+ return method_exists($this, 'block'.$Type.'Complete');
292
+ }
 
 
 
293
 
294
+ #
295
+ # Code
 
296
 
297
+ protected function blockCode($Line, $Block = null)
298
+ {
299
+ if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted']))
300
+ {
301
+ return;
302
+ }
303
 
304
+ if ($Line['indent'] >= 4)
305
+ {
306
+ $text = substr($Line['body'], 4);
307
 
308
+ $Block = array(
309
+ 'element' => array(
310
+ 'name' => 'pre',
311
+ 'handler' => 'element',
312
+ 'text' => array(
313
+ 'name' => 'code',
314
+ 'text' => $text,
 
315
  ),
316
+ ),
317
+ );
318
 
319
+ return $Block;
 
320
  }
321
+ }
322
 
323
+ protected function blockCodeContinue($Line, $Block)
324
+ {
325
+ if ($Line['indent'] >= 4)
326
+ {
327
+ if (isset($Block['interrupted']))
328
+ {
 
 
329
  $Block['element']['text']['text'] .= "\n";
330
 
331
+ unset($Block['interrupted']);
 
 
 
 
332
  }
 
333
 
334
+ $Block['element']['text']['text'] .= "\n";
 
335
 
336
+ $text = substr($Line['body'], 4);
337
 
338
+ $Block['element']['text']['text'] .= $text;
339
 
340
  return $Block;
341
  }
342
+ }
343
 
344
+ protected function blockCodeComplete($Block)
345
+ {
346
+ $text = $Block['element']['text']['text'];
347
 
348
+ $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
 
 
 
 
349
 
350
+ $Block['element']['text']['text'] = $text;
 
 
351
 
352
+ return $Block;
353
+ }
 
354
 
355
+ #
356
+ # Comment
 
 
357
 
358
+ protected function blockComment($Line)
359
+ {
360
+ if ($this->markupEscaped)
361
+ {
362
+ return;
363
+ }
364
+
365
+ if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!')
366
+ {
367
+ $Block = array(
368
+ 'markup' => $Line['body'],
369
+ );
370
 
371
+ if (preg_match('/-->$/', $Line['text']))
372
+ {
373
  $Block['closed'] = true;
374
  }
375
 
376
  return $Block;
377
  }
378
+ }
379
 
380
+ protected function blockCommentContinue($Line, array $Block)
381
+ {
382
+ if (isset($Block['closed']))
383
+ {
384
+ return;
385
+ }
 
 
 
 
 
 
 
 
 
 
 
386
 
387
+ $Block['markup'] .= "\n" . $Line['body'];
 
 
 
 
 
 
 
388
 
389
+ if (preg_match('/-->$/', $Line['text']))
390
+ {
391
+ $Block['closed'] = true;
392
  }
393
 
394
+ return $Block;
395
+ }
 
 
 
 
 
396
 
397
+ #
398
+ # Fenced Code
399
 
400
+ protected function blockFencedCode($Line)
401
+ {
402
+ if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches))
403
+ {
404
+ $Element = array(
405
+ 'name' => 'code',
406
+ 'text' => '',
407
+ );
408
 
409
+ if (isset($matches[1]))
410
+ {
411
+ $class = 'language-'.$matches[1];
412
 
413
+ $Element['attributes'] = array(
414
+ 'class' => $class,
415
+ );
416
  }
417
 
418
+ $Block = array(
419
+ 'char' => $Line['text'][0],
420
+ 'element' => array(
421
+ 'name' => 'pre',
422
+ 'handler' => 'element',
423
+ 'text' => $Element,
424
+ ),
425
+ );
426
 
427
  return $Block;
428
  }
429
+ }
430
 
431
+ protected function blockFencedCodeContinue($Line, $Block)
432
+ {
433
+ if (isset($Block['complete']))
434
+ {
435
+ return;
 
 
 
436
  }
437
 
438
+ if (isset($Block['interrupted']))
439
+ {
440
+ $Block['element']['text']['text'] .= "\n";
 
 
441
 
442
+ unset($Block['interrupted']);
443
+ }
 
 
 
 
 
 
 
444
 
445
+ if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text']))
446
+ {
447
+ $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1);
 
 
 
 
448
 
449
+ $Block['complete'] = true;
450
 
451
+ return $Block;
 
452
  }
453
 
454
+ $Block['element']['text']['text'] .= "\n".$Line['body'];;
 
 
 
455
 
456
+ return $Block;
457
+ }
458
 
459
+ protected function blockFencedCodeComplete($Block)
460
+ {
461
+ $text = $Block['element']['text']['text'];
462
 
463
+ $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
 
 
 
 
 
 
464
 
465
+ $Block['element']['text']['text'] = $text;
466
 
467
+ return $Block;
468
+ }
469
 
470
+ #
471
+ # Header
472
 
473
+ protected function blockHeader($Line)
474
+ {
475
+ if (isset($Line['text'][1]))
476
+ {
477
+ $level = 1;
478
 
479
+ while (isset($Line['text'][$level]) and $Line['text'][$level] === '#')
480
+ {
481
+ $level ++;
482
  }
483
 
484
+ if ($level > 6)
485
+ {
486
+ return;
487
+ }
488
 
489
+ $text = trim($Line['text'], '# ');
490
 
491
+ $Block = array(
492
+ 'element' => array(
493
+ 'name' => 'h' . min(6, $level),
494
+ 'text' => $text,
495
+ 'handler' => 'line',
496
+ ),
497
+ );
498
 
499
+ return $Block;
 
500
  }
501
+ }
502
 
503
+ #
504
+ # List
505
 
506
+ protected function blockList($Line)
507
+ {
508
+ list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]');
 
 
 
 
 
 
509
 
510
+ if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches))
511
+ {
512
+ $Block = array(
513
+ 'indent' => $Line['indent'],
514
+ 'pattern' => $pattern,
515
+ 'element' => array(
516
+ 'name' => $name,
517
+ 'handler' => 'elements',
518
+ ),
519
+ );
520
 
521
+ $Block['li'] = array(
522
+ 'name' => 'li',
523
+ 'handler' => 'li',
524
+ 'text' => array(
525
+ $matches[2],
526
+ ),
527
+ );
528
 
529
+ $Block['element']['text'] []= & $Block['li'];
 
530
 
531
+ return $Block;
532
+ }
533
+ }
534
+
535
+ protected function blockListContinue($Line, array $Block)
536
+ {
537
+ if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches))
538
+ {
539
+ if (isset($Block['interrupted']))
540
+ {
541
+ $Block['li']['text'] []= '';
542
 
543
+ unset($Block['interrupted']);
544
  }
545
 
546
+ unset($Block['li']);
 
547
 
548
+ $text = isset($matches[1]) ? $matches[1] : '';
 
 
549
 
550
+ $Block['li'] = array(
551
+ 'name' => 'li',
552
+ 'handler' => 'li',
553
+ 'text' => array(
554
+ $text,
555
+ ),
556
+ );
557
 
558
+ $Block['element']['text'] []= & $Block['li'];
 
 
 
 
 
 
559
 
560
+ return $Block;
 
561
  }
562
 
563
+ if ($Line['text'][0] === '[' and $this->blockReference($Line))
564
+ {
565
+ return $Block;
566
+ }
567
 
568
+ if ( ! isset($Block['interrupted']))
569
+ {
570
+ $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
 
571
 
572
+ $Block['li']['text'] []= $text;
 
573
 
574
+ return $Block;
 
575
  }
576
 
577
+ if ($Line['indent'] > 0)
578
+ {
579
+ $Block['li']['text'] []= '';
580
 
581
+ $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
 
 
 
 
582
 
583
+ $Block['li']['text'] []= $text;
 
 
584
 
585
+ unset($Block['interrupted']);
 
 
 
 
 
586
 
587
+ return $Block;
 
588
  }
589
+ }
590
 
591
+ #
592
+ # Quote
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
593
 
594
+ protected function blockQuote($Line)
595
+ {
596
+ if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
597
+ {
598
+ $Block = array(
599
+ 'element' => array(
600
+ 'name' => 'blockquote',
601
+ 'handler' => 'lines',
602
+ 'text' => (array) $matches[1],
603
+ ),
604
+ );
605
 
606
  return $Block;
607
  }
608
+ }
609
 
610
+ protected function blockQuoteContinue($Line, array $Block)
611
+ {
612
+ if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
613
+ {
614
+ if (isset($Block['interrupted']))
615
+ {
616
+ $Block['element']['text'] []= '';
617
 
618
+ unset($Block['interrupted']);
 
 
619
  }
620
 
621
+ $Block['element']['text'] []= $matches[1];
 
622
 
623
+ return $Block;
624
+ }
625
 
626
+ if ( ! isset($Block['interrupted']))
627
+ {
628
+ $Block['element']['text'] []= $Line['text'];
629
 
630
+ return $Block;
631
+ }
632
+ }
633
 
634
+ #
635
+ # Rule
636
 
637
+ protected function blockRule($Line)
638
+ {
639
+ if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text']))
640
+ {
641
+ $Block = array(
642
+ 'element' => array(
643
+ 'name' => 'hr'
644
+ ),
645
+ );
646
 
647
+ return $Block;
648
+ }
649
+ }
650
 
651
+ #
652
+ # Setext
 
653
 
654
+ protected function blockSetextHeader($Line, array $Block = null)
655
+ {
656
+ if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
657
+ {
658
+ return;
659
+ }
660
 
661
+ if (chop($Line['text'], $Line['text'][0]) === '')
662
+ {
663
+ $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2';
664
 
665
+ return $Block;
666
+ }
667
+ }
668
 
669
+ #
670
+ # Markup
671
 
672
+ protected function blockMarkup($Line)
673
+ {
674
+ if ($this->markupEscaped)
675
+ {
676
+ return;
677
+ }
678
 
679
+ if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches))
680
+ {
681
+ $element = strtolower($matches[1]);
682
 
683
+ if (in_array($element, $this->textLevelElements))
684
+ {
685
+ return;
686
+ }
687
 
688
+ $Block = array(
689
+ 'name' => $matches[1],
690
+ 'depth' => 0,
691
+ 'markup' => $Line['text'],
692
+ );
693
 
694
+ $length = strlen($matches[0]);
 
 
 
 
695
 
696
+ $remainder = substr($Line['text'], $length);
 
697
 
698
+ if (trim($remainder) === '')
699
+ {
700
+ if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
701
+ {
702
+ $Block['closed'] = true;
703
 
704
+ $Block['void'] = true;
705
+ }
706
+ }
707
+ else
708
+ {
709
+ if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
710
+ {
711
+ return;
712
  }
713
 
714
+ if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder))
715
+ {
716
+ $Block['closed'] = true;
717
+ }
718
+ }
719
 
720
+ return $Block;
721
+ }
722
+ }
 
 
 
 
 
723
 
724
+ protected function blockMarkupContinue($Line, array $Block)
725
+ {
726
+ if (isset($Block['closed']))
727
+ {
728
+ return;
729
+ }
730
 
731
+ if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open
732
+ {
733
+ $Block['depth'] ++;
734
+ }
 
735
 
736
+ if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close
737
+ {
738
+ if ($Block['depth'] > 0)
739
+ {
740
+ $Block['depth'] --;
741
+ }
742
+ else
743
+ {
744
+ $Block['closed'] = true;
745
+ }
746
+ }
747
+
748
+ if (isset($Block['interrupted']))
749
+ {
750
+ $Block['markup'] .= "\n";
751
+
752
+ unset($Block['interrupted']);
753
+ }
754
+
755
+ $Block['markup'] .= "\n".$Line['body'];
756
+
757
+ return $Block;
758
+ }
759
+
760
+ #
761
+ # Reference
762
 
763
+ protected function blockReference($Line)
764
+ {
765
+ if (preg_match('/^\[(.+?)\]:[ ]*<?(\S+?)>?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches))
766
+ {
767
+ $id = strtolower($matches[1]);
768
+
769
+ $Data = array(
770
+ 'url' => $matches[2],
771
+ 'title' => null,
772
+ );
773
+
774
+ if (isset($matches[3]))
775
+ {
776
+ $Data['title'] = $matches[3];
777
  }
778
+
779
+ $this->DefinitionData['Reference'][$id] = $Data;
780
+
781
+ $Block = array(
782
+ 'hidden' => true,
783
+ );
784
+
785
+ return $Block;
786
  }
787
+ }
788
 
789
+ #
790
+ # Table
 
791
 
792
+ protected function blockTable($Line, array $Block = null)
793
+ {
794
+ if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
795
+ {
796
+ return;
797
+ }
798
 
799
+ if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '')
800
+ {
801
+ $alignments = array();
802
 
803
+ $divider = $Line['text'];
804
 
805
+ $divider = trim($divider);
806
+ $divider = trim($divider, '|');
807
 
808
+ $dividerCells = explode('|', $divider);
 
 
 
 
809
 
810
+ foreach ($dividerCells as $dividerCell)
811
+ {
812
+ $dividerCell = trim($dividerCell);
 
 
813
 
814
+ if ($dividerCell === '')
815
+ {
816
+ continue;
817
  }
818
 
819
+ $alignment = null;
 
 
 
 
820
 
821
+ if ($dividerCell[0] === ':')
822
+ {
823
+ $alignment = 'left';
824
+ }
825
+
826
+ if (substr($dividerCell, - 1) === ':')
827
+ {
828
+ $alignment = $alignment === 'left' ? 'center' : 'right';
829
+ }
830
 
831
+ $alignments []= $alignment;
832
  }
 
833
 
834
+ # ~
 
 
835
 
836
+ $HeaderElements = array();
837
+
838
+ $header = $Block['element']['text'];
839
+
840
+ $header = trim($header);
841
+ $header = trim($header, '|');
842
+
843
+ $headerCells = explode('|', $header);
844
+
845
+ foreach ($headerCells as $index => $headerCell)
846
+ {
847
+ $headerCell = trim($headerCell);
848
+
849
+ $HeaderElement = array(
850
+ 'name' => 'th',
851
+ 'text' => $headerCell,
852
+ 'handler' => 'line',
853
  );
854
 
855
+ if (isset($alignments[$index]))
856
+ {
857
+ $alignment = $alignments[$index];
858
+
859
+ $HeaderElement['attributes'] = array(
860
+ 'style' => 'text-align: '.$alignment.';',
861
+ );
862
  }
863
 
864
+ $HeaderElements []= $HeaderElement;
865
  }
 
866
 
867
+ # ~
 
 
868
 
 
869
  $Block = array(
870
+ 'alignments' => $alignments,
871
+ 'identified' => true,
872
  'element' => array(
873
+ 'name' => 'table',
874
+ 'handler' => 'elements',
 
875
  ),
876
  );
877
 
878
+ $Block['element']['text'] []= array(
879
+ 'name' => 'thead',
880
+ 'handler' => 'elements',
881
+ );
882
 
883
+ $Block['element']['text'] []= array(
884
+ 'name' => 'tbody',
885
+ 'handler' => 'elements',
886
+ 'text' => array(),
887
+ );
888
 
889
+ $Block['element']['text'][0]['text'] []= array(
890
+ 'name' => 'tr',
891
+ 'handler' => 'elements',
892
+ 'text' => $HeaderElements,
893
+ );
894
 
895
+ return $Block;
896
+ }
897
+ }
 
 
898
 
899
+ protected function blockTableContinue($Line, array $Block)
900
+ {
901
+ if (isset($Block['interrupted']))
902
+ {
903
+ return;
904
+ }
905
 
906
+ if ($Line['text'][0] === '|' or strpos($Line['text'], '|'))
907
+ {
908
+ $Elements = array();
 
 
909
 
910
+ $row = $Line['text'];
 
 
 
911
 
912
+ $row = trim($row);
913
+ $row = trim($row, '|');
914
 
915
+ preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches);
 
916
 
917
+ foreach ($matches[0] as $index => $cell)
918
+ {
919
+ $cell = trim($cell);
 
920
 
921
+ $Element = array(
922
+ 'name' => 'td',
923
+ 'handler' => 'line',
924
+ 'text' => $cell,
925
+ );
926
 
927
+ if (isset($Block['alignments'][$index]))
928
  {
929
+ $Element['attributes'] = array(
930
+ 'style' => 'text-align: '.$Block['alignments'][$index].';',
931
+ );
932
  }
933
 
934
+ $Elements []= $Element;
935
  }
936
 
937
+ $Element = array(
938
+ 'name' => 'tr',
939
+ 'handler' => 'elements',
940
+ 'text' => $Elements,
941
+ );
942
 
943
+ $Block['element']['text'][1]['text'] []= $Element;
 
944
 
945
+ return $Block;
946
+ }
947
+ }
948
 
949
+ #
950
+ # ~
951
+ #
952
+
953
+ protected function paragraph($Line)
954
+ {
955
+ $Block = array(
956
+ 'element' => array(
957
+ 'name' => 'p',
958
+ 'text' => $Line['text'],
959
+ 'handler' => 'line',
960
+ ),
961
  );
962
 
963
+ return $Block;
964
+ }
 
965
 
966
+ #
967
+ # Inline Elements
968
+ #
969
 
970
+ protected $InlineTypes = array(
971
+ '"' => array('SpecialCharacter'),
972
+ '!' => array('Image'),
973
+ '&' => array('SpecialCharacter'),
974
+ '*' => array('Emphasis'),
975
+ ':' => array('Url'),
976
+ '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'),
977
+ '>' => array('SpecialCharacter'),
978
+ '[' => array('Link'),
979
+ '_' => array('Emphasis'),
980
+ '`' => array('Code'),
981
+ '~' => array('Strikethrough'),
982
+ '\\' => array('EscapeSequence'),
983
+ );
984
 
985
+ # ~
986
 
987
+ protected $inlineMarkerList = '!"*_&[:<>`~\\';
988
 
989
+ #
990
+ # ~
991
+ #
992
 
993
+ public function line($text)
994
+ {
995
+ $markup = '';
996
 
997
+ # $excerpt is based on the first occurrence of a marker
998
 
999
+ while ($excerpt = strpbrk($text, $this->inlineMarkerList))
1000
+ {
1001
+ $marker = $excerpt[0];
1002
 
1003
+ $markerPosition = strpos($text, $marker);
1004
 
1005
+ $Excerpt = array('text' => $excerpt, 'context' => $text);
 
 
1006
 
1007
+ foreach ($this->InlineTypes[$marker] as $inlineType)
1008
+ {
1009
+ $Inline = $this->{'inline'.$inlineType}($Excerpt);
1010
 
1011
+ if ( ! isset($Inline))
1012
+ {
1013
+ continue;
1014
+ }
1015
 
1016
+ # makes sure that the inline belongs to "our" marker
1017
 
1018
+ if (isset($Inline['position']) and $Inline['position'] > $markerPosition)
1019
+ {
1020
+ continue;
1021
+ }
1022
 
1023
+ # sets a default inline position
1024
 
1025
+ if ( ! isset($Inline['position']))
1026
+ {
1027
+ $Inline['position'] = $markerPosition;
1028
+ }
1029
 
1030
+ # the text that comes before the inline
1031
+ $unmarkedText = substr($text, 0, $Inline['position']);
1032
 
1033
+ # compile the unmarked text
1034
+ $markup .= $this->unmarkedText($unmarkedText);
1035
 
1036
+ # compile the inline
1037
+ $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']);
1038
 
1039
+ # remove the examined text
1040
+ $text = substr($text, $Inline['position'] + $Inline['extent']);
1041
 
1042
+ continue 2;
1043
+ }
1044
 
1045
+ # the marker does not belong to an inline
1046
 
1047
+ $unmarkedText = substr($text, 0, $markerPosition + 1);
 
1048
 
1049
+ $markup .= $this->unmarkedText($unmarkedText);
1050
 
1051
+ $text = substr($text, $markerPosition + 1);
1052
  }
1053
 
1054
+ $markup .= $this->unmarkedText($text);
 
 
1055
 
1056
+ return $markup;
1057
+ }
 
 
1058
 
1059
+ #
1060
+ # ~
1061
+ #
 
 
 
 
 
 
 
 
 
 
 
 
 
1062
 
1063
+ protected function inlineCode($Excerpt)
1064
+ {
1065
+ $marker = $Excerpt['text'][0];
 
 
 
 
 
1066
 
1067
+ if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(?<!'.$marker.')\1(?!'.$marker.')/s', $Excerpt['text'], $matches))
1068
+ {
1069
+ $text = $matches[2];
1070
+ $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
1071
+ $text = preg_replace("/[ ]*\n/", ' ', $text);
1072
 
1073
+ return array(
1074
+ 'extent' => strlen($matches[0]),
1075
+ 'element' => array(
1076
+ 'name' => 'code',
1077
+ 'text' => $text,
1078
+ ),
1079
+ );
 
 
 
1080
  }
1081
+ }
1082
 
1083
+ protected function inlineEmailTag($Excerpt)
1084
+ {
1085
+ if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches))
1086
+ {
1087
+ $url = $matches[1];
1088
+
1089
+ if ( ! isset($matches[2]))
1090
+ {
1091
+ $url = 'mailto:' . $url;
1092
  }
 
1093
 
 
1094
  return array(
1095
+ 'extent' => strlen($matches[0]),
1096
+ 'element' => array(
1097
+ 'name' => 'a',
1098
+ 'text' => $matches[1],
1099
+ 'attributes' => array(
1100
+ 'href' => $url,
1101
+ ),
1102
+ ),
1103
  );
1104
  }
1105
+ }
1106
 
1107
+ protected function inlineEmphasis($Excerpt)
1108
+ {
1109
+ if ( ! isset($Excerpt['text'][1]))
1110
+ {
1111
+ return;
1112
+ }
1113
 
1114
+ $marker = $Excerpt['text'][0];
1115
+
1116
+ if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches))
1117
+ {
1118
+ $emphasis = 'strong';
1119
+ }
1120
+ elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches))
1121
+ {
1122
+ $emphasis = 'em';
1123
+ }
1124
+ else
1125
+ {
1126
+ return;
1127
  }
1128
 
1129
+ return array(
1130
+ 'extent' => strlen($matches[0]),
1131
+ 'element' => array(
1132
+ 'name' => $emphasis,
1133
+ 'handler' => 'line',
1134
+ 'text' => $matches[1],
1135
+ ),
1136
+ );
1137
+ }
1138
+
1139
+ protected function inlineEscapeSequence($Excerpt)
1140
+ {
1141
+ if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters))
1142
+ {
1143
+ return array(
1144
+ 'markup' => $Excerpt['text'][1],
1145
+ 'extent' => 2,
1146
+ );
1147
  }
1148
+ }
1149
 
1150
+ protected function inlineImage($Excerpt)
1151
+ {
1152
+ if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[')
1153
+ {
1154
+ return;
 
 
1155
  }
1156
 
1157
+ $Excerpt['text']= substr($Excerpt['text'], 1);
 
1158
 
1159
+ $Link = $this->inlineLink($Excerpt);
 
 
1160
 
1161
+ if ($Link === null)
1162
+ {
1163
+ return;
 
 
 
 
 
1164
  }
1165
 
1166
+ $Inline = array(
1167
+ 'extent' => $Link['extent'] + 1,
1168
+ 'element' => array(
1169
+ 'name' => 'img',
1170
+ 'attributes' => array(
1171
+ 'src' => $Link['element']['attributes']['href'],
1172
+ 'alt' => $Link['element']['text'],
1173
+ ),
1174
+ ),
1175
+ );
1176
+
1177
+ $Inline['element']['attributes'] += $Link['element']['attributes'];
1178
 
1179
+ unset($Inline['element']['attributes']['href']);
 
1180
 
1181
+ return $Inline;
1182
+ }
1183
 
1184
+ protected function inlineLink($Excerpt)
1185
+ {
1186
+ $Element = array(
1187
+ 'name' => 'a',
1188
+ 'handler' => 'line',
1189
+ 'text' => null,
1190
+ 'attributes' => array(
1191
+ 'href' => null,
1192
+ 'title' => null,
1193
+ ),
1194
+ );
1195
 
1196
+ $extent = 0;
 
1197
 
1198
+ $remainder = $Excerpt['text'];
 
1199
 
1200
+ if (preg_match('/\[((?:[^][]|(?R))*)\]/', $remainder, $matches))
1201
+ {
1202
+ $Element['text'] = $matches[1];
 
 
 
1203
 
1204
+ $extent += strlen($matches[0]);
 
 
 
 
1205
 
1206
+ $remainder = substr($remainder, $extent);
1207
+ }
1208
+ else
1209
+ {
1210
+ return;
1211
+ }
1212
 
1213
+ if (preg_match('/^[(]((?:[^ ()]|[(][^ )]+[)])+)(?:[ ]+("[^"]*"|\'[^\']*\'))?[)]/', $remainder, $matches))
1214
+ {
1215
+ $Element['attributes']['href'] = $matches[1];
1216
+
1217
+ if (isset($matches[2]))
1218
+ {
1219
+ $Element['attributes']['title'] = substr($matches[2], 1, - 1);
1220
  }
1221
 
1222
+ $extent += strlen($matches[0]);
1223
+ }
1224
+ else
1225
+ {
1226
+ if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches))
1227
+ {
1228
+ $definition = strlen($matches[1]) ? $matches[1] : $Element['text'];
1229
+ $definition = strtolower($definition);
1230
 
1231
+ $extent += strlen($matches[0]);
1232
+ }
1233
+ else
1234
+ {
1235
+ $definition = strtolower($Element['text']);
 
 
 
 
 
 
 
 
 
 
 
 
1236
  }
1237
 
1238
+ if ( ! isset($this->DefinitionData['Reference'][$definition]))
1239
+ {
1240
+ return;
1241
  }
1242
 
1243
+ $Definition = $this->DefinitionData['Reference'][$definition];
1244
+
1245
+ $Element['attributes']['href'] = $Definition['url'];
1246
+ $Element['attributes']['title'] = $Definition['title'];
1247
+ }
1248
+
1249
+ $Element['attributes']['href'] = str_replace(array('&', '<'), array('&amp;', '&lt;'), $Element['attributes']['href']);
1250
+
1251
+ return array(
1252
+ 'extent' => $extent,
1253
+ 'element' => $Element,
1254
+ );
1255
+ }
1256
+
1257
+ protected function inlineMarkup($Excerpt)
1258
+ {
1259
+ if ($this->markupEscaped or strpos($Excerpt['text'], '>') === false)
1260
+ {
1261
+ return;
1262
+ }
1263
+
1264
+ if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w*[ ]*>/s', $Excerpt['text'], $matches))
1265
+ {
1266
  return array(
1267
+ 'markup' => $matches[0],
1268
+ 'extent' => strlen($matches[0]),
1269
  );
1270
  }
1271
 
1272
+ if ($Excerpt['text'][1] === '!' and preg_match('/^<!---?[^>-](?:-?[^-])*-->/s', $Excerpt['text'], $matches))
1273
+ {
1274
+ return array(
1275
+ 'markup' => $matches[0],
1276
+ 'extent' => strlen($matches[0]),
1277
+ );
1278
+ }
1279
 
1280
+ if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches))
1281
+ {
1282
+ return array(
1283
+ 'markup' => $matches[0],
1284
+ 'extent' => strlen($matches[0]),
1285
+ );
1286
+ }
1287
+ }
1288
 
1289
+ protected function inlineSpecialCharacter($Excerpt)
1290
+ {
1291
+ if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text']))
1292
+ {
1293
+ return array(
1294
+ 'markup' => '&amp;',
1295
+ 'extent' => 1,
1296
+ );
1297
+ }
1298
+
1299
+ $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot');
1300
+
1301
+ if (isset($SpecialCharacter[$Excerpt['text'][0]]))
1302
+ {
1303
+ return array(
1304
+ 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';',
1305
+ 'extent' => 1,
1306
+ );
1307
+ }
1308
+ }
1309
+
1310
+ protected function inlineStrikethrough($Excerpt)
1311
+ {
1312
+ if ( ! isset($Excerpt['text'][1]))
1313
+ {
1314
+ return;
1315
+ }
1316
 
1317
+ if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches))
1318
+ {
1319
  return array(
1320
+ 'extent' => strlen($matches[0]),
1321
  'element' => array(
1322
+ 'name' => 'del',
1323
+ 'text' => $matches[1],
1324
  'handler' => 'line',
 
1325
  ),
1326
  );
1327
  }
1328
+ }
1329
 
1330
+ protected function inlineUrl($Excerpt)
1331
+ {
1332
+ if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/')
1333
+ {
1334
+ return;
1335
+ }
1336
 
1337
+ if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE))
1338
+ {
1339
+ $Inline = array(
1340
+ 'extent' => strlen($matches[0][0]),
1341
+ 'position' => $matches[0][1],
1342
+ 'element' => array(
1343
+ 'name' => 'a',
1344
+ 'text' => $matches[0][0],
1345
+ 'attributes' => array(
1346
+ 'href' => $matches[0][0],
1347
+ ),
1348
+ ),
1349
+ );
1350
 
1351
+ return $Inline;
1352
+ }
1353
+ }
1354
 
1355
+ protected function inlineUrlTag($Excerpt)
1356
+ {
1357
+ if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches))
1358
+ {
1359
+ $url = str_replace(array('&', '<'), array('&amp;', '&lt;'), $matches[1]);
1360
+
1361
+ return array(
1362
+ 'extent' => strlen($matches[0]),
1363
+ 'element' => array(
1364
+ 'name' => 'a',
1365
+ 'text' => $url,
1366
+ 'attributes' => array(
1367
+ 'href' => $url,
1368
+ ),
1369
+ ),
1370
+ );
1371
  }
1372
+ }
1373
 
1374
+ # ~
 
 
1375
 
1376
+ protected function unmarkedText($text)
1377
+ {
1378
+ if ($this->breaksEnabled)
1379
+ {
1380
+ $text = preg_replace('/[ ]*\n/', "<br />\n", $text);
1381
+ }
1382
+ else
1383
+ {
1384
+ $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "<br />\n", $text);
1385
+ $text = str_replace(" \n", "\n", $text);
1386
+ }
1387
 
1388
+ return $text;
1389
+ }
1390
 
1391
+ #
1392
+ # Handlers
1393
+ #
1394
 
1395
+ protected function element(array $Element)
1396
+ {
1397
+ $markup = '<'.$Element['name'];
1398
 
1399
+ if (isset($Element['attributes']))
1400
+ {
1401
+ foreach ($Element['attributes'] as $name => $value)
1402
+ {
1403
+ if ($value === null)
1404
+ {
1405
+ continue;
1406
+ }
1407
 
1408
+ $markup .= ' '.$name.'="'.$value.'"';
1409
+ }
1410
  }
1411