YouTube - Version 8.1

Version Description

Download this release

Release Info

Developer embedplus
Plugin Icon 128x128 YouTube
Version 8.1
Comparing to
See all releases

Code changes from version 1.1 to 8.1

Files changed (56) hide show
  1. images/accclose.png +0 -0
  2. images/ajax-loader.gif +0 -0
  3. images/btn_embedplusstats.png +0 -0
  4. images/btn_embedplusstatsoff.png +0 -0
  5. images/btn_embedpluswiz.png +0 -0
  6. images/btn_embedpluswizoff.png +0 -0
  7. images/btnprefsoff.png +0 -0
  8. images/btnprefson.png +0 -0
  9. images/btnwizoff.png +0 -0
  10. images/btnwizon.png +0 -0
  11. images/bulletgraph45.png +0 -0
  12. images/clickdashboard.png +0 -0
  13. images/deletechecker.png +0 -0
  14. images/epstats16.png +0 -0
  15. images/erase.png +0 -0
  16. images/hideget.jpg +0 -0
  17. images/howto.png +0 -0
  18. images/html5.png +0 -0
  19. images/icondiscuss.png +0 -0
  20. images/iconmusic.png +0 -0
  21. images/iconwizard.png +0 -0
  22. images/iconythealth.png +0 -0
  23. images/infinity.png +0 -0
  24. images/lock.png +0 -0
  25. images/prioritysupport.png +0 -0
  26. images/questionsale.png +0 -0
  27. images/showcase.png +0 -0
  28. images/sshowto.png +0 -0
  29. images/ssprowizard-th.jpg +0 -0
  30. images/ssprowizard.jpg +0 -0
  31. images/ssprowizard.png +0 -0
  32. images/ssschemaorg.jpg +0 -0
  33. images/unlink.png +0 -0
  34. images/vseo.png +0 -0
  35. images/wizbutton.png +0 -0
  36. images/wizbuttonbig.png +0 -0
  37. images/wizbuttonoff.png +0 -0
  38. images/youtubewizard.png +0 -0
  39. readme.txt +222 -40
  40. screenshot-1.jpg +0 -0
  41. screenshot-2.jpg +0 -0
  42. screenshot-3.jpg +0 -0
  43. screenshot-4.jpg +0 -0
  44. screenshot-5.jpg +0 -0
  45. scripts/btn_embedplusstats.png +0 -0
  46. scripts/btn_embedplusstatsoff.png +0 -0
  47. scripts/embedplus_mce.css +93 -0
  48. scripts/embedplus_mce.js +54 -0
  49. scripts/embedplus_mce_prefs.js +30 -0
  50. scripts/embedplus_mce_wiz.js +46 -0
  51. scripts/embedplusstats_mce.js +29 -0
  52. scripts/fitvids.js +75 -0
  53. scripts/fitvids.min.js +22 -0
  54. scripts/jqueryfit.min.js +7 -0
  55. scripts/ytprefs.min.js +1 -0
  56. youtube.php +1842 -280
images/accclose.png ADDED
Binary file
images/ajax-loader.gif ADDED
Binary file
images/btn_embedplusstats.png ADDED
Binary file
images/btn_embedplusstatsoff.png ADDED
Binary file
images/btn_embedpluswiz.png ADDED
Binary file
images/btn_embedpluswizoff.png ADDED
Binary file
images/btnprefsoff.png ADDED
Binary file
images/btnprefson.png ADDED
Binary file
images/btnwizoff.png ADDED
Binary file
images/btnwizon.png ADDED
Binary file
images/bulletgraph45.png ADDED
Binary file
images/clickdashboard.png ADDED
Binary file
images/deletechecker.png ADDED
Binary file
images/epstats16.png ADDED
Binary file
images/erase.png ADDED
Binary file
images/hideget.jpg ADDED
Binary file
images/howto.png ADDED
Binary file
images/html5.png ADDED
Binary file
images/icondiscuss.png ADDED
Binary file
images/iconmusic.png ADDED
Binary file
images/iconwizard.png ADDED
Binary file
images/iconythealth.png ADDED
Binary file
images/infinity.png ADDED
Binary file
images/lock.png ADDED
Binary file
images/prioritysupport.png ADDED
Binary file
images/questionsale.png ADDED
Binary file
images/showcase.png ADDED
Binary file
images/sshowto.png ADDED
Binary file
images/ssprowizard-th.jpg ADDED
Binary file
images/ssprowizard.jpg ADDED
Binary file
images/ssprowizard.png ADDED
Binary file
images/ssschemaorg.jpg ADDED
Binary file
images/unlink.png ADDED
Binary file
images/vseo.png ADDED
Binary file
images/wizbutton.png ADDED
Binary file
images/wizbuttonbig.png ADDED
Binary file
images/wizbuttonoff.png ADDED
Binary file
images/youtubewizard.png ADDED
Binary file
readme.txt CHANGED
@@ -1,72 +1,254 @@
1
  === YouTube ===
2
  Contributors: embedplus
3
  Plugin Name: YouTube Embed
4
- Tags: basic youtube, youtube, youtube plugin, youtube shortcode, embed youtube, plugin, video, video shortcode, embed videos, plugin, youtube player, shortcode, simple, simple youtube, smart youtube playback, youtube embed, wordpress youtube embed, embedding youtube, youtube embedding, video plugin
5
  Requires at least: 2.9
6
- Tested up to: 3.5
7
- Stable tag: 1.1
8
  License: GPLv3 or later
9
 
10
- YouTube embed plugin for WordPress. Provides the basic features of YouTube for your blog, and convenient defaults.
11
 
12
  == Description ==
13
 
14
- This YouTube embed plugin for WordPress is very simple. It provides the basic features of YouTube, and will have you embedding in seconds after installing it. If you want to explore a more advanced plugin, we suggest looking at another one like: [Advanced YouTube Embed](http://wordpress.org/extend/plugins/embedplus-for-wordpress/) by [EmbedPlus](http://www.embedplus.com).
15
-
16
- To start using this plugin, simply paste a YouTube link on its own line. You can also make default settings for all your YouTube videos under the YouTube admin menu. You can make additional YouTube embed customizations by adding more to the link as shown below:
17
-
18
- * width - Sets the width of your player. If omitted, the default width will be the width of your theme's content. Example: http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350
19
- * height - Sets the height of your player. If omitted, this will be calculated for you automatically. Example: http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350
20
- * autoplay - Set this to 1 to autoplay the video (or 0 to play the video once). Example: http://www.youtube.com/watch?v=quwebVjAEJA&autoplay=1
21
- * cc_load_policy - Set this to 1 to turn on closed captioning (or 0 to leave them off). Example: http://www.youtube.com/watch?v=quwebVjAEJA&cc_load_policy=1
22
- * iv_load_policy - Set this to 3 to turn off annotations (or 1 to show them). Example: http://www.youtube.com/watch?v=quwebVjAEJA&iv_load_policy=3
23
- * loop - Set this to 1 to loop the video (or 0 to not loop). Example: http://www.youtube.com/watch?v=quwebVjAEJA&loop=1
24
- * modestbranding - Set this to 1 to remove the YouTube logo while playing (or 0 to show the logo). Example: http://www.youtube.com/watch?v=quwebVjAEJA&modestbranding=1
25
- * rel - Set this to 0 to not show related videos at the end of playing (or 1 to show them). Example: http://www.youtube.com/watch?v=quwebVjAEJA&rel=0
26
- * showinfo - Set this to 0 to hide the video title and other info (or 1 to show it). Example: http://www.youtube.com/watch?v=quwebVjAEJA&showinfo=0
27
- * theme - Set this to 'light' to make the player have the light-colored theme (or 'dark' for the dark theme). Example: http://www.youtube.com/watch?v=quwebVjAEJA&theme=light
28
-
29
- Hear about major upcoming announcements and feature updates by [signing up here](http://eepurl.com/tpof9).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
  == Installation ==
32
 
33
  1. Use the WordPress plugin installer to install the plugin. Alternatively, you can just extract the folder in our download package and upload it to your plugin directory.
34
  1. Access the Plugins admin menu to activate the YouTube embed plugin.
35
  1. Make your default settings after clicking the new YouTube menu item that shows up in your admin panel.
36
- 1. In your editor, start pasting the links with any desired additional codes needed for your YouTube embed. Make sure the link is on its own line.
 
37
 
38
- Additional codes (adding these will override the default settings in the admin):
39
 
40
- * width - Sets the width of your player. If omitted, the default width will be the width of your theme's content. Example: http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350
41
- * height - Sets the height of your player. If omitted, this will be calculated for you automatically. Example: http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350
42
- * autoplay - Set this to 1 to autoplay the video (or 0 to play the video once). Example: http://www.youtube.com/watch?v=quwebVjAEJA&autoplay=1
43
- * cc_load_policy - Set this to 1 to turn on closed captioning (or 0 to leave them off). Example: http://www.youtube.com/watch?v=quwebVjAEJA&cc_load_policy=1
44
- * iv_load_policy - Set this to 3 to turn off annotations (or 1 to show them). Example: http://www.youtube.com/watch?v=quwebVjAEJA&iv_load_policy=3
45
- * loop - Set this to 1 to loop the video (or 0 to not loop). Example: http://www.youtube.com/watch?v=quwebVjAEJA&loop=1
46
- * modestbranding - Set this to 1 to remove the YouTube logo while playing (or 0 to show the logo). Example: http://www.youtube.com/watch?v=quwebVjAEJA&modestbranding=1
47
- * rel - Set this to 0 to not show related videos at the end of playing (or 1 to show them). Example: http://www.youtube.com/watch?v=quwebVjAEJA&rel=0
48
- * showinfo - Set this to 0 to hide the video title and other info (or 1 to show it). Example: http://www.youtube.com/watch?v=quwebVjAEJA&showinfo=0
49
- * theme - Set this to 'light' to make the player have the light-colored theme (or 'dark' for the dark theme). Example: http://www.youtube.com/watch?v=quwebVjAEJA&theme=light
 
 
50
 
51
- = Contact =
52
 
53
- Please use the Support forum until we put up a site for this plugin.
 
 
 
 
 
 
 
 
54
 
55
  == Screenshots ==
56
 
57
- 1. YouTube Embed Screenshot 1: Paste a YouTube link on its own line and it will become a YouTube embed on your website.
58
- 2. YouTube Embed Screenshot 2: YouTube's admin settings.
 
 
 
59
 
60
  == Changelog ==
61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  = YouTube Embed 1.1 =
63
- Links added to enable future user communications.
64
 
65
  = YouTube Embed 1.0 =
66
  First release uploaded to the plugin repository.
67
 
68
  == Other Notes ==
69
 
70
- Hear about major upcoming announcements and feature updates by [signing up here](http://eepurl.com/tpof9).
71
-
72
- Again, note that this is a no-frills plugin. We're just supporting the basic functions that people typically want when embedding YouTube videos. If you want more, take a look at a more powerful one here: [Advanced YouTube Embed]( http://wordpress.org/extend/plugins/embedplus-for-wordpress/) by [EmbedPlus](http://www.embedplus.com).
1
  === YouTube ===
2
  Contributors: embedplus
3
  Plugin Name: YouTube Embed
4
+ Tags: at a glance, channel, annotations, music, music video, songs, song, lyrics, responsive, short code, shortcode, youtube shortcode, health, diagnostic, youtube status, seo, video seo, rich snippets, reddit, google+, google plus, comments, search, widget, sidebar, responsive, fluid, iphone, mobile, android, tablet, ipad, youtube playlist, playlists, playlist, wmode, hd, autohd, auto hd, video analytics, analytics, google, google analytics, view count, vlog, vlogging, web videos, youtube analytics, youtube, youtube plugin, youtube shortcode, embed youtube, plugin, video, video shortcode, embed videos, youtube player, shortcode, simple, simple youtube, smart youtube playback, youtube embed, wordpress youtube embed, embedding youtube, youtube embedding, video plugin, https, ssl, secure, no-cookie, cookie, html5, youtube html5
5
  Requires at least: 2.9
6
+ Tested up to: 3.8.1
7
+ Stable tag: 8.1
8
  License: GPLv3 or later
9
 
10
+ YouTube embed plugin with basic features and convenient defaults. Upgrade now to add tracking, instant video SEO tags, and much more!
11
 
12
  == Description ==
13
 
14
+ **400,000+ downloads! Here are some recently added features:**
15
+
16
+ * "At a Glance" direct access to YouTube posts/pages
17
+ * Built-in YouTube video search, viewing, and insertion right from your editor.
18
+ * One-click Video SEO tags.
19
+ * Music video embedding extras.
20
+ * Analytics and deleted video alerts work with past YouTube videos that you embedded with many other YouTube plugins.
21
+ * Review the latest web discussions about videos you want to embed before embedding.
22
+ * Shortcode support for embedding multiple videos on one line.
23
+ * And more...
24
+
25
+ This YouTube embed plugin for WordPress keeps things simple, but it can be upgraded for enhanced SEO, performance, privacy and security for you and your visitors. It provides the basic features of the YouTube embedded player and will have you posting videos in seconds after installing it. **All you have to do is simply paste an unformatted YouTube link on its own line (shortcodes are also supported).** Your YouTube embed will then show up when you preview or publish the post. The settings page has plenty of default options that you can automatically apply to all your embedded YouTube videos:
26
+
27
+ * Force HD quality when available
28
+ * Make your videos responsive so that they dynamically fit in all screen sizes (smart phone, PC and tablet)
29
+ * Modest branding - hide YouTube logo while playing
30
+ * Automatically center all your videos
31
+ * Automatically start playing your videos
32
+ * Turn on/off closed captions by default
33
+ * Show/hide annotations by default
34
+ * Loop your videos
35
+ * Show/hide related videos at the end
36
+ * Show/hide the video title and other info
37
+ * Use the light theme
38
+ * Show/hide player controls
39
+ * Use "opaque" wmode
40
+ * Autohide controls until hovering
41
+
42
+ Customizations can be also made to each YouTube embed by adding more to the link as shown below. Adding these will override the above global defaults that you set:
43
+
44
+ * width - Sets the width of your player. If omitted, the default width will be the width of your theme's content. Example: `http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350`
45
+ * height - Sets the height of your player. If omitted, this will be calculated for you automatically. Example: `http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350`
46
+ * vq - Set this to `hd720` or `hd1080` to force the video to play in HD quality. Example: `http://www.youtube.com/watch?v=quwebVjAEJA&vq=hd720`
47
+ * autoplay - Set this to 1 to autoplay the video (or 0 to play the video once). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&autoplay=1`
48
+ * cc_load_policy - Set this to 1 to turn on closed captioning (or 0 to leave them off). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&cc_load_policy=1`
49
+ * iv_load_policy - Set this to 3 to turn off annotations (or 1 to show them). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&iv_load_policy=3`
50
+ * loop - Set this to 1 to loop the video (or 0 to not loop). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&loop=1`
51
+ * modestbranding - Set this to 1 to remove the YouTube logo while playing (or 0 to show the logo). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&modestbranding=1`
52
+ * rel - Set this to 0 to not show related videos at the end of playing (or 1 to show them). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&rel=0`
53
+ * showinfo - Set this to 0 to hide the video title and other info (or 1 to show it). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&showinfo=0`
54
+ * theme - Set this to 'light' to make the player have the light-colored theme (or 'dark' for the dark theme). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&theme=light`
55
+ * autohide - Set this to 1 to slide away the control bar after the video starts playing. It will automatically slide back in again if you mouse over the video. (Set to 2 to always show it). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&autohide=1`
56
+
57
+ You can also start and end each individual video at particular times. Like the above, each option should begin with '&'
58
+
59
+ * start - Sets the time (in seconds) to start the video. Example: `http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350&start=20`
60
+ * end - Sets the time (in seconds) to stop the video. Example: `http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350&end=100`
61
+
62
+ Beyond the above features, you have the option of upgrading to PRO to add enhanced features like the full visual embedding wizard (so you can avoid memorizing codes), priority support, and security/performance. As a PRO user, you also get access to our deleted video alerts to help avoid showing embedded videos that are later removed from YouTube.com. You even get an embedder-centric analytics dashboard that adds view tracking to each of your embeds so that you can answers questions like:
63
+
64
+ * How much are your visitors actually watching the videos you post?
65
+ * How does the view activity on your site compare to other sites like it?
66
+ * What and when are your best and worst performing YouTube embeds?
67
+ * How much do the producers of the YouTube videos you embed rely on **your site**, versus other sites and YouTube.com, for views?
68
+
69
+ Recently, we also added One-Click Video SEO, which adds markup that can improve your click rates and video SERP rankings.
70
+
71
+ See more details after installing. Enjoy!
72
+
73
+ [Maintained by EmbedPlus for YouTube >>](http://www.embedplus.com/)
74
 
75
  == Installation ==
76
 
77
  1. Use the WordPress plugin installer to install the plugin. Alternatively, you can just extract the folder in our download package and upload it to your plugin directory.
78
  1. Access the Plugins admin menu to activate the YouTube embed plugin.
79
  1. Make your default settings after clicking the new YouTube menu item that shows up in your admin panel.
80
+ 1. To embed videos in your post, start pasting the links with any desired additional codes needed for your YouTube embed (see below section for additional codes). Make sure each link is on its own line. Or, if you need multiple videos on the same line, make sure each URL is wrapped properly with the shortcode. Example: `[embedyt]http://www.youtube.com/watch?v=ABCDEFGHIJK&width=400$height=250[/embedyt]` If you don't know exactly which video you want to embed, use the free built-in search feature to find and insert one.
81
+ 1. To get video SEO, an analytics dashboard and many other premium features, [sign up for one of the options here >>](https://www.embedplus.com/dashboard/pro-easy-video-analytics.aspx)
82
 
83
+ **Additional codes (adding these will override the default settings in the admin):**
84
 
85
+ * width - Sets the width of your player. If omitted, the default width will be the width of your theme's content. Example: `http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350`
86
+ * height - Sets the height of your player. If omitted, this will be calculated for you automatically. Example: `http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350`
87
+ * vq - Set this to `hd720` or `hd1080` to force the video to play in HD quality. Example: `http://www.youtube.com/watch?v=quwebVjAEJA&vq=hd720`
88
+ * autoplay - Set this to 1 to autoplay the video (or 0 to play the video once). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&autoplay=1`
89
+ * cc_load_policy - Set this to 1 to turn on closed captioning (or 0 to leave them off). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&cc_load_policy=1`
90
+ * iv_load_policy - Set this to 3 to turn off annotations (or 1 to show them). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&iv_load_policy=3`
91
+ * loop - Set this to 1 to loop the video (or 0 to not loop). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&loop=1`
92
+ * modestbranding - Set this to 1 to remove the YouTube logo while playing (or 0 to show the logo). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&modestbranding=1`
93
+ * rel - Set this to 0 to not show related videos at the end of playing (or 1 to show them). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&rel=0`
94
+ * showinfo - Set this to 0 to hide the video title and other info (or 1 to show it). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&showinfo=0`
95
+ * theme - Set this to 'light' to make the player have the light-colored theme (or 'dark' for the dark theme). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&theme=light`
96
+ * autohide - Set this to 1 to slide away the control bar after the video starts playing. It will automatically slide back in again if you mouse over the video. (Set to 2 to always show it). Example: `http://www.youtube.com/watch?v=quwebVjAEJA&autohide=1`
97
 
98
+ You can also start and end each individual video at particular times. Like the above, each option should begin with '&'
99
 
100
+ * start - Sets the time (in seconds) to start the video. Example: `http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350&start=20`
101
+ * end - Sets the time (in seconds) to stop the video. Example: `http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350&end=100`
102
+
103
+ **Always follow these rules when pasting a link:**
104
+
105
+ * Make sure the url is really on its own line by itself. Or, if you need multiple videos on the same line, make sure each URL is wrapped properly with the shortcode. Example: `[embedyt]http://www.youtube.com/watch?v=ABCDEFGHIJK&width=400$height=250[/embedyt]`
106
+ * Make sure the url is not an active hyperlink (i.e., it should just be plain text). Otherwise, highlight the url and click the "unlink" button in your editor.
107
+ * Make sure you did **not** format or align the url in any way. If your url still appears in your actual post instead of a video, highlight it and click the "remove formatting" button (formatting can be invisible sometimes).
108
+ * Finally, there's a slight chance your custom theme is the issue, if you have one. To know for sure, we suggest temporarily switching to one of the default WordPress themes (e.g., "Twenty Thirteen") just to see if your video does appear. If it suddenly works, then your custom theme is the issue. You can switch back when done testing.
109
 
110
  == Screenshots ==
111
 
112
+ 1. YouTube Embed Screenshot 1: Paste a YouTube link on its own line and it will become a YouTube embed on your website. Or, use the shortcode method.
113
+ 2. YouTube Embed Screenshot 2: How to get to YouTube's admin settings.
114
+ 3. YouTube Embed Screenshot 3: Visual YouTube Wizard and Search Tool
115
+ 4. YouTube Embed Screenshot 4: Wizard Insert Search Result Screenshot
116
+ 5. YouTube Embed Screenshot 5: Wizard Search Results Screenshot
117
 
118
  == Changelog ==
119
 
120
+ = YouTube Embed 8.1 =
121
+ Fixes rare YouTube ID issue.
122
+
123
+ = YouTube Embed 8.0 =
124
+ Fixes rare ajax issue.
125
+
126
+ = YouTube Embed 7.9 =
127
+ YouTube searching and inserting now works in Text mode of the editor too.
128
+
129
+ = YouTube Embed 7.8 =
130
+ "At a Glance" direct access to YouTube posts/pages.
131
+
132
+ = YouTube Embed 7.7 =
133
+ Fixes black bar issue when no height/width is specified.
134
+
135
+ = YouTube Embed 7.6 =
136
+ Added notice about Google's HD problem.
137
+
138
+ = YouTube Embed 7.5 =
139
+ Ability to embed an entire channel as a playlist embed.
140
+
141
+ = YouTube Embed 7.3 =
142
+ Change the color of the progress bar from red to white.
143
+
144
+ = YouTube Embed 7.2 =
145
+ Added music video extras to inspire your posts (PRO).
146
+
147
+ = YouTube Embed 7.1 =
148
+ Added autohide controls feature
149
+
150
+ = YouTube Embed 7.0 =
151
+ Shortcode support for embedding multiple videos on one line
152
+
153
+ = YouTube Embed 6.4 =
154
+ Fixes for some users of WordPress 3.8
155
+
156
+ = YouTube Embed 6.3 =
157
+ Removed possible e_notices.
158
+
159
+ = YouTube Embed 6.2 =
160
+ Given the increasing focus on privacy, the no-cookies options was added as a free option to all users. Priority support enhancements also made.
161
+
162
+ = YouTube Embed 6.1 =
163
+ Easier access to general settings and dashboard.
164
+
165
+ = YouTube Embed 6.0 =
166
+ This version opens up the ability to view Internet video discussions to all wizard users.
167
+ **Also, due to numerous users being unable to find the wizard button, we moved it up next to the "Add Media" button.**
168
+ Finally, we added One-Click Video SEO tags as a PRO option.
169
+
170
+ = YouTube Embed 5.1 =
171
+ Added ability to set default dimensions.
172
+ Enhanced compatibility with SSL sites.
173
+
174
+ = YouTube Embed 5.0 =
175
+ Built-in YouTube video search, viewing, and insertion right from your editor tab (for all users).
176
+ The ability to review the latest web discussions about a video you want to embed before embedding it (PRO users).
177
+ Other minor optimizations.
178
+
179
+ = YouTube Embed 4.8 =
180
+ Works when pasting embed link in sidebar text widgets
181
+
182
+ = YouTube Embed 4.7 =
183
+ Improved separation of PRO and Free features in the UI
184
+
185
+ = YouTube Embed 4.6 =
186
+ Added optional responsive video layout to fit all screen sizes. (smart phone, PC and tablet)
187
+
188
+ = YouTube Embed 4.5 =
189
+ Added support for playlists.
190
+ added support for wmode.
191
+
192
+ = YouTube Embed 4.1 =
193
+ Fixed spacing issue. Also added ability to fall back to old spacing format.
194
+
195
+ = YouTube Embed 4.0 =
196
+ New features for all users: lazy loading for the flash player by default and the ability to hide player controls for a cleaner look.
197
+
198
+ = YouTube Embed 3.7 =
199
+ Enhanced deleted video checker for PRO users
200
+
201
+ = YouTube Embed 3.5 =
202
+ Added ability to try to force HTML5 player to speed up page loading
203
+
204
+ = YouTube Embed 3.3 =
205
+ HTTPS: Added secure YouTube embedding for PRO users
206
+
207
+ = YouTube Embed 3.2 =
208
+ Ensures video-specific height overrides defaults properly
209
+
210
+ = YouTube Embed 3.1 =
211
+ Fixed obscure height problem
212
+
213
+ = YouTube Embed 3.0 =
214
+ Added Visual YouTube Wizard for PRO users
215
+ Added autologin to analytics for PRO users
216
+ Added priority support form for PRO users
217
+
218
+ = YouTube Embed 2.6 =
219
+ Compatible with WP 3.6
220
+
221
+ = YouTube Embed 2.4 =
222
+ Added auto HD support
223
+ Support for shorthand (i.e. `http://www.youtu.be`)
224
+ Fixed editor issue
225
+
226
+ = YouTube Embed 2.3 =
227
+ Start/end time shortcut bug fix
228
+
229
+ = YouTube Embed 2.2 =
230
+ Minor changes
231
+
232
+ = YouTube Embed 2.1 =
233
+ By request from several users, we've added easier access to the video analytics dashboard
234
+
235
+ = YouTube Embed 2.0 =
236
+
237
+ This upgrade specifically integrates a user-friendly YouTube Analytics Dashboard to this plugin so you can learn a lot more about the videos you post. Download it if you would like it to use your site's YouTube-related activity to help answer questions like:
238
+
239
+ * How much are your visitors actually watching the videos you post?
240
+ * How does the view activity on your site compare to other sites like it?
241
+ * What and when are your best and worst performers?
242
+ * How much do the producers of the YouTube videos you embed rely on **your site** for views?
243
+
244
+ We think these are all interesting questions; however, note that there's no need to upgrade if you don't.
245
+
246
  = YouTube Embed 1.1 =
247
+ Fixed minor bug.
248
 
249
  = YouTube Embed 1.0 =
250
  First release uploaded to the plugin repository.
251
 
252
  == Other Notes ==
253
 
254
+ This YouTube plugin includes premium features like [one-click video SEO tags, YouTube embed analytics, and deleted video checking](https://www.embedplus.com/dashboard/pro-easy-video-analytics.aspx).
 
 
screenshot-1.jpg CHANGED
Binary file
screenshot-2.jpg CHANGED
Binary file
screenshot-3.jpg ADDED
Binary file
screenshot-4.jpg ADDED
Binary file
screenshot-5.jpg ADDED
Binary file
scripts/btn_embedplusstats.png ADDED
Binary file
scripts/btn_embedplusstatsoff.png ADDED
Binary file
scripts/embedplus_mce.css ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wp_themeSkin span.mce_embedplus_youtubeprefs, span.mce_embedplus_youtubeprefs
2
+ {
3
+ background: transparent url("../images/btnprefsoff.png") no-repeat scroll center center !important;
4
+ }
5
+
6
+ .wp_themeSkin span.mce_embedplus_youtubeprefs:hover, span.mce_embedplus_youtubeprefs:hover
7
+ {
8
+ background-image: url("../images/btnprefson.png") !important;
9
+ }
10
+
11
+
12
+ .wp_themeSkin span.mce_embedplus_youtubeprefs_wiz, span.mce_embedplus_youtubeprefs_wiz
13
+ {
14
+ background: transparent url("../images/btnwizoff.png") no-repeat scroll center center !important;
15
+ }
16
+
17
+ .wp_themeSkin span.mce_embedplus_youtubeprefs_wiz:hover, span.mce_embedplus_youtubeprefs_wiz:hover
18
+ {
19
+ background-image: url("../images/btnwizon.png") !important;
20
+ }
21
+
22
+
23
+
24
+
25
+ .wp_themeSkin span.mce_embedplusstats, span.mce_embedplusstats,
26
+ .wp_themeSkin span.mce_embedplusstats_youtubeprefs, span.mce_embedplusstats_youtubeprefs
27
+
28
+ {
29
+ background: transparent url("../images/btn_embedplusstatsoff.png") no-repeat scroll center center !important;
30
+ }
31
+
32
+ .wp_themeSkin span.mce_embedplusstats:hover, span.mce_embedplusstats:hover,
33
+ .wp_themeSkin span.mce_embedplusstats_youtubeprefs:hover, span.mce_embedplusstats_youtubeprefs:hover
34
+ {
35
+ background-image: url("../images/btn_embedplusstats.png") !important;
36
+ }
37
+
38
+ /********** media button */
39
+
40
+ .wp-core-ui a.ytprefs_media_link span, a.ytprefs_media_link span, #media-buttons a.ytprefs_media_link span
41
+ {
42
+ background: transparent url("../images/btnwizoff.png") no-repeat scroll top left;
43
+ display: inline-block;
44
+ height: 16px;
45
+ margin: 2px 2px 0 0;
46
+ vertical-align: top;
47
+ width: 16px;
48
+ }
49
+
50
+ .wp-core-ui a.ytprefs_media_link:hover span, a.ytprefs_media_link:hover span, #media-buttons a.ytprefs_media_link:hover span
51
+ {
52
+ background-image: url("../images/btnwizon.png");
53
+ }
54
+
55
+ /*
56
+ .wp-core-ui a.ytprefs_media_link, a.ytprefs_media_link
57
+ {
58
+ padding: 0 10px 1px .4em;
59
+ }
60
+
61
+ #media-buttons a.ytprefs_media_link_old
62
+ {
63
+ padding: 3px 10px 3px 10px;
64
+ }
65
+ */
66
+
67
+ #media-buttons a.ytprefs_media_link, .wp-core-ui a.ytprefs_media_link, a.ytprefs_media_link
68
+ {
69
+ background-attachment: scroll;
70
+ background-clip: border-box;
71
+ background-color: #F3F3F3;
72
+ background-image: linear-gradient(#FEFEFE, #F4F4F4);
73
+ background-origin: padding-box;
74
+ background-size: auto;
75
+ border-radius: 3px;
76
+ border: 1px solid #bbbbbb;
77
+ box-sizing: border-box;
78
+ /*color: #333;*/
79
+ cursor: pointer;
80
+ display: inline-block;
81
+ /*font-family: sans-serif;
82
+ font-size: 12px;
83
+ height: 24px;
84
+ line-height: 23px;*/
85
+ margin: 0px 5px 0px 0px;
86
+ outline-color: #333;
87
+ outline-style: none;
88
+ outline-width: 0px;
89
+ padding: 0px 10px 1px .4em;
90
+ text-decoration: none;
91
+ text-shadow: #FFF 0px 1px 0px;
92
+ white-space: nowrap;
93
+ }
scripts/embedplus_mce.js ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function() {
2
+ var is_epy_pro = (epprokey && epprokey.length > 0);
3
+ tinymce.create('tinymce.plugins.Embedpluswiz_youtubeprefs', {
4
+ init : function(ed, url) {
5
+ var plep = new Image();
6
+ plep.src = url+'/../images/wizbutton.png';
7
+ ed.addButton('embedpluswiz_youtubeprefs', {
8
+ title : is_epy_pro ? 'Visual YouTube Wizard - An easier embedding option' : "YouTube Settings Shortcut (Opens new tab)",
9
+ onclick : function(ev) {
10
+
11
+ if (is_epy_pro)
12
+ {
13
+ modalw = Math.round(jQuery(window).width() *.9);
14
+ modalh = Math.round(jQuery(window).height() *.8);
15
+ ed.windowManager.open({
16
+ title : "Visual YouTube Wizard - An easier embedding option",
17
+ file : epbasesite + '/wpembedcode-simple.aspx?blogwidth=' + epblogwidth + '&domain=' + escape(window.location.toString()) + '&prokey=' + escape(epprokey) + '&myytdefaults=' + escape(myytdefaults),
18
+ width : 950,
19
+ height : modalh,
20
+ inline : true,
21
+ resizable: true,
22
+ scrollbars: true
23
+ }, {
24
+ plugin_url : url, // Plugin absolute URL
25
+ some_custom_arg : '' // Custom argument
26
+ });
27
+ }
28
+ else
29
+ {
30
+ window.open(eppluginadminurl);
31
+ }
32
+
33
+
34
+
35
+ }
36
+ });
37
+ },
38
+ createControl : function(n, cm) {
39
+ return null;
40
+ },
41
+ getInfo : function() {
42
+ return {
43
+ longname : "Visual YouTube Wizard - An easier embedding option",
44
+ author : 'EmbedPlus',
45
+ authorurl : 'http://www.embedplus.com/',
46
+ infourl : 'http://www.embedplus.com/',
47
+ version : epversion
48
+ };
49
+ }
50
+ });
51
+ tinymce.PluginManager.add('embedpluswiz_youtubeprefs', tinymce.plugins.Embedpluswiz_youtubeprefs);
52
+
53
+
54
+ })();
scripts/embedplus_mce_prefs.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function() {
2
+
3
+ tinymce.create('tinymce.plugins.Embedplus_youtubeprefs', {
4
+ init : function(ed, url) {
5
+ var plep = new Image();
6
+ plep.src = url+'/../images/btnprefsoff.png';
7
+ ed.addButton('embedplus_youtubeprefs', {
8
+ title : "YouTube Settings Page Shortcut (Opens new tab to leave this editor tab intact)",
9
+ onclick : function(ev) {
10
+ window.open(eppluginadminurl);
11
+ }
12
+ });
13
+ },
14
+ createControl : function(n, cm) {
15
+ return null;
16
+ },
17
+ getInfo : function() {
18
+ return {
19
+ longname : "YouTube Settings",
20
+ author : 'EmbedPlus',
21
+ authorurl : 'http://www.embedplus.com/',
22
+ infourl : 'http://www.embedplus.com/',
23
+ version : epversion
24
+ };
25
+ }
26
+ });
27
+
28
+ tinymce.PluginManager.add('embedplus_youtubeprefs', tinymce.plugins.Embedplus_youtubeprefs);
29
+
30
+ })();
scripts/embedplus_mce_wiz.js ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function() {
2
+
3
+ tinymce.create('tinymce.plugins.Embedplus_youtubeprefs_wiz', {
4
+ init : function(ed, url) {
5
+ var plep = new Image();
6
+ plep.src = url+'/../images/btnwizoff.png';
7
+ ed.addButton('embedplus_youtubeprefs_wiz', {
8
+ title : 'Visual YouTube Search Tool and Wizard - An easier embedding option',
9
+ onclick : function(ev) {
10
+
11
+ modalw = Math.round(jQuery(window).width() *.9);
12
+ modalh = Math.round(jQuery(window).height() *.8);
13
+ window.ytembedplus_wizard_window =
14
+ ed.windowManager.open({
15
+ title : "Visual YouTube Search Tool and Wizard - An easier embedding option",
16
+ file : epbasesite + '/wpembedcode-simple-search.aspx?pluginversion=' + epversion + '&blogwidth=' + epblogwidth + '&domain=' + escape(window.location.toString()) + '&prokey=' + escape(epprokey) + '&myytdefaults=' + escape(myytdefaults),
17
+ width : 950,
18
+ height : modalh,
19
+ inline : true,
20
+ resizable: true,
21
+ scrollbars: true
22
+ }, {
23
+ plugin_url : url, // Plugin absolute URL
24
+ some_custom_arg : '' // Custom argument
25
+ });
26
+ }
27
+ });
28
+ },
29
+ createControl : function(n, cm) {
30
+ return null;
31
+ },
32
+ getInfo : function() {
33
+ return {
34
+ longname : "Visual YouTube Search Tool and Wizard - An easier embedding option",
35
+ author : 'EmbedPlus',
36
+ authorurl : 'http://www.embedplus.com/',
37
+ infourl : 'http://www.embedplus.com/',
38
+ version : epversion
39
+ };
40
+ }
41
+ });
42
+
43
+ tinymce.PluginManager.add('embedplus_youtubeprefs_wiz', tinymce.plugins.Embedplus_youtubeprefs_wiz);
44
+
45
+
46
+ })();
scripts/embedplusstats_mce.js ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function() {
2
+ tinymce.create('tinymce.plugins.Embedplusstats_youtubeprefs', {
3
+ init : function(ed, url) {
4
+ var plep = new Image();
5
+ plep.src = url+'/../btn_embedplusstats.png';
6
+ ed.addButton('embedplusstats_youtubeprefs', {
7
+ title : 'How much are your visitors actually watching the videos you post? Click here to start using this popular feature from EmbedPlus Labs »',
8
+ onclick : function(ev) {
9
+ window.open(epbasesite + '/dashboard/pro-easy-video-analytics.aspx?ref=wysiwygbutton&prokey=' + epprokey + '&domain=' + escape(window.location.toString()), '_blank');
10
+ }
11
+ });
12
+
13
+ },
14
+ createControl : function(n, cm) {
15
+ return null;
16
+ },
17
+ getInfo : function() {
18
+ return {
19
+ longname : "Embedplus Video Analytics Dashboard",
20
+ author : 'EmbedPlus',
21
+ authorurl : 'http://www.embedplus.com/',
22
+ infourl : 'http://www.embedplus.com/',
23
+ version : epversion
24
+ };
25
+ }
26
+ });
27
+ tinymce.PluginManager.add('embedplusstats_youtubeprefs', tinymce.plugins.Embedplusstats_youtubeprefs);
28
+
29
+ })();
scripts/fitvids.js ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*global jQuery */
2
+ /*jshint multistr:true browser:true */
3
+ /*!
4
+ * FitVids 1.0.3
5
+ *
6
+ * Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
7
+ * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
8
+ * Released under the WTFPL license - http://sam.zoy.org/wtfpl/
9
+ *
10
+ * Date: Thu Sept 01 18:00:00 2011 -0500
11
+ */
12
+
13
+ (function( $ ){
14
+
15
+ "use strict";
16
+
17
+ $.fn.fitVids = function( options ) {
18
+ var settings = {
19
+ customSelector: null
20
+ };
21
+
22
+ if(!document.getElementById('fit-vids-style')) {
23
+
24
+ var div = document.createElement('div'),
25
+ ref = document.getElementsByTagName('base')[0] || document.getElementsByTagName('script')[0],
26
+ cssStyles = '&shy;<style>.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}</style>';
27
+
28
+ div.className = 'fit-vids-style';
29
+ div.id = 'fit-vids-style';
30
+ div.style.display = 'none';
31
+ div.innerHTML = cssStyles;
32
+
33
+ ref.parentNode.insertBefore(div,ref);
34
+
35
+ }
36
+
37
+ if ( options ) {
38
+ $.extend( settings, options );
39
+ }
40
+
41
+ return this.each(function(){
42
+ var selectors = [
43
+ "iframe[src*='youtube.com']",
44
+ "iframe[src*='youtube-nocookie.com']"
45
+ ];
46
+
47
+ if (settings.customSelector) {
48
+ selectors.push(settings.customSelector);
49
+ }
50
+
51
+ var $allVideos = $(this).find(selectors.join(','));
52
+ $allVideos = $allVideos.not("object object"); // SwfObj conflict patch
53
+
54
+ $allVideos.each(function(){
55
+ var $this = $(this);
56
+ if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) {
57
+ return;
58
+ }
59
+ var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
60
+ width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
61
+ aspectRatio = height / width;
62
+ if(!$this.attr('id')){
63
+ var videoID = 'fitvid' + Math.floor(Math.random()*999999);
64
+ $this.attr('id', videoID);
65
+ }
66
+ $this.wrap('<div class="fluid-width-video-wrapper"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+"%");
67
+ $this.removeAttr('height').removeAttr('width');
68
+ });
69
+ });
70
+ };
71
+ // Works with either jQuery or Zepto
72
+ })( window.jQuery || window.Zepto );
73
+ $(document).ready(function(){
74
+ $("body").fitVids();
75
+ });
scripts/fitvids.min.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*global jQuery */
2
+ /*jshint multistr:true browser:true */
3
+ /*!
4
+ * FitVids 1.0.3
5
+ *
6
+ * Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
7
+ * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
8
+ * Released under the WTFPL license - http://sam.zoy.org/wtfpl/
9
+ *
10
+ * Date: Thu Sept 01 18:00:00 2011 -0500
11
+ */
12
+ function epdofitvids(e)
13
+ {
14
+ "use strict";e.fn.fitVids=function(t){var n={customSelector:null};if(!document.getElementById("fit-vids-style")){var r=document.createElement("div"),i=document.getElementsByTagName("base")[0]||document.getElementsByTagName("script")[0],s="­<style>.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}</style>";r.className="fit-vids-style";r.id="fit-vids-style";r.style.display="none";r.innerHTML=s;i.parentNode.insertBefore(r,i)}if(t){e.extend(n,t)}return this.each(function(){var t=epresponsiveselector;if(n.customSelector){t.push(n.customSelector)}var r=e(this).find(t.join(","));r=r.not("object object");r.each(function(){var t=e(this);if(this.tagName.toLowerCase()==="embed"&&t.parent("object").length||t.parent(".fluid-width-video-wrapper").length){return}var n=this.tagName.toLowerCase()==="object"||t.attr("height")&&!isNaN(parseInt(t.attr("height"),10))?parseInt(t.attr("height"),10):t.height(),r=!isNaN(parseInt(t.attr("width"),10))?parseInt(t.attr("width"),10):t.width(),i=n/r;if(!t.attr("id")){var s="fitvid"+Math.floor(Math.random()*999999);t.attr("id",s)}t.wrap('<div class="fluid-width-video-wrapper"></div>').parent(".fluid-width-video-wrapper").css("padding-top",i*100+"%");t.removeAttr("height").removeAttr("width")})})};
15
+ e(document).ready(function(){e("body").fitVids();});
16
+ return true;
17
+ }
18
+ var ephasjq = typeof window.jQuery != "undefined" && epdofitvids(window.jQuery);
19
+ if (!ephasjq)
20
+ {
21
+ document.write("<script src='" + eppathtoscripts + "jqueryfit.min.js'>\x3C/script>");
22
+ }
scripts/jqueryfit.min.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
2
+ //@ sourceMappingURL=jquery.min.map
3
+ */(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;
4
+ return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&&gt(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l)
5
+ }b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window);
6
+
7
+ epdofitvids(jQuery);
scripts/ytprefs.min.js ADDED
@@ -0,0 +1 @@
 
1
+ function onYouTubeIframeAPIReady(){setTimeout(function(){var e=document.querySelectorAll('iframe.__youtube_prefs__, iframe[src*="youtube.com/embed/"], iframe[src*="youtube-nocookie.com/embed/"]');for(var t=0;t<e.length;t++){if(!e[t].hasAttribute("id")){e[t].id="_dytid_"+Math.round(Math.random()*8999+1e3)}_EPADashboard_.setupevents(e[t].id)}},2e3)}(function(){if(!document.querySelectorAll){document.querySelectorAll=function(e){var t=document,n=t.documentElement.firstChild,r=t.createElement("STYLE");n.appendChild(r);t.__qsaels=[];r.styleSheet.cssText=e+"{x:expression(document.__qsaels.push(this))}";window.scrollBy(0,0);return t.__qsaels}}if(typeof window._EPADashboard_=="undefined"){window._EPADashboard_={onPlayerReady:function(e){try{var t=_EPADashboard_.justid(e.target.getVideoUrl());_EPADashboard_.jp("ytid="+t)}catch(n){}},onPlayerStateChange:function(e){var t=e.target.getIframe();if(e.data==1&&e.target.ponce!==true&&t.src.indexOf("autoplay=1")==-1){e.target.ponce=true;try{var n=_EPADashboard_.justid(e.target.getVideoUrl());_EPADashboard_.jp("ytid="+n+"&p=1")}catch(r){}}},justid:function(e){return(new RegExp("[\\?&]v=([^&#]*)")).exec(e)[1]},setupevents:function(e){new YT.Player(e,{events:{onReady:_EPADashboard_.onPlayerReady,onStateChange:_EPADashboard_.onPlayerStateChange}})},jp:function(e){var t=document.createElement("script");t.src="//www.embedplus.com/test-page.aspx?es=w&u="+encodeURIComponent(window.location.href.split("#")[0])+"&"+e+(navigator.userAgent.toLowerCase().indexOf("chrome")>-1?"&b=c&":"&b=&");var n=document.getElementsByTagName("head")[0].appendChild(t);setTimeout(function(){n.parentNode.removeChild(n)},500)}}}if(typeof window.YT=="undefined"){var e=document.createElement("script");e.src="//www.youtube.com/iframe_api";e.type="text/javascript";document.getElementsByTagName("head")[0].appendChild(e)}})()
youtube.php CHANGED
@@ -1,15 +1,15 @@
1
  <?php
2
  /*
3
- Plugin Name: YouTube Embed
4
- Plugin URI: http://www.embedplus.com
5
- Description: YouTube embed plugin for WordPress. Provides the basic features of YouTube for your blog, and convenient defaults.
6
- Version: 1.1
7
  Author: EmbedPlus Team
8
  Author URI: http://www.embedplus.com
9
  */
10
 
11
  /*
12
- YouTube Embed
13
  Copyright (C) 2013 EmbedPlus.com
14
 
15
  This program is free software: you can redistribute it and/or modify
@@ -32,69 +32,609 @@
32
  class YouTubePrefs
33
  {
34
 
 
 
35
  public static $optembedwidth = null;
36
  public static $optembedheight = null;
37
  public static $defaultheight = null;
38
  public static $defaultwidth = null;
39
- public static $opt_auto_hd = 'youtubeprefs_auto_hd';
40
- public static $opt_autoplay = 'youtubeprefs_autoplay';
41
- public static $opt_cc_load_policy = 'youtubeprefs_cc_load_policy';
42
- public static $opt_iv_load_policy = 'youtubeprefs_iv_load_policy';
43
- public static $opt_loop = 'youtubeprefs_loop';
44
- public static $opt_modestbranding = 'youtubeprefs_modestbranding';
45
- public static $opt_rel = 'youtubeprefs_rel';
46
- public static $opt_showinfo = 'youtubeprefs_showinfo';
47
- public static $opt_theme = 'youtubeprefs_theme';
48
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  /*
50
- color
51
- controls
52
- disablekb
53
- enablejsapi
54
- list
55
  listType
56
- playlist
57
- *
58
  */
59
- public static $ytregex = '@^\s*https?://(?:www\.)?(?:youtube.com/watch\?|youtu.be/)([^\s"]+)\s*$@im';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
  public function __construct()
62
  {
 
 
 
 
 
 
 
63
 
64
- $do_autoembeds = get_option('embed_autourls');
65
- if ($do_autoembeds == 0)
66
  {
67
- update_option('embed_autourls', 1);
68
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  self::do_ytprefs();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
 
71
- if (self::wp_above_version('2.9'))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  {
73
- add_action('admin_menu', 'YouTubePrefs::ytprefs_plugin_menu');
74
  }
75
- // if (!is_admin())
76
- // {
77
- // // allow shortcode in widgets
78
- // //add_filter('widget_text', 'do_shortcode', 11);
79
- // }
80
  }
81
 
82
- static function initoptions()
83
  {
84
- if (self::wp_above_version('2.9'))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  {
86
- add_option(self::$opt_auto_hd, 0);
87
- add_option(self::$opt_autoplay, 0);
88
- add_option(self::$opt_cc_load_policy, 0);
89
- add_option(self::$opt_iv_load_policy, 1);
90
- add_option(self::$opt_loop, 0);
91
- add_option(self::$opt_modestbranding, 0);
92
- add_option(self::$opt_rel, 1);
93
- add_option(self::$opt_showinfo, 1);
94
- add_option(self::$opt_theme, 'dark');
 
 
 
 
 
95
 
96
- update_option('embed_autourls', 1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  }
99
 
100
  public static function wp_above_version($ver)
@@ -109,82 +649,150 @@ class YouTubePrefs
109
 
110
  public static function do_ytprefs()
111
  {
112
- if (self::wp_above_version('2.9') && !is_admin())
 
 
 
 
 
 
 
 
 
 
 
 
113
  {
114
- add_filter('the_content', 'YouTubePrefs::apply_prefs', 1);
115
  }
 
116
  }
117
 
118
- public static function apply_prefs($content)
119
  {
120
- $content = preg_replace_callback(self::$ytregex, "YouTubePrefs::get_html", $content);
121
  return $content;
122
  }
123
 
124
- public static function get_html($m)
125
  {
126
- $link = trim(preg_replace('/&amp;/i', '&', $m[0]));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  $link = preg_replace('/\s/', '', $link);
128
- $linkparams = explode('?', $link);
129
- $linkparams = self::keyvalue($linkparams[1], true);
130
- self::init_dimensions($link, $linkparams);
131
-
132
- $linkscheme = parse_url($link, PHP_URL_SCHEME);
133
-
134
- $code1 = '<iframe width="' . self::$defaultwidth . '" height="' . self::$defaultheight .
135
- '" src="' . $linkscheme . '://www.youtube.com/embed/' . $linkparams['v'] . '?';
136
- $code2 = '" frameborder="0" allowfullscreen></iframe>';
137
-
138
- $prefparams = array();
139
-
140
- //get_option(self::$opt_auto_hd, 0);
141
- $autoplay = get_option(self::$opt_autoplay, 0);
142
- $cc_load_policy = get_option(self::$opt_cc_load_policy, 0) == 1 ? 1 : '';
143
- $iv_load_policy = get_option(self::$opt_iv_load_policy, 1);
144
- $loop = get_option(self::$opt_loop, 0);
145
- $modestbranding = get_option(self::$opt_modestbranding, 0) == 1 ? 1 : '';
146
- $rel = get_option(self::$opt_rel, 1);
147
- $showinfo = get_option(self::$opt_showinfo, 1);
148
- $theme = get_option(self::$opt_theme, 'dark');
149
-
150
- if ($autoplay == 1)
151
- $prefparams['autoplay'] = 1;
152
- if ($cc_load_policy == 1)
153
- $prefparams['cc_load_policy'] = 1;
154
- if ($iv_load_policy == 3)
155
- $prefparams['iv_load_policy'] = 3;
156
- if ($loop == 1)
157
- $prefparams['loop'] = 1;
158
- if ($modestbranding == 1)
159
- $prefparams['modestbranding'] = 1;
160
- if ($rel == 0)
161
- $prefparams['rel'] = 0;
162
- if ($showinfo == 0)
163
- $prefparams['showinfo'] = 0;
164
- if ($theme == 'light')
165
- $prefparams['theme'] = 'light';
166
-
167
- $finalparams = $linkparams + $prefparams;
168
- $finalsrc = '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169
 
170
  if (count($finalparams) > 1)
171
  {
172
  foreach ($finalparams as $key => $value)
173
  {
174
- if ($key != 'v')
175
  {
176
  $finalsrc .= htmlspecialchars($key) . '=' . htmlspecialchars($value) . '&';
177
- if ($key == 'loop' && $value == 1)
 
178
  $finalsrc .= 'playlist=' . $finalparams['v'] . '&';
 
179
  }
180
  }
181
  }
182
 
183
- $code = $code1 . $finalsrc . $code2;
184
-
185
  // reset static vals for next embed
186
- self::$optembedwidth = null;
187
- self::$optembedheight = null;
188
  self::$defaultheight = null;
189
  self::$defaultwidth = null;
190
 
@@ -207,25 +815,128 @@ class YouTubePrefs
207
  return $ytkvp;
208
  }
209
 
210
- public static function init_dimensions($url, $urlkvp)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
  {
 
 
 
 
 
 
 
212
 
 
 
 
 
 
213
  // get default dimensions; try embed size in settings, then try theme's content width, then just 480px
214
  if (self::$defaultwidth == null)
215
  {
216
- self::$optembedwidth = intval(get_option('embed_size_w'));
217
- self::$optembedheight = intval(get_option('embed_size_h'));
218
-
219
  global $content_width;
220
  if (empty($content_width))
 
221
  $content_width = $GLOBALS['content_width'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
 
223
- self::$defaultwidth = $urlkvp['width'] ? $urlkvp['width'] : (self::$optembedwidth ? self::$optembedwidth : ($content_width ? $content_width : 480));
224
- self::$defaultheight = self::get_aspect_height($url);
 
 
 
 
 
 
 
 
 
 
225
  }
226
  }
227
 
228
- public static function get_aspect_height($url)
229
  {
230
 
231
  // attempt to get aspect ratio correct height from oEmbed
@@ -236,9 +947,9 @@ class YouTubePrefs
236
  $oembed = _wp_oembed_get_object();
237
  $args = array();
238
  $args['width'] = self::$defaultwidth;
239
- $args['height'] = self::$optembedheight;
240
  $args['discover'] = false;
241
- $odata = $oembed->fetch('http://www.youtube.com/oembed', $url, $args);
242
 
243
  if ($odata)
244
  {
@@ -246,13 +957,244 @@ class YouTubePrefs
246
  }
247
  }
248
 
249
- //add 30 for YouTube's own bar
250
- return $aspectheight + 30;
 
 
 
 
251
  }
252
 
253
  public static function ytprefs_plugin_menu()
254
  {
255
- add_menu_page('YouTube Settings', 'YouTube', 'manage_options', 'youtube-my-preferences', 'YouTubePrefs::ytprefs_show_options', plugins_url('images/youtubeicon16.png', __FILE__), '10.00392854349');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
  }
257
 
258
  public static function ytprefs_show_options()
@@ -263,275 +1205,895 @@ class YouTubePrefs
263
  wp_die(__('You do not have sufficient permissions to access this page.'));
264
  }
265
 
 
 
 
 
 
 
 
266
  // variables for the field and option names
267
  $ytprefs_submitted = 'ytprefs_submitted';
268
 
269
  // Read in existing option values from database
270
- $auto_hd = get_option(self::$opt_auto_hd);
271
- $autoplay = get_option(self::$opt_autoplay, 0);
272
- $cc_load_policy = get_option(self::$opt_cc_load_policy, 0);
273
- $iv_load_policy = get_option(self::$opt_iv_load_policy, 1);
274
- $loop = get_option(self::$opt_loop, 0);
275
- $modestbranding = get_option(self::$opt_modestbranding, 0);
276
- $rel = get_option(self::$opt_rel, 1);
277
- $showinfo = get_option(self::$opt_showinfo, 1);
278
- $theme = get_option(self::$opt_theme, 'dark');
279
 
280
  // See if the user has posted us some information
281
  // If they did, this hidden field will be set to 'Y'
282
  if (isset($_POST[$ytprefs_submitted]) && $_POST[$ytprefs_submitted] == 'Y')
283
  {
284
  // Read their posted values
285
- $auto_hd = $_POST[self::$opt_auto_hd] == (true || 'on') ? 1 : 0;
286
- $autoplay = $_POST[self::$opt_autoplay] == (true || 'on') ? 1 : 0;
287
- $cc_load_policy = $_POST[self::$opt_cc_load_policy] == (true || 'on') ? 1 : 0;
288
- $iv_load_policy = $_POST[self::$opt_iv_load_policy] == (true || 'on') ? 1 : 3;
289
- $loop = $_POST[self::$opt_loop] == (true || 'on') ? 1 : 0;
290
- $modestbranding = $_POST[self::$opt_modestbranding] == (true || 'on') ? 1 : 0;
291
- $rel = $_POST[self::$opt_rel] == (true || 'on') ? 1 : 0;
292
- $showinfo = $_POST[self::$opt_showinfo] == (true || 'on') ? 1 : 0;
293
- $theme = $_POST[self::$opt_theme] == (true || 'on') ? 'dark' : 'light';
294
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
295
 
296
  // Save the posted value in the database
297
- update_option(self::$opt_auto_hd, $auto_hd);
298
- update_option(self::$opt_autoplay, $autoplay);
299
- update_option(self::$opt_cc_load_policy, $cc_load_policy);
300
- update_option(self::$opt_iv_load_policy, $iv_load_policy);
301
- update_option(self::$opt_loop, $loop);
302
- update_option(self::$opt_modestbranding, $modestbranding);
303
- update_option(self::$opt_rel, $rel);
304
- update_option(self::$opt_showinfo, $showinfo);
305
- update_option(self::$opt_theme, $theme);
306
 
 
307
  // Put a settings updated message on the screen
308
  ?>
309
  <div class="updated"><p><strong><?php _e('Settings saved.'); ?></strong></p></div>
310
  <?php
311
  }
312
 
 
313
  // Now display the settings editing screen
314
 
315
- echo '<div class="wrap">';
316
 
317
  // header
318
 
319
- echo "<h2>" . '<img src="' . plugins_url('images/youtubeicon16.png', __FILE__) . '" /> ' . __('YouTube Preferences') . "</h2>";
320
-
321
- echo '<em>Hear about major upcoming announcements and feature updates by <a target="_blank" href="http://eepurl.com/tpof9">signing up here</a>.</em>';
322
 
323
  // settings form
324
  ?>
 
325
  <style type="text/css">
326
- #ytform p { line-height: 20px; }
 
327
  #ytform ul li {margin-left: 30px; list-style: disc outside none;}
328
- .ytindent {padding: 0px 0px 0px 20px;}
 
329
  .shadow {-webkit-box-shadow: 0px 0px 20px 0px #000000; box-shadow: 0px 0px 20px 0px #000000;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
  </style>
331
 
332
  <div class="ytindent">
 
 
 
 
 
 
 
 
 
 
 
333
  <form name="form1" method="post" action="" id="ytform">
334
  <input type="hidden" name="<?php echo $ytprefs_submitted; ?>" value="Y">
335
- <h3>
336
- <?php _e("How to Insert a YouTube Video") ?>
 
337
  </h3>
338
  <p>
339
- All you have to do is paste the link to the YouTube video on its own line, as shown below (including the http:// part). Easy, eh?
 
340
  </p>
341
  <p>
342
- <img class="shadow" src="<?php echo plugins_url('images/ownline.jpg', __FILE__) ?>" />
 
 
 
343
  </p>
344
-
345
  <p>
346
- Note: Make sure the link is in plain text (not hyperlinked/blue).
 
347
  </p>
 
 
 
 
 
 
 
 
 
 
348
 
349
- <h3>
350
- <?php _e("Default Options") ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
351
  </h3>
352
  <p>
353
- <?php _e("Below you can set the default options for all your videos. However, you can override them (and more) on a per-video basis. Directions on how to do that are in the next section.") ?>
 
 
 
354
  </p>
355
 
356
- <div class="ytindent">
357
-
358
- <!--
359
  <p>
360
- <input name="<?php echo self::$opt_auto_hd; ?>" id="<?php echo self::$opt_auto_hd; ?>" <?php checked($auto_hd, 1); ?> type="checkbox" class="checkbox">
361
- <label for="<?php echo self::$opt_auto_hd; ?>"><?php _e('Automatically make all videos HD quality (when possible).') ?></label>
362
  </p>
363
- -->
364
  <p>
365
- <input name="<?php echo self::$opt_autoplay; ?>" id="<?php echo self::$opt_autoplay; ?>" <?php checked($autoplay, 1); ?> type="checkbox" class="checkbox">
366
- <label for="<?php echo self::$opt_autoplay; ?>"><?php _e('Automatically start playing your videos') ?></label>
367
  </p>
368
  <p>
369
- <input name="<?php echo self::$opt_cc_load_policy; ?>" id="<?php echo self::$opt_cc_load_policy; ?>" <?php checked($cc_load_policy, 1); ?> type="checkbox" class="checkbox">
370
- <label for="<?php echo self::$opt_cc_load_policy; ?>"><?php _e('Turn on closed captions by default') ?></label>
371
  </p>
372
  <p>
373
- <input name="<?php echo self::$opt_iv_load_policy; ?>" id="<?php echo self::$opt_iv_load_policy; ?>" <?php checked($iv_load_policy, 1); ?> type="checkbox" class="checkbox">
374
- <label for="<?php echo self::$opt_iv_load_policy; ?>"><?php _e('Show annotations by default') ?></label>
375
  </p>
376
  <p>
377
- <input name="<?php echo self::$opt_loop; ?>" id="<?php echo self::$opt_loop; ?>" <?php checked($loop, 1); ?> type="checkbox" class="checkbox">
378
- <label for="<?php echo self::$opt_loop; ?>"><?php _e('Loop all your videos') ?></label>
379
  </p>
380
  <p>
381
- <input name="<?php echo self::$opt_modestbranding; ?>" id="<?php echo self::$opt_modestbranding; ?>" <?php checked($modestbranding, 1); ?> type="checkbox" class="checkbox">
382
- <label for="<?php echo self::$opt_modestbranding; ?>"><?php _e('Modest branding - hide YouTube logo while playing') ?></label>
383
  </p>
384
  <p>
385
- <input name="<?php echo self::$opt_rel; ?>" id="<?php echo self::$opt_rel; ?>" <?php checked($rel, 1); ?> type="checkbox" class="checkbox">
386
- <label for="<?php echo self::$opt_rel; ?>"><?php _e('Show related videos at the end') ?></label>
387
  </p>
388
  <p>
389
- <input name="<?php echo self::$opt_showinfo; ?>" id="<?php echo self::$opt_showinfo; ?>" <?php checked($showinfo, 1); ?> type="checkbox" class="checkbox">
390
- <label for="<?php echo self::$opt_showinfo; ?>"><?php _e('Show the video title and other info') ?></label>
391
  </p>
392
  <p>
393
- <input name="<?php echo self::$opt_theme; ?>" id="<?php echo self::$opt_theme; ?>" <?php checked($theme, 'dark'); ?> type="checkbox" class="checkbox">
394
- <label for="<?php echo self::$opt_theme; ?>"><?php _e('Use the dark theme (uncheck to use light theme)') ?></label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
395
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
396
  <p class="submit">
397
- <input type="submit" name="Submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
398
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
399
  </div>
 
400
 
401
- <h3>
402
- <?php _e("How To Override Defaults / Other Options") ?>
403
  </h3>
404
- <?php
405
- _e("<p>Suppose you have a few videos that need to be different from the above defaults. You can add options to the end of a link as displayed below. Each option should begin with '&'. </p>");
406
- _e('<ul>');
407
- _e("<li><strong>width</strong> - Sets the width of your player. If omitted, the default width will be the width of your theme's content.<em> Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&width=500</strong>&height=350</em></li>");
408
- _e("<li><strong>height</strong> - Sets the height of your player. If omitted, this will be calculated for you automatically. <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA&width=500<strong>&height=350</strong></em> </li>");
409
- _e("<li><strong>autoplay</strong> - Set this to 1 to autoplay the video (or 0 to play the video once). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&autoplay=1</strong></em> </li>");
410
- _e("<li><strong>cc_load_policy</strong> - Set this to 1 to turn on closed captioning (or 0 to leave them off). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&cc_load_policy=1</strong></em> </li>");
411
- _e("<li><strong>iv_load_policy</strong> - Set this to 3 to turn off annotations (or 1 to show them). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&iv_load_policy=3</strong></em> </li>");
412
- _e("<li><strong>loop</strong> - Set this to 1 to loop the video (or 0 to not loop). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&loop=1</strong></em> </li>");
413
- _e("<li><strong>modestbranding</strong> - Set this to 1 to remove the YouTube logo while playing (or 0 to show the logo). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&modestbranding=1</strong></em> </li>");
414
- _e("<li><strong>rel</strong> - Set this to 0 to not show related videos at the end of playing (or 1 to show them). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&rel=0</strong></em> </li>");
415
- _e("<li><strong>showinfo</strong> - Set this to 0 to hide the video title and other info (or 1 to show it). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&showinfo=0</strong></em> </li>");
416
- _e("<li><strong>theme</strong> - Set this to 'light' to make the player have the light-colored theme (or 'dark' for the dark theme). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&theme=light</strong></em> </li>");
417
- _e('</ul>');
418
-
419
- _e("<p>You can also start and end each individual video at particular times. Like the above, each option should begin with '&'</p>");
420
- _e('<ul>');
421
- _e("<li><strong>start</strong> - Sets the time (in seconds) to start the video. <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350<strong>&start=20</strong></em> </li>");
422
- _e("<li><strong>end</strong> - Sets the time (in seconds) to stop the video. <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350<strong>&end=100</strong></em> </li>");
423
- _e('</ul>');
424
- ?>
 
 
 
 
 
425
 
426
  </form>
427
-
428
- <h3><?php _e('Other Notes') ?></h3>
429
- <P>
430
- <?php _e("Note that this is a no-frills plugin. We're just supporting the basic functions that people typically want when embedding YouTube videos, and providing an easy way to make defaults. If you want more, take a look at a more powerful one here: <a target=\"_blank\" href=\"http://wordpress.org/extend/plugins/embedplus-for-wordpress/\">Advanced YouTube Embed</a> by <a target=\"_blank\" href=\"http://www.embedplus.com\">EmbedPlus</a>."); ?>
431
- </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
432
  <p>
433
- <?php echo '<em>Hear about major upcoming announcements and feature updates by <a target="_blank" href="http://eepurl.com/tpof9">signing up here</a>.</em>'; ?>
434
  </p>
435
 
436
- </div>
437
- <?php
438
- }
439
 
440
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
441
 
442
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
443
  //class start
444
- class Add_new_tinymce_btn
445
- {
446
 
447
- public $btn_arr;
448
- public $js_file;
449
 
450
- /*
451
- * call the constructor and set class variables
452
- * From the constructor call the functions via wordpress action/filter
453
- */
454
 
455
- function __construct($seperator, $btn_name, $javascrip_location)
456
- {
457
- $this->btn_arr = array("Seperator" => $seperator, "Name" => $btn_name);
458
- $this->js_file = $javascrip_location;
459
- add_action('init', array($this, 'add_tinymce_button'));
460
- add_filter('tiny_mce_version', array($this, 'refresh_mce_version'));
461
- }
462
 
463
- /*
464
- * create the buttons only if the user has editing privs.
465
- * If so we create the button and add it to the tinymce button array
466
- */
467
 
468
- function add_tinymce_button()
469
- {
470
- if (!current_user_can('edit_posts') && !current_user_can('edit_pages'))
471
- return;
472
- if (get_user_option('rich_editing') == 'true')
473
  {
474
- //the function that adds the javascript
475
- add_filter('mce_external_plugins', array($this, 'add_new_tinymce_plugin'));
476
- //adds the button to the tinymce button array
477
- add_filter('mce_buttons', array($this, 'register_new_button'));
 
 
 
 
 
478
  }
479
- }
480
 
481
- /*
482
- * add the new button to the tinymce array
483
- */
484
 
485
- function register_new_button($buttons)
486
- {
487
- array_push($buttons, $this->btn_arr["Seperator"], $this->btn_arr["Name"]);
488
- return $buttons;
489
- }
490
 
491
- /*
492
- * Call the javascript file that loads the
493
- * instructions for the new button
494
- */
495
 
496
- function add_new_tinymce_plugin($plugin_array)
497
- {
498
- $plugin_array[$this->btn_arr['Name']] = $this->js_file;
499
- return $plugin_array;
500
- }
501
 
502
- /*
503
- * This function tricks tinymce in thinking
504
- * it needs to refresh the buttons
505
- */
506
 
507
- function refresh_mce_version($ver)
508
- {
509
- $ver += 3;
510
- return $ver;
511
- }
512
 
513
- }
514
 
515
  //class end
516
 
517
- register_activation_hook(__FILE__, array('YouTubePrefs', 'initoptions'));
518
 
519
- $youtubeplg = new YouTubePrefs();
 
 
 
 
520
 
521
- /*
522
- $youtubeprefsmce = new Add_new_tinymce_btn('|', 'youtubeprefswiz', plugins_url() . '/youtube/js/youtube_mce.js.php');
523
 
524
- if (YouTubePrefs::wp_above_version('2.9'))
525
- {
526
  add_action('admin_enqueue_scripts', 'youtubeprefs_admin_enqueue_scripts');
527
- }
528
- else
529
- {
530
- wp_enqueue_style('youtubeprefswiz', plugins_url() . '/youtube/js/youtube_mce.css');
531
- }
532
 
533
- function youtubeprefs_admin_enqueue_scripts()
534
- {
535
- wp_enqueue_style('youtubeprefswiz', plugins_url() . '/youtube/js/youtube_mce.css');
536
- }
537
- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
  /*
3
+ Plugin Name: YouTube
4
+ Plugin URI: http://www.embedplus.com/dashboard/pro-easy-video-analytics.aspx
5
+ Description: YouTube embed plugin with basic features and convenient defaults. Upgrade now to add tracking, instant video SEO tags, and much more!
6
+ Version: 8.1
7
  Author: EmbedPlus Team
8
  Author URI: http://www.embedplus.com
9
  */
10
 
11
  /*
12
+ YouTube
13
  Copyright (C) 2013 EmbedPlus.com
14
 
15
  This program is free software: you can redistribute it and/or modify
32
  class YouTubePrefs
33
  {
34
 
35
+ public static $version = '8.1';
36
+ public static $opt_version = 'version';
37
  public static $optembedwidth = null;
38
  public static $optembedheight = null;
39
  public static $defaultheight = null;
40
  public static $defaultwidth = null;
41
+ public static $opt_center = 'centervid';
42
+ public static $opt_glance = 'glance';
43
+ public static $opt_autoplay = 'autoplay';
44
+ public static $opt_cc_load_policy = 'cc_load_policy';
45
+ public static $opt_iv_load_policy = 'iv_load_policy';
46
+ public static $opt_loop = 'loop';
47
+ public static $opt_modestbranding = 'modestbranding';
48
+ public static $opt_rel = 'rel';
49
+ public static $opt_showinfo = 'showinfo';
50
+ public static $opt_autohide = 'autohide';
51
+ public static $opt_controls = 'controls';
52
+ public static $opt_theme = 'theme';
53
+ public static $opt_color = 'color';
54
+ public static $opt_listType = 'listType';
55
+ public static $opt_wmode = 'wmode';
56
+ public static $opt_vq = 'vq';
57
+ public static $opt_html5 = 'html5';
58
+ public static $opt_ssl = 'ssl';
59
+ public static $opt_nocookie = 'nocookie';
60
+ public static $opt_pro = 'pro';
61
+ public static $opt_oldspacing = 'oldspacing';
62
+ public static $opt_responsive = 'responsive';
63
+ public static $opt_defaultdims = 'defaultdims';
64
+ public static $opt_defaultwidth = 'width';
65
+ public static $opt_defaultheight = 'height';
66
+ public static $opt_schemaorg = 'schemaorg';
67
+ public static $opt_alloptions = 'youtubeprefs_alloptions';
68
+ public static $alloptions = null;
69
+ public static $yt_options = array();
70
+ //public static $epbase = 'http://localhost:2346';
71
+ public static $epbase = '//www.embedplus.com';
72
+ public static $double_plugin = false;
73
+ public static $scriptsprinted = 0;
74
  /*
 
 
 
 
 
75
  listType
 
 
76
  */
77
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
78
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
79
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
80
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
81
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
82
+ //public static $ytregex = '@^[\r\n]{0,1}[[:blank:]]*https?://(?:www\.)?(?:(?:youtube.com/watch\?)|(?:youtu.be/))([^\s"]+)[[:blank:]]*[\r\n]{0,1}$@im';
83
+ public static $oldytregex = '@^\s*https?://(?:www\.)?(?:(?:youtube.com/(?:(?:watch)|(?:embed))/{0,1}\?)|(?:youtu.be/))([^\s"]+)\s*$@im';
84
+ public static $ytregex = '@^[\r\t ]*https?://(?:www\.)?(?:(?:youtube.com/(?:(?:watch)|(?:embed))/{0,1}\?)|(?:youtu.be/))([^\s"]+)[\r\t ]*$@im';
85
+ public static $justurlregex = '@https?://(?:www\.)?(?:(?:youtube.com/(?:(?:watch)|(?:embed))/{0,1}\?)|(?:youtu.be/))([^\s"]+)@';
86
+
87
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
88
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
89
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
90
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
91
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
92
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
93
 
94
  public function __construct()
95
  {
96
+ add_action('admin_init', array("YouTubePrefs", 'check_double_plugin_warning'));
97
+
98
+ self::$alloptions = get_option(self::$opt_alloptions);
99
+ if (self::$alloptions == false || version_compare(self::$alloptions[self::$opt_version], self::$version, '<'))
100
+ {
101
+ self::initoptions();
102
+ }
103
 
104
+ if (self::$alloptions[self::$opt_oldspacing] == 1)
 
105
  {
106
+ self::$ytregex = self::$oldytregex;
107
  }
108
+
109
+ self::$optembedwidth = intval(get_option('embed_size_w'));
110
+ self::$optembedheight = intval(get_option('embed_size_h'));
111
+
112
+ self::$yt_options = array(
113
+ self::$opt_autoplay,
114
+ self::$opt_cc_load_policy,
115
+ self::$opt_iv_load_policy,
116
+ self::$opt_loop,
117
+ self::$opt_modestbranding,
118
+ self::$opt_rel,
119
+ self::$opt_showinfo,
120
+ self::$opt_autohide,
121
+ self::$opt_controls,
122
+ self::$opt_html5,
123
+ self::$opt_theme,
124
+ self::$opt_color,
125
+ self::$opt_listType,
126
+ self::$opt_wmode,
127
+ self::$opt_vq,
128
+ 'list',
129
+ 'start',
130
+ 'end'
131
+ );
132
+
133
+ add_action('media_buttons', 'YouTubePrefs::media_button_wizard', 11);
134
+
135
+
136
+
137
+ //$embedplusmce_wiz = new Add_new_tinymce_btn_Youtubeprefs('|', 'embedplus_youtubeprefs_wiz', plugins_url() . '/youtube-embed-plus/scripts/embedplus_mce_wiz.js');
138
+ //$embedplusmce_prefs = new Add_new_tinymce_btn_Youtubeprefs('|', 'embedplus_youtubeprefs', plugins_url() . '/youtube-embed-plus/scripts/embedplus_mce_prefs.js');
139
+ //$epstatsmce_youtubeprefs = new Add_new_tinymce_btn_Youtubeprefs('|', 'embedplusstats_youtubeprefs', plugins_url() . '/youtube-embed-plus/scripts/embedplusstats_mce.js');
140
+
141
  self::do_ytprefs();
142
+ add_action('admin_menu', 'YouTubePrefs::ytprefs_plugin_menu');
143
+ if (!is_admin())
144
+ {
145
+ add_action('wp_print_scripts', array('YouTubePrefs', 'jsvars'));
146
+ add_action('wp_enqueue_scripts', array('YouTubePrefs', 'fitvids'));
147
+ }
148
+ }
149
+
150
+ public static function show_glance_list()
151
+ {
152
+ $glancehref = self::show_glance();
153
+ $cnt = self::get_glance_count();
154
+
155
+ //display via list
156
+ return
157
+ '<li class="page-count">
158
+ <a href="' . $glancehref . '" class="thickbox ytprefs_glance_button" id="ytprefs_glance_button" title="YouTube Embeds At a Glance">
159
+ ' . number_format_i18n($cnt) . ' With YouTube
160
+ </a>
161
+ </li>';
162
+ }
163
+
164
+ public static function show_glance_table()
165
+ {
166
+ $glancehref = self::show_glance();
167
+ $cnt = self::get_glance_count();
168
+ return
169
+ '<tr>
170
+ <td class="first b"><a title="YouTube Embeds At a Glance" href="' . $glancehref . '" class="thickbox ytprefs_glance_button">' . number_format_i18n($cnt) . '</a></td>
171
+ <td class="t"><a title="YouTube Embeds At a Glance" href="' . $glancehref . '" id="ytprefs_glance_button" class="thickbox ytprefs_glance_button">With YouTube</a></td>
172
+ </tr>';
173
+ }
174
+
175
+ public static function get_glance_count()
176
+ {
177
+ global $wpdb;
178
+ $query_sql = "
179
+ SELECT count(*) as mytotal
180
+ FROM $wpdb->posts
181
+ WHERE (post_content LIKE '%youtube.com/%' OR post_content LIKE '%youtu.be/%')
182
+ AND post_status = 'publish'";
183
+
184
+ $query_result = $wpdb->get_results($query_sql, OBJECT);
185
+
186
+ return intval($query_result[0]->mytotal);
187
+ }
188
+
189
+ public static function show_glance()
190
+ {
191
+ $glancehref = admin_url('admin.php?page=youtube-ep-glance') . '&random=' . rand(1, 1000) . '&TB_iframe=true&width=780&height=800';
192
+ return $glancehref;
193
+ }
194
+
195
+ public static function glance_page()
196
+ {
197
+ ?>
198
+ <div class="wrap">
199
+ <style type="text/css">
200
+ #wphead {display:none;}
201
+ #wpbody{margin-left: 0px;}
202
+ .wrap {font-family: Arial; padding: 0px 10px 0px 10px; line-height: 180%;}
203
+ .bold {font-weight: bold;}
204
+ .orange {color: #f85d00;}
205
+ #adminmenuback {display: none;}
206
+ #adminmenu, adminmenuwrap {display: none;}
207
+ #wpcontent, .auto-fold #wpcontent {margin-left: 0px;}
208
+ #wpadminbar {display:none;}
209
+ html.wp-toolbar {padding: 0px;}
210
+ #footer, #wpfooter, .auto-fold #wpfooter {display: none;}
211
+ .acctitle {background-color: #dddddd; border-radius: 5px; padding: 7px 15px 7px 15px; cursor: pointer; margin: 10px; font-weight: bold; font-size: 12px;}
212
+ .acctitle:hover {background-color: #cccccc;}
213
+ .accbox {display: none; position: relative; margin: 5px 8px 30px 15px; clear: both; line-height: 180%;}
214
+ .accclose {position: absolute; top: -38px; right: 5px; cursor: pointer; width: 24px; height: 24px;}
215
+ .accloader {padding-right: 20px;}
216
+ .accthumb {display: block; width: 300px; float: left; margin-right: 25px;}
217
+ .accinfo {width: 300px; float: left;}
218
+ .accvidtitle {font-weight: bold; font-size: 16px;}
219
+ .accthumb img {width: 300px; height: auto; display: block;}
220
+ .clearboth {clear: both;}
221
+ .pad20 {padding: 20px;}
222
+ .center {text-align: center;}
223
+ </style>
224
+ <script type="text/javascript">
225
+ function accclose(ele)
226
+ {
227
+ jQuery(ele).parent('.accbox').hide(400);
228
+ }
229
+
230
+ (function($j)
231
+ {
232
+ $j(document).ready(function() {
233
+
234
+
235
+ $j('.acctitle').click(function() {
236
+ var $acctitle = $j(this);
237
+ var $accbox = $j(this).parent().children('.accbox');
238
+ var pid = $accbox.attr("data-postid");
239
+
240
+ $acctitle.prepend('<img class="accloader" src="<?php echo plugins_url('images/ajax-loader.gif', __FILE__) ?>" />');
241
+ jQuery.ajax({
242
+ type: "post",
243
+ dataType: "json",
244
+ timeout: 30000,
245
+ url: wpajaxurl,
246
+ data: {action: 'my_embedplus_glance_vids', postid: pid},
247
+ success: function(response) {
248
+ if (response.type == "success") {
249
+ $accbox.html(response.data),
250
+ $accbox.show(400);
251
+ }
252
+ else {
253
+ }
254
+ },
255
+ error: function(xhr, ajaxOptions, thrownError) {
256
+
257
+ },
258
+ complete: function() {
259
+ $acctitle.children('.accloader').remove();
260
+ }
261
+
262
+ });
263
+
264
+
265
+ });
266
+ });
267
+ })(jQuery);
268
+
269
+
270
+ </script>
271
+ <?php
272
+ global $wpdb;
273
+ $query_sql = "
274
+ SELECT SQL_CALC_FOUND_ROWS *
275
+ FROM $wpdb->posts
276
+ WHERE (post_content LIKE '%youtube.com/%' OR post_content LIKE '%youtu.be/%')
277
+ AND post_status = 'publish'
278
+ order by post_date DESC LIMIT 0, 10";
279
+
280
+ $query_result = $wpdb->get_results($query_sql, OBJECT);
281
+
282
+ if ($query_result !== null)
283
+ {
284
+ $total = $wpdb->get_var("SELECT FOUND_ROWS();");
285
+ global $post;
286
+ echo '<h2><img src="' . plugins_url('images/youtubeicon16.png', __FILE__) . '" /> 10 Latest Posts/Pages with YouTube Videos (' . $total . ' Total)</h2>';
287
+ ?>
288
+
289
+ We recommend using this page as an easy way to check the results of the global default settings you make (e.g. hide annotations) on your recent embeds.
290
+
291
+ <?php
292
+ if (!(self::$alloptions[self::$opt_pro] && strlen(trim(self::$alloptions[self::$opt_pro])) > 0))
293
+ {
294
+ ?>
295
+ <i>New:</i> <a target="_blank" href="https://www.embedplus.com/dashboard/pro-easy-video-analytics.aspx?coupon=400K-4OFF">Coupon code <span class="bold">400K-4OFF</span> is now active to help non-PRO users &raquo;</a>
296
+ <?php
297
+ }
298
+
299
+ if ($total > 0)
300
+ {
301
+ echo '<ul class="accord">';
302
+ foreach ($query_result as $post)
303
+ {
304
+ echo '<li>';
305
+ setup_postdata($post);
306
+ the_title('<div class="acctitle">', ' &raquo;</div>');
307
+ echo '<div class="accbox" data-postid="' . $post->ID . '"></div><div class="clearboth"></div></li>';
308
+ }
309
+ echo '</ul>';
310
+ }
311
+ else
312
+ {
313
+ echo '<p class="center bold orange">You currently do not have any YouTube embeds yet.</p>';
314
+ }
315
+ }
316
+
317
+ wp_reset_postdata();
318
+ ?>
319
+ To remove this feature from your dashboard, simply uncheck <i>Show "At a Glance" Embed Links</i> in the <a target="_blank" href="<?php echo admin_url('admin.php?page=youtube-my-preferences#jumpdefaults') ?>">plugin settings page &raquo;</a>.
320
+ </div>
321
+ <?php
322
+ }
323
 
324
+ public static function my_embedplus_glance_vids()
325
+ {
326
+ $result = array();
327
+ if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
328
+ {
329
+ $postid = intval($_REQUEST['postid']);
330
+ $currpost = get_post($postid);
331
+
332
+ $thehtml = '<img class="accclose" onclick="accclose(this)" src="' . plugins_url('images/accclose.png', __FILE__) . '" />';
333
+
334
+ $matches = Array();
335
+ $ismatch = preg_match_all(self::$justurlregex, $currpost->post_content, $matches);
336
+
337
+ if ($ismatch)
338
+ {
339
+ foreach ($matches[0] as $match)
340
+ {
341
+ $link = trim(preg_replace('/&amp;/i', '&', $match));
342
+ $link = preg_replace('/\s/', '', $link);
343
+ $linkparamstemp = explode('?', $link);
344
+
345
+ $linkparams = array();
346
+ if (count($linkparamstemp) > 1)
347
+ {
348
+ $linkparams = self::keyvalue($linkparamstemp[1], true);
349
+ }
350
+ if (strpos($linkparamstemp[0], 'youtu.be') !== false && !isset($linkparams['v']))
351
+ {
352
+ $vtemp = explode('/', $linkparamstemp[0]);
353
+ $linkparams['v'] = array_pop($vtemp);
354
+ }
355
+
356
+ $vidid = $linkparams['v'];
357
+
358
+ try
359
+ {
360
+ $ytapilink = 'http://gdata.youtube.com/feeds/api/videos/' . $vidid . '?v=2&alt=json&fields=id,published,title,content,media:group(media:description,yt:duration)';
361
+ $apidata = wp_remote_get($ytapilink);
362
+ if (!is_wp_error($apidata))
363
+ {
364
+ $raw = wp_remote_retrieve_body($apidata);
365
+ if (!empty($raw))
366
+ {
367
+ $postlink = get_permalink($postid);
368
+ $json = json_decode($raw, true);
369
+ if (is_array($json))
370
+ {
371
+ $_name = esc_attr(sanitize_text_field($json['entry']['title']['$t']));
372
+ $_description = esc_attr(sanitize_text_field($json['entry']['media$group']['media$description']['$t']));
373
+ $_thumbnailUrl = esc_url("//i.ytimg.com/vi/" . $vidid . "/0.jpg");
374
+ $_duration = self::formatDuration(self::secondsToDuration(intval($json['entry']['media$group']['yt$duration']['seconds'])));
375
+ $_uploadDate = sanitize_text_field($json['entry']['published']['$t']);
376
+
377
+ $thehtml .= '<a target="_blank" href="' . $postlink . '" class="accthumb"><img src="' . $_thumbnailUrl . '" /></a>';
378
+ $thehtml .= '<div class="accinfo">';
379
+ $thehtml .= '<a target="_blank" href="' . $postlink . '" class="accvidtitle">' . $_name . '</a>';
380
+ $thehtml .= '<div class="accdesc">' . (strlen($_description) > 400 ? substr($_description, 0, 400) . "..." : $_description) . '</div>';
381
+ $thehtml .= '</div>';
382
+ $thehtml .= '<div class="clearboth pad20"></div>';
383
+ }
384
+ else
385
+ {
386
+ $thehtml .= '<p class="center bold orange">This <a target="_blank" href="' . $postlink . '">post/page</a> contains a video that has been removed from YouTube.';
387
+
388
+ if (!(self::$alloptions[self::$opt_pro] && strlen(trim(self::$alloptions[self::$opt_pro])) > 0))
389
+ {
390
+ $thehtml .='<br><a target="_blank" href="https://www.embedplus.com/dashboard/pro-easy-video-analytics.aspx">Activate delete video tracking to catch these cases &raquo;</a>';
391
+ }
392
+ $thehtml .= '</strong>';
393
+ }
394
+ }
395
+ }
396
+ }
397
+ catch (Exception $ex)
398
+ {
399
+
400
+ }
401
+ }
402
+ }
403
+
404
+
405
+
406
+ if ($currpost != null)
407
+ {
408
+ $result['type'] = 'success';
409
+ $result['data'] = $thehtml;
410
+ }
411
+ else
412
+ {
413
+ $result['type'] = 'error';
414
+ }
415
+ echo json_encode($result);
416
+ }
417
+ else
418
+ {
419
+ $result['type'] = 'error';
420
+ header("Location: " . $_SERVER["HTTP_REFERER"]);
421
+ }
422
+ die();
423
+ }
424
+
425
+ public static function my_embedplus_glance_count()
426
+ {
427
+ $result = array();
428
+ if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
429
+ {
430
+ $thehtml = '';
431
+
432
+ try
433
+ {
434
+ if (version_compare(get_bloginfo('version'), '3.8', '>='))
435
+ {
436
+ $result['container'] = '#dashboard_right_now ul';
437
+ $thehtml .= self::show_glance_list();
438
+ }
439
+ else
440
+ {
441
+ $result['container'] = '#dashboard_right_now .table_content table tbody';
442
+ $thehtml .= self::show_glance_table();
443
+ }
444
+ $result['type'] = 'success';
445
+ $result['data'] = $thehtml;
446
+ }
447
+ catch (Exception $e)
448
+ {
449
+ $result['type'] = 'error';
450
+ }
451
+
452
+ echo json_encode($result);
453
+ }
454
+ else
455
+ {
456
+ $result['type'] = 'error';
457
+ header("Location: " . $_SERVER["HTTP_REFERER"]);
458
+ }
459
+ die();
460
+ }
461
+
462
+ public static function media_button_wizard()
463
+ {
464
+ add_thickbox();
465
+
466
+ $wizhref = self::$epbase . '/wpembedcode-simple-search.aspx?pluginversion=' . YouTubePrefs::$version .
467
+ '&wpversion=' . get_bloginfo('version') .
468
+ '&settingsurl=' . urlencode(admin_url('admin.php?page=youtube-my-preferences#jumpdefaults')) .
469
+ '&dashurl=' . urlencode(admin_url('admin.php?page=youtube-ep-analytics-dashboard')) .
470
+ '&blogwidth=' . YouTubePrefs::get_blogwidth() .
471
+ '&domain=' . urlencode(site_url()) .
472
+ '&prokey=' . urlencode(YouTubePrefs::$alloptions[YouTubePrefs::$opt_pro]) .
473
+ '&myytdefaults=' . urlencode(http_build_query(YouTubePrefs::$alloptions)) .
474
+ '&random=' . rand(1, 1000) .
475
+ '&TB_iframe=true&width=950&height=800';
476
+ ?>
477
+ <script type="text/javascript">
478
+ function widen_ytprefs_wiz() {
479
+ setTimeout(function() {
480
+ jQuery("#TB_window").animate({marginLeft: '-' + parseInt((950 / 2), 10) + 'px', width: '950px'}, 300);
481
+ jQuery("#TB_window iframe").animate({width: '950px'}, 300);
482
+ }, 15);
483
+ }
484
+ jQuery(document).ready(function() {
485
+ jQuery("#ytprefs_wiz_button").click(widen_ytprefs_wiz);
486
+ jQuery(window).resize(widen_ytprefs_wiz);
487
+ });
488
+ </script>
489
+ <a href="<?php echo $wizhref; ?>" class="thickbox button ytprefs_media_link" id="ytprefs_wiz_button" title="Visual YouTube Search Tool and Wizard - An easier embedding option"><span></span> YouTube</a>
490
+ <?php
491
+ }
492
+
493
+ public static function check_double_plugin_warning()
494
+ {
495
+ if (is_plugin_active('embedplus-for-wordpress/embedplus.php'))
496
  {
497
+ self::$double_plugin = true;
498
  }
 
 
 
 
 
499
  }
500
 
501
+ public static function double_plugin_warning()
502
  {
503
+ ?>
504
+ <style type="text/css">
505
+ .embedpluswarning img
506
+ {
507
+ vertical-align: text-bottom;
508
+ }
509
+ </style>
510
+ <div class="error">
511
+ <p class="embedpluswarning">Seems like you have two different YouTube plugins by the EmbedPlus Team installed: <b><img src="<?php echo plugins_url('images/youtubeicon16.png', __FILE__) ?>" /> YouTube</b> and <b><img src="<?php echo plugins_url('images/btn_embedpluswiz.png', __FILE__) ?>" /> Advanced YouTube Embed.</b> We strongly suggest keeping only the one you prefer, so that they don't conflict with each other while trying to create your embeds.</p>
512
+ </div>
513
+ <?php
514
+ }
515
+
516
+ public static function jsvars()
517
+ {
518
+ $responsiveselector = '["iframe.__youtube_prefs_widget__"]';
519
+ if (self::$alloptions[self::$opt_responsive] == 1)
520
  {
521
+ $responsiveselector = '["iframe[src*=\'youtube.com\']","iframe[src*=\'youtube-nocookie.com\']"]';
522
+ }
523
+ ?>
524
+ <script type="text/javascript">
525
+ var eppathtoscripts = "<?php echo plugins_url('scripts/', __FILE__); ?>";
526
+ var epresponsiveselector = <?php echo $responsiveselector; ?>;
527
+ </script>
528
+ <?php
529
+ }
530
+
531
+ public static function fitvids()
532
+ {
533
+ wp_enqueue_script('__ytprefsfitvids__', plugins_url('scripts/fitvids.min.js', __FILE__), false, false, true);
534
+ }
535
 
536
+ public static function initoptions()
537
+ {
538
+ //vanilla defaults
539
+ $_center = 0;
540
+ $_glance = 1;
541
+ $_autoplay = get_option('youtubeprefs_autoplay', 0);
542
+ $_cc_load_policy = get_option('youtubeprefs_cc_load_policy', 0);
543
+ $_iv_load_policy = get_option('youtubeprefs_iv_load_policy', 1);
544
+ $_loop = get_option('youtubeprefs_loop', 0);
545
+ $_modestbranding = get_option('youtubeprefs_modestbranding', 0);
546
+ $_rel = get_option('youtubeprefs_rel', 1);
547
+ $_showinfo = get_option('youtubeprefs_showinfo', 1);
548
+ $_html5 = get_option('youtubeprefs_html5', 0);
549
+ $_theme = get_option('youtubeprefs_theme', 'dark');
550
+ $_color = get_option('youtubeprefs_color', 'red');
551
+ $_vq = get_option('youtubeprefs_vq', '');
552
+ $_autohide = 2;
553
+ $_pro = '';
554
+ $_ssl = 0;
555
+ $_nocookie = 0;
556
+ $_controls = 2;
557
+ $_oldspacing = 1;
558
+ $_responsive = 0;
559
+ $_schemaorg = 0;
560
+ $_wmode = 'opaque';
561
+ $_defaultdims = 0;
562
+ $_defaultwidth = '';
563
+ $_defaultheight = '';
564
+
565
+ $arroptions = get_option(self::$opt_alloptions);
566
+
567
+ //update vanilla to previous settings if exists
568
+ if ($arroptions !== false)
569
+ {
570
+ $_center = self::tryget($arroptions, self::$opt_center, 0);
571
+ $_glance = self::tryget($arroptions, self::$opt_glance, 1);
572
+ $_autoplay = self::tryget($arroptions, self::$opt_autoplay, 0);
573
+ $_cc_load_policy = self::tryget($arroptions, self::$opt_cc_load_policy, 0);
574
+ $_iv_load_policy = self::tryget($arroptions, self::$opt_iv_load_policy, 1);
575
+ $_loop = self::tryget($arroptions, self::$opt_loop, 0);
576
+ $_modestbranding = self::tryget($arroptions, self::$opt_modestbranding, 0);
577
+ $_rel = self::tryget($arroptions, self::$opt_rel, 1);
578
+ $_showinfo = self::tryget($arroptions, self::$opt_showinfo, 1);
579
+ $_html5 = self::tryget($arroptions, self::$opt_html5, 0);
580
+ $_theme = self::tryget($arroptions, self::$opt_theme, 'dark');
581
+ $_color = self::tryget($arroptions, self::$opt_color, 'red');
582
+ $_wmode = self::tryget($arroptions, self::$opt_wmode, 'opaque');
583
+ $_vq = self::tryget($arroptions, self::$opt_vq, '');
584
+ $_pro = self::tryget($arroptions, self::$opt_pro, '');
585
+ $_ssl = self::tryget($arroptions, self::$opt_ssl, 0);
586
+ $_nocookie = self::tryget($arroptions, self::$opt_nocookie, 0);
587
+ $_controls = self::tryget($arroptions, self::$opt_controls, 2);
588
+ $_autohide = self::tryget($arroptions, self::$opt_autohide, 2);
589
+ $_oldspacing = self::tryget($arroptions, self::$opt_oldspacing, 1);
590
+ $_responsive = self::tryget($arroptions, self::$opt_responsive, 0);
591
+ $_schemaorg = self::tryget($arroptions, self::$opt_schemaorg, 0);
592
+ $_defaultdims = self::tryget($arroptions, self::$opt_defaultdims, 0);
593
+ $_defaultwidth = self::tryget($arroptions, self::$opt_defaultwidth, '');
594
+ $_defaultheight = self::tryget($arroptions, self::$opt_defaultheight, '');
595
  }
596
+ else
597
+ {
598
+ $_oldspacing = 0;
599
+ }
600
+
601
+ $all = array(
602
+ self::$opt_version => self::$version,
603
+ self::$opt_center => $_center,
604
+ self::$opt_glance => $_glance,
605
+ self::$opt_autoplay => $_autoplay,
606
+ self::$opt_cc_load_policy => $_cc_load_policy,
607
+ self::$opt_iv_load_policy => $_iv_load_policy,
608
+ self::$opt_loop => $_loop,
609
+ self::$opt_modestbranding => $_modestbranding,
610
+ self::$opt_rel => $_rel,
611
+ self::$opt_showinfo => $_showinfo,
612
+ self::$opt_autohide => $_autohide,
613
+ self::$opt_html5 => $_html5,
614
+ self::$opt_theme => $_theme,
615
+ self::$opt_color => $_color,
616
+ self::$opt_wmode => $_wmode,
617
+ self::$opt_vq => $_vq,
618
+ self::$opt_pro => $_pro,
619
+ self::$opt_ssl => $_ssl,
620
+ self::$opt_nocookie => $_nocookie,
621
+ self::$opt_controls => $_controls,
622
+ self::$opt_oldspacing => $_oldspacing,
623
+ self::$opt_responsive => $_responsive,
624
+ self::$opt_schemaorg => $_schemaorg,
625
+ self::$opt_defaultdims => $_defaultdims,
626
+ self::$opt_defaultwidth => $_defaultwidth,
627
+ self::$opt_defaultheight => $_defaultheight
628
+ );
629
+
630
+ update_option(self::$opt_alloptions, $all);
631
+ update_option('embed_autourls', 1);
632
+ self::$alloptions = get_option(self::$opt_alloptions);
633
+ }
634
+
635
+ public static function tryget($array, $key, $default = null)
636
+ {
637
+ return isset($array[$key]) ? $array[$key] : $default;
638
  }
639
 
640
  public static function wp_above_version($ver)
649
 
650
  public static function do_ytprefs()
651
  {
652
+ if (!is_admin())
653
+ {
654
+ add_filter('the_content', 'YouTubePrefs::apply_prefs_content', 1);
655
+ add_filter('widget_text', 'YouTubePrefs::apply_prefs_widget', 1);
656
+ add_shortcode('embedyt', array('YouTubePrefs', 'apply_prefs_shortcode'));
657
+ }
658
+ }
659
+
660
+ public static function apply_prefs_shortcode($atts, $content = null)
661
+ {
662
+ $content = trim($content);
663
+ $currfilter = current_filter();
664
+ if (preg_match(self::$justurlregex, $content))
665
  {
666
+ return self::get_html(array($content), $currfilter == 'widget_text' ? false : true);
667
  }
668
+ return '';
669
  }
670
 
671
+ public static function apply_prefs_content($content)
672
  {
673
+ $content = preg_replace_callback(self::$ytregex, "YouTubePrefs::get_html_content", $content);
674
  return $content;
675
  }
676
 
677
+ public static function apply_prefs_widget($content)
678
  {
679
+ $content = preg_replace_callback(self::$ytregex, "YouTubePrefs::get_html_widget", $content);
680
+ return $content;
681
+ }
682
+
683
+ public static function get_html_content($m)
684
+ {
685
+ return self::get_html($m, true);
686
+ }
687
+
688
+ public static function get_html_widget($m)
689
+ {
690
+ return self::get_html($m, false);
691
+ }
692
+
693
+ public static function get_html($m, $iscontent)
694
+ {
695
+ //$link = trim(preg_replace('/&amp;/i', '&', $m[0]));
696
+ $badentities = array('&#215;', '×', '&#8211;', '–', '&amp;');
697
+ $goodliterals = array('x', 'x', '--', '--', '&');
698
+ $link = trim(str_replace($badentities, $goodliterals, $m[0]));
699
+
700
  $link = preg_replace('/\s/', '', $link);
701
+ $linkparamstemp = explode('?', $link);
702
+
703
+ $linkparams = array();
704
+ if (count($linkparamstemp) > 1)
705
+ {
706
+ $linkparams = self::keyvalue($linkparamstemp[1], true);
707
+ }
708
+ if (strpos($linkparamstemp[0], 'youtu.be') !== false && !isset($linkparams['v']))
709
+ {
710
+ $vtemp = explode('/', $linkparamstemp[0]);
711
+ $linkparams['v'] = array_pop($vtemp);
712
+ }
713
+
714
+ $linkscheme = 'http';
715
+ $youtubebaseurl = 'youtube';
716
+ $schemaorgoutput = '';
717
+
718
+ $finalparams = $linkparams + self::$alloptions;
719
+
720
+ self::init_dimensions($link, $linkparams, $finalparams);
721
+
722
+ if (self::$alloptions[self::$opt_nocookie] == 1)
723
+ {
724
+ $youtubebaseurl = 'youtube-nocookie';
725
+ }
726
+
727
+ if (self::$alloptions[self::$opt_pro] && strlen(trim(self::$alloptions[self::$opt_pro])) > 0)
728
+ {
729
+ if (self::$alloptions[self::$opt_ssl] == 1)
730
+ {
731
+ $linkscheme = 'https';
732
+ }
733
+
734
+ if (isset($finalparams[self::$opt_html5]) && $finalparams[self::$opt_html5] == 0)
735
+ {
736
+ unset($finalparams[self::$opt_html5]);
737
+ }
738
+
739
+ if (self::$alloptions[self::$opt_schemaorg] == 1 && isset($finalparams['v']))
740
+ {
741
+ $schemaorgoutput = self::getschemaorgoutput($finalparams['v']);
742
+ }
743
+ }
744
+ else
745
+ {
746
+ if (isset($finalparams[self::$opt_html5]))
747
+ {
748
+ unset($finalparams[self::$opt_html5]);
749
+ }
750
+ }
751
+
752
+ $centercode = '';
753
+ if ($finalparams[self::$opt_center] == 1)
754
+ {
755
+ $centercode = ' style="display: block; margin: 0px auto;" ';
756
+ }
757
+
758
+ $code1 = '<iframe ' . $centercode . ' id="_ytid_' . rand(10000, 99999) . '" width="' . self::$defaultwidth . '" height="' . self::$defaultheight .
759
+ '" src="' . $linkscheme . '://www.' . $youtubebaseurl . '.com/embed/' . (isset($linkparams['v']) ? $linkparams['v'] : '') . '?';
760
+ $code2 = '" frameborder="0" type="text/html" class="__youtube_prefs__' . ($iscontent ? '' : ' __youtube_prefs_widget__') .
761
+ '" allowfullscreen webkitallowfullscreen mozallowfullscreen ></iframe>' . $schemaorgoutput;
762
+
763
+ $origin = '';
764
+
765
+ try
766
+ {
767
+ if (!empty($_SERVER["HTTP_HOST"]))
768
+ {
769
+ $origin = 'origin=' .
770
+ ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://') . $_SERVER["HTTP_HOST"] . '&';
771
+ }
772
+ }
773
+ catch (Exception $e)
774
+ {
775
+
776
+ }
777
+ $finalsrc = 'enablejsapi=1&'; // . $origin;
778
 
779
  if (count($finalparams) > 1)
780
  {
781
  foreach ($finalparams as $key => $value)
782
  {
783
+ if (in_array($key, self::$yt_options))
784
  {
785
  $finalsrc .= htmlspecialchars($key) . '=' . htmlspecialchars($value) . '&';
786
+ if ($key == 'loop' && $value == 1 && !isset($finalparams['list']))
787
+ {
788
  $finalsrc .= 'playlist=' . $finalparams['v'] . '&';
789
+ }
790
  }
791
  }
792
  }
793
 
794
+ $code = $code1 . $finalsrc . $code2; //. '<!--' . $m[0] . '-->';
 
795
  // reset static vals for next embed
 
 
796
  self::$defaultheight = null;
797
  self::$defaultwidth = null;
798
 
815
  return $ytkvp;
816
  }
817
 
818
+ public static function getschemaorgoutput($vidid)
819
+ {
820
+ $schemaorgcode = '';
821
+ try
822
+ {
823
+ $ytapilink = 'http://gdata.youtube.com/feeds/api/videos/' . $vidid . '?v=2&alt=json&fields=id,published,title,content,media:group(media:description,yt:duration)';
824
+ $apidata = wp_remote_get($ytapilink);
825
+ if (!is_wp_error($apidata))
826
+ {
827
+ $raw = wp_remote_retrieve_body($apidata);
828
+ if (!empty($raw))
829
+ {
830
+ $json = json_decode($raw, true);
831
+ if (is_array($json))
832
+ {
833
+ $_name = esc_attr(sanitize_text_field($json['entry']['title']['$t']));
834
+ $_description = esc_attr(sanitize_text_field($json['entry']['media$group']['media$description']['$t']));
835
+ $_thumbnailUrl = esc_url("http://i.ytimg.com/vi/" . $vidid . "/0.jpg");
836
+ $_duration = self::formatDuration(self::secondsToDuration(intval($json['entry']['media$group']['yt$duration']['seconds'])));
837
+ $_uploadDate = sanitize_text_field($json['entry']['published']['$t']);
838
+
839
+ $schemaorgcode = '<span itemprop="video" itemscope itemtype="http://schema.org/VideoObject">';
840
+ $schemaorgcode .= '<meta itemprop="embedURL" content="http://www.youtube.com/embed/' . $vidid . '">';
841
+ $schemaorgcode .= '<meta itemprop="name" content="' . $_name . '">';
842
+ $schemaorgcode .= '<meta itemprop="description" content="' . $_description . '">';
843
+ $schemaorgcode .= '<meta itemprop="thumbnailUrl" content="' . $_thumbnailUrl . '">';
844
+ $schemaorgcode .= '<meta itemprop="duration" content="' . $_duration . '">';
845
+ $schemaorgcode .= '<meta itemprop="uploadDate" content="' . $_uploadDate . '">';
846
+ $schemaorgcode .= '</span>';
847
+ }
848
+ }
849
+ }
850
+ }
851
+ catch (Exception $ex)
852
+ {
853
+
854
+ }
855
+ return $schemaorgcode;
856
+ }
857
+
858
+ public static function secondsToDuration($seconds)
859
+ {
860
+ $remaining = $seconds;
861
+ $parts = array();
862
+ $multipliers = array(
863
+ 'hours' => 3600,
864
+ 'minutes' => 60,
865
+ 'seconds' => 1
866
+ );
867
+
868
+ foreach ($multipliers as $type => $m)
869
+ {
870
+ $parts[$type] = (int) ($remaining / $m);
871
+ $remaining -= ($parts[$type] * $m);
872
+ }
873
+
874
+ return $parts;
875
+ }
876
+
877
+ public static function formatDuration($parts)
878
  {
879
+ $default = array(
880
+ 'hours' => 0,
881
+ 'minutes' => 0,
882
+ 'seconds' => 0
883
+ );
884
+
885
+ extract(array_merge($default, $parts));
886
 
887
+ return "T{$hours}H{$minutes}M{$seconds}S";
888
+ }
889
+
890
+ public static function init_dimensions($url, $urlkvp, $finalparams)
891
+ {
892
  // get default dimensions; try embed size in settings, then try theme's content width, then just 480px
893
  if (self::$defaultwidth == null)
894
  {
 
 
 
895
  global $content_width;
896
  if (empty($content_width))
897
+ {
898
  $content_width = $GLOBALS['content_width'];
899
+ }
900
+
901
+ if (isset($urlkvp['width']) && is_numeric($urlkvp['width']))
902
+ {
903
+ self::$defaultwidth = $urlkvp['width'];
904
+ }
905
+ else if (self::$alloptions[self::$opt_defaultdims] == 1 && (isset(self::$alloptions[self::$opt_defaultwidth]) && is_numeric(self::$alloptions[self::$opt_defaultwidth])))
906
+ {
907
+ self::$defaultwidth = self::$alloptions[self::$opt_defaultwidth];
908
+ }
909
+ else if (self::$optembedwidth)
910
+ {
911
+ self::$defaultwidth = self::$optembedwidth;
912
+ }
913
+ else if ($content_width)
914
+ {
915
+ self::$defaultwidth = $content_width;
916
+ }
917
+ else
918
+ {
919
+ self::$defaultwidth = 480;
920
+ }
921
+
922
+
923
 
924
+ if (isset($urlkvp['height']) && is_numeric($urlkvp['height']))
925
+ {
926
+ self::$defaultheight = $urlkvp['height'];
927
+ }
928
+ else if (self::$alloptions[self::$opt_defaultdims] == 1 && (isset(self::$alloptions[self::$opt_defaultheight]) && is_numeric(self::$alloptions[self::$opt_defaultheight])))
929
+ {
930
+ self::$defaultheight = self::$alloptions[self::$opt_defaultheight];
931
+ }
932
+ else
933
+ {
934
+ self::$defaultheight = self::get_aspect_height($url, $urlkvp, $finalparams);
935
+ }
936
  }
937
  }
938
 
939
+ public static function get_aspect_height($url, $urlkvp, $finalparams)
940
  {
941
 
942
  // attempt to get aspect ratio correct height from oEmbed
947
  $oembed = _wp_oembed_get_object();
948
  $args = array();
949
  $args['width'] = self::$defaultwidth;
950
+ $args['height'] = self::$defaultwidth; //square to get biggest height from width // self::$optembedheight;
951
  $args['discover'] = false;
952
+ $odata = $oembed->fetch('https://www.youtube.com/oembed', $url, $args);
953
 
954
  if ($odata)
955
  {
957
  }
958
  }
959
 
960
+ if ($finalparams[self::$opt_controls] != 0 && $finalparams[self::$opt_autohide] != 1)
961
+ {
962
+ //add 28 for YouTube's own bar
963
+ $aspectheight += 28;
964
+ }
965
+ return $aspectheight;
966
  }
967
 
968
  public static function ytprefs_plugin_menu()
969
  {
970
+ //add_menu_page('YouTube Settings', 'YouTube', 'manage_options', 'youtube-my-preferences', 'YouTubePrefs::ytprefs_show_options', plugins_url('images/youtubeicon16.png', __FILE__), '10.00392854349');
971
+
972
+ if (self::$alloptions[self::$opt_pro] && strlen(trim(self::$alloptions[self::$opt_pro])) > 0)
973
+ {
974
+ add_menu_page('YouTube Settings', 'YouTube PRO', 'manage_options', 'youtube-my-preferences', 'YouTubePrefs::ytprefs_show_options', plugins_url('images/youtubeicon16.png', __FILE__), '10.000392854349');
975
+ add_menu_page('YouTube Analytics Dashboard', 'PRO Analytics', 'manage_options', 'youtube-ep-analytics-dashboard', 'YouTubePrefs::epstats_show_options', plugins_url('images/epstats16.png', __FILE__), '10.000492884349');
976
+ }
977
+ else
978
+ {
979
+ add_menu_page('YouTube Settings', 'YouTube Free', 'manage_options', 'youtube-my-preferences', 'YouTubePrefs::ytprefs_show_options', plugins_url('images/youtubeicon16.png', __FILE__), '10.000392854349');
980
+ add_submenu_page('youtube-my-preferences', '', '', 'manage_options', 'youtube-my-preferences', 'YouTubePrefs::ytprefs_show_options');
981
+ add_submenu_page('youtube-my-preferences', 'YouTube PRO', 'YouTube PRO', 'manage_options', 'youtube-ep-analytics-dashboard', 'YouTubePrefs::epstats_show_options');
982
+ }
983
+ add_submenu_page(null, 'YouTube Posts', 'YouTube Posts', 'manage_options', 'youtube-ep-glance', 'YouTubePrefs::glance_page');
984
+ }
985
+
986
+ public static function epstats_show_options()
987
+ {
988
+
989
+ if (!current_user_can('manage_options'))
990
+ {
991
+ wp_die(__('You do not have sufficient permissions to access this page.'));
992
+ }
993
+
994
+ if (self::$double_plugin)
995
+ {
996
+ //add_action('admin_notices', array("YouTubePrefs", "double_plugin_warning"));
997
+ self::double_plugin_warning();
998
+ }
999
+
1000
+
1001
+ // Now display the settings editing screen
1002
+ ?>
1003
+ <div class="wrap">
1004
+ <style type="text/css">
1005
+ .wrap {font-family: Arial;}
1006
+ .epicon { width: 20px; height: 20px; vertical-align: middle; padding-right: 5px;}
1007
+ .epindent {padding-left: 25px;}
1008
+ iframe.shadow {-webkit-box-shadow: 0px 0px 20px 0px #000000; box-shadow: 0px 0px 20px 0px #000000;}
1009
+ .bold {font-weight: bold;}
1010
+ .orange {color: #f85d00;}
1011
+ </style>
1012
+ <br>
1013
+ <?php
1014
+ $thishost = (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : "");
1015
+ $thiskey = self::$alloptions[self::$opt_pro];
1016
+
1017
+ $dashurl = self::$epbase . "/dashboard/pro-easy-video-analytics.aspx?ref=protab&domain=" . $thishost . "&prokey=" . $thiskey . '&coupon=400K-4OFF';
1018
+
1019
+ if (self::$alloptions[self::$opt_pro] && strlen(trim(self::$alloptions[self::$opt_pro])) > 0)
1020
+ {
1021
+ //// header
1022
+ echo "<h2>" . '<img src="' . plugins_url('images/epstats16.png', __FILE__) . '" /> ' . __('YouTube Analytics Dashboard') . "</h2>";
1023
+ echo '<p><i>Logging you in below... (You can also <a class="button-primary" target="_blank" href="' . $dashurl . '">click here</a> to launch your dashboard in a new tab)</i></p>';
1024
+ }
1025
+ else
1026
+ {
1027
+ //// header
1028
+ echo "<h2>" . '<img src="' . plugins_url('images/epstats16.png', __FILE__) . '" /> ' . __('YouTube Plugin PRO') . "</h2><p class='bold orange'>This tab is here to provide direct access to analytics. Graphs and other data about your site will show below after you activate PRO.</p><br>";
1029
+ }
1030
+ ?>
1031
+ <iframe class="shadow" src="<?php echo $dashurl ?>" width="1060" height="2700" scrolling="auto"/>
1032
+ </div>
1033
+ <?php
1034
+ }
1035
+
1036
+ public static function my_embedplus_pro_record()
1037
+ {
1038
+ $result = array();
1039
+ if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
1040
+ {
1041
+ $tmppro = preg_replace('/[^A-Za-z0-9-]/i', '', $_REQUEST[self::$opt_pro]);
1042
+ $new_options = array();
1043
+ $new_options[self::$opt_pro] = $tmppro;
1044
+ $all = get_option(self::$opt_alloptions);
1045
+ $all = $new_options + $all;
1046
+ update_option(self::$opt_alloptions, $all);
1047
+
1048
+ if (strlen($tmppro) > 0)
1049
+ {
1050
+ $result['type'] = 'success';
1051
+ }
1052
+ else
1053
+ {
1054
+ $result['type'] = 'error';
1055
+ }
1056
+ echo json_encode($result);
1057
+ }
1058
+ else
1059
+ {
1060
+ $result['type'] = 'error';
1061
+ header("Location: " . $_SERVER["HTTP_REFERER"]);
1062
+ }
1063
+ die();
1064
+ }
1065
+
1066
+ public static function custom_admin_pointers_check()
1067
+ {
1068
+ $admin_pointers = self::custom_admin_pointers();
1069
+ foreach ($admin_pointers as $pointer => $array)
1070
+ {
1071
+ if ($array['active'])
1072
+ return true;
1073
+ }
1074
+ }
1075
+
1076
+ public static function glance_script()
1077
+ {
1078
+ add_thickbox();
1079
+ ?>
1080
+ <script type="text/javascript">
1081
+ function widen_ytprefs_glance() {
1082
+ setTimeout(function() {
1083
+ jQuery("#TB_window").animate({marginLeft: '-' + parseInt((780 / 2), 10) + 'px', width: '780px'}, 300);
1084
+ jQuery("#TB_window iframe").animate({width: '780px'}, 300);
1085
+ }, 15);
1086
+ }
1087
+
1088
+ (function($j)
1089
+ {
1090
+ $j(document).ready(function() {
1091
+
1092
+ $j.ajax({
1093
+ type: "post",
1094
+ dataType: "json",
1095
+ timeout: 30000,
1096
+ url: wpajaxurl,
1097
+ data: {action: 'my_embedplus_glance_count'},
1098
+ success: function(response) {
1099
+ if (response.type == "success") {
1100
+ $j(response.container).append(response.data);
1101
+ $j(".ytprefs_glance_button").click(widen_ytprefs_glance);
1102
+ $j(window).resize(widen_ytprefs_glance);
1103
+ if (typeof ep_do_pointers == 'function')
1104
+ {
1105
+ //ep_do_pointers($j);
1106
+ }
1107
+ }
1108
+ else {
1109
+ }
1110
+ },
1111
+ error: function(xhr, ajaxOptions, thrownError) {
1112
+
1113
+ },
1114
+ complete: function() {
1115
+ }
1116
+ });
1117
+
1118
+ });
1119
+
1120
+ })(jQuery);
1121
+ </script>
1122
+ <?php
1123
+ }
1124
+
1125
+ public static function custom_admin_pointers_footer()
1126
+ {
1127
+ $admin_pointers = self::custom_admin_pointers();
1128
+ ?>
1129
+ <script type="text/javascript">
1130
+ /* <![CDATA[ */
1131
+ function ep_do_pointers($)
1132
+ {
1133
+ <?php
1134
+ foreach ($admin_pointers as $pointer => $array)
1135
+ {
1136
+ if ($array['active'])
1137
+ {
1138
+ ?>
1139
+ $('<?php echo $array['anchor_id']; ?>').pointer({
1140
+ content: '<?php echo $array['content']; ?>',
1141
+ position: {
1142
+ edge: '<?php echo $array['edge']; ?>',
1143
+ align: '<?php echo $array['align']; ?>'
1144
+ },
1145
+ close: function() {
1146
+ $.post(wpajaxurl, {
1147
+ pointer: '<?php echo $pointer; ?>',
1148
+ action: 'dismiss-wp-pointer'
1149
+ });
1150
+ }
1151
+ }).pointer('open');
1152
+ <?php
1153
+ }
1154
+ }
1155
+ ?>
1156
+ }
1157
+
1158
+ //////////////////////////////////////////////////////////ep_do_pointers(jQuery);
1159
+ /* ]]> */
1160
+ </script>
1161
+ <?php
1162
+ }
1163
+
1164
+ public static function custom_admin_pointers()
1165
+ {
1166
+ $dismissed = explode(',', (string) get_user_meta(get_current_user_id(), 'dismissed_wp_pointers', true));
1167
+ $version = str_replace('.', '_', self::$version); // replace all periods in 1.0 with an underscore
1168
+ $prefix = 'custom_admin_pointers' . $version . '_';
1169
+
1170
+ $new_pointer_content = '<h3>' . __('New Update') . '</h3>';
1171
+
1172
+
1173
+ $new_pointer_content .= '<p>' . __('YouTube searching and inserting now works for Visual mode <i>and</i> Text mode of the editor for all users, both Free and ');
1174
+ if (!(self::$alloptions[self::$opt_pro] && strlen(trim(self::$alloptions[self::$opt_pro])) > 0))
1175
+ {
1176
+ $new_pointer_content .= __('<a class="bold orange" target="_blank" href="' . self::$epbase . '/dashboard/pro-easy-video-analytics.aspx?ref=frompointer&coupon=400K-4OFF' . '">PRO &raquo;</a>');
1177
+ }
1178
+ else
1179
+ {
1180
+ $new_pointer_content .= __('PRO.');
1181
+ }
1182
+ $new_pointer_content .= '</p>';
1183
+
1184
+ return array(
1185
+ $prefix . 'new_items' => array(
1186
+ 'content' => $new_pointer_content,
1187
+ 'anchor_id' => '#toplevel_page_youtube-my-preferences', //'#ytprefs_glance_button',
1188
+ 'edge' => 'top',
1189
+ 'align' => 'left',
1190
+ 'active' => (!in_array($prefix . 'new_items', $dismissed) )
1191
+ ),
1192
+ );
1193
+ }
1194
+
1195
+ public static function postchecked($idx)
1196
+ {
1197
+ return isset($_POST[$idx]) && $_POST[$idx] == (true || 'on');
1198
  }
1199
 
1200
  public static function ytprefs_show_options()
1205
  wp_die(__('You do not have sufficient permissions to access this page.'));
1206
  }
1207
 
1208
+ if (self::$double_plugin)
1209
+ {
1210
+ //add_action('admin_notices', array("YouTubePrefs", "double_plugin_warning"));
1211
+ self::double_plugin_warning();
1212
+ }
1213
+
1214
+
1215
  // variables for the field and option names
1216
  $ytprefs_submitted = 'ytprefs_submitted';
1217
 
1218
  // Read in existing option values from database
1219
+
1220
+ $all = get_option(self::$opt_alloptions);
 
 
 
 
 
 
 
1221
 
1222
  // See if the user has posted us some information
1223
  // If they did, this hidden field will be set to 'Y'
1224
  if (isset($_POST[$ytprefs_submitted]) && $_POST[$ytprefs_submitted] == 'Y')
1225
  {
1226
  // Read their posted values
 
 
 
 
 
 
 
 
 
1227
 
1228
+ $new_options = array();
1229
+ $new_options[self::$opt_center] = self::postchecked(self::$opt_center) ? 1 : 0;
1230
+ $new_options[self::$opt_glance] = self::postchecked(self::$opt_glance) ? 1 : 0;
1231
+ $new_options[self::$opt_autoplay] = self::postchecked(self::$opt_autoplay) ? 1 : 0;
1232
+ $new_options[self::$opt_cc_load_policy] = self::postchecked(self::$opt_cc_load_policy) ? 1 : 0;
1233
+ $new_options[self::$opt_iv_load_policy] = self::postchecked(self::$opt_iv_load_policy) ? 1 : 3;
1234
+ $new_options[self::$opt_loop] = self::postchecked(self::$opt_loop) ? 1 : 0;
1235
+ $new_options[self::$opt_modestbranding] = self::postchecked(self::$opt_modestbranding) ? 1 : 0;
1236
+ $new_options[self::$opt_rel] = self::postchecked(self::$opt_rel) ? 1 : 0;
1237
+ $new_options[self::$opt_showinfo] = self::postchecked(self::$opt_showinfo) ? 1 : 0;
1238
+ $new_options[self::$opt_controls] = self::postchecked(self::$opt_controls) ? 2 : 0;
1239
+ $new_options[self::$opt_autohide] = self::postchecked(self::$opt_autohide) ? 1 : 2;
1240
+ $new_options[self::$opt_html5] = self::postchecked(self::$opt_html5) ? 1 : 0;
1241
+ $new_options[self::$opt_theme] = self::postchecked(self::$opt_theme) ? 'dark' : 'light';
1242
+ $new_options[self::$opt_color] = self::postchecked(self::$opt_color) ? 'red' : 'white';
1243
+ $new_options[self::$opt_wmode] = self::postchecked(self::$opt_wmode) ? 'opaque' : 'transparent';
1244
+ $new_options[self::$opt_vq] = self::postchecked(self::$opt_vq) ? 'hd720' : '';
1245
+ $new_options[self::$opt_nocookie] = self::postchecked(self::$opt_nocookie) ? 1 : 0;
1246
+ $new_options[self::$opt_ssl] = self::postchecked(self::$opt_ssl) ? 1 : 0;
1247
+ $new_options[self::$opt_oldspacing] = self::postchecked(self::$opt_oldspacing) ? 1 : 0;
1248
+ $new_options[self::$opt_responsive] = self::postchecked(self::$opt_responsive) ? 1 : 0;
1249
+ $new_options[self::$opt_schemaorg] = self::postchecked(self::$opt_schemaorg) ? 1 : 0;
1250
+ $new_options[self::$opt_defaultdims] = self::postchecked(self::$opt_defaultdims) ? 1 : 0;
1251
+
1252
+ $_defaultwidth = '';
1253
+ try
1254
+ {
1255
+ $_defaultwidth = is_numeric(trim($_POST[self::$opt_defaultwidth])) ? intval(trim($_POST[self::$opt_defaultwidth])) : $_defaultwidth;
1256
+ }
1257
+ catch (Exception $ex)
1258
+ {
1259
+
1260
+ }
1261
+ $new_options[self::$opt_defaultwidth] = $_defaultwidth;
1262
+
1263
+ $_defaultheight = '';
1264
+ try
1265
+ {
1266
+ $_defaultheight = is_numeric(trim($_POST[self::$opt_defaultheight])) ? intval(trim($_POST[self::$opt_defaultheight])) : $_defaultheight;
1267
+ }
1268
+ catch (Exception $ex)
1269
+ {
1270
+
1271
+ }
1272
+ $new_options[self::$opt_defaultheight] = $_defaultheight;
1273
+
1274
+ $all = $new_options + $all;
1275
 
1276
  // Save the posted value in the database
 
 
 
 
 
 
 
 
 
1277
 
1278
+ update_option(self::$opt_alloptions, $all);
1279
  // Put a settings updated message on the screen
1280
  ?>
1281
  <div class="updated"><p><strong><?php _e('Settings saved.'); ?></strong></p></div>
1282
  <?php
1283
  }
1284
 
1285
+ $haspro = ($all[self::$opt_pro] && strlen(trim($all[self::$opt_pro])) > 0);
1286
  // Now display the settings editing screen
1287
 
1288
+ echo '<div class="wrap" style="max-width: 1000px;">';
1289
 
1290
  // header
1291
 
1292
+ echo "<h2>" . '<img src="' . plugins_url('images/youtubeicon16.png', __FILE__) . '" /> ' . __('YouTube Settings') . "</h2>";
 
 
1293
 
1294
  // settings form
1295
  ?>
1296
+
1297
  <style type="text/css">
1298
+ .wrap {font-family: Arial; color: #000000;}
1299
+ #ytform p { line-height: 20px; margin-bottom: 11px; }
1300
  #ytform ul li {margin-left: 30px; list-style: disc outside none;}
1301
+ .ytindent {padding: 0px 0px 0px 20px; font-size: 11px;}
1302
+ .ytindent ul, .ytindent p {font-size: 11px;}
1303
  .shadow {-webkit-box-shadow: 0px 0px 20px 0px #000000; box-shadow: 0px 0px 20px 0px #000000;}
1304
+ .gopro {margin: 0px;}
1305
+ .gopro img {vertical-align: middle;
1306
+ width: 19px;
1307
+ height: 19px;
1308
+ padding-bottom: 4px;}
1309
+ .gopro li {margin-bottom: 0px;}
1310
+ .orange {color: #f85d00;}
1311
+ .bold {font-weight: bold;}
1312
+ .grey{color: #888888;}
1313
+ #goprobox {border-radius: 15px; padding: 10px 15px 15px 15px; margin-top: 15px; border: 3px solid #CCE5EC; position: relative;}
1314
+ #salenote {position: absolute; right: 10px; top: 10px; width: 75px; height: 30px;}
1315
+ #nonprosupport {border-radius: 15px; padding: 5px 10px 10px 10px; border: 3px solid #ff6655;}
1316
+ .pronon {font-weight: bold; color: #f85d00;}
1317
+ ul.reglist li {margin: 0px 0px 0px 30px; list-style: disc outside none;}
1318
+ .procol {width: 465px; float: left;}
1319
+ .smallnote {font-style: italic; font-size: 10px;}
1320
+ .italic {font-style: italic;}
1321
+ .ytindent h3 {font-size: 15px; line-height: 22px; margin: 5px 0px 10px 0px;}
1322
+ #wizleftlink {float: left; display: block; width: 240px; font-style: italic; text-align: center; text-decoration: none;}
1323
+ .button-primary {font-weight: bold; white-space: nowrap;}
1324
+ #opt_pro {box-shadow: 0px 0px 5px 0px #1870D5; width: 320px;vertical-align: top;}
1325
+ #goprobox h3 {font-size: 13px;}
1326
+ .chx p {margin: 0px 0px 5px 0px;}
1327
+ .cuz {background-image: linear-gradient(to bottom,#4983FF,#0C5597) !important; color: #ffffff;}
1328
+ .brightpro {background-image: linear-gradient(to bottom,#ff5500,#cc2200) !important; color: #ffffff;}
1329
+ #boxdefaultdims {font-weight: bold; padding: 0px 10px; <?php echo $all[self::$opt_defaultdims] ? '' : 'display: none;' ?>}
1330
+ .textinput {border-width: 2px !important;}
1331
+ h3.sect {border-radius: 10px; background-color: #D9E9F7; padding: 5px 5px 5px 10px; position: relative; font-weight: bold;}
1332
+ h3.sect a {text-decoration: none; color: #E20000;}
1333
+ h3.sect a.button-primary {color: #ffffff;}
1334
+ #ytnav {margin-bottom: 15px;}
1335
+ #ytnav a {font-weight: bold; display: inline-block; padding: 5px 10px; margin: 0px 20px 0px 0px; border: 1px solid #cccccc; border-radius: 6px;
1336
+ text-decoration: none; background-color: #ffffff;}
1337
+ .jumper {height: 25px;}
1338
+ .ssschema {float: right; width: 350px; height: auto; margin-right: 10px;}
1339
+ .totop {position: absolute; right: 20px; top: 5px; color: #444444; font-size: 10px;}
1340
+ input[type=checkbox] {border: 1px solid #000000;}
1341
+ .chktitle {display: inline-block; padding: 1px 3px 1px 3px; border-radius: 3px; background-color: #ffffff; border: 1px solid #dddddd;}
1342
+ b, strong {font-weight: bold;}
1343
  </style>
1344
 
1345
  <div class="ytindent">
1346
+ <br>
1347
+ <div id="jumphowto"></div>
1348
+ <div id="ytnav">
1349
+ <a href="#jumphowto">How To Embed</a>
1350
+ <a href="#jumpwiz">Visual YouTube Wizard</a>
1351
+ <a href="#jumpdefaults">Set Defaults</a>
1352
+ <a href="#jumpoverride">How To Override Defaults</a>
1353
+ <a href="#jumppro" style="border-color: #888888;">Go PRO!</a>
1354
+ <a href="#jumpsupport">Support</a>
1355
+ </div>
1356
+
1357
  <form name="form1" method="post" action="" id="ytform">
1358
  <input type="hidden" name="<?php echo $ytprefs_submitted; ?>" value="Y">
1359
+
1360
+ <h3 class="sect">
1361
+ <?php _e("How to Insert a YouTube Video or Playlist") ?> <!--<span class="pronon">(For Free and <a href="<?php echo self::$epbase ?>/dashboard/pro-easy-video-analytics.aspx" target="_blank">PRO Users &raquo;</a>)</span>-->
1362
  </h3>
1363
  <p>
1364
+ <b>For videos:</b> <i>Method 1 - </i> Do you already have a URL to the video you want to embed? All you have to do is paste it on its own line, as shown below (including the http:// part). Easy, eh?<br>
1365
+ <i>Method 2 - </i> If you want to have two or more videos next to each other on the same line, wrap each link with the <code>[embedyt]...[/embedyt]</code> shortcode. <b>Tip for embedding videos on the same line:</b> As shown in the example image below, decrease the size of each video so that they fit together on the same line (See the "How To Override Defaults" section for height and width instructions).
1366
  </p>
1367
  <p>
1368
+ <b>For playlists:</b> Go to the page for the playlist that lists all of its videos (<a target="_blank" href="http://www.youtube.com/playlist?list=PL70DEC2B0568B5469">Example &raquo;</a>). Click on the video that you want the playlist to start with. Copy and paste that browser URL into your blog on its own line. If you want to have two or more playlists next to each other on the same line, wrap each link with the <code>[embedyt]...[/embedyt]</code> shortcode.
1369
+ </p>
1370
+ <p>
1371
+ <b>For channel playlists:<sup class="orange">NEW</sup></b> At your editor, click on the <img style="vertical-align: text-bottom;" src="<?php echo plugins_url('images/wizbuttonbig.png', __FILE__) ?>"> wizard button and choose the option <i>Search for a video or channel to insert in my editor.</i> Then, click on the <i>channel playlist</i> option there (instead of <i>single video</i>). Search for the channel username and follow the rest of the directions there.
1372
  </p>
 
1373
  <p>
1374
+ <b>Examples:</b><br><br>
1375
+ <img style="width: 900px; height: auto;" class="shadow" src="<?php echo plugins_url('images/sshowto.png', __FILE__) ?>" />
1376
  </p>
1377
+ <p>
1378
+ Always follow these rules for any URL:
1379
+ </p>
1380
+ <ul class="reglist">
1381
+ <li>Make sure the URL is really on its own line by itself. Or, if you need multiple videos on the same line, make sure each URL is wrapped properly with the shortcode (Example: <code>[embedyt]http://www.youtube.com/watch?v=ABCDEFGHIJK&width=400$height=250[/embedyt]</code>)</li>
1382
+ <li>Make sure the URL is <strong>not</strong> an active hyperlink (i.e., it should just be plain text). Otherwise, highlight the URL and click the "unlink" button in your editor: <img src="<?php echo plugins_url('images/unlink.png', __FILE__) ?>"/></li>
1383
+ <li>Make sure you did <strong>not</strong> format or align the URL in any way. If your URL still appears in your actual post instead of a video, highlight it and click the "remove formatting" button (formatting can be invisible sometimes): <img src="<?php echo plugins_url('images/erase.png', __FILE__) ?>"/></li>
1384
+ <li>If you really want to align the video, try wrapping the link with the shortcode first. For example: <code>[embedyt]http://www.youtube.com/watch?v=ABCDEFGHIJK[/embedyt]</code> Using the shortcode also allows you to have two or more videos next to each other on the same line. Just put the shortcoded links together on the same line. For example:<br>
1385
+ <code>[embedyt]http://www.youtube.com/watch?v=ABCDEF[/embedyt] [embedyt]http://www.youtube.com/watch?v=GHIJK[/embedyt]</code>
1386
+ </ul>
1387
 
1388
+ <div class="jumper" id="jumpwiz"></div>
1389
+ <h3 class="sect">Visual YouTube Wizard <a href="#top" class="totop">&#9650; top</a></h3>
1390
+
1391
+ <p>
1392
+ Let's say you don't know the exact URL of the video you wish to embed. Well, we've made the ability to directly search YouTube and insert videos right from your editor tab as a free feature to all users.
1393
+ Simply click the <img style="vertical-align: text-bottom;" src="<?php echo plugins_url('images/wizbuttonbig.png', __FILE__) ?>"> wizard button found above
1394
+ your editor to start the wizard (see image above to locate this button). There, you'll be given the option to enter your search terms.
1395
+ Click the "Search" button to view the results. Each result will have an <span class="button-primary cuz">&#9660; Insert Into Editor</span> button that
1396
+ you can click to directly embed the desired video link to your post without having to copy and paste.
1397
+ </p>
1398
+ <p>
1399
+ The ability to read the latest Internet discussions about the videos you want to embed is now free to all users.
1400
+ </p>
1401
+ <p>
1402
+ <b class="orange">Even more options are available to PRO users!</b> Simply click the <span class="button-primary cuz">&#9658; Customize</span> button on the wizard to further personalize your embeds without having to enter special codes yourself. No memorization needed!
1403
+ <br>
1404
+ <br>
1405
+ <img src="<?php echo plugins_url('images/ssprowizard.png', __FILE__) ?>" >
1406
+ </p>
1407
+ <div class="jumper" id="jumpdefaults"></div>
1408
+ <h3 class="sect">
1409
+ <?php _e("Default YouTube Options") ?> <a href="#top" class="totop">&#9650; top</a>
1410
  </h3>
1411
  <p>
1412
+ <?php _e("Below you can set the default options for all your videos (click \"Save Changes\" when finished). However, you can override them (and more) on a per-video basis. Directions on how to do that are in the next section.") ?>
1413
+ </p>
1414
+ <p class="submit">
1415
+ <input type="submit" onclick="return savevalidate();" name="Submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
1416
  </p>
1417
 
1418
+ <div class="ytindent chx">
 
 
1419
  <p>
1420
+ <input name="<?php echo self::$opt_glance; ?>" id="<?php echo self::$opt_glance; ?>" <?php checked($all[self::$opt_glance], 1); ?> type="checkbox" class="checkbox">
1421
+ <label for="<?php echo self::$opt_glance; ?>"><?php _e('<b class="chktitle">At a glance:</b> Show "At a Glance" Embed Links') ?></label>
1422
  </p>
 
1423
  <p>
1424
+ <input name="<?php echo self::$opt_center; ?>" id="<?php echo self::$opt_center; ?>" <?php checked($all[self::$opt_center], 1); ?> type="checkbox" class="checkbox">
1425
+ <label for="<?php echo self::$opt_center; ?>"><?php _e('<b class="chktitle">Centering:</b> Automatically center all your videos (not necessary if all you\'re videos span the whole width of your blog).') ?></label>
1426
  </p>
1427
  <p>
1428
+ <input name="<?php echo self::$opt_autoplay; ?>" id="<?php echo self::$opt_autoplay; ?>" <?php checked($all[self::$opt_autoplay], 1); ?> type="checkbox" class="checkbox">
1429
+ <label for="<?php echo self::$opt_autoplay; ?>"><?php _e('<b class="chktitle">Autoplay:</b> Automatically start playing your videos.') ?></label>
1430
  </p>
1431
  <p>
1432
+ <input name="<?php echo self::$opt_cc_load_policy; ?>" id="<?php echo self::$opt_cc_load_policy; ?>" <?php checked($all[self::$opt_cc_load_policy], 1); ?> type="checkbox" class="checkbox">
1433
+ <label for="<?php echo self::$opt_cc_load_policy; ?>"><?php _e('<b class="chktitle">Closed Captions:</b> Turn on closed captions by default.') ?></label>
1434
  </p>
1435
  <p>
1436
+ <input name="<?php echo self::$opt_iv_load_policy; ?>" id="<?php echo self::$opt_iv_load_policy; ?>" <?php checked($all[self::$opt_iv_load_policy], 1); ?> type="checkbox" class="checkbox">
1437
+ <label for="<?php echo self::$opt_iv_load_policy; ?>"><?php _e('<b class="chktitle">Annotations:</b> Show annotations by default.') ?></label>
1438
  </p>
1439
  <p>
1440
+ <input name="<?php echo self::$opt_loop; ?>" id="<?php echo self::$opt_loop; ?>" <?php checked($all[self::$opt_loop], 1); ?> type="checkbox" class="checkbox">
1441
+ <label for="<?php echo self::$opt_loop; ?>"><?php _e('<b class="chktitle">Looping:</b> Loop all your videos.') ?></label>
1442
  </p>
1443
  <p>
1444
+ <input name="<?php echo self::$opt_modestbranding; ?>" id="<?php echo self::$opt_modestbranding; ?>" <?php checked($all[self::$opt_modestbranding], 1); ?> type="checkbox" class="checkbox">
1445
+ <label for="<?php echo self::$opt_modestbranding; ?>"><?php _e('<b class="chktitle">Modest Branding:</b> Hide YouTube logo from control bar while playing.') ?></label>
1446
  </p>
1447
  <p>
1448
+ <input name="<?php echo self::$opt_rel; ?>" id="<?php echo self::$opt_rel; ?>" <?php checked($all[self::$opt_rel], 1); ?> type="checkbox" class="checkbox">
1449
+ <label for="<?php echo self::$opt_rel; ?>"><?php _e('<b class="chktitle">Related Videos:</b> Show related videos at the end.') ?></label>
1450
  </p>
1451
  <p>
1452
+ <input name="<?php echo self::$opt_showinfo; ?>" id="<?php echo self::$opt_showinfo; ?>" <?php checked($all[self::$opt_showinfo], 1); ?> type="checkbox" class="checkbox">
1453
+ <label for="<?php echo self::$opt_showinfo; ?>"><?php _e('<b class="chktitle">Show Title:</b> Show the video title and other info.') ?></label>
1454
+ </p>
1455
+ <p>
1456
+ <input name="<?php echo self::$opt_theme; ?>" id="<?php echo self::$opt_theme; ?>" <?php checked($all[self::$opt_theme], 'dark'); ?> type="checkbox" class="checkbox">
1457
+ <label for="<?php echo self::$opt_theme; ?>"><?php _e('<b class="chktitle">Dark Theme:</b> Use the dark theme (uncheck to use light theme).') ?></label>
1458
+ </p>
1459
+ <p>
1460
+ <input name="<?php echo self::$opt_color; ?>" id="<?php echo self::$opt_color; ?>" <?php checked($all[self::$opt_color], 'red'); ?> type="checkbox" class="checkbox">
1461
+ <label for="<?php echo self::$opt_color; ?>"><?php _e('<b class="chktitle">Red Progress Bar:</b> Use the red progress bar (uncheck to use a white progress bar). Note: Using white will disable the modestbranding option.') ?></label>
1462
+ </p>
1463
+ <p>
1464
+ <input name="<?php echo self::$opt_vq; ?>" id="<?php echo self::$opt_vq; ?>" <?php checked($all[self::$opt_vq], 'hd720'); ?> type="checkbox" class="checkbox">
1465
+ <label for="<?php echo self::$opt_vq; ?>"><?php _e('<b class="chktitle">HD Quality:</b> Force HD quality when available.') ?> </label>
1466
+ </p>
1467
+ <p>
1468
+ <input name="<?php echo self::$opt_controls; ?>" id="<?php echo self::$opt_controls; ?>" <?php checked($all[self::$opt_controls], 2); ?> type="checkbox" class="checkbox">
1469
+ <label for="<?php echo self::$opt_controls; ?>"><?php _e('<b class="chktitle">Show Controls:</b> Show the player\'s control bar. Checking this also speeds up page loading (the Flash player will "lazy load," which means it will load the player after clicking play). Uncheck this to completely remove the player controls for a cleaner look.') ?></label>
1470
+ </p>
1471
+ <p>
1472
+ <input name="<?php echo self::$opt_wmode; ?>" id="<?php echo self::$opt_wmode; ?>" <?php checked($all[self::$opt_wmode], 'opaque'); ?> type="checkbox" class="checkbox">
1473
+ <label for="<?php echo self::$opt_wmode; ?>"><?php _e('<b class="chktitle">Wmode:</b> Use "opaque" wmode (uncheck to use "transparent"). Opaque may have higher performance.') ?></label>
1474
+ </p>
1475
+ <p>
1476
+ <input name="<?php echo self::$opt_responsive; ?>" id="<?php echo self::$opt_responsive; ?>" <?php checked($all[self::$opt_responsive], 1); ?> type="checkbox" class="checkbox">
1477
+ <label for="<?php echo self::$opt_responsive; ?>"><?php _e('<b class="chktitle">Responsive Video Sizing:</b> Make my videos responsive so that they dynamically fit in all screen sizes (smart phone, PC and tablet). NOTE: While this is checked, any custom hardcoded widths and heights you may have set will dynamically change too.') ?></label>
1478
+ </p>
1479
+ <p>
1480
+ <input name="<?php echo self::$opt_defaultdims; ?>" id="<?php echo self::$opt_defaultdims; ?>" <?php checked($all[self::$opt_defaultdims], 1); ?> type="checkbox" class="checkbox">
1481
+ <span id="boxdefaultdims">
1482
+ Width: <input type="text" name="<?php echo self::$opt_defaultwidth; ?>" id="<?php echo self::$opt_defaultwidth; ?>" value="<?php echo trim($all[self::$opt_defaultwidth]); ?>" class="textinput" style="width: 50px;"> &nbsp;
1483
+ Height: <input type="text" name="<?php echo self::$opt_defaultheight; ?>" id="<?php echo self::$opt_defaultheight; ?>" value="<?php echo trim($all[self::$opt_defaultheight]); ?>" class="textinput" style="width: 50px;">
1484
+ </span>
1485
+
1486
+ <label for="<?php echo self::$opt_defaultdims; ?>"><?php _e('<b class="chktitle">Default Dimensions:</b> Make my videos have a default size (NOTE: Checking the responsive option will override this size setting) ') ?></label>
1487
  </p>
1488
+ <p>
1489
+ <input name="<?php echo self::$opt_nocookie; ?>" id="<?php echo self::$opt_nocookie; ?>" <?php checked($all[self::$opt_nocookie], 1); ?> type="checkbox" class="checkbox">
1490
+ <label for="<?php echo self::$opt_nocookie; ?>">
1491
+ <b class="chktitle">YouTube Cookies:</b> Prevent YouTube from leaving tracking cookies on your visitors browsers unless they actual play the videos. This is coded to apply this behavior on links in your past post as well. (Checking this might affect YouTube API behavior)
1492
+ </label>
1493
+ </p>
1494
+ <p>
1495
+ <input name="<?php echo self::$opt_autohide; ?>" id="<?php echo self::$opt_autohide; ?>" <?php checked($all[self::$opt_autohide], 1); ?> type="checkbox" class="checkbox">
1496
+ <label for="<?php echo self::$opt_autohide; ?>"><?php _e('<b class="chktitle">Autohide Controls:</b> Slide away the control bar after the video starts playing. It will automatically slide back in again if you mouse over the video.') ?></label>
1497
+ </p>
1498
+ <p>
1499
+ <input name="<?php echo self::$opt_oldspacing; ?>" id="<?php echo self::$opt_oldspacing; ?>" <?php checked($all[self::$opt_oldspacing], 1); ?> type="checkbox" class="checkbox">
1500
+ <label for="<?php echo self::$opt_oldspacing; ?>">
1501
+ <b class="chktitle">Legacy Spacing:</b> Continue the spacing style from version 4.0 and older. Those versions required you to manually add spacing above and below your video. Unchecking this will automatically add the spacing.
1502
+ </label>
1503
+ </p>
1504
+
1505
+
1506
+ <p class="smallnote orange">Below are PRO features for enhanced SEO, performance, privacy, and security (works for even past embed links):</p>
1507
+ <?php
1508
+ if ($haspro)
1509
+ {
1510
+ ?>
1511
+ <p>
1512
+ <input name="<?php echo self::$opt_ssl; ?>" id="<?php echo self::$opt_ssl; ?>" <?php checked($all[self::$opt_ssl], 1); ?> type="checkbox" class="checkbox">
1513
+ <label for="<?php echo self::$opt_ssl; ?>">
1514
+ <b>(PRO)</b> <b class="chktitle">HTTPS/SSL Player:</b> Use the secure YouTube player for all of your visitors and videos you embed. This will go back and also secure your past embeds as they are loaded on their pages.
1515
+ </label>
1516
+ </p>
1517
+ <p>
1518
+ <input name="<?php echo self::$opt_html5; ?>" id="<?php echo self::$opt_html5; ?>" <?php checked($all[self::$opt_html5], 1); ?> type="checkbox" class="checkbox">
1519
+ <label for="<?php echo self::$opt_html5; ?>">
1520
+ <b>(PRO)</b> <b class="chktitle">HTML5 First:</b> Speed up your pages containing YouTube videos by using YouTube's HTML5 player instead of the Flash player when available. It's been noted that using the HTML5 player offers visibly lower page load times than Flash. Our own internal tests along with data from some beta testers suggest the same thing. In fact, some experiments show that pages (with multiple embeds) can have over four times less size with HTML5 than Flash. <br><span class="italic">So what does this all mean?</span> Well given that site speed may have an effect on search engine rankings, we suggest checking this option if you typically embed videos in your posts as it may have a site-wide benefit. Our code will even go back and load your older posted videos as HTML5 instead of Flash, where possible.
1521
+ </label>
1522
+ </p>
1523
+ <p>
1524
+ <img class="ssschema" src="<?php echo plugins_url('images/ssschemaorg.jpg', __FILE__) ?>" />
1525
+ <input name="<?php echo self::$opt_schemaorg; ?>" id="<?php echo self::$opt_schemaorg; ?>" <?php checked($all[self::$opt_schemaorg], 1); ?> type="checkbox" class="checkbox">
1526
+ <label for="<?php echo self::$opt_schemaorg; ?>">
1527
+ <b>(PRO)</b> <b class="chktitle">Video SEO Tags:</b> Automatically add Google, Bing, and Yahoo friendly markup so that your pages with video embeds can be indexed to have a greater chance of showing up in search engine results for those particular videos, even if you aren't the owner. This markup also promotes the chances of your pages showing up with actual video thumbnails within search results (see example on the right). Just check the PRO setting and we'll handle the SEO.
1528
+ </label>
1529
+
1530
+ </p>
1531
+ <?php
1532
+ }
1533
+ else
1534
+ {
1535
+ ?>
1536
+ <p>
1537
+ <input disabled type="checkbox" class="checkbox">
1538
+ <label>
1539
+ <b class="chktitle">HTTPS/SSL Player:</b> <span class="pronon">(PRO Users)</span> Use the secure YouTube player for all of your visitors and videos you embed. This will go back and also secure your past embeds as they are loaded on their pages.
1540
+ </label>
1541
+ </p>
1542
+ <p>
1543
+ <input disabled type="checkbox" class="checkbox">
1544
+ <label>
1545
+ <b class="chktitle">HTML5 First:</b> <span class="pronon">(PRO Users)</span> Speed up your pages containing YouTube videos by using YouTube's HTML5 player instead of the Flash player when available. It's been noted that using the HTML5 player offers visibly lower page load times than Flash. Our own internal tests along with data from some beta testers suggest the same thing. <b>In fact, some experiments show that pages (with multiple embeds) can have over four times less size with HTML5 than Flash.</b> <br><span class="italic">So what does this all mean?</span> Well given that site speed may have an effect on search engine rankings, we suggest checking this option if you typically embed videos in your posts. Our code will even go back and load your older posted videos as HTML5 instead of Flash, where possible.
1546
+ </label>
1547
+ </p>
1548
+ <p>
1549
+ <img class="ssschema" src="<?php echo plugins_url('images/ssschemaorg.jpg', __FILE__) ?>" />
1550
+ <input disabled type="checkbox" class="checkbox">
1551
+ <label>
1552
+ <b class="chktitle">Video SEO Tags:</b> <span class="pronon">(NEW: PRO Users)</span> Automatically add Google, Bing, and Yahoo friendly markup so that your pages with video embeds can be indexed to have a greater chance of showing up in search engine results for those particular videos, even if you aren't the owner. This markup also promotes the chances of your pages showing up with actual video thumbnails within search results (see example on the right). Just check the PRO setting and we'll handle the SEO.
1553
+ </label>
1554
+ </p>
1555
+
1556
+ <?php
1557
+ }
1558
+ ?>
1559
+
1560
  <p class="submit">
1561
+ <input type="submit" onclick="return savevalidate();" name="Submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
1562
  </p>
1563
+
1564
+ <hr>
1565
+
1566
+ <?php
1567
+ if ($haspro)
1568
+ {
1569
+ ?>
1570
+ <p>
1571
+ <b>(PRO)</b> We plan to promote this plugin right from our <a target="_blank" href="<?php echo self::$epbase; ?>">embedplus.com</a> homepage by listing example sites that use it. <a id="showcase-validate" class="button-primary" target="_blank">Click this button</a> to automatically include your site for evaluation. It will give you a chance to promote your quality site.
1572
+ </p>
1573
+ <?php
1574
+ }
1575
+ else
1576
+ {
1577
+ ?>
1578
+
1579
+ <p>
1580
+ <span class="pronon">(PRO Users)</span> We plan to promote this plugin right from our <a target="_blank" href="<?php echo self::$epbase; ?>">embedplus.com</a> homepage by listing example sites that use it. <a class="button-primary" disabled>Click this button</a> to automatically include your site for evaluation. It will give you a chance to promote your quality site.
1581
+ </p>
1582
+ <?php } ?>
1583
  </div>
1584
+ <div class="jumper" id="jumpoverride"></div>
1585
 
1586
+ <h3 class="sect">
1587
+ <?php _e("How To Override Defaults / Other Options") ?> <a href="#top" class="totop">&#9650; top</a>
1588
  </h3>
1589
+ <p>Suppose you have a few videos that need to be different from the above defaults. You can add options to the end of a link as displayed below to override the above defaults. Each option should begin with '&'.
1590
+ <br><span class="pronon">PRO users: You can use the <span class="button-primary cuz">&#9658; Customize</span> button in the wizard instead of memorizing the following.</span>
1591
+ <?php
1592
+ _e('<ul>');
1593
+ _e("<li><strong>width</strong> - Sets the width of your player. If omitted, the default width will be the width of your theme's content.<em> Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&width=500</strong>&height=350</em></li>");
1594
+ _e("<li><strong>height</strong> - Sets the height of your player. <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA&width=500<strong>&height=350</strong></em> </li>");
1595
+ _e("<li><strong>autoplay</strong> - Set this to 1 to autoplay the video (or 0 to play the video once). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&autoplay=1</strong></em> </li>");
1596
+ _e("<li><strong>cc_load_policy</strong> - Set this to 1 to turn on closed captioning (or 0 to leave them off). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&cc_load_policy=1</strong></em> </li>");
1597
+ _e("<li><strong>iv_load_policy</strong> - Set this to 3 to turn off annotations (or 1 to show them). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&iv_load_policy=3</strong></em> </li>");
1598
+ _e("<li><strong>loop</strong> - Set this to 1 to loop the video (or 0 to not loop). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&loop=1</strong></em> </li>");
1599
+ _e("<li><strong>modestbranding</strong> - Set this to 1 to remove the YouTube logo while playing (or 0 to show the logo). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&modestbranding=1</strong></em> </li>");
1600
+ _e("<li><strong>rel</strong> - Set this to 0 to not show related videos at the end of playing (or 1 to show them). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&rel=0</strong></em> </li>");
1601
+ _e("<li><strong>showinfo</strong> - Set this to 0 to hide the video title and other info (or 1 to show it). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&showinfo=0</strong></em> </li>");
1602
+ _e("<li><strong>theme</strong> - Set this to 'light' to make the player have the light-colored theme (or 'dark' for the dark theme). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&theme=light</strong></em> </li>");
1603
+ _e("<li><strong>color</strong> - Set this to 'white' to make the player have a white progress bar (or 'red' for a red progress bar). Note: Using white will disable the modestbranding option. <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&color=white</strong></em> </li>");
1604
+ _e("<li><strong>vq</strong> - Set this to 'hd720' or 'hd1080' to force the video to have HD quality. Leave blank to let YouTube decide. <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&vq=hd720</strong></em> </li>");
1605
+ _e("<li><strong>controls</strong> - Set this to 0 to completely hide the video controls (or 2 to show it). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&controls=0</strong></em> </li>");
1606
+ _e("<li><strong>autohide</strong> - Set this to 1 to slide away the control bar after the video starts playing. It will automatically slide back in again if you mouse over the video. (Set to 2 to always show it). <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA<strong>&autohide=1</strong></em> </li>");
1607
+ _e('</ul>');
1608
+
1609
+ _e("<p>You can also start and end each individual video at particular times. Like the above, each option should begin with '&'</p>");
1610
+ _e('<ul>');
1611
+ _e("<li><strong>start</strong> - Sets the time (in seconds) to start the video. <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350<strong>&start=20</strong></em> </li>");
1612
+ _e("<li><strong>end</strong> - Sets the time (in seconds) to stop the video. <em>Example: http://www.youtube.com/watch?v=quwebVjAEJA&width=500&height=350<strong>&end=100</strong></em> </li>");
1613
+ _e('</ul>');
1614
+ ?>
1615
 
1616
  </form>
1617
+ <div class="jumper" id="jumppro"></div>
1618
+ <div id="goprobox">
1619
+ <?php
1620
+ if ($haspro)
1621
+ {
1622
+ echo "<h3>" . __('Thank you for going PRO.');
1623
+ echo ' &nbsp;<input type="submit" name="showkey" class="button-primary" style="vertical-align: 15%;" id="showprokey" value="View my PRO key" />';
1624
+ echo "</h3>";
1625
+ ?>
1626
+ <?php
1627
+ }
1628
+ else
1629
+ {
1630
+ ?>
1631
+
1632
+ <h3 class="sect">
1633
+ <a href="<?php echo self::$epbase ?>/dashboard/pro-easy-video-analytics.aspx" class="button-primary" target="_blank">Want to go PRO? (Low Prices) &raquo;</a> &nbsp;
1634
+ PRO users help keep new features coming and our coffee cups filled. Go PRO and get these perks in return:
1635
+ </h3>
1636
+ <div class="procol">
1637
+ <ul class="gopro">
1638
+ <li>
1639
+ <img src="<?php echo plugins_url('images/iconwizard.png', __FILE__) ?>">
1640
+ Full Visual Embedding Wizard (Easily customize embeds without memorizing codes)
1641
+ </li>
1642
+ <li>
1643
+ <img src="<?php echo plugins_url('images/vseo.png', __FILE__) ?>">
1644
+ One-Click Video SEO Tags (markup that can help drive more traffic)
1645
+ </li>
1646
+ <li>
1647
+ <img src="<?php echo plugins_url('images/iconmusic.png', __FILE__) ?>">
1648
+ Music video extras to inspire your posts <sup class="orange bold">NEW</sup>
1649
+ </li>
1650
+ <li>
1651
+ <img src="<?php echo plugins_url('images/html5.png', __FILE__) ?>">
1652
+ HTML5-first to speedup page loads (will even work for your old embeds)
1653
+ </li>
1654
+ <li>
1655
+ <img src="<?php echo plugins_url('images/deletechecker.png', __FILE__) ?>">
1656
+ Deleted Video Checker (alerts you if YouTube deletes videos you embedded)
1657
+ </li>
1658
+ <!--
1659
+ <li>
1660
+ <img src="<?php echo plugins_url('images/icondiscuss.png', __FILE__) ?>">
1661
+ Read the latest Internet discussions about the videos you want to embed
1662
+ </li>
1663
+ -->
1664
+ <li>
1665
+ <img src="<?php echo plugins_url('images/lock.png', __FILE__) ?>">
1666
+ Secure YouTube player (will even work for your old embeds)
1667
+ </li>
1668
+ </ul>
1669
+ </div>
1670
+ <div class="procol" style="width: 340px;">
1671
+ <ul class="gopro">
1672
+ <li>
1673
+ <img src="<?php echo plugins_url('images/prioritysupport.png', __FILE__) ?>">
1674
+ Priority support (Puts your request in front)
1675
+ </li>
1676
+ <li>
1677
+ <img src="<?php echo plugins_url('images/bulletgraph45.png', __FILE__) ?>">
1678
+ User-friendly video analytics dashboard
1679
+ </li>
1680
+ <li>
1681
+ <img src="<?php echo plugins_url('images/iconythealth.png', __FILE__) ?>">
1682
+ Instant YouTube embed diagnostic reports
1683
+ </li>
1684
+ <li>
1685
+ <img src="<?php echo plugins_url('images/infinity.png', __FILE__) ?>">
1686
+ Unlimited PRO upgrades and downloads
1687
+ </li>
1688
+ <li>
1689
+ <img src="<?php echo plugins_url('images/showcase.png', __FILE__) ?>">
1690
+ A chance to showcase your site right from our homepage
1691
+ </li>
1692
+ <li>
1693
+ <img src="<?php echo plugins_url('images/questionsale.png', __FILE__) ?>">
1694
+ What else? You tell us!
1695
+ </li>
1696
+ </ul>
1697
+ </div>
1698
+ <br>
1699
+ <br>
1700
+ <div style="clear: both;"></div>
1701
+ <h3 class="bold">Enter and save your PRO key (emailed to you):</h3>
1702
+ <?php } ?>
1703
+ <form name="form2" method="post" action="" id="epform2" class="submitpro" <?php
1704
+ if ($haspro)
1705
+ {
1706
+ echo 'style="display: none;"';
1707
+ }
1708
+ ?>>
1709
+
1710
+ <input name="<?php echo self::$opt_pro; ?>" id="opt_pro" value="<?php echo $all[self::$opt_pro]; ?>" type="text">
1711
+ <input type="submit" name="Submit" class="button-primary" id="prokeysubmit" value="<?php _e('Save Key') ?>" />
1712
+ <?php
1713
+ if (!$haspro)
1714
+ {
1715
+ ?>
1716
+ &nbsp; &nbsp; &nbsp; <span style="font-size: 25px; color: #cccccc;">|</span> &nbsp; &nbsp; &nbsp; <a href="<?php echo self::$epbase ?>/dashboard/pro-easy-video-analytics.aspx" class="button-primary brightpro" target="_blank">Click here to go PRO &raquo;</a>
1717
+ <?php
1718
+ }
1719
+ ?>
1720
+ <br>
1721
+ <span style="display: none;" id="prokeyloading" class="orange bold">Verifying...</span>
1722
+ <span class="orange bold" style="display: none;" id="prokeysuccess">Success! Please refresh this page.</span>
1723
+ <span class="orange bold" style="display: none;" id="prokeyfailed">Sorry, that seems to be an invalid key.</span>
1724
+
1725
+ </form>
1726
+
1727
+ </div>
1728
+ <div class="smallnote">
1729
+ <!--&nbsp; *Upcoming: We've started developing a feature that will recommend YouTube embeds that you might want to include in a post while you're actually<br>
1730
+ writing/editing. It will apply some experimental artificial intelligence techniques on your post content for these recommendations, all at the click of a button.
1731
+ -->
1732
+ </div>
1733
+ <div class="jumper" id="jumpsupport"></div>
1734
+ <div id="nonprosupport">
1735
+ <h3 class="bold">Support tips for non-PRO users</h3>
1736
+ We've found that a common support request has been from users that are pasting video links on single lines, as required, but are not seeing the video embed show up. One of these suggestions is usually the fix:
1737
+ <ul class="reglist">
1738
+ <li>Make sure the URL is really on its own line by itself. Or, if you need multiple videos on the same line, make sure each URL is wrapped properly with the shortcode (Example: <code>[embedyt]http://www.youtube.com/watch?v=ABCDEFGHIJK&width=400$height=250[/embedyt]</code>)</li>
1739
+ <li>Make sure the URL is not an active hyperlink (i.e., it should just be plain text). Otherwise, highlight the URL and click the "unlink" button in your editor: <img src="<?php echo plugins_url('images/unlink.png', __FILE__) ?>"/>.</li>
1740
+ <li>Make sure you did <strong>not</strong> format or align the URL in any way. If your URL still appears in your actual post instead of a video, highlight it and click the "remove formatting" button (formatting can be invisible sometimes): <img src="<?php echo plugins_url('images/erase.png', __FILE__) ?>"/></li>
1741
+ <li>Try wrapping the URL with the <code>[embedyt]...[/embedyt]</code> shortcode. For example: <code>[embedyt]http://www.youtube.com/watch?v=ABCDEFGHIJK[/embedyt]</code> Using the shortcode also allows you to have two or more videos next to each other on the same line. Just put the shortcoded links together on the same line. For example:<br>
1742
+ <code>[embedyt]http://www.youtube.com/watch?v=ABCDEF&width=400&height=250[/embedyt] [embedyt]http://www.youtube.com/watch?v=GHIJK&width=400&height=250[/embedyt]</code>
1743
+ <br> TIP: As shown above, decrease the size of each video so that they fit together on the same line (See the "How To Override Defaults" section for height and width instructions)
1744
+ </li>
1745
+ <li>Finally, there's a slight chance your custom theme is the issue, if you have one. To know for sure, we suggest temporarily switching to one of the default WordPress themes (e.g., "Twenty Thirteen") just to see if your video does appear. If it suddenly works, then your custom theme is the issue. You can switch back when done testing.</li>
1746
+ <li>If none of the above work, you can contact us here if you still have issues: ext@embedplus.com. We'll try to respond within a week. PRO users should use the priority form below for faster replies.</li>
1747
+ </ul>
1748
+ </p>
1749
+ </div>
1750
+ <br>
1751
+ <h3 class="sect">
1752
+ Priority Support <span class="pronon">(<a href="<?php echo self::$epbase ?>/dashboard/pro-easy-video-analytics.aspx" target="_blank">PRO Users &raquo;</a>)</span><a href="#top" class="totop">&#9650; top</a>
1753
+ </h3>
1754
  <p>
1755
+ <strong>PRO users:</strong> Below, We've enabled the ability to have priority support with our team. Use this to get one-on-one help with any issues you might have or to send us suggestions for future features. We typically respond within minutes during normal work hours.
1756
  </p>
1757
 
 
 
 
1758
 
1759
+ <iframe src="<?php echo self::$epbase ?>/dashboard/prosupport.aspx?simple=1&prokey=<?php echo $all[self::$opt_pro]; ?>&domain=<?php echo site_url(); ?>" width="500" height="500"></iframe>
1760
+
1761
+ <p class="bold">Keep us going!
1762
+ <br>
1763
+ <iframe src="<?php echo self::$epbase ?>/wplikeus.aspx?prokey=<?php echo $all[self::$opt_pro]; ?>" width="350" height="100"></iframe>
1764
+ </p>
1765
+ <!--
1766
+ <h3 class="orange">What's next for us? Take this survey.</h3>
1767
+ <div id="surveyMonkeyInfo" style="width:700px;font-size:10px;color:#666;border:1px solid #ccc;padding:4px;"><div><iframe id="sm_e_s" src="http://www.surveymonkey.com/jsEmbed.aspx?sm=uYXvJKm2UNLkrpXHzLJ57Q_3d_3d" width="700" height="800" style="border:0px;padding-bottom:4px;" frameborder="0" allowtransparency="true" ></iframe></div></div>
1768
+ -->
1769
+
1770
+ <script type="text/javascript">
1771
+
1772
+ function savevalidate()
1773
+ {
1774
+ var valid = true;
1775
+
1776
+ if (jQuery("#<?php echo self::$opt_defaultdims; ?>").is(":checked"))
1777
+ {
1778
+ if (!(jQuery.isNumeric(jQuery.trim(jQuery("#<?php echo self::$opt_defaultwidth; ?>").val())) &&
1779
+ jQuery.isNumeric(jQuery.trim(jQuery("#<?php echo self::$opt_defaultheight; ?>").val()))))
1780
+ {
1781
+ alert("Please enter valid numbers for default height and width, or uncheck the option.");
1782
+ jQuery("#boxdefaultdims input").css("background-color", "#ffcccc").css("border", "2px solid #000000");
1783
+ valid = false;
1784
+ }
1785
+ }
1786
+
1787
+
1788
+ return valid;
1789
+ }
1790
+
1791
+ var prokeyval;
1792
+ var mydomain = escape("http://" + window.location.host.toString());
1793
+
1794
+ jQuery(document).ready(function($) {
1795
+ jQuery('#<?php echo self::$opt_defaultdims; ?>').change(function()
1796
+ {
1797
+ if (jQuery(this).is(":checked"))
1798
+ {
1799
+ jQuery("#boxdefaultdims").show(500);
1800
+ }
1801
+ else
1802
+ {
1803
+ jQuery("#boxdefaultdims").hide(500);
1804
+ }
1805
+
1806
+ });
1807
+
1808
+ jQuery("#showcase-validate").click(function() {
1809
+ window.open("<?php echo self::$epbase . "/showcase-validate.aspx?prokey=" . self::$alloptions[self::$opt_pro] ?>" + "&domain=" + mydomain);
1810
+ });
1811
+
1812
+ jQuery('#showprokey').click(function() {
1813
+ jQuery('.submitpro').show(500);
1814
+ return false;
1815
+ });
1816
+
1817
+ jQuery('#prokeysubmit').click(function() {
1818
+ jQuery(this).attr('disabled', 'disabled');
1819
+ jQuery('#prokeyfailed').hide();
1820
+ jQuery('#prokeysuccess').hide();
1821
+ jQuery('#prokeyloading').show();
1822
+ prokeyval = jQuery('#opt_pro').val();
1823
+
1824
+ var tempscript = document.createElement("script");
1825
+ tempscript.src = "//www.embedplus.com/dashboard/wordpress-pro-validatejp.aspx?simple=1&prokey=" + prokeyval + "&domain=" + mydomain;
1826
+ var n = document.getElementsByTagName("head")[0].appendChild(tempscript);
1827
+ setTimeout(function() {
1828
+ n.parentNode.removeChild(n)
1829
+ }, 500);
1830
+ return false;
1831
+ });
1832
+
1833
+ window.embedplus_record_prokey = function(good) {
1834
+
1835
+ jQuery.ajax({
1836
+ type: "post",
1837
+ dataType: "json",
1838
+ timeout: 30000,
1839
+ url: wpajaxurl,
1840
+ data: {action: 'my_embedplus_pro_record', <?php echo self::$opt_pro; ?>: (good ? prokeyval : "")},
1841
+ success: function(response) {
1842
+ if (response.type == "success") {
1843
+ jQuery("#prokeysuccess").show();
1844
+ }
1845
+ else {
1846
+ jQuery("#prokeyfailed").show();
1847
+ }
1848
+ },
1849
+ error: function(xhr, ajaxOptions, thrownError) {
1850
+ jQuery('#prokeyfailed').show();
1851
+ },
1852
+ complete: function() {
1853
+ jQuery('#prokeyloading').hide();
1854
+ jQuery('#prokeysubmit').removeAttr('disabled');
1855
+ }
1856
+
1857
+ });
1858
+
1859
+ };
1860
+
1861
+ });
1862
+ </script>
1863
+ <?php
1864
+ if (function_exists('add_thickbox'))
1865
+ {
1866
+ add_thickbox();
1867
+ }
1868
+ ?>
1869
+
1870
+ <?php
1871
+ }
1872
+
1873
+ public static function ytprefsscript()
1874
+ {
1875
+ wp_enqueue_script('__ytprefs__', plugins_url('scripts/ytprefs.min.js', __FILE__));
1876
+ }
1877
+
1878
+ public static function get_blogwidth()
1879
+ {
1880
+ $blogwidth = null;
1881
+ try
1882
+ {
1883
+ $embed_size_w = intval(get_option('embed_size_w'));
1884
+
1885
+ global $content_width;
1886
+ if (empty($content_width))
1887
+ {
1888
+ $content_width = $GLOBALS['content_width'];
1889
+ }
1890
+
1891
+ $blogwidth = $embed_size_w ? $embed_size_w : ($content_width ? $content_width : 450);
1892
+ }
1893
+ catch (Exception $ex)
1894
+ {
1895
+
1896
+ }
1897
+
1898
+ $blogwidth = preg_replace('/\D/', '', $blogwidth);
1899
+
1900
+ return $blogwidth;
1901
+ }
1902
+
1903
+ }
1904
 
1905
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1906
  //class start
1907
+ class Add_new_tinymce_btn_Youtubeprefs
1908
+ {
1909
 
1910
+ public $btn_arr;
1911
+ public $js_file;
1912
 
1913
+ /*
1914
+ * call the constructor and set class variables
1915
+ * From the constructor call the functions via wordpress action/filter
1916
+ */
1917
 
1918
+ function __construct($seperator, $btn_name, $javascrip_location)
1919
+ {
1920
+ $this->btn_arr = array("Seperator" => $seperator, "Name" => $btn_name);
1921
+ $this->js_file = $javascrip_location;
1922
+ add_action('init', array($this, 'add_tinymce_button'));
1923
+ add_filter('tiny_mce_version', array($this, 'refresh_mce_version'));
1924
+ }
1925
 
1926
+ /*
1927
+ * create the buttons only if the user has editing privs.
1928
+ * If so we create the button and add it to the tinymce button array
1929
+ */
1930
 
1931
+ function add_tinymce_button()
 
 
 
 
1932
  {
1933
+ if (!current_user_can('edit_posts') && !current_user_can('edit_pages'))
1934
+ return;
1935
+ if (get_user_option('rich_editing') == 'true')
1936
+ {
1937
+ //the function that adds the javascript
1938
+ add_filter('mce_external_plugins', array($this, 'add_new_tinymce_plugin'));
1939
+ //adds the button to the tinymce button array
1940
+ add_filter('mce_buttons', array($this, 'register_new_button'));
1941
+ }
1942
  }
 
1943
 
1944
+ /*
1945
+ * add the new button to the tinymce array
1946
+ */
1947
 
1948
+ function register_new_button($buttons)
1949
+ {
1950
+ array_push($buttons, $this->btn_arr["Seperator"], $this->btn_arr["Name"]);
1951
+ return $buttons;
1952
+ }
1953
 
1954
+ /*
1955
+ * Call the javascript file that loads the
1956
+ * instructions for the new button
1957
+ */
1958
 
1959
+ function add_new_tinymce_plugin($plugin_array)
1960
+ {
1961
+ $plugin_array[$this->btn_arr['Name']] = $this->js_file;
1962
+ return $plugin_array;
1963
+ }
1964
 
1965
+ /*
1966
+ * This function tricks tinymce in thinking
1967
+ * it needs to refresh the buttons
1968
+ */
1969
 
1970
+ function refresh_mce_version($ver)
1971
+ {
1972
+ $ver += 3;
1973
+ return $ver;
1974
+ }
1975
 
1976
+ }
1977
 
1978
  //class end
1979
 
 
1980
 
1981
+ register_activation_hook(__FILE__, array('YouTubePrefs', 'initoptions'));
1982
+ add_action('wp_enqueue_scripts', array('YouTubePrefs', 'ytprefsscript'));
1983
+ add_action("wp_ajax_my_embedplus_pro_record", array('YouTubePrefs', 'my_embedplus_pro_record'));
1984
+ add_action("wp_ajax_my_embedplus_glance_vids", array('YouTubePrefs', 'my_embedplus_glance_vids'));
1985
+ add_action("wp_ajax_my_embedplus_glance_count", array('YouTubePrefs', 'my_embedplus_glance_count'));
1986
 
 
 
1987
 
1988
+ $youtubeplg = new YouTubePrefs();
1989
+
1990
  add_action('admin_enqueue_scripts', 'youtubeprefs_admin_enqueue_scripts');
 
 
 
 
 
1991
 
1992
+ function youtubeprefs_admin_enqueue_scripts()
1993
+ {
1994
+ wp_enqueue_style('embedplusyoutube', plugins_url() . '/youtube-embed-plus/scripts/embedplus_mce.css');
1995
+ add_action('wp_print_scripts', 'youtubeprefs_output_scriptvars');
1996
+
1997
+ if (
1998
+ //(!(isset(YouTubePrefs::$alloptions[YouTubePrefs::$opt_pro]) && strlen(trim(YouTubePrefs::$alloptions[YouTubePrefs::$opt_pro])) > 0)) &&
1999
+ (get_bloginfo('version') >= '3.3') && YouTubePrefs::custom_admin_pointers_check()
2000
+ )
2001
+ {
2002
+ add_action('admin_print_footer_scripts', 'YouTubePrefs::custom_admin_pointers_footer');
2003
+
2004
+ wp_enqueue_script('wp-pointer');
2005
+ wp_enqueue_style('wp-pointer');
2006
+ }
2007
+
2008
+ if (YouTubePrefs::$alloptions['glance'] == 1)
2009
+ {
2010
+ add_action('admin_print_footer_scripts', 'YouTubePrefs::glance_script');
2011
+ }
2012
+ }
2013
+
2014
+ function youtubeprefs_output_scriptvars()
2015
+ {
2016
+ YouTubePrefs::$scriptsprinted++;
2017
+ if (YouTubePrefs::$scriptsprinted == 1)
2018
+ {
2019
+ $blogwidth = YouTubePrefs::get_blogwidth();
2020
+ $epprokey = YouTubePrefs::$alloptions[YouTubePrefs::$opt_pro];
2021
+ $myytdefaults = http_build_query(YouTubePrefs::$alloptions);
2022
+ ?>
2023
+ <script type="text/javascript">
2024
+ var wpajaxurl = "<?php echo admin_url('admin-ajax.php') ?>";
2025
+ if (window.location.toString().indexOf('https://') == 0)
2026
+ {
2027
+ wpajaxurl = wpajaxurl.replace("http://", "https://");
2028
+ }
2029
+
2030
+ var epblogwidth = <?php echo $blogwidth; ?>;
2031
+ var epprokey = '<?php echo $epprokey; ?>';
2032
+ var epbasesite = '<?php echo YouTubePrefs::$epbase; ?>';
2033
+ var epversion = '<?php echo YouTubePrefs::$version; ?>';
2034
+ var myytdefaults = '<?php echo $myytdefaults; ?>';
2035
+ var eppluginadminurl = '<?php echo admin_url('admin.php?page=youtube-my-preferences'); ?>';
2036
+
2037
+ // Create IE + others compatible event handler
2038
+ var epeventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
2039
+ var epeventer = window[epeventMethod];
2040
+ var epmessageEvent = epeventMethod == "attachEvent" ? "onmessage" : "message";
2041
+
2042
+ // Listen to message from child window
2043
+ epeventer(epmessageEvent, function(e)
2044
+ {
2045
+ var embedcode = "";
2046
+ try
2047
+ {
2048
+ if (e.data.indexOf("youtubeembedplus") == 0)
2049
+ {
2050
+
2051
+ embedcode = e.data.split("|")[1];
2052
+ if (embedcode.indexOf("[") !== 0)
2053
+ {
2054
+ embedcode = "<p>" + embedcode + "</p>";
2055
+ }
2056
+
2057
+ if (window.tinyMCE !== null && window.tinyMCE.activeEditor !== null && !window.tinyMCE.activeEditor.isHidden())
2058
+ {
2059
+ window.tinyMCE.execInstanceCommand(
2060
+ window.tinyMCE.activeEditor.id,
2061
+ 'mceInsertContent',
2062
+ false,
2063
+ embedcode);
2064
+ }
2065
+ else
2066
+ {
2067
+ embedcode = embedcode.replace('<p>', '\n').replace('</p>', '\n');
2068
+ if (typeof QTags.insertContent === 'function')
2069
+ {
2070
+ QTags.insertContent(embedcode);
2071
+ }
2072
+ else
2073
+ {
2074
+ send_to_editor(embedcode);
2075
+ }
2076
+ }
2077
+ tb_remove();
2078
+
2079
+ }
2080
+ }
2081
+ catch (err)
2082
+ {
2083
+ if (typeof console !== 'undefined')
2084
+ console.log(err.message);
2085
+ }
2086
+
2087
+
2088
+ }, false);
2089
+
2090
+
2091
+
2092
+
2093
+
2094
+
2095
+ </script>
2096
+ <?php
2097
+ }
2098
+ }
2099
+