Newsletter - Version 1.1.8

Version Description

Download this release

Release Info

Developer satollo
Plugin Icon 128x128 Newsletter
Version 1.1.8
Comparing to
See all releases

Version 1.1.8

Files changed (65) hide show
  1. images/empty.gif +0 -0
  2. import.php +56 -0
  3. languages/en_US.php +35 -0
  4. languages/en_US_options.php +54 -0
  5. languages/fr_FR.php +35 -0
  6. languages/fr_FR_options.php +46 -0
  7. languages/it_IT.php +34 -0
  8. languages/it_IT_options.php +45 -0
  9. manage.php +122 -0
  10. newsletter.php +276 -0
  11. options.php +342 -0
  12. plugin.php +798 -0
  13. readme.txt +68 -0
  14. themes/default.html +33 -0
  15. themes/picture.html +51 -0
  16. tiny_mce/langs/en.js +154 -0
  17. tiny_mce/license.txt +504 -0
  18. tiny_mce/plugins/table/cell.htm +183 -0
  19. tiny_mce/plugins/table/css/cell.css +17 -0
  20. tiny_mce/plugins/table/css/row.css +25 -0
  21. tiny_mce/plugins/table/css/table.css +13 -0
  22. tiny_mce/plugins/table/editor_plugin.js +1 -0
  23. tiny_mce/plugins/table/js/cell.js +269 -0
  24. tiny_mce/plugins/table/js/merge_cells.js +29 -0
  25. tiny_mce/plugins/table/js/row.js +212 -0
  26. tiny_mce/plugins/table/js/table.js +440 -0
  27. tiny_mce/plugins/table/langs/en_dlg.js +74 -0
  28. tiny_mce/plugins/table/merge_cells.htm +37 -0
  29. tiny_mce/plugins/table/row.htm +160 -0
  30. tiny_mce/plugins/table/table.htm +192 -0
  31. tiny_mce/themes/advanced/about.htm +56 -0
  32. tiny_mce/themes/advanced/anchor.htm +31 -0
  33. tiny_mce/themes/advanced/charmap.htm +53 -0
  34. tiny_mce/themes/advanced/color_picker.htm +75 -0
  35. tiny_mce/themes/advanced/editor_template.js +1 -0
  36. tiny_mce/themes/advanced/image.htm +85 -0
  37. tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  38. tiny_mce/themes/advanced/img/icons.gif +0 -0
  39. tiny_mce/themes/advanced/js/about.js +72 -0
  40. tiny_mce/themes/advanced/js/anchor.js +37 -0
  41. tiny_mce/themes/advanced/js/charmap.js +325 -0
  42. tiny_mce/themes/advanced/js/color_picker.js +253 -0
  43. tiny_mce/themes/advanced/js/image.js +245 -0
  44. tiny_mce/themes/advanced/js/link.js +156 -0
  45. tiny_mce/themes/advanced/js/source_editor.js +62 -0
  46. tiny_mce/themes/advanced/langs/en.js +62 -0
  47. tiny_mce/themes/advanced/langs/en_dlg.js +51 -0
  48. tiny_mce/themes/advanced/link.htm +63 -0
  49. tiny_mce/themes/advanced/skins/default/content.css +32 -0
  50. tiny_mce/themes/advanced/skins/default/dialog.css +116 -0
  51. tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  52. tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  53. tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  54. tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  55. tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  56. tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  57. tiny_mce/themes/advanced/skins/default/ui.css +214 -0
  58. tiny_mce/themes/advanced/source_editor.htm +31 -0
  59. tiny_mce/tiny_mce.js +1 -0
  60. tiny_mce/tiny_mce_popup.js +5 -0
  61. tiny_mce/utils/editable_selects.js +69 -0
  62. tiny_mce/utils/form_utils.js +199 -0
  63. tiny_mce/utils/mctabs.js +76 -0
  64. tiny_mce/utils/validate.js +219 -0
  65. widget.php +66 -0
images/empty.gif ADDED
Binary file
import.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (isset($_POST['import']))
3
+ {
4
+ $csv = newsletter_request('csv');
5
+ $lines = explode("\n", $csv);
6
+
7
+ $errors = array();
8
+ foreach ($lines as $line)
9
+ {
10
+ $line = trim($line);
11
+ if ($line == '') continue;
12
+ if ($line[0] == '#') continue;
13
+ $data = explode(';', $line);
14
+ $email = newsletter_normalize_email($data[0]);
15
+ $name = $data[1];
16
+ $token = md5(rand());
17
+ $r = $wpdb->query("insert into " . $wpdb->prefix . "newsletter (status, email, name, token) values ('C', '" . $wpdb->escape($email) . "','" . $wpdb->escape($name) . "','" . $token . "')");
18
+ // Zero or false mean no row inserted
19
+ if (!$r) $errors[] = $line;
20
+ }
21
+ }
22
+
23
+ ?>
24
+
25
+ <div class="wrap">
26
+ <form method="post">
27
+ <h2>Subscribers Import</h2>
28
+
29
+ <table class="form-table">
30
+ <tr valign="top">
31
+ <th scope="row"><label>Message</label></th>
32
+ <td>
33
+ <textarea name="csv" wrap="off" rows="20" cols="75"></textarea>
34
+ <br />
35
+ Copy here a text with csv format: "email@example.com;Name Surname". Empty rows or
36
+ rows starting with "#" are skipped.
37
+ </td>
38
+ </tr>
39
+ <?php if ($errors) { ?>
40
+ <tr valign="top">
41
+ <th scope="row"><label>Rows with errors</label></th>
42
+ <td>
43
+ <textarea name="csv" wrap="off" rows="20" cols="75"><?php echo htmlspecialchars(implode("\n", $errors))?></textarea>
44
+ <br />
45
+ </td>
46
+ </tr>
47
+ <?php } ?>
48
+ </table>
49
+
50
+
51
+ <p class="submit">
52
+ <input class="button" type="submit" name="import" value="Import"/>
53
+ </p>
54
+ </form>
55
+
56
+ </div>
languages/en_US.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Subscription form (traslate "your name", "your email" and the button "subscribe me")
4
+ $newsletter_labels['subscription_form'] =
5
+ '<form method="post" action="" style="text-align: center">
6
+ <input type="hidden" name="na" value="s"/>
7
+ <table cellspacing="3" cellpadding="3" border="0" width="50%">
8
+ <tr><td>Your&nbsp;name</td><td><input type="text" name="nn" size="30"/></td></tr>
9
+ <tr><td>Your&nbsp;email</td><td><input type="text" name="ne" size="30"/></td></tr>
10
+ <tr><td colspan="2" style="text-align: center"><input type="submit" value="Subscribe me"/></td></tr>
11
+ </table>
12
+ </form>';
13
+
14
+ $newsletter_labels['widget_form'] =
15
+ '<form action="{newsletter_url}" method="post">
16
+ {text}
17
+ <p><input type="text" name="nn" value="Your name" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/></p>
18
+ <p><input type="text" name="ne" value="Your email" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/></p>
19
+ <p><input type="submit" value="Subscribe"/></p>
20
+ <input type="hidden" name="na" value="s"/>
21
+ </form>';
22
+
23
+ $newsletter_labels['embedded_form'] =
24
+ '<form action="{newsletter_url}" method="post">
25
+ <p><input type="text" name="ne" value="Your email" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/>
26
+ &nbsp;<input type="text" name="nn" value="Your name" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/>
27
+ <input type="submit" value="Subscribe"/>
28
+ <input type="hidden" name="na" value="s"/></p>
29
+ </form>';
30
+
31
+ // Errors on subscription
32
+ $newsletter_labels['error_email'] = 'Wrong email address. <a href="javascript:history.back()">Go back</a>.';
33
+ $newsletter_labels['error_name'] = 'The name cannot be empty. <a href="javascript:history.back()">Go back</a>.';
34
+
35
+ ?>
languages/en_US_options.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // This file contains the default options values
3
+
4
+ // Subscription page introductory text (befor the subscription form)
5
+ $newsletter_default_options['subscription_text'] =
6
+ "<p>Subscribe to my newsletter filling the form below.
7
+ I'll try to make you happy.</p>
8
+ <p>A confirmation email will be sent to your mailbox:
9
+ please read the instruction inside it to complete the subscription.</p>";
10
+
11
+ // Message show after a subbscription request has made.
12
+ $newsletter_default_options['subscribed_text'] =
13
+ "<p>You successfully subscribed to my newsletter.
14
+ You'll receive in few minutes a confirmation email. Follow the link
15
+ in it to confirm the subscription. If the email takes more than 15
16
+ minutes to appear in your mailbox, check the spam folder.</p>";
17
+
18
+ // Confirmation email subject (double opt-in)
19
+ $newsletter_default_options['confirmation_subject'] =
20
+ "{name}, confirm your subscription to {blog_title}";
21
+
22
+ // Confirmation email body (double opt-in)
23
+ $newsletter_default_options['confirmation_message'] =
24
+ "<p>Hi {name},</p>
25
+ <p>I received a subscription request for this email address. You can confirm it
26
+ <a href=\"{subscription_confirm_url}\"><strong>clicking here</strong></a>.
27
+ If you cannot click the link, use the following link:</p>
28
+ <p>{subscription_confirm_url}</p>
29
+ <p>If this subscription request has not been made from you, just ignore this message.</p>
30
+ <p>Thank you.</p>";
31
+
32
+
33
+ // Subscription confirmed text (after a user clicked the confirmation link
34
+ // on the email he received
35
+ $newsletter_default_options['confirmed_text'] =
36
+ "<p>Your subscription has been confirmed!
37
+ Thank you {name}!</p>";
38
+
39
+ $newsletter_default_options['confirmed_subject'] =
40
+ "Welcome aboard, {name}";
41
+
42
+ $newsletter_default_options['confirmed_message'] =
43
+ "<p>The message confirm your subscription to {blog_title} newsletter.</p>
44
+ <p>Thank you!</p>";
45
+
46
+ // Unsubscription request introductory text
47
+ $newsletter_default_options['unsubscription_text'] =
48
+ "<p>Please confirm you want to unsubscribe my newsletter
49
+ <a href=\"{unsubscription_confirm_url}\">clicking here</a>.";
50
+
51
+ // When you finally loosed your subscriber
52
+ $newsletter_default_options['unsubscribed_text'] =
53
+ "<p>That make me cry, but I have removed your subscription...</p>";
54
+ ?>
languages/fr_FR.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Subscription form (traslate "your name", "your email" and the button "subscribe me")
4
+ $newsletter_labels['subscription_form'] =
5
+ '<form method="post" action="" style="text-align: center">
6
+ <input type="hidden" name="na" value="s"/>
7
+ <table cellspacing="3" cellpadding="3" border="0" width="50%">
8
+ <tr><td>Votre&nbsp;nom</td><td><input type="text" name="nn" size="30"/></td></tr>
9
+ <tr><td>Votre&nbsp;e-mail</td><td><input type="text" name="ne" size="30"/></td></tr>
10
+ <tr><td colspan="2" style="text-align: center"><input type="submit" value="Je m&prime;inscris"/></td></tr>
11
+ </table>
12
+ </form>';
13
+
14
+ $newsletter_labels['widget_form'] =
15
+ '<form action="{newsletter_url}" method="post">
16
+ {text}
17
+ <p><input type="text" name="nn" value="Votre nom" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/></p>
18
+ <p><input type="text" name="ne" value="Votre e-mail" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/></p>
19
+ <p><input type="submit" value="Je m&prime;inscris"/></p>
20
+ <input type="hidden" name="na" value="s"/>
21
+ </form>';
22
+
23
+ $newsletter_labels['embedded_form'] =
24
+ '<form action="{newsletter_url}" method="post">
25
+ <p><input type="text" name="ne" value="Votre e-mail" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/>
26
+ &nbsp;<input type="text" name="nn" value="Votre nom" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/>
27
+ <input type="submit" value="Je m&prime;inscris"/>
28
+ <input type="hidden" name="na" value="s"/></p>
29
+ </form>';
30
+
31
+ // Errors on subscription
32
+ $newsletter_labels['error_email'] = 'E-mail incorrect. <a href="javascript:history.back()">Retour</a>.';
33
+ $newsletter_labels['error_name'] = 'Merci d&prime;indiquer votre nom. <a href="javascript:history.back()">Retour</a>.';
34
+
35
+ ?>
languages/fr_FR_options.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // This file contains the default options values
3
+
4
+ // Subscription page introductory text (befor the subscription form)
5
+ $newsletter_default_options['subscription_text'] =
6
+ "<p>Abonnez-vous &agrave; la lettre d&prime;information {blog_title} en remplissants le formulaire ci-dessous.</p>
7
+ <p>Un e-mail de confirmation vous sera envoyé.</p>";
8
+
9
+ // Message show after a subbscription request has made.
10
+ $newsletter_default_options['subscribed_text'] =
11
+ "<p>Votre demande d'inscription est enregistr&eacute;e. Merci ! Un e-mail de confirmation vous a été envoyé. V&eacute;rifier &eacute;galement votre dossier spam.</p>";
12
+
13
+ // Confirmation email subject (double opt-in)
14
+ $newsletter_default_options['confirmation_subject'] =
15
+ "Inscription &agrave; la lettre d&prime;information {blog_title}";
16
+
17
+ // Confirmation email body (double opt-in)
18
+ $newsletter_default_options['confirmation_message'] =
19
+ "<p>Bonjour {name}!</p>
20
+ <p>Vous recevez cet e-mail car nous avons enregistr&eacute; une demande d&prime;inscription &agrave; la lettre d&prime;infrmation {blog_title}.
21
+ Merci de confirmer votre inscription en cliquant sur le lien suivant : <a href=\"{subscription_confirm_url}\"><strong>je confirme mon inscription.</strong></a>.
22
+ Si le lien ne fonctionne pas, merci d'utiliser cette adresse :</p>
23
+ <p>{subscription_confirm_url}</p>
24
+ <p>Ignorez ce message si vous n'avez pas effectué de demande.</p>
25
+ <p>Merci !</p>";
26
+
27
+
28
+ // Subscription confirmed text (after a user clicked the confirmation link
29
+ // on the email he received
30
+ $newsletter_default_options['confirmed_text'] =
31
+ "<p>Votre inscription est confirm&eacute;. Merci !</p>";
32
+
33
+ $newsletter_default_options['confirmed_subject'] =
34
+ "Bienvenue, {name}";
35
+
36
+ $newsletter_default_options['confirmed_message'] =
37
+ "<p>Votre inscription est confirm&eacute;. Merci !</p>";
38
+
39
+ // Unsubscription request introductory text
40
+ $newsletter_default_options['unsubscription_text'] =
41
+ "<p>&Ecirc;tes-vous certain de vouloir vous d&eacute;sinscrire de la lettre d&prime;information {blog_title} ? <a href=\{unsubscription_confirm_url}\">Oui</a>.";
42
+
43
+ // When you finally loosed your subscriber
44
+ $newsletter_default_options['unsubscribed_text'] =
45
+ "<p>Vous n&prime;&ecirc;tes plus abonn&eacute; &agrave; la lettre d'information {blog_title}. Merci de nous avoir suivi et &agrave; bient&ocirc;t !</p>";
46
+ ?>
languages/it_IT.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $newsletter_labels['subscription_form'] =
4
+ '<form method="post" action="" style="text-align: center">
5
+ <input type="hidden" name="na" value="s"/>
6
+ <table cellspacing="3" cellpadding="3" border="0" width="50%">
7
+ <tr><td>Il&nbsp;tuo&nbsp;nome</td><td><input type="text" name="nn" size="30"/></td></tr>
8
+ <tr><td>La&nbsp;tua&nbsp;email</td><td><input type="text" name="ne" size="30"/></td></tr>
9
+ <tr><td colspan="2" style="text-align: center"><input type="submit" value="Iscrivimi!"/></td></tr>
10
+ </table>
11
+ </form>';
12
+
13
+ $newsletter_labels['widget_form'] =
14
+ '<form action="{newsletter_url}" method="post">
15
+ {text}
16
+ <p><input type="text" name="nn" value="Il tuo nome" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/></p>
17
+ <p><input type="text" name="ne" value="La tua email" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/></p>
18
+ <p><input type="submit" value="Iscrivimi"/></p>
19
+ <input type="hidden" name="na" value="s"/>
20
+ </form>';
21
+
22
+ // Errors on subscription
23
+ $newsletter_labels['error_email'] = 'L\'indirizzo email non è corretto. <a href="javascript:history.back()">Torna indietro</a>.';
24
+ $newsletter_labels['error_name'] = 'Il nome non è tato inserito. <a href="javascript:history.back()">Torna indietro</a>.';
25
+
26
+ $newsletter_labels['embedded_form'] =
27
+ '<form action="{newsletter_url}" method="post">
28
+ <p><input type="text" name="ne" value="La tua email" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/>
29
+ &nbsp;<input type="text" name="nn" value="Il tuo nome" onclick="if (this.defaultValue==this.value) this.value=\'\'" onblur="if (this.value==\'\') this.value=this.defaultValue"/>
30
+ <input type="submit" value="Conferma"/>
31
+ <input type="hidden" name="na" value="s"/></p>
32
+ </form>';
33
+
34
+ ?>
languages/it_IT_options.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Subscription page introductory text
4
+ $newsletter_default_options['subscription_text'] =
5
+ "<p>Per iscriversi alla newsletter, lascia nome ed email qui sotto:
6
+ riceverai una email con la quale potrai confermare l'iscrizione.</p>";
7
+
8
+ // Subscription registration message
9
+ $newsletter_default_options['subscribed_text'] =
10
+ "<p>L'iscrizione è quasi completa: controlla la tua
11
+ casella di posta, c'è un messaggio per te con il quale confermare l'iscrizione.</p>";
12
+
13
+ // Confirmation email (double opt-in)
14
+ $newsletter_default_options['confirmation_subject'] =
15
+ "{name}, conferma l'iscrizione alle newsletter di {blog_title}";
16
+
17
+ $newsletter_default_options['confirmation_message'] =
18
+ "<p>Ciao {name},</p>
19
+ <p>hai richiesto l'iscrizione alla newsletter di {blog_title}.
20
+ Conferma l'iscrizione <a href=\"{subscription_confirm_url}\"><strong>cliccando qui</strong></a>
21
+ oppure copia il link qui sotto nel tu programma di navigazione:</p>
22
+ <p>{subscription_confirm_url}</p>
23
+ <p>Grazie!</p>";
24
+
25
+ $newsletter_default_options['confirmed_subject'] =
26
+ "Benvenuto {name}!";
27
+
28
+ $newsletter_default_options['confirmed_message'] =
29
+ "<p>Con questo messaggio ti confermo l'iscrizione alla newsletter.</p>
30
+ <p>Grazie!</p>";
31
+
32
+ // Subscription confirmed text
33
+ $newsletter_default_options['confirmed_text'] =
34
+ "<p>{name}, la tua iscrizione è stata confermata.
35
+ Buona lettura!</p>";
36
+
37
+
38
+ $newsletter_default_options['unsubscription_text'] =
39
+ "<p>{name}, vuoi eliminare la tua iscrizione?
40
+ Se sì... mi dispace, ma non ti trattengo oltre:</p>
41
+ <p><a href=\"{unsubscription_confirm_url}\">Sì, voglio eliminare la mia iscrizione per sempre</a>.</p>";
42
+
43
+ $newsletter_default_options['unsubscribed_text'] =
44
+ "<p>La tua iscrizione è stata definitivamente eliminata.</p>";
45
+ ?>
manage.php ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ($_POST['a'] == 'resend')
4
+ {
5
+ newsletter_send_confirmation(newsletter_get_subscriber(newsletter_request('email')));
6
+ $_POST['a'] = 'search';
7
+ }
8
+
9
+ if ($_POST['a'] == 'remove')
10
+ {
11
+ newsletter_delete(newsletter_request('email'));
12
+ $_POST['a'] = 'search';
13
+ }
14
+
15
+ if ($_POST['removeall'])
16
+ {
17
+ newsletter_delete_all();
18
+ }
19
+
20
+ if ($_POST['removeallunconfirmed'])
21
+ {
22
+ newsletter_delete_all('S');
23
+ }
24
+
25
+ if ($_POST['a'] == 'status')
26
+ {
27
+ newsletter_set_status(newsletter_request('email'), newsletter_request('status'));
28
+ $_POST['a'] = 'search';
29
+ }
30
+
31
+ if ($_POST['a'] == 'search')
32
+ {
33
+ $list = newsletter_search(newsletter_request('text'));
34
+ }
35
+
36
+ ?>
37
+ <script type="text/javascript">
38
+ function newsletter_remove(email)
39
+ {
40
+ document.getElementById("action").value = "remove";
41
+ document.getElementById("email").value = email;
42
+ document.getElementById("channel").submit();
43
+ }
44
+ function newsletter_set_status(email, status)
45
+ {
46
+ document.getElementById("action").value = "status";
47
+ document.getElementById("email").value = email;
48
+ document.getElementById("status").value = status;
49
+ document.getElementById("channel").submit();
50
+ }
51
+ function newsletter_resend(email)
52
+ {
53
+ if (!confirm("Resend the subscription confirmation email?")) return;
54
+ document.getElementById("action").value = "resend";
55
+ document.getElementById("email").value = email;
56
+ document.getElementById("channel").submit();
57
+ }
58
+
59
+ </script>
60
+ <div class="wrap">
61
+ <h2>Subscribers Management</h2>
62
+ <p>Still in developement, any ideas will be great: write me to info@satollo.net.</p>
63
+ <form id="channel" method="post" action="">
64
+ <input type="hidden" id="action" name="a" value="search"/>
65
+ <input type="hidden" id="email" name="email" value=""/>
66
+ <input type="hidden" id="status" name="status" value=""/>
67
+ <table class="form-table">
68
+ <tr valign="top">
69
+ <th scope="row"><label>Search by email</label></th>
70
+ <td>
71
+ <input name="text" type="text" size="50" value="<?php echo htmlspecialchars(newsletter_request('text'))?>"/>
72
+ <input type="submit" value="Search" /> (press without filter to show all)
73
+ </td>
74
+ </tr>
75
+ </table>
76
+ </form>
77
+ <form method="post" action="">
78
+ <p class="submit">
79
+ <!--<input type="submit" value="Remove all" name="removeall" onclick="return confirm('Are your sure, really sure?')"/>-->
80
+ <input type="submit" value="Remove all unconfirmed" name="removeallunconfirmed" onclick="return confirm('Are your sure, really sure?')"/>
81
+ </p>
82
+ </form>
83
+
84
+ <h3>Statistics</h3>
85
+ Confirmed subscriber: <?php echo $wpdb->get_var("select count(*) from " . $wpdb->prefix . "newsletter where status='C'"); ?>
86
+ <br />
87
+ Unconfirmed subscriber: <?php echo $wpdb->get_var("select count(*) from " . $wpdb->prefix . "newsletter where status='S'"); ?>
88
+
89
+ <h3>Results</h3>
90
+ <style type="text/css">
91
+ .newsletter-results {
92
+ border-collapse: collapse;
93
+ }
94
+ .newsletter-results td, .newsletter-results th {
95
+ border: 1px solid #999;
96
+ padding: 5px;
97
+ }
98
+ </style>
99
+ <?php
100
+ if ($list)
101
+ {
102
+ echo '<table class="newsletter-results" border="1" cellspacing="5">';
103
+ echo '<tr><th>Email</th><th>Name</th><th>Status</th><th>Actions</th></tr>';
104
+ foreach($list as $s)
105
+ {
106
+ echo '<tr>';
107
+ echo '<td>' . $s->email . '</td>';
108
+ echo '<td>' . $s->name . '</td>';
109
+ echo '<td>' . ($s->status=='S'?'Not confirmed':'Confirmed') . '</td>';
110
+ echo '<td>';
111
+ echo '<a href="javascript:void(newsletter_remove(\'' . htmlspecialchars($s->email) . '\'))">remove</a>';
112
+ echo ' | <a href="javascript:void(newsletter_set_status(\'' . htmlspecialchars($s->email) . '\', \'C\'))">confirm</a>';
113
+ echo ' | <a href="javascript:void(newsletter_set_status(\'' . htmlspecialchars($s->email) . '\', \'S\'))">unconfirm</a>';
114
+ echo ' | <a href="javascript:void(newsletter_resend(\'' . htmlspecialchars($s->email) . '\'))">resend confirmation</a>';
115
+ echo '</td>';
116
+ echo '</tr>';
117
+ }
118
+ echo '</table>';
119
+ }
120
+ ?>
121
+
122
+ </div>
newsletter.php ADDED
@@ -0,0 +1,276 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $options = get_option('newsletter_email');
3
+
4
+ if (isset($_POST['save']))
5
+ {
6
+ if (!check_admin_referer()) die('No hacking please');
7
+ $options = newsletter_request('options');
8
+ update_option('newsletter_email', $options);
9
+ }
10
+
11
+ if (isset($_POST['auto']))
12
+ {
13
+ global $post;
14
+
15
+ if (!check_admin_referer()) die('No hacking please');
16
+
17
+ // Load the theme
18
+ if ($_POST['theme'][0] == '*')
19
+ {
20
+ $message = file_get_contents(ABSPATH . '/wp-content/newsletter/themes/' . substr($_POST['theme'], 1));
21
+ }
22
+ else
23
+ {
24
+ $message = file_get_contents(dirname(__FILE__) . '/themes/' . $_POST['theme']);
25
+ }
26
+
27
+ $myposts = get_posts('numberposts=10');
28
+ $idx = 1;
29
+ foreach($myposts as $post)
30
+ {
31
+ $content = $post->post_content;
32
+ $x = strpos($content, '<!--more-->');
33
+ if ($x !== false) $content = substr($content, 0, $x);
34
+ $content = preg_replace('/\[[^\]]*\]/', '', $content);
35
+ //$content = apply_filters('the_content', $content);
36
+
37
+ $excerpt = strip_tags($content);
38
+ if (strlen($excerpt) > 200) {
39
+ $x = strpos($excerpt, ' ', 200);
40
+ $excerpt = substr($excerpt, 0, $x) . '[...]';
41
+ }
42
+
43
+ $image = '';
44
+ $x = stripos($content, '<img');
45
+
46
+ if ($x !== false) {
47
+ $x = stripos($content, 'src="', $x);
48
+ if ($x !== false) {
49
+ $x += 5;
50
+ $y = strpos($content, '"', $x);
51
+ $image = substr($content, $x, $y-$x);
52
+ }
53
+ }
54
+
55
+ if ($image == '') $image = get_option('siteurl') . '/wp-content/plugins/newsletter/images/empty.gif';
56
+
57
+
58
+ $message = str_replace('{excerpt_' . $idx . '}', $excerpt, $message);
59
+ $message = str_replace('{content_' . $idx . '}', $content, $message);
60
+ $message = str_replace('{link_' . $idx . '}', get_permalink(), $message);
61
+ $message = str_replace('{title_' . $idx . '}', get_the_title(), $message);
62
+ $message = str_replace('{image_' . $idx . '}', $image, $message);
63
+ // image replacement
64
+ $idx++;
65
+ }
66
+ $message = str_replace('{blog_title}', get_option('blogname'), $message);
67
+ $message = str_replace('{home_url}', get_option('home'), $message);
68
+ $options['message'] = $message;
69
+ }
70
+
71
+ $last = get_option('newsletter_last');
72
+ ?>
73
+
74
+ <script type="text/javascript" src="<?php echo get_option('siteurl'); ?>/wp-content/plugins/newsletter/tiny_mce/tiny_mce.js"></script>
75
+ <script type="text/javascript">
76
+ tinyMCE.init({
77
+ mode : "textareas",
78
+ theme : "advanced",
79
+ plugins: "table",
80
+ theme_advanced_disable : "styleselect",
81
+ theme_advanced_buttons3 : "tablecontrols",
82
+ relative_urls : false,
83
+ remove_script_host : false,
84
+ document_base_url : "<?php echo get_option('home'); ?>/"
85
+
86
+ });
87
+ </script>
88
+
89
+ <div class="wrap">
90
+ <form method="post">
91
+ <?php wp_nonce_field(); ?>
92
+
93
+ <h2>Newsletter Composer</h2>
94
+
95
+ <h3>Last batch infos</h3>
96
+ <?php if (!$last) { ?>
97
+ <p>No batch info found.</p>
98
+ <?php } else { ?>
99
+ <p>
100
+ Total emails to send: <?php echo $last['total']; ?><br />
101
+ Emails sent till now: <?php echo $last['sent']; ?><br />
102
+ Last email (if empty the batch has completed): <?php echo $last['email']; ?><br />
103
+ </p>
104
+ <?php } ?>
105
+
106
+
107
+
108
+ <?php if (isset($_POST['test'])) { ?>
109
+ <?php if (!check_admin_referer()) die('No hacking please'); ?>
110
+ <h3>Sending to test subscribers</h3>
111
+ <p>
112
+ <?php
113
+ update_option('newsletter_last', array());
114
+ $options = newsletter_request('options');
115
+ update_option('newsletter_email', $options);
116
+ $subscribers = array();
117
+ for ($i=1; $i<=10; $i++)
118
+ {
119
+ if (!$options['test_email_' . $i]) continue;
120
+ $s = newsletter_get_subscriber($options['test_email_' . $i]);
121
+ if ($s) $subscribers[$i-1]= $s;
122
+ else {
123
+ $subscribers[$i-1]->name = $options['test_name_' . $i];
124
+ $subscribers[$i-1]->email = $options['test_email_' . $i];
125
+ $subscribers[$i-1]->token = 'FAKETOKEN';
126
+ }
127
+ }
128
+ newsletter_send($options['subject'], $options['message'], $subscribers);
129
+ ?>
130
+ </p>
131
+
132
+ <?php } ?>
133
+
134
+
135
+ <?php if (isset($_POST['simulate']) || isset($_POST['simulate2'])) { ?>
136
+ <?php if (!check_admin_referer()) die('No hacking please'); ?>
137
+
138
+ <h3>Sending for simulation</h3>
139
+ <p>There is a little delay between each email sending to simulate mailing process.</p>
140
+ <?php
141
+ if (isset($_POST['simulate']))
142
+ {
143
+ $options = newsletter_request('options');
144
+ update_option('newsletter_email', $options);
145
+ update_option('newsletter_last', array());
146
+ }
147
+ echo '<p>';
148
+ $res = newsletter_send_batch($options['subject'], $options['message'], true);
149
+ echo '</p>';
150
+ if (!$res)
151
+ {
152
+ echo '</p><form action="" method="post">Still some emails to send.';
153
+ echo '<input type="submit" name="simulate2" value="Proceed"/>';
154
+ echo '</form>';
155
+ }
156
+ ?>
157
+
158
+
159
+ <?php } ?>
160
+
161
+
162
+ <?php if (isset($_REQUEST['send']) || isset($_POST['send2'])) { ?>
163
+ <?php if (!check_admin_referer()) die('No hacking please'); ?>
164
+
165
+ <h3>Sending for real</h3>
166
+ <?php
167
+ if (isset($_POST['send']))
168
+ {
169
+ $options = newsletter_request('options');
170
+ update_option('newsletter_email', $options);
171
+ update_option('newsletter_last', array());
172
+ }
173
+ echo '<p>';
174
+ $res = newsletter_send_batch($options['subject'], $options['message'], false);
175
+ echo '</p>';
176
+ if (!$res)
177
+ {
178
+ echo '</p><form action="" method="post">Still some emails to send.';
179
+ wp_nonce_field();
180
+ echo '<input type="submit" name="send2" value="Proceed"/>';
181
+ echo '</form>';
182
+ }
183
+ ?>
184
+
185
+ <?php } ?>
186
+
187
+ <!--
188
+ /*
189
+ * \(<a[^>]href=["']{0,1})(.*)(["']{0,1}[^>]>)\i
190
+ [15.45.01] Davide Pozza: (<\s*[A]\s[^>]*[\n\s]*)(href\s*=\s*([^>|\s]*))[^>]*>
191
+ */
192
+ -->
193
+
194
+
195
+ <h3>Newsletter message</h3>
196
+ <p>PHP execution timeout is set to <?php set_time_limit(0); echo ini_get('max_execution_time'); ?> (information
197
+ for debug purpose).</p>
198
+ <table class="form-table">
199
+ <tr valign="top">
200
+ <td>
201
+ Subject<br />
202
+ <input name="options[subject]" type="text" size="50" value="<?php echo htmlspecialchars($options['subject'])?>"/>
203
+ <br />
204
+ Tags: <strong>{name}</strong> receiver name.
205
+ </td>
206
+ </tr>
207
+ <tr valign="top">
208
+ <td>
209
+ Message<br />
210
+ <textarea name="options[message]" wrap="off" rows="20" style="width: 100%"><?php echo htmlspecialchars($options['message'])?></textarea>
211
+ <br />
212
+ Tags: <strong>{name}</strong> receiver name;
213
+ <strong>{unsubscription_url}</strong> unsubscription URL.
214
+ </td>
215
+ </tr>
216
+ </table>
217
+
218
+
219
+ <p class="submit">
220
+ <input class="button" type="submit" name="save" value="Save"/>
221
+ <input class="button" type="submit" name="send" value="Send" onclick="return confirm('Send for real?')"/>
222
+ <input class="button" type="submit" name="simulate" value="Simulate" onclick="return confirm('Send for simulation?')"/>
223
+ <?php if ($last['email'] != '') { ?>
224
+ <input class="button" type="submit" name="restart" value="Restart send process"/>
225
+ (last email: <?php echo get_option('newsletter_last'); ?>)
226
+ <?php } ?>
227
+ <input class="button" type="submit" name="test" value="Send test email"/>
228
+
229
+
230
+ Theme:
231
+ <select name="theme">
232
+ <?php
233
+ if ($handle = @opendir(ABSPATH . 'wp-content/plugins/newsletter/themes'))
234
+ {
235
+ while ($file = readdir($handle))
236
+ {
237
+ if ($file == '.' || $file == '..') continue;
238
+ echo '<option value="' . $file . '">' . $file . '</option>';
239
+ }
240
+ closedir($handle);
241
+ }
242
+
243
+ if ($handle = @opendir(ABSPATH . 'wp-content/newsletter/themes'))
244
+ {
245
+ while ($file = readdir($handle))
246
+ {
247
+ if ($file == '.' || $file == '..') continue;
248
+ echo '<option value="*' . $file . '">* ' . $file . '</option>';
249
+ }
250
+ closedir($handle);
251
+ }
252
+ ?>
253
+ </select>
254
+ <input class="button" type="submit" name="auto" value="Auto compose"/>
255
+ <input class="button" type="submit" name="export" value="Export for Zanzara"/>
256
+ </p>
257
+
258
+ <h3>Test subscribers</h3>
259
+ <p>Define more test subscriber to see how your email looks on different clients:
260
+ GMail, Outlook, Thunderbird, Hotmail, ...</p>
261
+
262
+ <table class="form-table">
263
+ <?php for ($i=1; $i<=10; $i++) { ?>
264
+ <tr valign="top">
265
+ <th scope="row"><label>Subscriber <?php echo $i; ?></label></th>
266
+ <td>
267
+ name: <input name="options[test_name_<?php echo $i; ?>]" type="text" size="30" value="<?php echo htmlspecialchars($options['test_name_' . $i])?>"/>
268
+ &nbsp;&nbsp;&nbsp;
269
+ email:<input name="options[test_email_<?php echo $i; ?>]" type="text" size="30" value="<?php echo htmlspecialchars($options['test_email_' . $i])?>"/>
270
+ </td>
271
+ </tr>
272
+ <?php } ?>
273
+ </table>
274
+ </form>
275
+
276
+ </div>
options.php ADDED
@@ -0,0 +1,342 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (isset($_POST['defaults']))
4
+ {
5
+ @include_once(dirname(__FILE__) . '/languages/en_US_options.php');
6
+ if (WPLANG != '') @include_once(dirname(__FILE__) . '/languages/' . WPLANG . '_options.php');
7
+ update_option('newsletter', $newsletter_default_options);
8
+ }
9
+
10
+ if (isset($_POST['save']))
11
+ {
12
+ $options = newsletter_request('options');
13
+ update_option('newsletter', $options);
14
+ }
15
+
16
+ $options = get_option('newsletter');
17
+
18
+ ?>
19
+
20
+ <?php if (!$options['novisual']) { ?>
21
+ <script type="text/javascript" src="<?php echo get_option('siteurl'); ?>/wp-content/plugins/newsletter/tiny_mce/tiny_mce.js"></script>
22
+
23
+ <script type="text/javascript">
24
+ tinyMCE.init({
25
+ mode : "textareas",
26
+ theme : "advanced",
27
+ theme_advanced_disable : "styleselect",
28
+ relative_urls : false,
29
+ remove_script_host : false,
30
+ document_base_url : "<?php echo get_option('home'); ?>/"
31
+
32
+ });
33
+ </script>
34
+ <?php } ?>
35
+
36
+ <div class="wrap">
37
+ <form method="post">
38
+ <h2>Newsletter</h2>
39
+
40
+ <p><strong>TAGS HAVE BEEN CHANEGED! PLEASE CORRECT YOUR LINKS IN TEXTS AND EMAILS.</strong></p>
41
+
42
+ <p><strong>First time user?</strong> <a target="_blank" href="http://www.satollo.net/plugins/newsletter">
43
+ Read how to use this plugin <strong>carefully</strong></a>. It's not as simple as it
44
+ appears.</p>
45
+
46
+ <p>To ask questions <a href="http://www.satollo.net/newsletter-help">leave a comment on
47
+ this page</a>. To write me: <a href="mailto:info@satollo.net">info@satollo.net</a>.</p>
48
+
49
+ <p>
50
+ My other plugins:
51
+ <a href="http://www.satollo.net/plugins/post-layout">Post Layout</a>,
52
+ <a href="http://www.satollo.net/plugins/post-layout-pro">Post Layout Pro</a>,
53
+ <a href="http://www.satollo.com/english/wordpress/feed-layout">Feed Layout</a>,
54
+ <a href="http://www.satollo.com/plugins/hyper-cache">Hyper Cache</a>,
55
+ <a href="http://www.satollo.com/plugins/comment-notifier">Comment Notifier</a>.
56
+ </p>
57
+
58
+ <h3>Sender and subscription page</h3>
59
+ <table class="form-table">
60
+ <tr valign="top">
61
+ <th scope="row"><label for="options[from_email]">Sender email</label></th>
62
+ <td>
63
+ <input name="options[from_email]" type="text" size="50" value="<?php echo htmlspecialchars($options['from_email'])?>"/>
64
+ <br />
65
+ Newsletter sender email address: the email address subscribers will see the email coming from.
66
+ </td>
67
+ </tr>
68
+ <tr valign="top">
69
+ <th scope="row"><label for="options[from_name]">Sender name</label></th>
70
+ <td>
71
+ <input name="options[from_name]" type="text" size="50" value="<?php echo htmlspecialchars($options['from_name'])?>"/>
72
+ <br />
73
+ The name of the newsletter sender subscribers will see on incoming email. Please, use english characters.
74
+ </td>
75
+ </tr>
76
+ <tr valign="top">
77
+ <th scope="row"><label>Subscription page URL</label></th>
78
+ <td>
79
+ <input name="options[url]" type="text" size="50" value="<?php echo htmlspecialchars($options['url'])?>"/>
80
+ <br />
81
+ This is the page where you placed the <strong>[newsletter]</strong> short tag.
82
+ Have you created the newsletter
83
+ subscription page as explained in the
84
+ <a href="http://www.satollo.net/plugins/newsletter">newsletter documentation</a>?
85
+ </td>
86
+ </tr>
87
+ </table>
88
+
89
+ <h3>Subscription form</h3>
90
+ <p>Remeber to create the subscription page and to configure the subscription page URL above.</p>
91
+
92
+ <table class="form-table">
93
+ <tr valign="top">
94
+ <th scope="row"><label>Introduction</label></th>
95
+ <td>
96
+ <textarea id="subscription_text" name="options[subscription_text]" wrap="off" rows="5" cols="75"><?php echo htmlspecialchars($options['subscription_text'])?></textarea>
97
+ <br />
98
+ This is the text showed to subscriber before the subscription form which is added automatically.
99
+ </td>
100
+ </tr>
101
+ <tr valign="top">
102
+ <th scope="row"><label>Success subscription text</label></th>
103
+ <td>
104
+ <textarea name="options[subscribed_text]" wrap="off" rows="5" cols="75"><?php echo htmlspecialchars($options['subscribed_text'])?></textarea>
105
+ <br />
106
+ This is the text showed to a user who has pressed "subscribe me" on the previous step
107
+ informing that an email to confirm subscription has just been sent. Remeber the user
108
+ to check the spam folder and to follow the email instructions.<br />
109
+ Tags: <strong>{name}</strong> the user name; <strong>{email}</strong> the user email.
110
+ </td>
111
+ </tr>
112
+ </table>
113
+
114
+ <p class="submit">
115
+ <input class="button" type="submit" name="save" value="Save"/>
116
+ </p>
117
+
118
+ <h3>Confirmation (double opt-in)</h3>
119
+ <p>Email sent to the user to confirm his subscription, the successful confirmation
120
+ text, the welcome email.</p>
121
+
122
+ <table class="form-table">
123
+ <tr valign="top">
124
+ <th scope="row"><label for="options[confirmation_subject]">Confirmation email subject</label></th>
125
+ <td>
126
+ <input name="options[confirmation_subject]" type="text" size="50" value="<?php echo htmlspecialchars($options['confirmation_subject'])?>"/>
127
+ <br />
128
+ Tags: <strong>{name}</strong> the user name.
129
+ </td>
130
+ </tr>
131
+ <tr valign="top">
132
+ <th scope="row"><label for="options[confirmation_message]">Confirmation email message</label></th>
133
+ <td>
134
+ <textarea name="options[confirmation_message]" wrap="off" rows="5" cols="75"><?php echo htmlspecialchars($options['confirmation_message'])?></textarea>
135
+ <br />
136
+ Tags: <strong>{name}</strong> the user name; <strong>{subscription_confirm_url}</strong>
137
+ confirmation URL to be clicked by the user to confirm his subscription.
138
+ </td>
139
+ </tr>
140
+
141
+ <tr valign="top">
142
+ <th scope="row"><label for="options[confirmed_text]">Successful confirmation page</label></th>
143
+ <td>
144
+ <textarea name="options[confirmed_text]" wrap="off" rows="5" cols="75"><?php echo htmlspecialchars($options['confirmed_text'])?></textarea>
145
+ <br />
146
+ Showed when the user follow the confirmation URL sent to him with previous email settings.
147
+ <br />
148
+ Tags: <strong>{name}</strong> the user name; <strong>{email}</strong> for the user email.
149
+ </td>
150
+ </tr>
151
+
152
+ <tr valign="top">
153
+ <th scope="row"><label>Welcome email subject</label></th>
154
+ <td>
155
+ <input name="options[confirmed_subject]" type="text" size="50" value="<?php echo htmlspecialchars($options['confirmed_subject'])?>"/>
156
+ <br />
157
+ Tags: <strong>{name}</strong> user name.
158
+ </td>
159
+ </tr>
160
+ <tr valign="top">
161
+ <th scope="row"><label>Welcome email message</label></th>
162
+ <td>
163
+ <textarea name="options[confirmed_message]" wrap="off" rows="5" cols="75"><?php echo htmlspecialchars($options['confirmed_message'])?></textarea>
164
+ <br />
165
+ Tags: <strong>{name}</strong> user name.
166
+ </td>
167
+ </tr>
168
+ </table>
169
+
170
+ <p class="submit">
171
+ <input class="button" type="submit" name="save" value="Save"/>
172
+ </p>
173
+
174
+ <h3>Unsubscription</h3>
175
+
176
+ <p>A user starts the unsubscription process clicking the unsubscription link in a newsletter. This lkink contains the email to unsubscribe and some
177
+ unique information to avoid hacking. The user are requird to confirm the unsubscription: this is the last step where YOU can communicate with you
178
+ almost missed user.</p>
179
+
180
+ <table class="form-table">
181
+ <tr valign="top">
182
+ <th scope="row"><label for="options[unsubscription_text]">Unsubscription text</label></th>
183
+ <td>
184
+ <textarea name="options[unsubscription_text]" wrap="off" rows="5" cols="75"><?php echo htmlspecialchars($options['unsubscription_text'])?></textarea>
185
+ <br />
186
+ This text is show to users who click on a "unsubscription link" in a newsletter email.
187
+ You have to insert a link in the text that user can follow to confirm the unsubscription
188
+ request (see tags).
189
+ <br />
190
+ Tags: <strong>{name}</strong> user name; <strong>{email}</strong> user email; <strong>{unsubscription_confirm_url}</strong> URL to confirm unsubscription.
191
+ </td>
192
+ </tr>
193
+
194
+ <!-- Text showed to the user on successful unsubscription -->
195
+ <tr valign="top">
196
+ <th scope="row"><label for="options[unsubscribed_text]">Good bye text</label></th>
197
+ <td>
198
+ <textarea name="options[unsubscribed_text]" wrap="off" rows="5" cols="75"><?php echo htmlspecialchars($options['unsubscribed_text'])?></textarea>
199
+ Latest message showed to the user to say "good bye".
200
+ <br />
201
+ Tags: none.
202
+ </td>
203
+ </tr>
204
+ </table>
205
+
206
+ <!--
207
+ <h2>Unsubscription for mass mail mode</h2>
208
+ <p>This section is not working!</p>
209
+
210
+ <table class="form-table">
211
+ <tr valign="top">
212
+ <th scope="row"><label>Unsubscription text</label></th>
213
+ <td>
214
+ <textarea name="options[unsubscription_mm_text]" wrap="off" rows="5" cols="75"><?php echo htmlspecialchars($options['unsubscription_mm_text'])?></textarea>
215
+ </td>
216
+ </tr>
217
+
218
+ <tr valign="top">
219
+ <th scope="row"><label>Unsubscription error</label></th>
220
+ <td>
221
+ <input name="options[unsubscription_mm_error]" type="text" size="50" value="<?php echo htmlspecialchars($options['unsubscription_mm_error'])?>"/>
222
+ <br />
223
+ Shown with the unsubscription message then the email to unsubscribe is not found.
224
+ </td>
225
+ </tr>
226
+ <tr valign="top">
227
+ <th scope="row"><label>"Email to unsubscribe" label</label></th>
228
+ <td>
229
+ <input name="options[unsubscription_mm_email_label]" type="text" size="50" value="<?php echo htmlspecialchars($options['unsubscription_mm_email_label'])?>"/>
230
+ <br />
231
+ Used when the newsletter is sent with "mass mail" mode.
232
+ </td>
233
+ </tr>
234
+ <tr valign="top">
235
+ <th scope="row"><label>"Confirm unsubscription" label</label></th>
236
+ <td>
237
+ <input name="options[unsubscription_mm_label]" type="text" size="50" value="<?php echo htmlspecialchars($options['unsubscription_mm_label'])?>"/>
238
+ <br />
239
+ The button text to confirm unsubscription or to send an unsubscription request for the specified
240
+ email address when "mass mail" mode is used for sending newsletters.
241
+ </td>
242
+ </tr>
243
+ <tr valign="top">
244
+ <th scope="row"><label>Unsubscription end text</label></th>
245
+ <td>
246
+ <textarea name="options[unsubscription_mm_end_text]" wrap="off" rows="5" cols="75"><?php echo htmlspecialchars($options['unsubscription_mm_end_text'])?></textarea>
247
+ <br />
248
+ This text is shown when a user type in an email to be removed and the confirmation email
249
+ has been sent.
250
+ </td>
251
+ </tr>
252
+
253
+ <tr valign="top">
254
+ <th scope="row"><label for="options[unsubscription_subject]">Unsubscription email subject</label></th>
255
+ <td>
256
+ <input name="options[unsubscription_subject]" type="text" size="50" value="<?php echo htmlspecialchars($options['unsubscription_subject'])?>"/>
257
+ </td>
258
+ </tr>
259
+ <tr valign="top">
260
+ <th scope="row"><label for="options[unsubscription_message]">Unsubscription email message</label></th>
261
+ <td>
262
+ <textarea name="options[unsubscription_message]" wrap="off" rows="5" cols="75"><?php echo htmlspecialchars($options['unsubscription_message'])?></textarea>
263
+ <br />
264
+ Email sent to confirm unsubscription when the request is made specifying an email
265
+ address to remove. Use {unsubscription_link} to place the link where the user has
266
+ to click on; use {unsubscription_url} toplace the plain unsubscription URL.
267
+ </td>
268
+ </tr>
269
+ <tr valign="top">
270
+ <th scope="row"><label for="options[unsubscription_link]">Unsubscription link text</label></th>
271
+ <td>
272
+ <input name="options[unsubscription_link]" type="text" size="50" value="<?php echo htmlspecialchars($options['unsubscription_link'])?>"/>
273
+ <br />
274
+ The text of the link for unsubscription to be placed in the unsubscription email.
275
+ </td>
276
+ </tr>
277
+ </table>
278
+ -->
279
+ <h2>Advanced</h2>
280
+
281
+ <table class="form-table">
282
+ <tr valign="top">
283
+ <th scope="row">&nbsp;</th>
284
+ <td>
285
+ <input type="checkbox" name="options[sendmail]" value="1" <?php echo $options['sendmail']!= null?'checked':''; ?> />
286
+ <label for="options[sendmail]">add -f parameter to send mail to correct the Return-Path</label>
287
+ </td>
288
+ </tr>
289
+ <tr valign="top">
290
+ <th scope="row">&nbsp;</th>
291
+ <td>
292
+ <input type="checkbox" name="options[logs]" value="1" <?php echo $options['logs']!= null?'checked':''; ?> />
293
+ <label for="options[logs]">write logs</label>
294
+ </td>
295
+ </tr>
296
+ <tr valign="top">
297
+ <th scope="row">&nbsp;</th>
298
+ <td>
299
+ <input type="checkbox" name="options[novisual]" value="1" <?php echo $options['novisual']!= null?'checked':''; ?> />
300
+ <label for="options[novisual]">do not use visual editors</label>
301
+ </td>
302
+ </tr>
303
+ </table>
304
+
305
+ <h2>Zanzara client</h2>
306
+
307
+ <table class="form-table">
308
+ <tr valign="top">
309
+ <th scope="row"><label>Export key</label></th>
310
+ <td>
311
+ <input name="options[key]" type="text" size="50" value="<?php echo htmlspecialchars($options['key'])?>"/>
312
+ <br />
313
+ Do not search for Zanzara, is a my private software
314
+ </td>
315
+ </tr>
316
+ <tr>
317
+ <th scope="row"><label>SMTP address</label></th>
318
+ <td>
319
+ <input name="options[smtp_host]" type="text" size="50" value="<?php echo htmlspecialchars($options['smtp_host'])?>"/>
320
+ </td>
321
+ </tr>
322
+ <tr>
323
+ <th scope="row"><label>SMTP user</label></th>
324
+ <td>
325
+ <input name="options[smtp_user]" type="text" size="50" value="<?php echo htmlspecialchars($options['smtp_user'])?>"/>
326
+ </td>
327
+ </tr>
328
+ <tr>
329
+ <th scope="row"><label>SMTP password</label></th>
330
+ <td>
331
+ <input name="options[smtp_password]" type="text" size="50" value="<?php echo htmlspecialchars($options['smtp_password'])?>"/>
332
+ </td>
333
+ </tr>
334
+ </table>
335
+
336
+ <p class="submit">
337
+ <input class="button" type="submit" name="save" value="Save"/>
338
+ <input class="button" type="submit" name="defaults" value="Revert to defaults"/>
339
+ </p>
340
+ </form>
341
+
342
+ </div>
plugin.php ADDED
@@ -0,0 +1,798 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: Newsletter
4
+ Plugin URI: http://www.satollo.net/plugins/newsletter
5
+ Description: Newsletter is a simple plugin (still in developement) to collect subscribers and send out newsletters
6
+ Version: 1.1.8
7
+ Author: Satollo
8
+ Author URI: http://www.satollo.net
9
+ Disclaimer: Use at your own risk. No warranty expressed or implied is provided.
10
+ */
11
+
12
+ /* Copyright 2008 Satollo (email: info@satollo.net)
13
+
14
+ This program is free software; you can redistribute it and/or modify
15
+ it under the terms of the GNU General Public License as published by
16
+ the Free Software Foundation; either version 2 of the License, or
17
+ (at your option) any later version.
18
+
19
+ This program is distributed in the hope that it will be useful,
20
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
+ GNU General Public License for more details.
23
+
24
+ You should have received a copy of the GNU General Public License
25
+ along with this program; if not, write to the Free Software
26
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27
+ */
28
+
29
+ define('NEWSLETTER', true);
30
+
31
+ require_once(dirname(__FILE__) . '/widget.php');
32
+
33
+ global $newsletter_labels;
34
+ $newsletter_step = 'subscription';
35
+ global $newsletter_subscriber;
36
+
37
+ function newsletter_init_labels()
38
+ {
39
+ global $newsletter_labels;
40
+
41
+ @include(dirname(__FILE__) . '/languages/en_US.php');
42
+ if (WPLANG != '') @include(dirname(__FILE__) . '/languages/' . WPLANG . '.php');
43
+ @include_once(ABSPATH . 'wp-content/newsletter/labels.php');
44
+ }
45
+
46
+ function newsletter_label($name)
47
+ {
48
+ global $newsletter_labels;
49
+
50
+ if ($newsletter_labels) return $newsletter_labels[$name];
51
+ newsletter_init_labels();
52
+ return $newsletter_labels[$name];
53
+ }
54
+
55
+ function newsletter_echo($name)
56
+ {
57
+ echo newsletter_label($name);
58
+ }
59
+
60
+ function newsletter_request($name, $default=null )
61
+ {
62
+ if ( !isset($_REQUEST[$name]) ) {
63
+ return $default;
64
+ }
65
+ return stripslashes_deep($_REQUEST[$name]);
66
+ }
67
+
68
+ function newsletter_embed_form()
69
+ {
70
+ $options = get_option('newsletter');
71
+ echo str_replace('{newsletter_url}', $options['url'], newsletter_label('embedded_form'));
72
+ }
73
+
74
+ if (!is_admin())
75
+ {
76
+ add_shortcode('newsletter', 'newsletter_call');
77
+ add_shortcode('newsletter_form', 'newsletter_form_call');
78
+ }
79
+
80
+ function newsletter_form_call($attrs, $content=null)
81
+ {
82
+ $options = get_option('newsletter');
83
+ return str_replace('{newsletter_url}', $options['url'], newsletter_label('embedded_form'));
84
+ }
85
+
86
+ function newsletter_call($attrs, $content=null)
87
+ {
88
+ global $newsletter_step, $newsletter_subscriber;
89
+
90
+ $options = get_option('newsletter');
91
+
92
+ $buffer = '';
93
+
94
+ // When a user is starting the subscription process
95
+ if ($newsletter_step == 'subscription')
96
+ {
97
+ $buffer .= $options['subscription_text'];
98
+ $buffer .= newsletter_label('subscription_form');
99
+ }
100
+
101
+ // When a user asked to subscribe and the connfirmation request has been sent
102
+ if ($newsletter_step == 'subscribed')
103
+ {
104
+ $text = newsletter_replace($options['subscribed_text'], $newsletter_subscriber);
105
+ $buffer .= $text;
106
+ }
107
+
108
+ if ($newsletter_step == 'confirmed')
109
+ {
110
+ $text = newsletter_replace($options['confirmed_text'], $newsletter_subscriber);
111
+ $buffer .= $text;
112
+ }
113
+
114
+ // Here we are when an unsubscription is requested. There are two kind of unsubscription: the
115
+ // ones with email and token, so the user has only to confire and the ones without
116
+ // data, so the user is requested to insert his email. In the latter case an email
117
+ // will be sent to the user with alink to confirm the email removal.
118
+ if ($newsletter_step == 'unsubscription' || $newsletter_step == 'unsubscription_error')
119
+ {
120
+ $newsletter_subscriber = newsletter_get_subscriber($_REQUEST['ne']);
121
+ $buffer = newsletter_replace($options['unsubscription_text'], $newsletter_subscriber);
122
+ $url = newsletter_add_qs($options['url'], 'na=uc&amp;ne=' . urlencode($_REQUEST['ne']) .
123
+ '&amp;nt=' . $_REQUEST['nt']);
124
+ $buffer = newsletter_replace_url($buffer, 'UNSUBSCRIPTION_CONFIRM_URL', $url);
125
+ }
126
+
127
+ // Last message shown to user to say good bye
128
+ if ($newsletter_step == 'unsubscribed')
129
+ {
130
+ $text = $options['unsubscribed_text'];
131
+ $text = newsletter_replace($text, $newsletter_subscriber);
132
+ $buffer .= $text;
133
+ }
134
+
135
+ // if ($newsletter_step == 'unsubscription_mm' || $newsletter_step == 'unsubscription_mm_error')
136
+ // {
137
+ // if ($newsletter_step == 'unsubscription_mm_error')
138
+ // {
139
+ // $buffer .= '<p>' . $options['unsubscription_mm_error'] . '</p>';
140
+ // }
141
+ // $buffer .= $options['unsubscription_mm_text'];
142
+ // $buffer .= '<form method="post" action="?">';
143
+ // $buffer .= '<input type="hidden" name="na" value="ue"/>';
144
+ // $buffer .= '<table cellspacing="3" cellpadding="3" border="0">';
145
+ // $buffer .= '<tr><td>' . $options['unsubscription_mm_email_label'] . '</td><td><input type="text" name="ne" size="20"/></td></tr>';
146
+ // $buffer .= '<tr><td colspan="2" style="text-align: center"><input type="submit" value="' . $options['unsubscription_mm_label'] . '"/></td></tr></table>';
147
+ // $buffer .= '</form>';
148
+ // }
149
+
150
+ // if ($newsletter_step == 'unsubscription_mm_end')
151
+ // {
152
+ // $text = $options['unsubscription_mm_end'];
153
+ // $text = str_replace('{name}', $newsletter_subscriber->name, $text);
154
+ // $buffer .= $text;
155
+ // }
156
+
157
+ return $buffer;
158
+ }
159
+
160
+ /**
161
+ * Sends out newsletters. If "from last" is true, the procedure read the last email
162
+ * to which newsletter was sent and restart from it.
163
+ * If max is sprecified, the function stops after that number of email.
164
+ *
165
+ * Return false IF emails have not been sent for each possible recipient. When return
166
+ * false, stores on the database the last address to which the newsletter was sent.
167
+ * Se the function can be called a second time to compete the task.
168
+ *
169
+ * If recipients are specified, from_last is not used but max is respected.
170
+ */
171
+ function newsletter_send_batch($subject, $message, $simulate=true)
172
+ {
173
+ global $wpdb;
174
+
175
+ $options = get_option('newsletter');
176
+
177
+ // Get infos on the last batch sent
178
+ $last = get_option('newsletter_last');
179
+ if (!is_array($last)) $last = array();
180
+
181
+ $query = "select * from " . $wpdb->prefix . "newsletter where status='C'";
182
+ if ($last['email']) $query .= " and email>'" . $wpdb->escape($last['email']) . "'";
183
+ $recipients = $wpdb->get_results($query . " order by email");
184
+
185
+ // This batch is empty...
186
+ if (!$recipients)
187
+ {
188
+ $last['email'] = '';
189
+ update_option('newsletter_last', $last);
190
+ return true;
191
+ }
192
+ else
193
+ {
194
+ // If the batch id new store the total recipients
195
+ if (!$last['email']) $last['total'] = count($recipients);
196
+ }
197
+
198
+ // Not all hosting provider allow this...
199
+ set_time_limit(0);
200
+
201
+ echo 'Queue: ' . count($recipients) . ' emails<br />';
202
+ $start_time = time();
203
+ $max_time = (int)(ini_get('max_execution_time') * 0.8);
204
+ echo 'Max time: ' . $max_time . ' seconds<br />';
205
+ echo 'Sending to: ';
206
+
207
+ // Count the total emails sent
208
+ if (!$last['sent']) $last['sent'] = 0;
209
+ $idx = 0;
210
+ foreach ($recipients as $r)
211
+ {
212
+ $m = $message;
213
+
214
+ $url = newsletter_add_qs($options['url'],
215
+ 'na=u&amp;ne=' . urlencode($r->email) . '&amp;nt=' . $r->token);
216
+
217
+ $m = newsletter_replace_url($m, 'UNSUBSCRIPTION_URL', $url);
218
+ $m = newsletter_replace($m, $r);
219
+
220
+ $s = $subject;
221
+ $s = newsletter_replace($s, $r);
222
+
223
+ //newsletter_log('Spedizione notifica a: ' . $r->email);
224
+ if (!$simulate)
225
+ {
226
+ $x = newsletter_mail($r->email, $s, $m, true);
227
+ }
228
+ else
229
+ {
230
+ sleep(3);
231
+ }
232
+
233
+ echo $r->email . ' ';
234
+ flush();
235
+ $idx++;
236
+ $last['sent']++;
237
+
238
+ // Timeout check, max time is zero if set_time_limit works
239
+ if ($max_time != 0 && (time()-$start_time) > $max_time)
240
+ {
241
+ $last['email'] = $r->email;
242
+ update_option('newsletter_last', $last);
243
+ return false;
244
+ }
245
+ }
246
+ $last['email'] = '';
247
+ update_option('newsletter_last', $last);
248
+ return true;
249
+ }
250
+
251
+ /**
252
+ * Send a newsletter to recipients (usually test subscribers). There is no
253
+ * timeout management.
254
+ */
255
+ function newsletter_send($subject, $message, $recipients = null)
256
+ {
257
+ $options = get_option('newsletter');
258
+
259
+ if (!$recipients) return true;
260
+
261
+ foreach ($recipients as $r)
262
+ {
263
+ $m = $message;
264
+
265
+ $url = newsletter_add_qs($options['url'],
266
+ 'na=u&amp;ne=' . urlencode($r->email) . '&amp;nt=' . $r->token);
267
+
268
+ $m = newsletter_replace_url($m, 'UNSUBSCRIPTION_URL', $url);
269
+ $m = newsletter_replace($m, $r);
270
+
271
+ $s = $subject;
272
+ $s = newsletter_replace($s, $r);
273
+
274
+ $x = newsletter_mail($r->email, $s, $m, true);
275
+
276
+ echo $r->email . ' ';
277
+ flush();
278
+ }
279
+ }
280
+
281
+ function newsletter_add_qs($url, $qs, $amp=true)
282
+ {
283
+ if (strpos($url, '?') !== false)
284
+ {
285
+ if ($amp) return $url . '&amp;' . $qs;
286
+ else return $url . '&' . $qs;
287
+ }
288
+ else return $url . '?' . $qs;
289
+ }
290
+
291
+ /**
292
+ * Add a request of newsletter subscription into the database with status "S" (waiting
293
+ * confirmation) and sends out the confirmation request email to the subscriber.
294
+ * The email will contain an URL (or link) the user has to follow to complete the
295
+ * subscription (double opt-in).
296
+ */
297
+ function newsletter_subscribe($email, $name)
298
+ {
299
+ global $wpdb, $newsletter_subscriber;
300
+
301
+ $options = get_option('newsletter');
302
+
303
+ $email = newsletter_normalize_email($email);
304
+
305
+ // Check if this email is already in our database: if so, just resend the
306
+ // confirmation email.
307
+ $newsletter_subscriber = newsletter_get_subscriber($email);
308
+ if (!$newsletter_subscriber)
309
+ {
310
+ $token = md5(rand());
311
+ $wpdb->query("insert into " . $wpdb->prefix . "newsletter (email, name, token) values ('" .
312
+ $wpdb->escape($email) . "','" . $wpdb->escape($name) . "','" . $token . "')");
313
+ $newsletter_subscriber = newsletter_get_subscriber($email);
314
+ }
315
+
316
+ newsletter_send_confirmation($newsletter_subscriber);
317
+
318
+ $message = 'New subscription: ' . $name . ' <' . $email . '>';
319
+ $subject = 'A new subscription';
320
+ newsletter_notify_admin($subject, $message);
321
+ }
322
+
323
+ /**
324
+ * Resends the confirmation message when asked by user manager panel.
325
+ */
326
+ function newsletter_send_confirmation($subscriber)
327
+ {
328
+ $options = get_option('newsletter');
329
+
330
+ newsletter_log('newsletter_send_confirmation() - Sending a confirmation request message');
331
+
332
+ newsletter_log('newsletter_send_confirmation() - URL: ' . $url);
333
+
334
+ $message = $options['confirmation_message'];
335
+
336
+ // The full URL to the confirmation page
337
+ $url = newsletter_add_qs($options['url'], 'na=c&amp;ne=' . urlencode($subscriber->email) .
338
+ '&amp;nt=' . $subscriber->token);
339
+ $message = newsletter_replace_url($message, 'SUBSCRIPTION_CONFIRM_URL', $url);
340
+
341
+ // URL to the unsubscription page (for test purpose)
342
+ $url = newsletter_add_qs($options['url'], 'na=u&amp;ne=' . urlencode($subscriber->email) .
343
+ '&amp;nt=' . $subscriber->token);
344
+ $message = newsletter_replace_url($message, 'UNSUBSCRIPTION_URL', $url);
345
+
346
+ $message = newsletter_replace($message, $subscriber);
347
+
348
+ $subject = newsletter_replace($options['confirmation_subject'], $subscriber);
349
+
350
+ newsletter_mail($subscriber->email, $subject, $message);
351
+ }
352
+
353
+ /**
354
+ * Return a subscriber by his email. The email will be sanitized and normalized
355
+ * before issuing the query to the database.
356
+ */
357
+ function newsletter_get_subscriber($email)
358
+ {
359
+ global $wpdb;
360
+
361
+ $recipients = $wpdb->get_results("select * from " . $wpdb->prefix .
362
+ "newsletter where email='" . $wpdb->escape(newsletter_normalize_email($email)) . "'");
363
+ if (!$recipients) return null;
364
+ return $recipients[0];
365
+ }
366
+
367
+ function newsletter_get_all()
368
+ {
369
+ global $wpdb;
370
+
371
+ $recipients = $wpdb->get_results("select * from " . $wpdb->prefix . "newsletter order by email");
372
+ return $recipients;
373
+ }
374
+
375
+ function newsletter_search($text)
376
+ {
377
+ global $wpdb;
378
+ if ($text == '')
379
+ {
380
+ $recipients = $wpdb->get_results("select * from " . $wpdb->prefix . "newsletter order by email");
381
+ }
382
+ else
383
+ {
384
+ $recipients = $wpdb->get_results("select * from " . $wpdb->prefix . "newsletter where email like '%" .
385
+ $wpdb->escape($text) . "%' or name like '%" . $wpdb->escape($text) . "%' order by email");
386
+ }
387
+ if (!$recipients) return null;
388
+ return $recipients;
389
+ }
390
+
391
+
392
+ /**
393
+ * Normalize an email address,making it lowercase and trimming spaces.
394
+ */
395
+ function newsletter_normalize_email($email)
396
+ {
397
+ return strtolower(trim($email));
398
+ }
399
+
400
+ add_action('init', 'newsletter_init');
401
+ /**
402
+ * Intercept the request parameters which drive the subscription and unsubscription
403
+ * process.
404
+ */
405
+ function newsletter_init()
406
+ {
407
+ global $newsletter_step, $wpdb, $newsletter_subscriber;
408
+ global $hyper_cache_stop;
409
+
410
+ // "na" always is the action to be performed - stands for "newsletter action"
411
+ $action = $_REQUEST['na'];
412
+ if (!$action) return;
413
+
414
+ $options = get_option('newsletter');
415
+
416
+ $hyper_cache_stop = true;
417
+
418
+ if ($action == 'subscribe' || $action == 's')
419
+ {
420
+ if (!newsletter_is_email($_REQUEST['ne'])) {
421
+ die(newsletter_label('error_email'));
422
+ }
423
+ if (trim($_REQUEST['nn']) == '') {
424
+ die(newsletter_label('error_name'));
425
+ }
426
+ newsletter_subscribe($_REQUEST['ne'], $_REQUEST['nn']);
427
+ $newsletter_step = 'subscribed';
428
+ }
429
+
430
+ // A request to confirm a subscription
431
+ if ($action == 'c')
432
+ {
433
+ $email = $_REQUEST['ne'];
434
+ newsletter_confirm($email, $_REQUEST['nt']);
435
+ header('Location: ' . newsletter_add_qs($options['url'], 'na=cs&ne=' . urlencode($email), false));
436
+ die();
437
+
438
+ }
439
+
440
+ // Show the confirmed message after a redirection (to avoid mutiple email sending).
441
+ // Redirect is sent by action "c".
442
+ if ($action == 'cs')
443
+ {
444
+ $newsletter_subscriber = newsletter_get_subscriber($_REQUEST['ne']);
445
+ $newsletter_step = 'confirmed';
446
+ }
447
+
448
+ // Unsubscription process has 2 options: if email and token are specified the user
449
+ // will only be asked to confirm. If there is no infos of who remove (when
450
+ // mass mail mode is used) the user will be asked to type the emailto be removed.
451
+ if ($action == 'u')
452
+ {
453
+ $newsletter_step = 'unsubscription';
454
+ }
455
+
456
+ // Export for Zanzara
457
+ if ($action == 'z')
458
+ {
459
+ if (!$_GET['nk'] || $_GET['nk'] != $options['key']) return;
460
+
461
+ $options_email = get_option('newsletter_email');
462
+ header('Content-Type: text/xml;charset=UTF-8');
463
+
464
+ echo '<' . '?xml version="1.0" encoding="UTF-8"?' . '>' . "\n";
465
+ echo '<java version="1.6.0_12" class="java.beans.XMLDecoder">' . "\n";
466
+ echo '<object class="zanzara.Newsletter">' . "\n";
467
+
468
+ echo '<void property="message">' . "\n";
469
+ echo '<string><![CDATA['. $options_email['message'] . ']]></string>' . "\n";
470
+ echo '</void>' . "\n";
471
+ echo '<void property="newsletterUrl">' . "\n";
472
+ echo '<string><![CDATA['. $options['url'] . ']]></string>' . "\n";
473
+ echo '</void>' . "\n";
474
+ echo '<void property="fromEmail">' . "\n";
475
+ echo '<string><![CDATA['. $options['from_email'] . ']]></string>' . "\n";
476
+ echo '</void>' . "\n";
477
+ echo '<void property="fromName">' . "\n";
478
+ echo '<string><![CDATA['. $options['from_name'] . ']]></string>' . "\n";
479
+ echo '</void>' . "\n";
480
+ echo '<void property="homeUrl">' . "\n";
481
+ echo '<string><![CDATA['. get_option('home') . ']]></string>' . "\n";
482
+ echo '</void>' . "\n";
483
+ echo '<void property="blogTitle">' . "\n";
484
+ echo '<string><![CDATA['. get_option('blogname') . ']]></string>' . "\n";
485
+ echo '</void>' . "\n";
486
+
487
+ echo '<void property="subject">' . "\n";
488
+ echo '<string><![CDATA[' . $options_email['subject'] . ']]></string>' . "\n";
489
+ echo '</void>' . "\n";
490
+
491
+ echo '<void property="smtpHost">' . "\n";
492
+ echo '<string><![CDATA[' . $options['smtp_host'] . ']]></string>' . "\n";
493
+ echo '</void>' . "\n";
494
+ echo '<void property="smtpUser">' . "\n";
495
+ echo '<string><![CDATA[' . $options['smtp_user'] . ']]></string>' . "\n";
496
+ echo '</void>' . "\n";
497
+ echo '<void property="smtpPassword">' . "\n";
498
+ echo '<string><![CDATA[' . $options['smtp_password'] . ']]></string>' . "\n";
499
+ echo '</void>' . "\n";
500
+
501
+ echo '<void property="recipients">' . "\n";
502
+ echo '<string><![CDATA[';
503
+
504
+ $query = "select * from " . $wpdb->prefix . "newsletter where status='C'";
505
+ $recipients = $wpdb->get_results($query . " order by email");
506
+ for ($i=0; $i<count($recipients); $i++)
507
+ {
508
+ echo $recipients[$i]->email . ';' . $recipients[$i]->name .
509
+ ';' . $recipients[$i]->token . "\n";
510
+ }
511
+ echo ']]></string>' . "\n";
512
+ echo '</void>' . "\n";
513
+
514
+ echo '<void property="testRecipients">' . "\n";
515
+ echo '<string><![CDATA[';
516
+ for ($i=1; $i<=10; $i++)
517
+ {
518
+ if (!$options_email['test_email_' . $i]) continue;
519
+ echo $options_email['test_email_' . $i] . ';' . $options_email['test_name_' . $i] .
520
+ ';' . 'FAKETOKEN' . "\n";
521
+ }
522
+ echo ']]></string>' . "\n";
523
+ echo '</void>' . "\n";
524
+
525
+ echo '</object>' . "\n";
526
+ echo '</java>' . "\n";
527
+ die();
528
+ }
529
+
530
+ // User confirmed he want to unsubscribe clicking the link on unsubscription
531
+ // page
532
+ if ($action == 'uc')
533
+ {
534
+ newsletter_unsubscribe($_REQUEST['ne'], $_REQUEST['nt']);
535
+ $newsletter_step = 'unsubscribed';
536
+ }
537
+
538
+ // Sends the unsubscription confirmation email
539
+ // if ($action == 'ue')
540
+ // {
541
+ // $email = newsletter_normalize_email($_REQUEST['ne']);
542
+ // $recipients = $wpdb->get_results("select * from " . $wpdb->prefix . "newsletter where email='" . $wpdb->escape($email) . "'");
543
+ // if (!$recipients)
544
+ // {
545
+ // $newsletter_step = 'unsubscription_mm_error';
546
+ // return;
547
+ // }
548
+ //
549
+ // $name = $recipients[0]->name;
550
+ // $token = $recipients[0]->token;
551
+ // $url = newsletter_add_qs($options['url'], 'na=uc&amp;ne=' . urlencode($email) . '&amp;nt=' . $token);
552
+ // $message = $options['unsubscription_mm_message'];
553
+ // $message = str_replace('{unsubscription_url}', $url, $message);
554
+ // $message = str_replace('{unsubscription_link}',
555
+ // '<a href="' . $url .
556
+ // '">' . $options['unsubscription_mm_link'] . '</a>', $message);
557
+ //
558
+ // $message = str_replace('{name}', $name, $message);
559
+ //
560
+ // $subject = $options['unsubscription_mm_subject'];
561
+ // $subject = str_replace('{name}', $name, $subject);
562
+ // newsletter_mail($email, $subject, $message);
563
+ //
564
+ // $newsletter_step = 'unsubscription_mm_end';
565
+ // }
566
+
567
+ }
568
+
569
+ /**
570
+ * Deletes a subscription (no way back). Fills the global $newsletter_subscriber
571
+ * with subscriber data.
572
+ *
573
+ * @param <type> $email
574
+ * @param <type> $token
575
+ */
576
+ function newsletter_unsubscribe($email, $token)
577
+ {
578
+ global $newsletter_subscriber, $wpdb;
579
+
580
+ // Save the subscriber for good bye page
581
+ $newsletter_subscriber = newsletter_get_subscriber($email);
582
+
583
+ $wpdb->query("delete from " . $wpdb->prefix . "newsletter where email='" . $wpdb->escape($email) . "'" .
584
+ " and token='" . $wpdb->escape($token) . "'");
585
+
586
+ $message = 'Unsubscription: ' . $name . ' <' . $email . '>';
587
+ $subject = 'Unsubscription';
588
+ newsletter_notify_admin($subject, $newsletter);
589
+ }
590
+
591
+ function newsletter_delete($email)
592
+ {
593
+ global $wpdb;
594
+
595
+ $wpdb->query("delete from " . $wpdb->prefix . "newsletter where email='" . $wpdb->escape($email) . "'");
596
+ }
597
+
598
+ function newsletter_delete_all($status=null)
599
+ {
600
+ global $wpdb;
601
+
602
+ if ($status == null)
603
+ {
604
+ $wpdb->query("delete from " . $wpdb->prefix . "newsletter");
605
+ }
606
+ else
607
+ {
608
+ $wpdb->query("delete from " . $wpdb->prefix . "newsletter where status='" . $wpdb->escape($status) . "'");
609
+ }
610
+ }
611
+
612
+ /**
613
+ * Confirms a subscription identified by email and token, changing it's status on
614
+ * database. Fill the global $newsletter_subscriber with user data.
615
+ */
616
+ function newsletter_confirm($email, $token)
617
+ {
618
+ global $wpdb, $newsletter_subscriber;
619
+
620
+ $newsletter_subscriber = newsletter_get_subscriber($email);
621
+
622
+ $options = get_option('newsletter');
623
+
624
+ $wpdb->query("update " . $wpdb->prefix . "newsletter set status='C' where email='" . $wpdb->escape($email) . "'" .
625
+ " and token='" . $wpdb->escape($token) . "'");
626
+
627
+ $newsletter_subscriber = newsletter_get_subscriber($email);
628
+
629
+ $message = newsletter_replace($options['confirmed_message'], $newsletter_subscriber);
630
+
631
+ // URL to the unsubscription page (for test purpose)
632
+ $url = newsletter_add_qs($options['url'], 'na=u&amp;ne=' . urlencode($newsletter_subscriber->email) .
633
+ '&amp;nt=' . $newsletter_subscriber->token);
634
+ $message = newsletter_replace_url($message, 'UNSUBSCRIPTION_URL', $url);
635
+
636
+
637
+ $subject = newsletter_replace($options['confirmed_subject'], $newsletter_subscriber);
638
+
639
+ newsletter_mail($email, $subject, $message);
640
+ }
641
+
642
+ function newsletter_set_status($email, $status)
643
+ {
644
+ global $wpdb;
645
+
646
+ $wpdb->query("update " . $wpdb->prefix . "newsletter set status='" . $status . "' where email='" . $wpdb->escape($email) . "' limit 1");
647
+ }
648
+
649
+ function newsletter_notify_admin(&$subject, &$message)
650
+ {
651
+ $to = get_option('admin_email');
652
+ $headers = "MIME-Version: 1.0\n";
653
+ $headers .= "Content-type: text/plain; charset=UTF-8\n";
654
+ mail($to, $subject, $message, $headers);
655
+ }
656
+
657
+ /**
658
+ * Sends out an email (html or text).
659
+ */
660
+ function newsletter_mail($to, &$subject, &$message, $html=true)
661
+ {
662
+ global $wpdb;
663
+
664
+ $options = get_option('newsletter');
665
+
666
+ $headers = "MIME-Version: 1.0\n";
667
+ if ($html)
668
+ $headers .= "Content-type: text/html; charset=UTF-8\n";
669
+ else
670
+ $headers .= "Content-type: text/plain; charset=UTF-8\n";
671
+
672
+ $headers .= 'From: "' . $options['from_name'] . '" <' . $options['from_email'] . ">\n";
673
+
674
+ //$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
675
+
676
+ // if ($options['sendmail'])
677
+ // {
678
+ // return mail($to, $subject, $message, $headers, "-f" . $from_email);
679
+ // }
680
+ // else
681
+ // {
682
+ // return mail($to, $subject, $message, $headers);
683
+ // }
684
+ wp_mail($to, $subject, $message, $headers);
685
+ }
686
+
687
+
688
+ add_action('activate_newsletter/plugin.php', 'newsletter_activate');
689
+ function newsletter_activate()
690
+ {
691
+ global $wpdb;
692
+
693
+ // SQL to create the table
694
+ $sql = 'create table if not exists ' . $wpdb->prefix . 'newsletter (
695
+ `name` varchar (100) not null default \'\',
696
+ `email` varchar (100) not null default \'\',
697
+ `token` varchar (50) not null default \'\',
698
+ `status` varchar (1) not null default \'S\',
699
+ primary key (`email`),
700
+ key `email_token` (`email`,`token`)
701
+ )';
702
+
703
+ $wpdb->query($sql);
704
+
705
+ $options = get_option('newsletter');
706
+
707
+ // Load the default options
708
+ @include_once(dirname(__FILE__) . '/languages/en_US_options.php');
709
+ if (WPLANG != '') @include_once(dirname(__FILE__) . '/languages/' . WPLANG . '_options.php');
710
+ //@include_once(ABSPATH . 'wp-content/newsletter/languages/custom_options.php');
711
+
712
+ if (is_array($options)) $options = array_merge($newsletter_default_options, $options);
713
+ else $options = $newsletter_default_options;
714
+
715
+ newsletter_log('Plugin activated', true);
716
+
717
+ update_option('newsletter', $options);
718
+ }
719
+
720
+ if (is_admin())
721
+ {
722
+ add_action('admin_menu', 'newsletter_admin_menu');
723
+ function newsletter_admin_menu()
724
+ {
725
+ if (function_exists('add_menu_page'))
726
+ {
727
+ add_menu_page('Newsletter', 'Newsletter', 10, 'newsletter/options.php', '', '');
728
+ }
729
+
730
+ if (function_exists('add_submenu_page'))
731
+ {
732
+ add_submenu_page('newsletter/options.php', 'Configuration', 'Configuration', 10, 'newsletter/options.php');
733
+ add_submenu_page('newsletter/options.php', 'Composer', 'Composer', 10, 'newsletter/newsletter.php');
734
+ add_submenu_page('newsletter/options.php', 'Import', 'Import', 10, 'newsletter/import.php');
735
+ add_submenu_page('newsletter/options.php', 'Manage', 'Manage', 10, 'newsletter/manage.php');
736
+ }
737
+ }
738
+ }
739
+
740
+ /**
741
+ * Fills a text with sunscriber data and blog data replacing some place holders.
742
+ */
743
+ function newsletter_replace($text, $subscriber)
744
+ {
745
+ $text = str_replace('{home_url}', get_option('home'), $text);
746
+ $text = str_replace('{blog_title}', get_option('blogname'), $text);
747
+ $text = str_replace('{email}', $subscriber->email, $text);
748
+ $text = str_replace('{name}', $subscriber->name, $text);
749
+ $text = str_replace('{token}', $subscriber->token, $text);
750
+ return $text;
751
+ }
752
+
753
+ /**
754
+ * Replaces the URL placeholders. There are two kind of URL placeholders: the ones
755
+ * lowercase and betweeb curly brakets and the ones all uppercase. The tag to be passed
756
+ * is the one all uppercase but the lowercase one will also be replaced.
757
+ */
758
+ function newsletter_replace_url($text, $tag, $url)
759
+ {
760
+ $home = get_option('home') . '/';
761
+ $tag_lower = strtolower($tag);
762
+ $text = str_replace($home . '{' . $tag_lower . '}', $url, $text);
763
+ $text = str_replace($home . '%7B' . $tag_lower . '%7D', $url, $text);
764
+ $text = str_replace('{' . $tag_lower . '}', $url, $text);
765
+
766
+ // for compatibility
767
+ $text = str_replace($home . $tag, $url, $text);
768
+
769
+ return $text;
770
+ }
771
+
772
+ function newsletter_is_email($email, $empty_ok=false)
773
+ {
774
+ $email = trim($email);
775
+ if ($empty_ok && $email == '') return true;
776
+
777
+ if (eregi("^([a-z0-9_\.-])+@(([a-z0-9_-])+\\.)+[a-z]{2,6}$", trim($email)))
778
+ return true;
779
+ else
780
+ return false;
781
+ }
782
+
783
+ /**
784
+ * Write a line of log in the log file if the logs are enabled or force is
785
+ * set to true.
786
+ */
787
+ function newsletter_log($text, $force=false)
788
+ {
789
+ $options = get_option('newsletter');
790
+
791
+ if (!$force && !$options['logs']) return;
792
+
793
+ $file = fopen(dirname(__FILE__) . '/newsletter.log', 'a');
794
+ if (!$file) return;
795
+ fwrite($file, date('Y-m-d') . ' ' . $text . "\n");
796
+ fclose($file);
797
+ }
798
+ ?>
readme.txt ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ === Newsletter ===
3
+ Tags: newsletter,email,subscription,mass mail
4
+ Requires at least: 2.7
5
+ Tested up to: 2.8.4
6
+ Stable tag: 1.1.8
7
+ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=2545483
8
+ Contributors: satollo
9
+
10
+ Newsletter is a simple plug-in (still in development) to collect subscribers and send out
11
+ newsletters.
12
+
13
+ == Description ==
14
+
15
+ More detailed information on is found on the newsletter's official page (http://www.satollo.net/plugins/newsletter).
16
+
17
+ This plug-in lets you collect subscribers on your blog with a double opt-in
18
+ subscription process. Double opt-in means the user has to confirm a subscription
19
+ following simple standard instructions sent to him via email.
20
+
21
+ Each step of subscribe and unsubscribe process is fully configurable (almost fully
22
+ configurable).
23
+
24
+ The plug-in has a simple visual composer to create your newsletter
25
+ and send it to subscribers.
26
+
27
+ Emails are sent one-per-user, so subject and body can be customized with subscriber name.
28
+ This make the plug-in NOT suitable for big subscribers list.
29
+
30
+ The subscriber management is still really stupid, but it is enough to search emails and delete them.
31
+
32
+ The plug-in is still under development and the features mentioned below will be rolled out a little a time:
33
+
34
+ * themes for emails
35
+ * auto-composer to create an email with blog contents
36
+ * subscribers importer
37
+ * subscribers exporter
38
+ * mass mail support
39
+ * PHP execution timeout bypass
40
+
41
+ **Check out my other plug-ins**:
42
+
43
+ * [Hyper Cache](http://www.satollo.net/plugins/hyper-cache)
44
+ * [Post Layout](http://www.satollo.net/plugins/post-layout)
45
+ * [Post Layout Pro](http://www.satollo.net/plugins/post-layout-pro)
46
+ * [Other Posts](http://www.satollo.net/plugins/other-posts)
47
+ * [Feed Layout](http://www.satollo.com/english/wordpress/feed-layout "Feed Layout WordPress plug-in: the easy way to enrich your feed contents")
48
+ * [Dynatags](http://www.satollo.net/plugins/dynatags "Dynatags WordPress plug-in: Create your own custom short tag in seconds")
49
+
50
+ == Installation ==
51
+
52
+ 1. Put the plug-in folder into [wordpress_dir]/wp-content/plugins/
53
+ 2. Go into the WordPress admin interface and activate the plugin
54
+ 3. Optional: go to the options page and configure the plugin
55
+
56
+ == Frequently Asked Questions ==
57
+
58
+ **How can I submit a bug?**
59
+
60
+ Write me at info@satollo.com, please. It is the most expedient way to get a bug fixed. You can write on the WordPress forum also, but I read it rarely.
61
+
62
+ **Do you give support?**
63
+
64
+ Sorry, not at this time. Not even if you try to tempt me with money. I do not have enough spare time to provide answers without a lengthy delay.
65
+
66
+ == Screen shots ==
67
+
68
+ No screen shots are available at this time.
themes/default.html ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p><span style="font-size: 30px; font-family: georgia">{blog_title}</span></p>
2
+
3
+ <h3><a href="{link_1}">{title_1}</a></h3>
4
+ <p>{excerpt_1}</p>
5
+ <h3><a href="{link_2}">{title_2}</a></h3>
6
+ <p>{excerpt_2}</p>
7
+ <h3><a href="{link_3}">{title_3}</a></h3>
8
+ <p>{excerpt_3}</p>
9
+ <h3><a href="{link_4}">{title_4}</a></h3>
10
+ <p>{excerpt_4}</p>
11
+ <h3><a href="{link_5}">{title_5}</a></h3>
12
+ <p>{excerpt_5}</p>
13
+ <h3><a href="{link_6}">{title_6}</a></h3>
14
+ <p>{excerpt_6}</p>
15
+ <h3><a href="{link_7}">{title_7}</a></h3>
16
+ <p>{excerpt_7}</p>
17
+ <h3><a href="{link_8}">{title_8}</a></h3>
18
+ <p>{excerpt_8}</p>
19
+ <h3><a href="{link_9}">{title_9}</a></h3>
20
+ <p>{excerpt_9}</p>
21
+ <h3><a href="{link_10}">{title_10}</a></h3>
22
+ <p>{excerpt_10}</p>
23
+
24
+ <p>
25
+ Yours, {blog_title}.
26
+ </p>
27
+
28
+ <p><small>To unsubscribe <a href="{unsubscription_url}">follow this link</a>.<br />
29
+ If you cannot follow the previous link, copy and past the address below in your browser:<br />
30
+ <br />
31
+ {unsubscription_url}
32
+ </small></p>
33
+ </div>
themes/picture.html ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div style="background-color: #444444;">
2
+
3
+ <table width="550" cellpadding="10" align="center" style="margin-top: 30px; background-color: #ffffff; border: 5px solid #3B3B3B; ">
4
+ <tr>
5
+ <td>
6
+ <span style="font-size: 30px; font-family: georgia">{blog_title}</span>
7
+ </td>
8
+ </tr>
9
+ <tr>
10
+ <td>
11
+ <img src="{image_1}" width="50" align="right" hspace="10"/><a style="color: #5482C8; font-weight: bold;" href="{link_1}">{title_1}</a><br />
12
+ {excerpt_1}
13
+ </td>
14
+ </tr>
15
+ <tr>
16
+ <td>
17
+ <img src="{image_2}" width="50" align="right" hspace="10"/><a style="color: #5482C8; font-weight: bold;" href="{link_2}">{title_2}</a><br />
18
+ {excerpt_2}
19
+ </td>
20
+ </tr>
21
+ <tr>
22
+ <td>
23
+ <img src="{image_3}" width="50" align="right" hspace="10"/><a style="color: #5482C8; font-weight: bold;" href="{link_3}">{title_3}</a><br />
24
+ {excerpt_3}
25
+ </td>
26
+ </tr>
27
+ <tr>
28
+ <td>
29
+ <img src="{image_4}" width="50" align="right" hspace="10"/><a style="color: #5482C8; font-weight: bold;" href="{link_4}">{title_4}</a><br />
30
+ {excerpt_4}
31
+ </td>
32
+ </tr>
33
+ <tr>
34
+ <td>
35
+ <img src="{image_5}" width="50" align="right" hspace="10"/><a style="color: #5482C8; font-weight: bold;" href="{link_5}">{title_5}</a><br />
36
+ {excerpt_5}
37
+ </td>
38
+ </tr>
39
+ <tr>
40
+ <td>
41
+ Yours, {blog_title}.
42
+ </td>
43
+ </tr>
44
+ <tr>
45
+ <td>
46
+ <p>To unsubscribe <a href="{unsubscription_url}">follow this link</a>. If you cannot follow the previous link, copy and past the address below in your browser:</p><p>{unsubscription_url}</p>
47
+ </td>
48
+ </tr>
49
+ </table>
50
+
51
+ </div>
tiny_mce/langs/en.js ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCE.addI18n({en:{
2
+ common:{
3
+ edit_confirm:"Do you want to use the WYSIWYG mode for this textarea?",
4
+ apply:"Apply",
5
+ insert:"Insert",
6
+ update:"Update",
7
+ cancel:"Cancel",
8
+ close:"Close",
9
+ browse:"Browse",
10
+ class_name:"Class",
11
+ not_set:"-- Not set --",
12
+ clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?",
13
+ clipboard_no_support:"Currently not supported by your browser, use keyboard shortcuts instead.",
14
+ popup_blocked:"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.",
15
+ invalid_data:"Error: Invalid values entered, these are marked in red.",
16
+ more_colors:"More colors"
17
+ },
18
+ contextmenu:{
19
+ align:"Alignment",
20
+ left:"Left",
21
+ center:"Center",
22
+ right:"Right",
23
+ full:"Full"
24
+ },
25
+ insertdatetime:{
26
+ date_fmt:"%Y-%m-%d",
27
+ time_fmt:"%H:%M:%S",
28
+ insertdate_desc:"Insert date",
29
+ inserttime_desc:"Insert time",
30
+ months_long:"January,February,March,April,May,June,July,August,September,October,November,December",
31
+ months_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",
32
+ day_long:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday",
33
+ day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"
34
+ },
35
+ print:{
36
+ print_desc:"Print"
37
+ },
38
+ preview:{
39
+ preview_desc:"Preview"
40
+ },
41
+ directionality:{
42
+ ltr_desc:"Direction left to right",
43
+ rtl_desc:"Direction right to left"
44
+ },
45
+ layer:{
46
+ insertlayer_desc:"Insert new layer",
47
+ forward_desc:"Move forward",
48
+ backward_desc:"Move backward",
49
+ absolute_desc:"Toggle absolute positioning",
50
+ content:"New layer..."
51
+ },
52
+ save:{
53
+ save_desc:"Save",
54
+ cancel_desc:"Cancel all changes"
55
+ },
56
+ nonbreaking:{
57
+ nonbreaking_desc:"Insert non-breaking space character"
58
+ },
59
+ iespell:{
60
+ iespell_desc:"Run spell checking",
61
+ download:"ieSpell not detected. Do you want to install it now?"
62
+ },
63
+ advhr:{
64
+ advhr_desc:"Horizontal rule"
65
+ },
66
+ emotions:{
67
+ emotions_desc:"Emotions"
68
+ },
69
+ searchreplace:{
70
+ search_desc:"Find",
71
+ replace_desc:"Find/Replace"
72
+ },
73
+ advimage:{
74
+ image_desc:"Insert/edit image"
75
+ },
76
+ advlink:{
77
+ link_desc:"Insert/edit link"
78
+ },
79
+ xhtmlxtras:{
80
+ cite_desc:"Citation",
81
+ abbr_desc:"Abbreviation",
82
+ acronym_desc:"Acronym",
83
+ del_desc:"Deletion",
84
+ ins_desc:"Insertion",
85
+ attribs_desc:"Insert/Edit Attributes"
86
+ },
87
+ style:{
88
+ desc:"Edit CSS Style"
89
+ },
90
+ paste:{
91
+ paste_text_desc:"Paste as Plain Text",
92
+ paste_word_desc:"Paste from Word",
93
+ selectall_desc:"Select All"
94
+ },
95
+ paste_dlg:{
96
+ text_title:"Use CTRL+V on your keyboard to paste the text into the window.",
97
+ text_linebreaks:"Keep linebreaks",
98
+ word_title:"Use CTRL+V on your keyboard to paste the text into the window."
99
+ },
100
+ table:{
101
+ desc:"Inserts a new table",
102
+ row_before_desc:"Insert row before",
103
+ row_after_desc:"Insert row after",
104
+ delete_row_desc:"Delete row",
105
+ col_before_desc:"Insert column before",
106
+ col_after_desc:"Insert column after",
107
+ delete_col_desc:"Remove column",
108
+ split_cells_desc:"Split merged table cells",
109
+ merge_cells_desc:"Merge table cells",
110
+ row_desc:"Table row properties",
111
+ cell_desc:"Table cell properties",
112
+ props_desc:"Table properties",
113
+ paste_row_before_desc:"Paste table row before",
114
+ paste_row_after_desc:"Paste table row after",
115
+ cut_row_desc:"Cut table row",
116
+ copy_row_desc:"Copy table row",
117
+ del:"Delete table",
118
+ row:"Row",
119
+ col:"Column",
120
+ cell:"Cell"
121
+ },
122
+ autosave:{
123
+ unload_msg:"The changes you made will be lost if you navigate away from this page."
124
+ },
125
+ fullscreen:{
126
+ desc:"Toggle fullscreen mode"
127
+ },
128
+ media:{
129
+ desc:"Insert / edit embedded media",
130
+ edit:"Edit embedded media"
131
+ },
132
+ fullpage:{
133
+ desc:"Document properties"
134
+ },
135
+ template:{
136
+ desc:"Insert predefined template content"
137
+ },
138
+ visualchars:{
139
+ desc:"Visual control characters on/off."
140
+ },
141
+ spellchecker:{
142
+ desc:"Toggle spellchecker",
143
+ menu:"Spellchecker settings",
144
+ ignore_word:"Ignore word",
145
+ ignore_words:"Ignore all",
146
+ langs:"Languages",
147
+ wait:"Please wait...",
148
+ sug:"Suggestions",
149
+ no_sug:"No suggestions",
150
+ no_mpell:"No misspellings found."
151
+ },
152
+ pagebreak:{
153
+ desc:"Insert page break."
154
+ }}});
tiny_mce/license.txt ADDED
@@ -0,0 +1,504 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 2.1, February 1999
3
+
4
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ [This is the first released version of the Lesser GPL. It also counts
10
+ as the successor of the GNU Library Public License, version 2, hence
11
+ the version number 2.1.]
12
+
13
+ Preamble
14
+
15
+ The licenses for most software are designed to take away your
16
+ freedom to share and change it. By contrast, the GNU General Public
17
+ Licenses are intended to guarantee your freedom to share and change
18
+ free software--to make sure the software is free for all its users.
19
+
20
+ This license, the Lesser General Public License, applies to some
21
+ specially designated software packages--typically libraries--of the
22
+ Free Software Foundation and other authors who decide to use it. You
23
+ can use it too, but we suggest you first think carefully about whether
24
+ this license or the ordinary General Public License is the better
25
+ strategy to use in any particular case, based on the explanations below.
26
+
27
+ When we speak of free software, we are referring to freedom of use,
28
+ not price. Our General Public Licenses are designed to make sure that
29
+ you have the freedom to distribute copies of free software (and charge
30
+ for this service if you wish); that you receive source code or can get
31
+ it if you want it; that you can change the software and use pieces of
32
+ it in new free programs; and that you are informed that you can do
33
+ these things.
34
+
35
+ To protect your rights, we need to make restrictions that forbid
36
+ distributors to deny you these rights or to ask you to surrender these
37
+ rights. These restrictions translate to certain responsibilities for
38
+ you if you distribute copies of the library or if you modify it.
39
+
40
+ For example, if you distribute copies of the library, whether gratis
41
+ or for a fee, you must give the recipients all the rights that we gave
42
+ you. You must make sure that they, too, receive or can get the source
43
+ code. If you link other code with the library, you must provide
44
+ complete object files to the recipients, so that they can relink them
45
+ with the library after making changes to the library and recompiling
46
+ it. And you must show them these terms so they know their rights.
47
+
48
+ We protect your rights with a two-step method: (1) we copyright the
49
+ library, and (2) we offer you this license, which gives you legal
50
+ permission to copy, distribute and/or modify the library.
51
+
52
+ To protect each distributor, we want to make it very clear that
53
+ there is no warranty for the free library. Also, if the library is
54
+ modified by someone else and passed on, the recipients should know
55
+ that what they have is not the original version, so that the original
56
+ author's reputation will not be affected by problems that might be
57
+ introduced by others.
58
+
59
+ Finally, software patents pose a constant threat to the existence of
60
+ any free program. We wish to make sure that a company cannot
61
+ effectively restrict the users of a free program by obtaining a
62
+ restrictive license from a patent holder. Therefore, we insist that
63
+ any patent license obtained for a version of the library must be
64
+ consistent with the full freedom of use specified in this license.
65
+
66
+ Most GNU software, including some libraries, is covered by the
67
+ ordinary GNU General Public License. This license, the GNU Lesser
68
+ General Public License, applies to certain designated libraries, and
69
+ is quite different from the ordinary General Public License. We use
70
+ this license for certain libraries in order to permit linking those
71
+ libraries into non-free programs.
72
+
73
+ When a program is linked with a library, whether statically or using
74
+ a shared library, the combination of the two is legally speaking a
75
+ combined work, a derivative of the original library. The ordinary
76
+ General Public License therefore permits such linking only if the
77
+ entire combination fits its criteria of freedom. The Lesser General
78
+ Public License permits more lax criteria for linking other code with
79
+ the library.
80
+
81
+ We call this license the "Lesser" General Public License because it
82
+ does Less to protect the user's freedom than the ordinary General
83
+ Public License. It also provides other free software developers Less
84
+ of an advantage over competing non-free programs. These disadvantages
85
+ are the reason we use the ordinary General Public License for many
86
+ libraries. However, the Lesser license provides advantages in certain
87
+ special circumstances.
88
+
89
+ For example, on rare occasions, there may be a special need to
90
+ encourage the widest possible use of a certain library, so that it becomes
91
+ a de-facto standard. To achieve this, non-free programs must be
92
+ allowed to use the library. A more frequent case is that a free
93
+ library does the same job as widely used non-free libraries. In this
94
+ case, there is little to gain by limiting the free library to free
95
+ software only, so we use the Lesser General Public License.
96
+
97
+ In other cases, permission to use a particular library in non-free
98
+ programs enables a greater number of people to use a large body of
99
+ free software. For example, permission to use the GNU C Library in
100
+ non-free programs enables many more people to use the whole GNU
101
+ operating system, as well as its variant, the GNU/Linux operating
102
+ system.
103
+
104
+ Although the Lesser General Public License is Less protective of the
105
+ users' freedom, it does ensure that the user of a program that is
106
+ linked with the Library has the freedom and the wherewithal to run
107
+ that program using a modified version of the Library.
108
+
109
+ The precise terms and conditions for copying, distribution and
110
+ modification follow. Pay close attention to the difference between a
111
+ "work based on the library" and a "work that uses the library". The
112
+ former contains code derived from the library, whereas the latter must
113
+ be combined with the library in order to run.
114
+
115
+ GNU LESSER GENERAL PUBLIC LICENSE
116
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
+
118
+ 0. This License Agreement applies to any software library or other
119
+ program which contains a notice placed by the copyright holder or
120
+ other authorized party saying it may be distributed under the terms of
121
+ this Lesser General Public License (also called "this License").
122
+ Each licensee is addressed as "you".
123
+
124
+ A "library" means a collection of software functions and/or data
125
+ prepared so as to be conveniently linked with application programs
126
+ (which use some of those functions and data) to form executables.
127
+
128
+ The "Library", below, refers to any such software library or work
129
+ which has been distributed under these terms. A "work based on the
130
+ Library" means either the Library or any derivative work under
131
+ copyright law: that is to say, a work containing the Library or a
132
+ portion of it, either verbatim or with modifications and/or translated
133
+ straightforwardly into another language. (Hereinafter, translation is
134
+ included without limitation in the term "modification".)
135
+
136
+ "Source code" for a work means the preferred form of the work for
137
+ making modifications to it. For a library, complete source code means
138
+ all the source code for all modules it contains, plus any associated
139
+ interface definition files, plus the scripts used to control compilation
140
+ and installation of the library.
141
+
142
+ Activities other than copying, distribution and modification are not
143
+ covered by this License; they are outside its scope. The act of
144
+ running a program using the Library is not restricted, and output from
145
+ such a program is covered only if its contents constitute a work based
146
+ on the Library (independent of the use of the Library in a tool for
147
+ writing it). Whether that is true depends on what the Library does
148
+ and what the program that uses the Library does.
149
+
150
+ 1. You may copy and distribute verbatim copies of the Library's
151
+ complete source code as you receive it, in any medium, provided that
152
+ you conspicuously and appropriately publish on each copy an
153
+ appropriate copyright notice and disclaimer of warranty; keep intact
154
+ all the notices that refer to this License and to the absence of any
155
+ warranty; and distribute a copy of this License along with the
156
+ Library.
157
+
158
+ You may charge a fee for the physical act of transferring a copy,
159
+ and you may at your option offer warranty protection in exchange for a
160
+ fee.
161
+
162
+ 2. You may modify your copy or copies of the Library or any portion
163
+ of it, thus forming a work based on the Library, and copy and
164
+ distribute such modifications or work under the terms of Section 1
165
+ above, provided that you also meet all of these conditions:
166
+
167
+ a) The modified work must itself be a software library.
168
+
169
+ b) You must cause the files modified to carry prominent notices
170
+ stating that you changed the files and the date of any change.
171
+
172
+ c) You must cause the whole of the work to be licensed at no
173
+ charge to all third parties under the terms of this License.
174
+
175
+ d) If a facility in the modified Library refers to a function or a
176
+ table of data to be supplied by an application program that uses
177
+ the facility, other than as an argument passed when the facility
178
+ is invoked, then you must make a good faith effort to ensure that,
179
+ in the event an application does not supply such function or
180
+ table, the facility still operates, and performs whatever part of
181
+ its purpose remains meaningful.
182
+
183
+ (For example, a function in a library to compute square roots has
184
+ a purpose that is entirely well-defined independent of the
185
+ application. Therefore, Subsection 2d requires that any
186
+ application-supplied function or table used by this function must
187
+ be optional: if the application does not supply it, the square
188
+ root function must still compute square roots.)
189
+
190
+ These requirements apply to the modified work as a whole. If
191
+ identifiable sections of that work are not derived from the Library,
192
+ and can be reasonably considered independent and separate works in
193
+ themselves, then this License, and its terms, do not apply to those
194
+ sections when you distribute them as separate works. But when you
195
+ distribute the same sections as part of a whole which is a work based
196
+ on the Library, the distribution of the whole must be on the terms of
197
+ this License, whose permissions for other licensees extend to the
198
+ entire whole, and thus to each and every part regardless of who wrote
199
+ it.
200
+
201
+ Thus, it is not the intent of this section to claim rights or contest
202
+ your rights to work written entirely by you; rather, the intent is to
203
+ exercise the right to control the distribution of derivative or
204
+ collective works based on the Library.
205
+
206
+ In addition, mere aggregation of another work not based on the Library
207
+ with the Library (or with a work based on the Library) on a volume of
208
+ a storage or distribution medium does not bring the other work under
209
+ the scope of this License.
210
+
211
+ 3. You may opt to apply the terms of the ordinary GNU General Public
212
+ License instead of this License to a given copy of the Library. To do
213
+ this, you must alter all the notices that refer to this License, so
214
+ that they refer to the ordinary GNU General Public License, version 2,
215
+ instead of to this License. (If a newer version than version 2 of the
216
+ ordinary GNU General Public License has appeared, then you can specify
217
+ that version instead if you wish.) Do not make any other change in
218
+ these notices.
219
+
220
+ Once this change is made in a given copy, it is irreversible for
221
+ that copy, so the ordinary GNU General Public License applies to all
222
+ subsequent copies and derivative works made from that copy.
223
+
224
+ This option is useful when you wish to copy part of the code of
225
+ the Library into a program that is not a library.
226
+
227
+ 4. You may copy and distribute the Library (or a portion or
228
+ derivative of it, under Section 2) in object code or executable form
229
+ under the terms of Sections 1 and 2 above provided that you accompany
230
+ it with the complete corresponding machine-readable source code, which
231
+ must be distributed under the terms of Sections 1 and 2 above on a
232
+ medium customarily used for software interchange.
233
+
234
+ If distribution of object code is made by offering access to copy
235
+ from a designated place, then offering equivalent access to copy the
236
+ source code from the same place satisfies the requirement to
237
+ distribute the source code, even though third parties are not
238
+ compelled to copy the source along with the object code.
239
+
240
+ 5. A program that contains no derivative of any portion of the
241
+ Library, but is designed to work with the Library by being compiled or
242
+ linked with it, is called a "work that uses the Library". Such a
243
+ work, in isolation, is not a derivative work of the Library, and
244
+ therefore falls outside the scope of this License.
245
+
246
+ However, linking a "work that uses the Library" with the Library
247
+ creates an executable that is a derivative of the Library (because it
248
+ contains portions of the Library), rather than a "work that uses the
249
+ library". The executable is therefore covered by this License.
250
+ Section 6 states terms for distribution of such executables.
251
+
252
+ When a "work that uses the Library" uses material from a header file
253
+ that is part of the Library, the object code for the work may be a
254
+ derivative work of the Library even though the source code is not.
255
+ Whether this is true is especially significant if the work can be
256
+ linked without the Library, or if the work is itself a library. The
257
+ threshold for this to be true is not precisely defined by law.
258
+
259
+ If such an object file uses only numerical parameters, data
260
+ structure layouts and accessors, and small macros and small inline
261
+ functions (ten lines or less in length), then the use of the object
262
+ file is unrestricted, regardless of whether it is legally a derivative
263
+ work. (Executables containing this object code plus portions of the
264
+ Library will still fall under Section 6.)
265
+
266
+ Otherwise, if the work is a derivative of the Library, you may
267
+ distribute the object code for the work under the terms of Section 6.
268
+ Any executables containing that work also fall under Section 6,
269
+ whether or not they are linked directly with the Library itself.
270
+
271
+ 6. As an exception to the Sections above, you may also combine or
272
+ link a "work that uses the Library" with the Library to produce a
273
+ work containing portions of the Library, and distribute that work
274
+ under terms of your choice, provided that the terms permit
275
+ modification of the work for the customer's own use and reverse
276
+ engineering for debugging such modifications.
277
+
278
+ You must give prominent notice with each copy of the work that the
279
+ Library is used in it and that the Library and its use are covered by
280
+ this License. You must supply a copy of this License. If the work
281
+ during execution displays copyright notices, you must include the
282
+ copyright notice for the Library among them, as well as a reference
283
+ directing the user to the copy of this License. Also, you must do one
284
+ of these things:
285
+
286
+ a) Accompany the work with the complete corresponding
287
+ machine-readable source code for the Library including whatever
288
+ changes were used in the work (which must be distributed under
289
+ Sections 1 and 2 above); and, if the work is an executable linked
290
+ with the Library, with the complete machine-readable "work that
291
+ uses the Library", as object code and/or source code, so that the
292
+ user can modify the Library and then relink to produce a modified
293
+ executable containing the modified Library. (It is understood
294
+ that the user who changes the contents of definitions files in the
295
+ Library will not necessarily be able to recompile the application
296
+ to use the modified definitions.)
297
+
298
+ b) Use a suitable shared library mechanism for linking with the
299
+ Library. A suitable mechanism is one that (1) uses at run time a
300
+ copy of the library already present on the user's computer system,
301
+ rather than copying library functions into the executable, and (2)
302
+ will operate properly with a modified version of the library, if
303
+ the user installs one, as long as the modified version is
304
+ interface-compatible with the version that the work was made with.
305
+
306
+ c) Accompany the work with a written offer, valid for at
307
+ least three years, to give the same user the materials
308
+ specified in Subsection 6a, above, for a charge no more
309
+ than the cost of performing this distribution.
310
+
311
+ d) If distribution of the work is made by offering access to copy
312
+ from a designated place, offer equivalent access to copy the above
313
+ specified materials from the same place.
314
+
315
+ e) Verify that the user has already received a copy of these
316
+ materials or that you have already sent this user a copy.
317
+
318
+ For an executable, the required form of the "work that uses the
319
+ Library" must include any data and utility programs needed for
320
+ reproducing the executable from it. However, as a special exception,
321
+ the materials to be distributed need not include anything that is
322
+ normally distributed (in either source or binary form) with the major
323
+ components (compiler, kernel, and so on) of the operating system on
324
+ which the executable runs, unless that component itself accompanies
325
+ the executable.
326
+
327
+ It may happen that this requirement contradicts the license
328
+ restrictions of other proprietary libraries that do not normally
329
+ accompany the operating system. Such a contradiction means you cannot
330
+ use both them and the Library together in an executable that you
331
+ distribute.
332
+
333
+ 7. You may place library facilities that are a work based on the
334
+ Library side-by-side in a single library together with other library
335
+ facilities not covered by this License, and distribute such a combined
336
+ library, provided that the separate distribution of the work based on
337
+ the Library and of the other library facilities is otherwise
338
+ permitted, and provided that you do these two things:
339
+
340
+ a) Accompany the combined library with a copy of the same work
341
+ based on the Library, uncombined with any other library
342
+ facilities. This must be distributed under the terms of the
343
+ Sections above.
344
+
345
+ b) Give prominent notice with the combined library of the fact
346
+ that part of it is a work based on the Library, and explaining
347
+ where to find the accompanying uncombined form of the same work.
348
+
349
+ 8. You may not copy, modify, sublicense, link with, or distribute
350
+ the Library except as expressly provided under this License. Any
351
+ attempt otherwise to copy, modify, sublicense, link with, or
352
+ distribute the Library is void, and will automatically terminate your
353
+ rights under this License. However, parties who have received copies,
354
+ or rights, from you under this License will not have their licenses
355
+ terminated so long as such parties remain in full compliance.
356
+
357
+ 9. You are not required to accept this License, since you have not
358
+ signed it. However, nothing else grants you permission to modify or
359
+ distribute the Library or its derivative works. These actions are
360
+ prohibited by law if you do not accept this License. Therefore, by
361
+ modifying or distributing the Library (or any work based on the
362
+ Library), you indicate your acceptance of this License to do so, and
363
+ all its terms and conditions for copying, distributing or modifying
364
+ the Library or works based on it.
365
+
366
+ 10. Each time you redistribute the Library (or any work based on the
367
+ Library), the recipient automatically receives a license from the
368
+ original licensor to copy, distribute, link with or modify the Library
369
+ subject to these terms and conditions. You may not impose any further
370
+ restrictions on the recipients' exercise of the rights granted herein.
371
+ You are not responsible for enforcing compliance by third parties with
372
+ this License.
373
+
374
+ 11. If, as a consequence of a court judgment or allegation of patent
375
+ infringement or for any other reason (not limited to patent issues),
376
+ conditions are imposed on you (whether by court order, agreement or
377
+ otherwise) that contradict the conditions of this License, they do not
378
+ excuse you from the conditions of this License. If you cannot
379
+ distribute so as to satisfy simultaneously your obligations under this
380
+ License and any other pertinent obligations, then as a consequence you
381
+ may not distribute the Library at all. For example, if a patent
382
+ license would not permit royalty-free redistribution of the Library by
383
+ all those who receive copies directly or indirectly through you, then
384
+ the only way you could satisfy both it and this License would be to
385
+ refrain entirely from distribution of the Library.
386
+
387
+ If any portion of this section is held invalid or unenforceable under any
388
+ particular circumstance, the balance of the section is intended to apply,
389
+ and the section as a whole is intended to apply in other circumstances.
390
+
391
+ It is not the purpose of this section to induce you to infringe any
392
+ patents or other property right claims or to contest validity of any
393
+ such claims; this section has the sole purpose of protecting the
394
+ integrity of the free software distribution system which is
395
+ implemented by public license practices. Many people have made
396
+ generous contributions to the wide range of software distributed
397
+ through that system in reliance on consistent application of that
398
+ system; it is up to the author/donor to decide if he or she is willing
399
+ to distribute software through any other system and a licensee cannot
400
+ impose that choice.
401
+
402
+ This section is intended to make thoroughly clear what is believed to
403
+ be a consequence of the rest of this License.
404
+
405
+ 12. If the distribution and/or use of the Library is restricted in
406
+ certain countries either by patents or by copyrighted interfaces, the
407
+ original copyright holder who places the Library under this License may add
408
+ an explicit geographical distribution limitation excluding those countries,
409
+ so that distribution is permitted only in or among countries not thus
410
+ excluded. In such case, this License incorporates the limitation as if
411
+ written in the body of this License.
412
+
413
+ 13. The Free Software Foundation may publish revised and/or new
414
+ versions of the Lesser General Public License from time to time.
415
+ Such new versions will be similar in spirit to the present version,
416
+ but may differ in detail to address new problems or concerns.
417
+
418
+ Each version is given a distinguishing version number. If the Library
419
+ specifies a version number of this License which applies to it and
420
+ "any later version", you have the option of following the terms and
421
+ conditions either of that version or of any later version published by
422
+ the Free Software Foundation. If the Library does not specify a
423
+ license version number, you may choose any version ever published by
424
+ the Free Software Foundation.
425
+
426
+ 14. If you wish to incorporate parts of the Library into other free
427
+ programs whose distribution conditions are incompatible with these,
428
+ write to the author to ask for permission. For software which is
429
+ copyrighted by the Free Software Foundation, write to the Free
430
+ Software Foundation; we sometimes make exceptions for this. Our
431
+ decision will be guided by the two goals of preserving the free status
432
+ of all derivatives of our free software and of promoting the sharing
433
+ and reuse of software generally.
434
+
435
+ NO WARRANTY
436
+
437
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
+ WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440
+ OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441
+ KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444
+ LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445
+ THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446
+
447
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449
+ AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450
+ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451
+ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452
+ LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453
+ RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454
+ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455
+ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
+ DAMAGES.
457
+
458
+ END OF TERMS AND CONDITIONS
459
+
460
+ How to Apply These Terms to Your New Libraries
461
+
462
+ If you develop a new library, and you want it to be of the greatest
463
+ possible use to the public, we recommend making it free software that
464
+ everyone can redistribute and change. You can do so by permitting
465
+ redistribution under these terms (or, alternatively, under the terms of the
466
+ ordinary General Public License).
467
+
468
+ To apply these terms, attach the following notices to the library. It is
469
+ safest to attach them to the start of each source file to most effectively
470
+ convey the exclusion of warranty; and each file should have at least the
471
+ "copyright" line and a pointer to where the full notice is found.
472
+
473
+ <one line to give the library's name and a brief idea of what it does.>
474
+ Copyright (C) <year> <name of author>
475
+
476
+ This library is free software; you can redistribute it and/or
477
+ modify it under the terms of the GNU Lesser General Public
478
+ License as published by the Free Software Foundation; either
479
+ version 2.1 of the License, or (at your option) any later version.
480
+
481
+ This library is distributed in the hope that it will be useful,
482
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
483
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484
+ Lesser General Public License for more details.
485
+
486
+ You should have received a copy of the GNU Lesser General Public
487
+ License along with this library; if not, write to the Free Software
488
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
489
+
490
+ Also add information on how to contact you by electronic and paper mail.
491
+
492
+ You should also get your employer (if you work as a programmer) or your
493
+ school, if any, to sign a "copyright disclaimer" for the library, if
494
+ necessary. Here is a sample; alter the names:
495
+
496
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
497
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498
+
499
+ <signature of Ty Coon>, 1 April 1990
500
+ Ty Coon, President of Vice
501
+
502
+ That's all there is to it!
503
+
504
+
tiny_mce/plugins/table/cell.htm ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#table_dlg.cell_title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>
8
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
9
+ <script type="text/javascript" src="js/cell.js"></script>
10
+ <link href="css/cell.css" rel="stylesheet" type="text/css" />
11
+ </head>
12
+ <body id="tablecell" style="display: none">
13
+ <form onsubmit="updateAction();return false;" action="#">
14
+ <div class="tabs">
15
+ <ul>
16
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
17
+ <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
18
+ </ul>
19
+ </div>
20
+
21
+ <div class="panel_wrapper">
22
+ <div id="general_panel" class="panel current">
23
+ <fieldset>
24
+ <legend>{#table_dlg.general_props}</legend>
25
+
26
+ <table border="0" cellpadding="4" cellspacing="0">
27
+ <tr>
28
+ <td><label for="align">{#table_dlg.align}</label></td>
29
+ <td>
30
+ <select id="align" name="align" class="mceFocus">
31
+ <option value="">{#not_set}</option>
32
+ <option value="center">{#table_dlg.align_middle}</option>
33
+ <option value="left">{#table_dlg.align_left}</option>
34
+ <option value="right">{#table_dlg.align_right}</option>
35
+ </select>
36
+ </td>
37
+
38
+ <td><label for="celltype">{#table_dlg.cell_type}</label></td>
39
+ <td>
40
+ <select id="celltype" name="celltype">
41
+ <option value="td">{#table_dlg.td}</option>
42
+ <option value="th">{#table_dlg.th}</option>
43
+ </select>
44
+ </td>
45
+ </tr>
46
+
47
+ <tr>
48
+ <td><label for="valign">{#table_dlg.valign}</label></td>
49
+ <td>
50
+ <select id="valign" name="valign">
51
+ <option value="">{#not_set}</option>
52
+ <option value="top">{#table_dlg.align_top}</option>
53
+ <option value="middle">{#table_dlg.align_middle}</option>
54
+ <option value="bottom">{#table_dlg.align_bottom}</option>
55
+ </select>
56
+ </td>
57
+
58
+ <td><label for="scope">{#table_dlg.scope}</label></td>
59
+ <td>
60
+ <select id="scope" name="scope">
61
+ <option value="">{#not_set}</option>
62
+ <option value="col">{#table.col}</option>
63
+ <option value="row">{#table.row}</option>
64
+ <option value="rowgroup">{#table_dlg.rowgroup}</option>
65
+ <option value="colgroup">{#table_dlg.colgroup}</option>
66
+ </select>
67
+ </td>
68
+
69
+ </tr>
70
+
71
+ <tr>
72
+ <td><label for="width">{#table_dlg.width}</label></td>
73
+ <td><input id="width" name="width" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
74
+
75
+ <td><label for="height">{#table_dlg.height}</label></td>
76
+ <td><input id="height" name="height" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
77
+ </tr>
78
+
79
+ <tr id="styleSelectRow">
80
+ <td><label for="class">{#class_name}</label></td>
81
+ <td colspan="3">
82
+ <select id="class" name="class" class="mceEditableSelect">
83
+ <option value="" selected="selected">{#not_set}</option>
84
+ </select>
85
+ </td>
86
+ </tr>
87
+ </table>
88
+ </fieldset>
89
+ </div>
90
+
91
+ <div id="advanced_panel" class="panel">
92
+ <fieldset>
93
+ <legend>{#table_dlg.advanced_props}</legend>
94
+
95
+ <table border="0" cellpadding="0" cellspacing="4">
96
+ <tr>
97
+ <td class="column1"><label for="id">{#table_dlg.id}</label></td>
98
+ <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
99
+ </tr>
100
+
101
+ <tr>
102
+ <td><label for="style">{#table_dlg.style}</label></td>
103
+ <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
104
+ </tr>
105
+
106
+ <tr>
107
+ <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
108
+ <td>
109
+ <select id="dir" name="dir" style="width: 200px">
110
+ <option value="">{#not_set}</option>
111
+ <option value="ltr">{#table_dlg.ltr}</option>
112
+ <option value="rtl">{#table_dlg.rtl}</option>
113
+ </select>
114
+ </td>
115
+ </tr>
116
+
117
+ <tr>
118
+ <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td>
119
+ <td>
120
+ <input id="lang" name="lang" type="text" value="" style="width: 200px" />
121
+ </td>
122
+ </tr>
123
+
124
+ <tr>
125
+ <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
126
+ <td>
127
+ <table border="0" cellpadding="0" cellspacing="0">
128
+ <tr>
129
+ <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>
130
+ <td id="backgroundimagebrowsercontainer">&nbsp;</td>
131
+ </tr>
132
+ </table>
133
+ </td>
134
+ </tr>
135
+
136
+ <tr>
137
+ <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td>
138
+ <td>
139
+ <table border="0" cellpadding="0" cellspacing="0">
140
+ <tr>
141
+ <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>
142
+ <td id="bordercolor_pickcontainer">&nbsp;</td>
143
+ </tr>
144
+ </table>
145
+ </td>
146
+ </tr>
147
+
148
+ <tr>
149
+ <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
150
+ <td>
151
+ <table border="0" cellpadding="0" cellspacing="0">
152
+ <tr>
153
+ <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
154
+ <td id="bgcolor_pickcontainer">&nbsp;</td>
155
+ </tr>
156
+ </table>
157
+ </td>
158
+ </tr>
159
+ </table>
160
+ </fieldset>
161
+ </div>
162
+ </div>
163
+
164
+ <div class="mceActionPanel">
165
+ <div>
166
+ <select id="action" name="action">
167
+ <option value="cell">{#table_dlg.cell_cell}</option>
168
+ <option value="row">{#table_dlg.cell_row}</option>
169
+ <option value="all">{#table_dlg.cell_all}</option>
170
+ </select>
171
+ </div>
172
+
173
+ <div style="float: left">
174
+ <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>
175
+ </div>
176
+
177
+ <div style="float: right">
178
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
179
+ </div>
180
+ </div>
181
+ </form>
182
+ </body>
183
+ </html>
tiny_mce/plugins/table/css/cell.css ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* CSS file for cell dialog in the table plugin */
2
+
3
+ .panel_wrapper div.current {
4
+ height: 200px;
5
+ }
6
+
7
+ .advfield {
8
+ width: 200px;
9
+ }
10
+
11
+ #action {
12
+ margin-bottom: 3px;
13
+ }
14
+
15
+ #class {
16
+ width: 150px;
17
+ }
tiny_mce/plugins/table/css/row.css ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* CSS file for row dialog in the table plugin */
2
+
3
+ .panel_wrapper div.current {
4
+ height: 200px;
5
+ }
6
+
7
+ .advfield {
8
+ width: 200px;
9
+ }
10
+
11
+ #action {
12
+ margin-bottom: 3px;
13
+ }
14
+
15
+ #rowtype,#align,#valign,#class,#height {
16
+ width: 150px;
17
+ }
18
+
19
+ #height {
20
+ width: 50px;
21
+ }
22
+
23
+ .col2 {
24
+ padding-left: 20px;
25
+ }
tiny_mce/plugins/table/css/table.css ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* CSS file for table dialog in the table plugin */
2
+
3
+ .panel_wrapper div.current {
4
+ height: 245px;
5
+ }
6
+
7
+ .advfield {
8
+ width: 200px;
9
+ }
10
+
11
+ #class {
12
+ width: 150px;
13
+ }
tiny_mce/plugins/table/editor_plugin.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TablePlugin",{init:function(b,c){var d=this;d.editor=b;d.url=c;a([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(e){b.addButton(e[0],{title:e[1],cmd:e[2],ui:e[3]})});if(b.getParam("inline_styles")){b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("table",g.node),function(i){var h;if(h=f.getAttrib(i,"width")){f.setStyle(i,"width",h);f.setAttrib(i,"width")}if(h=f.getAttrib(i,"height")){f.setStyle(i,"height",h);f.setAttrib(i,"height")}})})}b.onInit.add(function(){if(b&&b.plugins.contextmenu){b.plugins.contextmenu.onContextMenu.add(function(h,f,j){var k,i=b.selection,g=i.getNode()||b.getBody();if(b.dom.getParent(j,"td")||b.dom.getParent(j,"th")){f.removeAll();if(g.nodeName=="A"&&!b.dom.getAttrib(g,"name")){f.add({title:"advanced.link_desc",icon:"link",cmd:b.plugins.advlink?"mceAdvLink":"mceLink",ui:true});f.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});f.addSeparator()}if(g.nodeName=="IMG"&&g.className.indexOf("mceItem")==-1){f.add({title:"advanced.image_desc",icon:"image",cmd:b.plugins.advimage?"mceAdvImage":"mceImage",ui:true});f.addSeparator()}f.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",ui:true,value:{action:"insert"}});f.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable",ui:true});f.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete",ui:true});f.addSeparator();k=f.addMenu({title:"table.cell"});k.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps",ui:true});k.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells",ui:true});k.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells",ui:true});k=f.addMenu({title:"table.row"});k.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps",ui:true});k.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});k.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});k.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});k.addSeparator();k.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});k.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});k.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"});k.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"});k=f.addMenu({title:"table.col"});k.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});k.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});k.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{f.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",ui:true})}})}});b.onKeyDown.add(function(f,g){if(g.keyCode==9&&f.dom.getParent(f.selection.getNode(),"TABLE")){if(!tinymce.isGecko&&!tinymce.isOpera){tinyMCE.execInstanceCommand(f.editorId,"mceTableMoveToNextRow",true);return tinymce.dom.Event.cancel(g)}f.undoManager.add()}});if(!tinymce.isIE){if(b.getParam("table_selection",true)){b.onClick.add(function(f,g){g=g.target;if(g.nodeName==="TABLE"){f.selection.select(g)}})}}b.onNodeChange.add(function(f,e,h){var g=f.dom.getParent(h,"td,th,caption");e.setActive("table",h.nodeName==="TABLE"||!!g);if(g&&g.nodeName==="CAPTION"){g=null}e.setDisabled("delete_table",!g);e.setDisabled("delete_col",!g);e.setDisabled("delete_table",!g);e.setDisabled("delete_row",!g);e.setDisabled("col_after",!g);e.setDisabled("col_before",!g);e.setDisabled("row_after",!g);e.setDisabled("row_before",!g);e.setDisabled("row_props",!g);e.setDisabled("cell_props",!g);e.setDisabled("split_cells",!g||(parseInt(f.dom.getAttrib(g,"colspan","1"))<2&&parseInt(f.dom.getAttrib(g,"rowspan","1"))<2));e.setDisabled("merge_cells",!g)});if(!tinymce.isIE){b.onBeforeSetContent.add(function(e,f){if(f.initial){f.content=f.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g,tinymce.isOpera?"<$1$2>&nbsp;</$1>":'<$1$2><br mce_bogus="1" /></$1>')}})}},execCommand:function(f,e,g){var d=this.editor,c;switch(f){case"mceTableMoveToNextRow":case"mceInsertTable":case"mceTableRowProps":case"mceTableCellProps":case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":case"mceTableDelete":d.execCommand("mceBeginUndoLevel");this._doExecCommand(f,e,g);d.execCommand("mceEndUndoLevel");return true}return false},getInfo:function(){return{longname:"Tables",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_doExecCommand:function(r,Z,ae){var V=this.editor,au=V,g=this.url;var n=V.selection.getNode();var W=V.dom.getParent(n,"tr");var aq=V.dom.getParent(n,"td,th");var F=V.dom.getParent(n,"table");var k=V.contentWindow.document;var av=F?F.getAttribute("border"):"";if(W&&aq==null){aq=W.cells[0]}function ap(y,x){for(var ax=0;ax<y.length;ax++){if(y[ax].length>0&&ap(y[ax],x)){return true}if(y[ax]==x){return true}}return false}function aj(x,i){var y;ad=e(F);x=x||0;i=i||0;x=Math.max(o.cellindex+x,0);i=Math.max(o.rowindex+i,0);V.execCommand("mceRepaint");y=d(ad,i,x);if(y){V.selection.select(y.firstChild||y);V.selection.collapse(1)}}function ah(){var i=k.createElement("td");if(!tinymce.isIE){i.innerHTML='<br mce_bogus="1"/>'}}function j(y){var x=V.dom.getAttrib(y,"colspan");var i=V.dom.getAttrib(y,"rowspan");x=x==""?1:parseInt(x);i=i==""?1:parseInt(i);return{colspan:x,rowspan:i}}function al(ax,az){var i,ay;for(ay=0;ay<ax.length;ay++){for(i=0;i<ax[ay].length;i++){if(ax[ay][i]==az){return{cellindex:i,rowindex:ay}}}}return null}function d(x,y,i){if(x[y]&&x[y][i]){return x[y][i]}return null}function A(aC,ax){var az=[],y=0,aA,ay,ax,aB;for(aA=0;aA<aC.rows.length;aA++){for(ay=0;ay<aC.rows[aA].cells.length;ay++,y++){az[y]=aC.rows[aA].cells[ay]}}for(aA=0;aA<az.length;aA++){if(az[aA]==ax){if(aB=az[aA+1]){return aB}}}}function e(aE){var i=[],aF=aE.rows,aC,aB,ay,az,aD,ax,aA;for(aB=0;aB<aF.length;aB++){for(aC=0;aC<aF[aB].cells.length;aC++){ay=aF[aB].cells[aC];az=j(ay);for(aD=aC;i[aB]&&i[aB][aD];aD++){}for(aA=aB;aA<aB+az.rowspan;aA++){if(!i[aA]){i[aA]=[]}for(ax=aD;ax<aD+az.colspan;ax++){i[aA][ax]=ay}}}}return i}function m(aG,aD,ay,ax){var y=e(aG),aF=al(y,ay);var aH,aC;if(ax.cells.length!=aD.childNodes.length){aH=aD.childNodes;aC=null;for(var aE=0;ay=d(y,aF.rowindex,aE);aE++){var aA=true;var aB=j(ay);if(ap(aH,ay)){ax.childNodes[aE]._delete=true}else{if((aC==null||ay!=aC)&&aB.colspan>1){for(var az=aE;az<aE+ay.colSpan;az++){ax.childNodes[az]._delete=true}}}if((aC==null||ay!=aC)&&aB.rowspan>1){ay.rowSpan=aB.rowspan+1}aC=ay}B(F)}}function O(x,i){while((x=x.previousSibling)!=null){if(x.nodeName==i){return x}}return null}function af(ax,ay){var x=ay.split(",");while((ax=ax.nextSibling)!=null){for(var y=0;y<x.length;y++){if(ax.nodeName.toLowerCase()==x[y].toLowerCase()){return ax}}}return null}function B(ax){if(ax.rows==0){return}var y=ax.rows[0];do{var x=af(y,"TR");if(y._delete){y.parentNode.removeChild(y);continue}var ay=y.cells[0];if(ay.cells>1){do{var i=af(ay,"TD,TH");if(ay._delete){ay.parentNode.removeChild(ay)}}while((ay=i)!=null)}}while((y=x)!=null)}function p(ax,aA,az){ax.rowSpan=1;var x=af(aA,"TR");for(var ay=1;ay<az&&x;ay++){var y=k.createElement("td");if(!tinymce.isIE){y.innerHTML='<br mce_bogus="1"/>'}if(tinymce.isIE){x.insertBefore(y,x.cells(ax.cellIndex))}else{x.insertBefore(y,x.cells[ax.cellIndex])}x=af(x,"TR")}}function S(aF,aH,aB){var y=e(aH);var ax=aB.cloneNode(false);var aG=al(y,aB.cells[0]);var aC=null;var aA=V.dom.getAttrib(aH,"border");var az=null;for(var aE=0;az=d(y,aG.rowindex,aE);aE++){var aD=null;if(aC!=az){for(var ay=0;ay<aB.cells.length;ay++){if(az==aB.cells[ay]){aD=az.cloneNode(true);break}}}if(aD==null){aD=aF.createElement("td");if(!tinymce.isIE){aD.innerHTML='<br mce_bogus="1"/>'}}aD.colSpan=1;aD.rowSpan=1;ax.appendChild(aD);aC=az}return ax}switch(r){case"mceTableMoveToNextRow":var L=A(F,aq);if(!L){V.execCommand("mceTableInsertRowAfter",aq);L=A(F,aq)}V.selection.select(L);V.selection.collapse(true);return true;case"mceTableRowProps":if(W==null){return true}if(Z){V.windowManager.open({url:g+"/row.htm",width:400+parseInt(V.getLang("table.rowprops_delta_width",0)),height:295+parseInt(V.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:g})}return true;case"mceTableCellProps":if(aq==null){return true}if(Z){V.windowManager.open({url:g+"/cell.htm",width:400+parseInt(V.getLang("table.cellprops_delta_width",0)),height:295+parseInt(V.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:g})}return true;case"mceInsertTable":if(Z){V.windowManager.open({url:g+"/table.htm",width:400+parseInt(V.getLang("table.table_delta_width",0)),height:320+parseInt(V.getLang("table.table_delta_height",0)),inline:1},{plugin_url:g,action:ae?ae.action:0})}return true;case"mceTableDelete":var G=V.dom.getParent(V.selection.getNode(),"table");if(G){G.parentNode.removeChild(G);V.execCommand("mceRepaint")}return true;case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":if(!F){return true}if(W&&F!=W.parentNode){F=W.parentNode}if(F&&W){switch(r){case"mceTableCutRow":if(!W||!aq){return true}V.tableRowClipboard=S(k,F,W);V.execCommand("mceTableDeleteRow");break;case"mceTableCopyRow":if(!W||!aq){return true}V.tableRowClipboard=S(k,F,W);break;case"mceTablePasteRowBefore":if(!W||!aq){return true}var v=V.tableRowClipboard.cloneNode(true);var h=O(W,"TR");if(h!=null){m(F,h,h.cells[0],v)}W.parentNode.insertBefore(v,W);break;case"mceTablePasteRowAfter":if(!W||!aq){return true}var X=af(W,"TR");var v=V.tableRowClipboard.cloneNode(true);m(F,W,aq,v);if(X==null){W.parentNode.appendChild(v)}else{X.parentNode.insertBefore(v,X)}break;case"mceTableInsertRowBefore":if(!W||!aq){return true}var ad=e(F);var o=al(ad,aq);var v=k.createElement("tr");var u=null;o.rowindex--;if(o.rowindex<0){o.rowindex=0}for(var ac=0;aq=d(ad,o.rowindex,ac);ac++){if(aq!=u){var E=j(aq);if(E.rowspan==1){var J=k.createElement("td");if(!tinymce.isIE){J.innerHTML='<br mce_bogus="1"/>'}J.colSpan=aq.colSpan;v.appendChild(J)}else{aq.rowSpan=E.rowspan+1}u=aq}}W.parentNode.insertBefore(v,W);aj(0,1);break;case"mceTableInsertRowAfter":if(!W||!aq){return true}var ad=e(F);var o=al(ad,aq);var v=k.createElement("tr");var u=null;for(var ac=0;aq=d(ad,o.rowindex,ac);ac++){if(aq!=u){var E=j(aq);if(E.rowspan==1){var J=k.createElement("td");if(!tinymce.isIE){J.innerHTML='<br mce_bogus="1"/>'}J.colSpan=aq.colSpan;v.appendChild(J)}else{aq.rowSpan=E.rowspan+1}u=aq}}if(v.hasChildNodes()){var X=af(W,"TR");if(X){X.parentNode.insertBefore(v,X)}else{F.appendChild(v)}}aj(0,1);break;case"mceTableDeleteRow":if(!W||!aq){return true}var ad=e(F);var o=al(ad,aq);if(ad.length==1&&F.nodeName=="TBODY"){V.dom.remove(V.dom.getParent(F,"table"));return true}var D=W.cells;var X=af(W,"TR");for(var ac=0;ac<D.length;ac++){if(D[ac].rowSpan>1){var J=D[ac].cloneNode(true);var E=j(D[ac]);J.rowSpan=E.rowspan-1;var ak=X.cells[ac];if(ak==null){X.appendChild(J)}else{X.insertBefore(J,ak)}}}var u=null;for(var ac=0;aq=d(ad,o.rowindex,ac);ac++){if(aq!=u){var E=j(aq);if(E.rowspan>1){aq.rowSpan=E.rowspan-1}else{W=aq.parentNode;if(W.parentNode){W._delete=true}}u=aq}}B(F);aj(0,-1);break;case"mceTableInsertColBefore":if(!W||!aq){return true}var ad=e(V.dom.getParent(F,"table"));var o=al(ad,aq);var u=null;for(var aa=0;aq=d(ad,aa,o.cellindex);aa++){if(aq!=u){var E=j(aq);if(E.colspan==1){var J=k.createElement(aq.nodeName);if(!tinymce.isIE){J.innerHTML='<br mce_bogus="1"/>'}J.rowSpan=aq.rowSpan;aq.parentNode.insertBefore(J,aq)}else{aq.colSpan++}u=aq}}aj();break;case"mceTableInsertColAfter":if(!W||!aq){return true}var ad=e(V.dom.getParent(F,"table"));var o=al(ad,aq);var u=null;for(var aa=0;aq=d(ad,aa,o.cellindex);aa++){if(aq!=u){var E=j(aq);if(E.colspan==1){var J=k.createElement(aq.nodeName);if(!tinymce.isIE){J.innerHTML='<br mce_bogus="1"/>'}J.rowSpan=aq.rowSpan;var ak=af(aq,"TD,TH");if(ak==null){aq.parentNode.appendChild(J)}else{ak.parentNode.insertBefore(J,ak)}}else{aq.colSpan++}u=aq}}aj(1);break;case"mceTableDeleteCol":if(!W||!aq){return true}var ad=e(F);var o=al(ad,aq);var u=null;if((ad.length>1&&ad[0].length<=1)&&F.nodeName=="TBODY"){V.dom.remove(V.dom.getParent(F,"table"));return true}for(var aa=0;aq=d(ad,aa,o.cellindex);aa++){if(aq!=u){var E=j(aq);if(E.colspan>1){aq.colSpan=E.colspan-1}else{if(aq.parentNode){aq.parentNode.removeChild(aq)}}u=aq}}aj(-1);break;case"mceTableSplitCells":if(!W||!aq){return true}var l=j(aq);var C=l.colspan;var H=l.rowspan;if(C>1||H>1){aq.colSpan=1;for(var am=1;am<C;am++){var J=k.createElement("td");if(!tinymce.isIE){J.innerHTML='<br mce_bogus="1"/>'}W.insertBefore(J,af(aq,"TD,TH"));if(H>1){p(J,W,H)}}p(aq,W,H)}F=V.dom.getParent(V.selection.getNode(),"table");break;case"mceTableMergeCells":var ao=[];var R=V.selection.getSel();var ad=e(F);if(tinymce.isIE||R.rangeCount==1){if(Z){var t=j(aq);V.windowManager.open({url:g+"/merge_cells.htm",width:240+parseInt(V.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(V.getLang("table.merge_cells_delta_height",0)),inline:1},{action:"update",numcols:t.colspan,numrows:t.rowspan,plugin_url:g});return true}else{var U=parseInt(ae.numrows);var c=parseInt(ae.numcols);var o=al(ad,aq);if((""+U)=="NaN"){U=1}if((""+c)=="NaN"){c=1}var b=F.rows;for(var aa=o.rowindex;aa<ad.length;aa++){var ag=[];for(var ac=o.cellindex;ac<ad[aa].length;ac++){var f=d(ad,aa,ac);if(f&&!ap(ao,f)&&!ap(ag,f)){var N=al(ad,f);if(N.cellindex<o.cellindex+c&&N.rowindex<o.rowindex+U){ag[ag.length]=f}}}if(ag.length>0){ao[ao.length]=ag}var f=d(ad,o.rowindex,o.cellindex);a(au.dom.select("br",f),function(y,x){if(x>0&&au.dom.getAttrib("mce_bogus")){au.dom.remove(y)}})}}}else{var D=[];var R=V.selection.getSel();var Y=null;var an=null;var z=-1,aw=-1,w,at;if(R.rangeCount<2){return true}for(var am=0;am<R.rangeCount;am++){var ai=R.getRangeAt(am);var aq=ai.startContainer.childNodes[ai.startOffset];if(!aq){break}if(aq.nodeName=="TD"||aq.nodeName=="TH"){D[D.length]=aq}}var b=F.rows;for(var aa=0;aa<b.length;aa++){var ag=[];for(var ac=0;ac<b[aa].cells.length;ac++){var f=b[aa].cells[ac];for(var am=0;am<D.length;am++){if(f==D[am]){ag[ag.length]=f}}}if(ag.length>0){ao[ao.length]=ag}}var an=[];var Y=null;for(var aa=0;aa<ad.length;aa++){for(var ac=0;ac<ad[aa].length;ac++){ad[aa][ac]._selected=false;for(var am=0;am<D.length;am++){if(ad[aa][ac]==D[am]){if(z==-1){z=ac;aw=aa}w=ac;at=aa;ad[aa][ac]._selected=true}}}}for(var aa=aw;aa<=at;aa++){for(var ac=z;ac<=w;ac++){if(!ad[aa][ac]._selected){alert("Invalid selection for merge.");return true}}}}var s=1,q=1;var T=-1;for(var aa=0;aa<ao.length;aa++){var I=0;for(var ac=0;ac<ao[aa].length;ac++){var E=j(ao[aa][ac]);I+=E.colspan;if(T!=-1&&E.rowspan!=T){alert("Invalid selection for merge.");return true}T=E.rowspan}if(I>q){q=I}T=-1}var Q=-1;for(var ac=0;ac<ao[0].length;ac++){var M=0;for(var aa=0;aa<ao.length;aa++){var E=j(ao[aa][ac]);M+=E.rowspan;if(Q!=-1&&E.colspan!=Q){alert("Invalid selection for merge.");return true}Q=E.colspan}if(M>s){s=M}Q=-1}aq=ao[0][0];aq.rowSpan=s;aq.colSpan=q;for(var aa=0;aa<ao.length;aa++){for(var ac=0;ac<ao[aa].length;ac++){var P=ao[aa][ac].innerHTML;var K=P.replace(/[ \t\r\n]/g,"");if(K!="<br/>"&&K!="<br>"&&K!='<br mce_bogus="1"/>'&&(ac+aa>0)){aq.innerHTML+=P}if(ao[aa][ac]!=aq&&!ao[aa][ac]._deleted){var o=al(ad,ao[aa][ac]);var ar=ao[aa][ac].parentNode;ar.removeChild(ao[aa][ac]);ao[aa][ac]._deleted=true;if(!ar.hasChildNodes()){ar.parentNode.removeChild(ar);var ab=null;for(var ac=0;cellElm=d(ad,o.rowindex,ac);ac++){if(cellElm!=ab&&cellElm.rowSpan>1){cellElm.rowSpan--}ab=cellElm}if(aq.rowSpan>1){aq.rowSpan--}}}}}a(au.dom.select("br",aq),function(y,x){if(x>0&&au.dom.getAttrib(y,"mce_bogus")){au.dom.remove(y)}});break}F=V.dom.getParent(V.selection.getNode(),"table");V.addVisual(F);V.nodeChanged()}return true}return false}});tinymce.PluginManager.add("table",tinymce.plugins.TablePlugin)})();
tiny_mce/plugins/table/js/cell.js ADDED
@@ -0,0 +1,269 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ var ed;
4
+
5
+ function init() {
6
+ ed = tinyMCEPopup.editor;
7
+ tinyMCEPopup.resizeToInnerSize();
8
+
9
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
10
+ document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
11
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')
12
+
13
+ var inst = ed;
14
+ var tdElm = ed.dom.getParent(ed.selection.getNode(), "td,th");
15
+ var formObj = document.forms[0];
16
+ var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));
17
+
18
+ // Get table cell data
19
+ var celltype = tdElm.nodeName.toLowerCase();
20
+ var align = ed.dom.getAttrib(tdElm, 'align');
21
+ var valign = ed.dom.getAttrib(tdElm, 'valign');
22
+ var width = trimSize(getStyle(tdElm, 'width', 'width'));
23
+ var height = trimSize(getStyle(tdElm, 'height', 'height'));
24
+ var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));
25
+ var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));
26
+ var className = ed.dom.getAttrib(tdElm, 'class');
27
+ var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;
28
+ var id = ed.dom.getAttrib(tdElm, 'id');
29
+ var lang = ed.dom.getAttrib(tdElm, 'lang');
30
+ var dir = ed.dom.getAttrib(tdElm, 'dir');
31
+ var scope = ed.dom.getAttrib(tdElm, 'scope');
32
+
33
+ // Setup form
34
+ addClassesToList('class', 'table_cell_styles');
35
+ TinyMCE_EditableSelects.init();
36
+
37
+ formObj.bordercolor.value = bordercolor;
38
+ formObj.bgcolor.value = bgcolor;
39
+ formObj.backgroundimage.value = backgroundimage;
40
+ formObj.width.value = width;
41
+ formObj.height.value = height;
42
+ formObj.id.value = id;
43
+ formObj.lang.value = lang;
44
+ formObj.style.value = ed.dom.serializeStyle(st);
45
+ selectByValue(formObj, 'align', align);
46
+ selectByValue(formObj, 'valign', valign);
47
+ selectByValue(formObj, 'class', className, true, true);
48
+ selectByValue(formObj, 'celltype', celltype);
49
+ selectByValue(formObj, 'dir', dir);
50
+ selectByValue(formObj, 'scope', scope);
51
+
52
+ // Resize some elements
53
+ if (isVisible('backgroundimagebrowser'))
54
+ document.getElementById('backgroundimage').style.width = '180px';
55
+
56
+ updateColor('bordercolor_pick', 'bordercolor');
57
+ updateColor('bgcolor_pick', 'bgcolor');
58
+ }
59
+
60
+ function updateAction() {
61
+ var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];
62
+
63
+ tinyMCEPopup.restoreSelection();
64
+ el = ed.selection.getNode();
65
+ tdElm = ed.dom.getParent(el, "td,th");
66
+ trElm = ed.dom.getParent(el, "tr");
67
+ tableElm = ed.dom.getParent(el, "table");
68
+
69
+ ed.execCommand('mceBeginUndoLevel');
70
+
71
+ switch (getSelectValue(formObj, 'action')) {
72
+ case "cell":
73
+ var celltype = getSelectValue(formObj, 'celltype');
74
+ var scope = getSelectValue(formObj, 'scope');
75
+
76
+ function doUpdate(s) {
77
+ if (s) {
78
+ updateCell(tdElm);
79
+
80
+ ed.addVisual();
81
+ ed.nodeChanged();
82
+ inst.execCommand('mceEndUndoLevel');
83
+ tinyMCEPopup.close();
84
+ }
85
+ };
86
+
87
+ if (ed.getParam("accessibility_warnings", 1)) {
88
+ if (celltype == "th" && scope == "")
89
+ tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate);
90
+ else
91
+ doUpdate(1);
92
+
93
+ return;
94
+ }
95
+
96
+ updateCell(tdElm);
97
+ break;
98
+
99
+ case "row":
100
+ var cell = trElm.firstChild;
101
+
102
+ if (cell.nodeName != "TD" && cell.nodeName != "TH")
103
+ cell = nextCell(cell);
104
+
105
+ do {
106
+ cell = updateCell(cell, true);
107
+ } while ((cell = nextCell(cell)) != null);
108
+
109
+ break;
110
+
111
+ case "all":
112
+ var rows = tableElm.getElementsByTagName("tr");
113
+
114
+ for (var i=0; i<rows.length; i++) {
115
+ var cell = rows[i].firstChild;
116
+
117
+ if (cell.nodeName != "TD" && cell.nodeName != "TH")
118
+ cell = nextCell(cell);
119
+
120
+ do {
121
+ cell = updateCell(cell, true);
122
+ } while ((cell = nextCell(cell)) != null);
123
+ }
124
+
125
+ break;
126
+ }
127
+
128
+ ed.addVisual();
129
+ ed.nodeChanged();
130
+ inst.execCommand('mceEndUndoLevel');
131
+ tinyMCEPopup.close();
132
+ }
133
+
134
+ function nextCell(elm) {
135
+ while ((elm = elm.nextSibling) != null) {
136
+ if (elm.nodeName == "TD" || elm.nodeName == "TH")
137
+ return elm;
138
+ }
139
+
140
+ return null;
141
+ }
142
+
143
+ function updateCell(td, skip_id) {
144
+ var inst = ed;
145
+ var formObj = document.forms[0];
146
+ var curCellType = td.nodeName.toLowerCase();
147
+ var celltype = getSelectValue(formObj, 'celltype');
148
+ var doc = inst.getDoc();
149
+ var dom = ed.dom;
150
+
151
+ if (!skip_id)
152
+ td.setAttribute('id', formObj.id.value);
153
+
154
+ td.setAttribute('align', formObj.align.value);
155
+ td.setAttribute('vAlign', formObj.valign.value);
156
+ td.setAttribute('lang', formObj.lang.value);
157
+ td.setAttribute('dir', getSelectValue(formObj, 'dir'));
158
+ td.setAttribute('style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));
159
+ td.setAttribute('scope', formObj.scope.value);
160
+ ed.dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
161
+
162
+ // Clear deprecated attributes
163
+ ed.dom.setAttrib(td, 'width', '');
164
+ ed.dom.setAttrib(td, 'height', '');
165
+ ed.dom.setAttrib(td, 'bgColor', '');
166
+ ed.dom.setAttrib(td, 'borderColor', '');
167
+ ed.dom.setAttrib(td, 'background', '');
168
+
169
+ // Set styles
170
+ td.style.width = getCSSSize(formObj.width.value);
171
+ td.style.height = getCSSSize(formObj.height.value);
172
+ if (formObj.bordercolor.value != "") {
173
+ td.style.borderColor = formObj.bordercolor.value;
174
+ td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;
175
+ td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;
176
+ } else
177
+ td.style.borderColor = '';
178
+
179
+ td.style.backgroundColor = formObj.bgcolor.value;
180
+
181
+ if (formObj.backgroundimage.value != "")
182
+ td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
183
+ else
184
+ td.style.backgroundImage = '';
185
+
186
+ if (curCellType != celltype) {
187
+ // changing to a different node type
188
+ var newCell = doc.createElement(celltype);
189
+
190
+ for (var c=0; c<td.childNodes.length; c++)
191
+ newCell.appendChild(td.childNodes[c].cloneNode(1));
192
+
193
+ for (var a=0; a<td.attributes.length; a++)
194
+ ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));
195
+
196
+ td.parentNode.replaceChild(newCell, td);
197
+ td = newCell;
198
+ }
199
+
200
+ dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));
201
+
202
+ return td;
203
+ }
204
+
205
+ function changedBackgroundImage() {
206
+ var formObj = document.forms[0];
207
+ var st = ed.dom.parseStyle(formObj.style.value);
208
+
209
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
210
+
211
+ formObj.style.value = ed.dom.serializeStyle(st);
212
+ }
213
+
214
+ function changedSize() {
215
+ var formObj = document.forms[0];
216
+ var st = ed.dom.parseStyle(formObj.style.value);
217
+
218
+ var width = formObj.width.value;
219
+ if (width != "")
220
+ st['width'] = getCSSSize(width);
221
+ else
222
+ st['width'] = "";
223
+
224
+ var height = formObj.height.value;
225
+ if (height != "")
226
+ st['height'] = getCSSSize(height);
227
+ else
228
+ st['height'] = "";
229
+
230
+ formObj.style.value = ed.dom.serializeStyle(st);
231
+ }
232
+
233
+ function changedColor() {
234
+ var formObj = document.forms[0];
235
+ var st = ed.dom.parseStyle(formObj.style.value);
236
+
237
+ st['background-color'] = formObj.bgcolor.value;
238
+ st['border-color'] = formObj.bordercolor.value;
239
+
240
+ formObj.style.value = ed.dom.serializeStyle(st);
241
+ }
242
+
243
+ function changedStyle() {
244
+ var formObj = document.forms[0];
245
+ var st = ed.dom.parseStyle(formObj.style.value);
246
+
247
+ if (st['background-image'])
248
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
249
+ else
250
+ formObj.backgroundimage.value = '';
251
+
252
+ if (st['width'])
253
+ formObj.width.value = trimSize(st['width']);
254
+
255
+ if (st['height'])
256
+ formObj.height.value = trimSize(st['height']);
257
+
258
+ if (st['background-color']) {
259
+ formObj.bgcolor.value = st['background-color'];
260
+ updateColor('bgcolor_pick','bgcolor');
261
+ }
262
+
263
+ if (st['border-color']) {
264
+ formObj.bordercolor.value = st['border-color'];
265
+ updateColor('bordercolor_pick','bordercolor');
266
+ }
267
+ }
268
+
269
+ tinyMCEPopup.onInit.add(init);
tiny_mce/plugins/table/js/merge_cells.js ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ function init() {
4
+ var f = document.forms[0], v;
5
+
6
+ tinyMCEPopup.resizeToInnerSize();
7
+
8
+ f.numcols.value = tinyMCEPopup.getWindowArg('numcols', 1);
9
+ f.numrows.value = tinyMCEPopup.getWindowArg('numrows', 1);
10
+ }
11
+
12
+ function mergeCells() {
13
+ var args = [], f = document.forms[0];
14
+
15
+ tinyMCEPopup.restoreSelection();
16
+
17
+ if (!AutoValidator.validate(f)) {
18
+ tinyMCEPopup.alert(tinyMCEPopup.getLang('invalid_data'));
19
+ return false;
20
+ }
21
+
22
+ args["numcols"] = f.numcols.value;
23
+ args["numrows"] = f.numrows.value;
24
+
25
+ tinyMCEPopup.execCommand("mceTableMergeCells", false, args);
26
+ tinyMCEPopup.close();
27
+ }
28
+
29
+ tinyMCEPopup.onInit.add(init);
tiny_mce/plugins/table/js/row.js ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ function init() {
4
+ tinyMCEPopup.resizeToInnerSize();
5
+
6
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
7
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
8
+
9
+ var inst = tinyMCEPopup.editor;
10
+ var dom = inst.dom;
11
+ var trElm = dom.getParent(inst.selection.getNode(), "tr");
12
+ var formObj = document.forms[0];
13
+ var st = dom.parseStyle(dom.getAttrib(trElm, "style"));
14
+
15
+ // Get table row data
16
+ var rowtype = trElm.parentNode.nodeName.toLowerCase();
17
+ var align = dom.getAttrib(trElm, 'align');
18
+ var valign = dom.getAttrib(trElm, 'valign');
19
+ var height = trimSize(getStyle(trElm, 'height', 'height'));
20
+ var className = dom.getAttrib(trElm, 'class');
21
+ var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));
22
+ var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;
23
+ var id = dom.getAttrib(trElm, 'id');
24
+ var lang = dom.getAttrib(trElm, 'lang');
25
+ var dir = dom.getAttrib(trElm, 'dir');
26
+
27
+ // Setup form
28
+ addClassesToList('class', 'table_row_styles');
29
+ TinyMCE_EditableSelects.init();
30
+
31
+ formObj.bgcolor.value = bgcolor;
32
+ formObj.backgroundimage.value = backgroundimage;
33
+ formObj.height.value = height;
34
+ formObj.id.value = id;
35
+ formObj.lang.value = lang;
36
+ formObj.style.value = dom.serializeStyle(st);
37
+ selectByValue(formObj, 'align', align);
38
+ selectByValue(formObj, 'valign', valign);
39
+ selectByValue(formObj, 'class', className, true, true);
40
+ selectByValue(formObj, 'rowtype', rowtype);
41
+ selectByValue(formObj, 'dir', dir);
42
+
43
+ // Resize some elements
44
+ if (isVisible('backgroundimagebrowser'))
45
+ document.getElementById('backgroundimage').style.width = '180px';
46
+
47
+ updateColor('bgcolor_pick', 'bgcolor');
48
+ }
49
+
50
+ function updateAction() {
51
+ var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];
52
+ var action = getSelectValue(formObj, 'action');
53
+
54
+ tinyMCEPopup.restoreSelection();
55
+ trElm = dom.getParent(inst.selection.getNode(), "tr");
56
+ tableElm = dom.getParent(inst.selection.getNode(), "table");
57
+
58
+ inst.execCommand('mceBeginUndoLevel');
59
+
60
+ switch (action) {
61
+ case "row":
62
+ updateRow(trElm);
63
+ break;
64
+
65
+ case "all":
66
+ var rows = tableElm.getElementsByTagName("tr");
67
+
68
+ for (var i=0; i<rows.length; i++)
69
+ updateRow(rows[i], true);
70
+
71
+ break;
72
+
73
+ case "odd":
74
+ case "even":
75
+ var rows = tableElm.getElementsByTagName("tr");
76
+
77
+ for (var i=0; i<rows.length; i++) {
78
+ if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))
79
+ updateRow(rows[i], true, true);
80
+ }
81
+
82
+ break;
83
+ }
84
+
85
+ inst.addVisual();
86
+ inst.nodeChanged();
87
+ inst.execCommand('mceEndUndoLevel');
88
+ tinyMCEPopup.close();
89
+ }
90
+
91
+ function updateRow(tr_elm, skip_id, skip_parent) {
92
+ var inst = tinyMCEPopup.editor;
93
+ var formObj = document.forms[0];
94
+ var dom = inst.dom;
95
+ var curRowType = tr_elm.parentNode.nodeName.toLowerCase();
96
+ var rowtype = getSelectValue(formObj, 'rowtype');
97
+ var doc = inst.getDoc();
98
+
99
+ // Update row element
100
+ if (!skip_id)
101
+ tr_elm.setAttribute('id', formObj.id.value);
102
+
103
+ tr_elm.setAttribute('align', getSelectValue(formObj, 'align'));
104
+ tr_elm.setAttribute('vAlign', getSelectValue(formObj, 'valign'));
105
+ tr_elm.setAttribute('lang', formObj.lang.value);
106
+ tr_elm.setAttribute('dir', getSelectValue(formObj, 'dir'));
107
+ tr_elm.setAttribute('style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));
108
+ dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
109
+
110
+ // Clear deprecated attributes
111
+ tr_elm.setAttribute('background', '');
112
+ tr_elm.setAttribute('bgColor', '');
113
+ tr_elm.setAttribute('height', '');
114
+
115
+ // Set styles
116
+ tr_elm.style.height = getCSSSize(formObj.height.value);
117
+ tr_elm.style.backgroundColor = formObj.bgcolor.value;
118
+
119
+ if (formObj.backgroundimage.value != "")
120
+ tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
121
+ else
122
+ tr_elm.style.backgroundImage = '';
123
+
124
+ // Setup new rowtype
125
+ if (curRowType != rowtype && !skip_parent) {
126
+ // first, clone the node we are working on
127
+ var newRow = tr_elm.cloneNode(1);
128
+
129
+ // next, find the parent of its new destination (creating it if necessary)
130
+ var theTable = dom.getParent(tr_elm, "table");
131
+ var dest = rowtype;
132
+ var newParent = null;
133
+ for (var i = 0; i < theTable.childNodes.length; i++) {
134
+ if (theTable.childNodes[i].nodeName.toLowerCase() == dest)
135
+ newParent = theTable.childNodes[i];
136
+ }
137
+
138
+ if (newParent == null) {
139
+ newParent = doc.createElement(dest);
140
+
141
+ if (dest == "thead") {
142
+ if (theTable.firstChild.nodeName == 'CAPTION')
143
+ inst.dom.insertAfter(newParent, theTable.firstChild);
144
+ else
145
+ theTable.insertBefore(newParent, theTable.firstChild);
146
+ } else
147
+ theTable.appendChild(newParent);
148
+ }
149
+
150
+ // append the row to the new parent
151
+ newParent.appendChild(newRow);
152
+
153
+ // remove the original
154
+ tr_elm.parentNode.removeChild(tr_elm);
155
+
156
+ // set tr_elm to the new node
157
+ tr_elm = newRow;
158
+ }
159
+
160
+ dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));
161
+ }
162
+
163
+ function changedBackgroundImage() {
164
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
165
+ var st = dom.parseStyle(formObj.style.value);
166
+
167
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
168
+
169
+ formObj.style.value = dom.serializeStyle(st);
170
+ }
171
+
172
+ function changedStyle() {
173
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
174
+ var st = dom.parseStyle(formObj.style.value);
175
+
176
+ if (st['background-image'])
177
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
178
+ else
179
+ formObj.backgroundimage.value = '';
180
+
181
+ if (st['height'])
182
+ formObj.height.value = trimSize(st['height']);
183
+
184
+ if (st['background-color']) {
185
+ formObj.bgcolor.value = st['background-color'];
186
+ updateColor('bgcolor_pick','bgcolor');
187
+ }
188
+ }
189
+
190
+ function changedSize() {
191
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
192
+ var st = dom.parseStyle(formObj.style.value);
193
+
194
+ var height = formObj.height.value;
195
+ if (height != "")
196
+ st['height'] = getCSSSize(height);
197
+ else
198
+ st['height'] = "";
199
+
200
+ formObj.style.value = dom.serializeStyle(st);
201
+ }
202
+
203
+ function changedColor() {
204
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
205
+ var st = dom.parseStyle(formObj.style.value);
206
+
207
+ st['background-color'] = formObj.bgcolor.value;
208
+
209
+ formObj.style.value = dom.serializeStyle(st);
210
+ }
211
+
212
+ tinyMCEPopup.onInit.add(init);
tiny_mce/plugins/table/js/table.js ADDED
@@ -0,0 +1,440 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;
4
+
5
+ function insertTable() {
6
+ var formObj = document.forms[0];
7
+ var inst = tinyMCEPopup.editor, dom = inst.dom;
8
+ var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules;
9
+ var html = '', capEl, elm;
10
+ var cellLimit, rowLimit, colLimit;
11
+
12
+ tinyMCEPopup.restoreSelection();
13
+
14
+ if (!AutoValidator.validate(formObj)) {
15
+ tinyMCEPopup.alert(inst.getLang('invalid_data'));
16
+ return false;
17
+ }
18
+
19
+ elm = dom.getParent(inst.selection.getNode(), 'table');
20
+
21
+ // Get form data
22
+ cols = formObj.elements['cols'].value;
23
+ rows = formObj.elements['rows'].value;
24
+ border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;
25
+ cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";
26
+ cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";
27
+ align = formObj.elements['align'].options[formObj.elements['align'].selectedIndex].value;
28
+ frame = formObj.elements['frame'].options[formObj.elements['frame'].selectedIndex].value;
29
+ rules = formObj.elements['rules'].options[formObj.elements['rules'].selectedIndex].value;
30
+ width = formObj.elements['width'].value;
31
+ height = formObj.elements['height'].value;
32
+ bordercolor = formObj.elements['bordercolor'].value;
33
+ bgcolor = formObj.elements['bgcolor'].value;
34
+ className = formObj.elements['class'].options[formObj.elements['class'].selectedIndex].value;
35
+ id = formObj.elements['id'].value;
36
+ summary = formObj.elements['summary'].value;
37
+ style = formObj.elements['style'].value;
38
+ dir = formObj.elements['dir'].value;
39
+ lang = formObj.elements['lang'].value;
40
+ background = formObj.elements['backgroundimage'].value;
41
+ caption = formObj.elements['caption'].checked;
42
+
43
+ cellLimit = tinyMCEPopup.getParam('table_cell_limit', false);
44
+ rowLimit = tinyMCEPopup.getParam('table_row_limit', false);
45
+ colLimit = tinyMCEPopup.getParam('table_col_limit', false);
46
+
47
+ // Validate table size
48
+ if (colLimit && cols > colLimit) {
49
+ tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit));
50
+ return false;
51
+ } else if (rowLimit && rows > rowLimit) {
52
+ tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit));
53
+ return false;
54
+ } else if (cellLimit && cols * rows > cellLimit) {
55
+ tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit));
56
+ return false;
57
+ }
58
+
59
+ // Update table
60
+ if (action == "update") {
61
+ inst.execCommand('mceBeginUndoLevel');
62
+
63
+ dom.setAttrib(elm, 'cellPadding', cellpadding, true);
64
+ dom.setAttrib(elm, 'cellSpacing', cellspacing, true);
65
+ dom.setAttrib(elm, 'border', border);
66
+ dom.setAttrib(elm, 'align', align);
67
+ dom.setAttrib(elm, 'frame', frame);
68
+ dom.setAttrib(elm, 'rules', rules);
69
+ dom.setAttrib(elm, 'class', className);
70
+ dom.setAttrib(elm, 'style', style);
71
+ dom.setAttrib(elm, 'id', id);
72
+ dom.setAttrib(elm, 'summary', summary);
73
+ dom.setAttrib(elm, 'dir', dir);
74
+ dom.setAttrib(elm, 'lang', lang);
75
+
76
+ capEl = inst.dom.select('caption', elm)[0];
77
+
78
+ if (capEl && !caption)
79
+ capEl.parentNode.removeChild(capEl);
80
+
81
+ if (!capEl && caption) {
82
+ capEl = elm.ownerDocument.createElement('caption');
83
+
84
+ if (!tinymce.isIE)
85
+ capEl.innerHTML = '<br mce_bogus="1"/>';
86
+
87
+ elm.insertBefore(capEl, elm.firstChild);
88
+ }
89
+
90
+ if (width && inst.settings.inline_styles) {
91
+ dom.setStyle(elm, 'width', width);
92
+ dom.setAttrib(elm, 'width', '');
93
+ } else {
94
+ dom.setAttrib(elm, 'width', width, true);
95
+ dom.setStyle(elm, 'width', '');
96
+ }
97
+
98
+ // Remove these since they are not valid XHTML
99
+ dom.setAttrib(elm, 'borderColor', '');
100
+ dom.setAttrib(elm, 'bgColor', '');
101
+ dom.setAttrib(elm, 'background', '');
102
+
103
+ if (height && inst.settings.inline_styles) {
104
+ dom.setStyle(elm, 'height', height);
105
+ dom.setAttrib(elm, 'height', '');
106
+ } else {
107
+ dom.setAttrib(elm, 'height', height, true);
108
+ dom.setStyle(elm, 'height', '');
109
+ }
110
+
111
+ if (background != '')
112
+ elm.style.backgroundImage = "url('" + background + "')";
113
+ else
114
+ elm.style.backgroundImage = '';
115
+
116
+ /* if (tinyMCEPopup.getParam("inline_styles")) {
117
+ if (width != '')
118
+ elm.style.width = getCSSSize(width);
119
+ }*/
120
+
121
+ if (bordercolor != "") {
122
+ elm.style.borderColor = bordercolor;
123
+ elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;
124
+ elm.style.borderWidth = border == "" ? "1px" : border;
125
+ } else
126
+ elm.style.borderColor = '';
127
+
128
+ elm.style.backgroundColor = bgcolor;
129
+ elm.style.height = getCSSSize(height);
130
+
131
+ inst.addVisual();
132
+
133
+ // Fix for stange MSIE align bug
134
+ //elm.outerHTML = elm.outerHTML;
135
+
136
+ inst.nodeChanged();
137
+ inst.execCommand('mceEndUndoLevel');
138
+
139
+ // Repaint if dimensions changed
140
+ if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)
141
+ inst.execCommand('mceRepaint');
142
+
143
+ tinyMCEPopup.close();
144
+ return true;
145
+ }
146
+
147
+ // Create new table
148
+ html += '<table';
149
+
150
+ html += makeAttrib('id', id);
151
+ html += makeAttrib('border', border);
152
+ html += makeAttrib('cellpadding', cellpadding);
153
+ html += makeAttrib('cellspacing', cellspacing);
154
+
155
+ if (width && inst.settings.inline_styles) {
156
+ if (style)
157
+ style += '; ';
158
+
159
+ // Force px
160
+ if (/^[0-9\.]+$/.test(width))
161
+ width += 'px';
162
+
163
+ style += 'width: ' + width;
164
+ } else
165
+ html += makeAttrib('width', width);
166
+
167
+ /* if (height) {
168
+ if (style)
169
+ style += '; ';
170
+
171
+ style += 'height: ' + height;
172
+ }*/
173
+
174
+ //html += makeAttrib('height', height);
175
+ //html += makeAttrib('bordercolor', bordercolor);
176
+ //html += makeAttrib('bgcolor', bgcolor);
177
+ html += makeAttrib('align', align);
178
+ html += makeAttrib('frame', frame);
179
+ html += makeAttrib('rules', rules);
180
+ html += makeAttrib('class', className);
181
+ html += makeAttrib('style', style);
182
+ html += makeAttrib('summary', summary);
183
+ html += makeAttrib('dir', dir);
184
+ html += makeAttrib('lang', lang);
185
+ html += '>';
186
+
187
+ if (caption) {
188
+ if (!tinymce.isIE)
189
+ html += '<caption><br mce_bogus="1"/></caption>';
190
+ else
191
+ html += '<caption></caption>';
192
+ }
193
+
194
+ for (var y=0; y<rows; y++) {
195
+ html += "<tr>";
196
+
197
+ for (var x=0; x<cols; x++) {
198
+ if (!tinymce.isIE)
199
+ html += '<td><br mce_bogus="1"/></td>';
200
+ else
201
+ html += '<td></td>';
202
+ }
203
+
204
+ html += "</tr>";
205
+ }
206
+
207
+ html += "</table>";
208
+
209
+ inst.execCommand('mceBeginUndoLevel');
210
+
211
+ // Move table
212
+ if (inst.settings.fix_table_elements) {
213
+ var bm = inst.selection.getBookmark(), patt = '';
214
+
215
+ inst.execCommand('mceInsertContent', false, '<br class="_mce_marker" />');
216
+
217
+ tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) {
218
+ if (patt)
219
+ patt += ',';
220
+
221
+ patt += n + ' ._mce_marker';
222
+ });
223
+
224
+ tinymce.each(inst.dom.select(patt), function(n) {
225
+ inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n);
226
+ });
227
+
228
+ dom.setOuterHTML(dom.select('._mce_marker')[0], html);
229
+
230
+ inst.selection.moveToBookmark(bm);
231
+ } else
232
+ inst.execCommand('mceInsertContent', false, html);
233
+
234
+ inst.addVisual();
235
+ inst.execCommand('mceEndUndoLevel');
236
+
237
+ tinyMCEPopup.close();
238
+ }
239
+
240
+ function makeAttrib(attrib, value) {
241
+ var formObj = document.forms[0];
242
+ var valueElm = formObj.elements[attrib];
243
+
244
+ if (typeof(value) == "undefined" || value == null) {
245
+ value = "";
246
+
247
+ if (valueElm)
248
+ value = valueElm.value;
249
+ }
250
+
251
+ if (value == "")
252
+ return "";
253
+
254
+ // XML encode it
255
+ value = value.replace(/&/g, '&amp;');
256
+ value = value.replace(/\"/g, '&quot;');
257
+ value = value.replace(/</g, '&lt;');
258
+ value = value.replace(/>/g, '&gt;');
259
+
260
+ return ' ' + attrib + '="' + value + '"';
261
+ }
262
+
263
+ function init() {
264
+ tinyMCEPopup.resizeToInnerSize();
265
+
266
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
267
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
268
+ document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
269
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
270
+
271
+ var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');
272
+ var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";
273
+ var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules, frame;
274
+ var inst = tinyMCEPopup.editor, dom = inst.dom;
275
+ var formObj = document.forms[0];
276
+ var elm = dom.getParent(inst.selection.getNode(), "table");
277
+
278
+ action = tinyMCEPopup.getWindowArg('action');
279
+
280
+ if (!action)
281
+ action = elm ? "update" : "insert";
282
+
283
+ if (elm && action != "insert") {
284
+ var rowsAr = elm.rows;
285
+ var cols = 0;
286
+ for (var i=0; i<rowsAr.length; i++)
287
+ if (rowsAr[i].cells.length > cols)
288
+ cols = rowsAr[i].cells.length;
289
+
290
+ cols = cols;
291
+ rows = rowsAr.length;
292
+
293
+ st = dom.parseStyle(dom.getAttrib(elm, "style"));
294
+ border = trimSize(getStyle(elm, 'border', 'borderWidth'));
295
+ cellpadding = dom.getAttrib(elm, 'cellpadding', "");
296
+ cellspacing = dom.getAttrib(elm, 'cellspacing', "");
297
+ width = trimSize(getStyle(elm, 'width', 'width'));
298
+ height = trimSize(getStyle(elm, 'height', 'height'));
299
+ bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));
300
+ bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));
301
+ align = dom.getAttrib(elm, 'align', align);
302
+ frame = dom.getAttrib(elm, 'frame');
303
+ rules = dom.getAttrib(elm, 'rules');
304
+ className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));
305
+ id = dom.getAttrib(elm, 'id');
306
+ summary = dom.getAttrib(elm, 'summary');
307
+ style = dom.serializeStyle(st);
308
+ dir = dom.getAttrib(elm, 'dir');
309
+ lang = dom.getAttrib(elm, 'lang');
310
+ background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
311
+ formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;
312
+
313
+ orgTableWidth = width;
314
+ orgTableHeight = height;
315
+
316
+ action = "update";
317
+ formObj.insert.value = inst.getLang('update');
318
+ }
319
+
320
+ addClassesToList('class', "table_styles");
321
+ TinyMCE_EditableSelects.init();
322
+
323
+ // Update form
324
+ selectByValue(formObj, 'align', align);
325
+ selectByValue(formObj, 'frame', frame);
326
+ selectByValue(formObj, 'rules', rules);
327
+ selectByValue(formObj, 'class', className, true, true);
328
+ formObj.cols.value = cols;
329
+ formObj.rows.value = rows;
330
+ formObj.border.value = border;
331
+ formObj.cellpadding.value = cellpadding;
332
+ formObj.cellspacing.value = cellspacing;
333
+ formObj.width.value = width;
334
+ formObj.height.value = height;
335
+ formObj.bordercolor.value = bordercolor;
336
+ formObj.bgcolor.value = bgcolor;
337
+ formObj.id.value = id;
338
+ formObj.summary.value = summary;
339
+ formObj.style.value = style;
340
+ formObj.dir.value = dir;
341
+ formObj.lang.value = lang;
342
+ formObj.backgroundimage.value = background;
343
+
344
+ updateColor('bordercolor_pick', 'bordercolor');
345
+ updateColor('bgcolor_pick', 'bgcolor');
346
+
347
+ // Resize some elements
348
+ if (isVisible('backgroundimagebrowser'))
349
+ document.getElementById('backgroundimage').style.width = '180px';
350
+
351
+ // Disable some fields in update mode
352
+ if (action == "update") {
353
+ formObj.cols.disabled = true;
354
+ formObj.rows.disabled = true;
355
+ }
356
+ }
357
+
358
+ function changedSize() {
359
+ var formObj = document.forms[0];
360
+ var st = dom.parseStyle(formObj.style.value);
361
+
362
+ /* var width = formObj.width.value;
363
+ if (width != "")
364
+ st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";
365
+ else
366
+ st['width'] = "";*/
367
+
368
+ var height = formObj.height.value;
369
+ if (height != "")
370
+ st['height'] = getCSSSize(height);
371
+ else
372
+ st['height'] = "";
373
+
374
+ formObj.style.value = dom.serializeStyle(st);
375
+ }
376
+
377
+ function changedBackgroundImage() {
378
+ var formObj = document.forms[0];
379
+ var st = dom.parseStyle(formObj.style.value);
380
+
381
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
382
+
383
+ formObj.style.value = dom.serializeStyle(st);
384
+ }
385
+
386
+ function changedBorder() {
387
+ var formObj = document.forms[0];
388
+ var st = dom.parseStyle(formObj.style.value);
389
+
390
+ // Update border width if the element has a color
391
+ if (formObj.border.value != "" && formObj.bordercolor.value != "")
392
+ st['border-width'] = formObj.border.value + "px";
393
+
394
+ formObj.style.value = dom.serializeStyle(st);
395
+ }
396
+
397
+ function changedColor() {
398
+ var formObj = document.forms[0];
399
+ var st = dom.parseStyle(formObj.style.value);
400
+
401
+ st['background-color'] = formObj.bgcolor.value;
402
+
403
+ if (formObj.bordercolor.value != "") {
404
+ st['border-color'] = formObj.bordercolor.value;
405
+
406
+ // Add border-width if it's missing
407
+ if (!st['border-width'])
408
+ st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px";
409
+ }
410
+
411
+ formObj.style.value = dom.serializeStyle(st);
412
+ }
413
+
414
+ function changedStyle() {
415
+ var formObj = document.forms[0];
416
+ var st = dom.parseStyle(formObj.style.value);
417
+
418
+ if (st['background-image'])
419
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
420
+ else
421
+ formObj.backgroundimage.value = '';
422
+
423
+ if (st['width'])
424
+ formObj.width.value = trimSize(st['width']);
425
+
426
+ if (st['height'])
427
+ formObj.height.value = trimSize(st['height']);
428
+
429
+ if (st['background-color']) {
430
+ formObj.bgcolor.value = st['background-color'];
431
+ updateColor('bgcolor_pick','bgcolor');
432
+ }
433
+
434
+ if (st['border-color']) {
435
+ formObj.bordercolor.value = st['border-color'];
436
+ updateColor('bordercolor_pick','bordercolor');
437
+ }
438
+ }
439
+
440
+ tinyMCEPopup.onInit.add(init);
tiny_mce/plugins/table/langs/en_dlg.js ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCE.addI18n('en.table_dlg',{
2
+ general_tab:"General",
3
+ advanced_tab:"Advanced",
4
+ general_props:"General properties",
5
+ advanced_props:"Advanced properties",
6
+ rowtype:"Row in table part",
7
+ title:"Insert/Modify table",
8
+ width:"Width",
9
+ height:"Height",
10
+ cols:"Cols",
11
+ rows:"Rows",
12
+ cellspacing:"Cellspacing",
13
+ cellpadding:"Cellpadding",
14
+ border:"Border",
15
+ align:"Alignment",
16
+ align_default:"Default",
17
+ align_left:"Left",
18
+ align_right:"Right",
19
+ align_middle:"Center",
20
+ row_title:"Table row properties",
21
+ cell_title:"Table cell properties",
22
+ cell_type:"Cell type",
23
+ valign:"Vertical alignment",
24
+ align_top:"Top",
25
+ align_bottom:"Bottom",
26
+ bordercolor:"Border color",
27
+ bgcolor:"Background color",
28
+ merge_cells_title:"Merge table cells",
29
+ id:"Id",
30
+ style:"Style",
31
+ langdir:"Language direction",
32
+ langcode:"Language code",
33
+ mime:"Target MIME type",
34
+ ltr:"Left to right",
35
+ rtl:"Right to left",
36
+ bgimage:"Background image",
37
+ summary:"Summary",
38
+ td:"Data",
39
+ th:"Header",
40
+ cell_cell:"Update current cell",
41
+ cell_row:"Update all cells in row",
42
+ cell_all:"Update all cells in table",
43
+ row_row:"Update current row",
44
+ row_odd:"Update odd rows in table",
45
+ row_even:"Update even rows in table",
46
+ row_all:"Update all rows in table",
47
+ thead:"Table Head",
48
+ tbody:"Table Body",
49
+ tfoot:"Table Foot",
50
+ scope:"Scope",
51
+ rowgroup:"Row Group",
52
+ colgroup:"Col Group",
53
+ col_limit:"You've exceeded the maximum number of columns of {$cols}.",
54
+ row_limit:"You've exceeded the maximum number of rows of {$rows}.",
55
+ cell_limit:"You've exceeded the maximum number of cells of {$cells}.",
56
+ missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.",
57
+ caption:"Table caption",
58
+ frame:"Frame",
59
+ frame_none:"none",
60
+ frame_groups:"groups",
61
+ frame_rows:"rows",
62
+ frame_cols:"cols",
63
+ frame_all:"all",
64
+ rules:"Rules",
65
+ rules_void:"void",
66
+ rules_above:"above",
67
+ rules_below:"below",
68
+ rules_hsides:"hsides",
69
+ rules_lhs:"lhs",
70
+ rules_rhs:"rhs",
71
+ rules_vsides:"vsides",
72
+ rules_box:"box",
73
+ rules_border:"border"
74
+ });
tiny_mce/plugins/table/merge_cells.htm ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#table_dlg.merge_cells_title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../utils/validate.js"></script>
8
+ <script type="text/javascript" src="js/merge_cells.js"></script>
9
+ </head>
10
+ <body style="margin: 8px">
11
+ <form onsubmit="mergeCells();return false;" action="#">
12
+ <fieldset>
13
+ <legend>{#table_dlg.merge_cells_title}</legend>
14
+ <table border="0" cellpadding="0" cellspacing="3" width="100%">
15
+ <tr>
16
+ <td>{#table_dlg.cols}:</td>
17
+ <td align="right"><input type="text" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" /></td>
18
+ </tr>
19
+ <tr>
20
+ <td>{#table_dlg.rows}:</td>
21
+ <td align="right"><input type="text" name="numrows" value="" class="number min1" style="width: 30px" /></td>
22
+ </tr>
23
+ </table>
24
+ </fieldset>
25
+
26
+ <div class="mceActionPanel">
27
+ <div style="float: left">
28
+ <input type="submit" id="insert" name="insert" value="{#update}" />
29
+ </div>
30
+
31
+ <div style="float: right">
32
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
33
+ </div>
34
+ </div>
35
+ </form>
36
+ </body>
37
+ </html>
tiny_mce/plugins/table/row.htm ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#table_dlg.row_title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>
8
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
9
+ <script type="text/javascript" src="js/row.js"></script>
10
+ <link href="css/row.css" rel="stylesheet" type="text/css" />
11
+ </head>
12
+ <body id="tablerow" style="display: none">
13
+ <form onsubmit="updateAction();return false;" action="#">
14
+ <div class="tabs">
15
+ <ul>
16
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
17
+ <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
18
+ </ul>
19
+ </div>
20
+
21
+ <div class="panel_wrapper">
22
+ <div id="general_panel" class="panel current">
23
+ <fieldset>
24
+ <legend>{#table_dlg.general_props}</legend>
25
+
26
+ <table border="0" cellpadding="4" cellspacing="0">
27
+ <tr>
28
+ <td><label for="rowtype">{#table_dlg.rowtype}</label></td>
29
+ <td class="col2">
30
+ <select id="rowtype" name="rowtype" class="mceFocus">
31
+ <option value="thead">{#table_dlg.thead}</option>
32
+ <option value="tbody">{#table_dlg.tbody}</option>
33
+ <option value="tfoot">{#table_dlg.tfoot}</option>
34
+ </select>
35
+ </td>
36
+ </tr>
37
+
38
+ <tr>
39
+ <td><label for="align">{#table_dlg.align}</label></td>
40
+ <td class="col2">
41
+ <select id="align" name="align">
42
+ <option value="">{#not_set}</option>
43
+ <option value="center">{#table_dlg.align_middle}</option>
44
+ <option value="left">{#table_dlg.align_left}</option>
45
+ <option value="right">{#table_dlg.align_right}</option>
46
+ </select>
47
+ </td>
48
+ </tr>
49
+
50
+ <tr>
51
+ <td><label for="valign">{#table_dlg.valign}</label></td>
52
+ <td class="col2">
53
+ <select id="valign" name="valign">
54
+ <option value="">{#not_set}</option>
55
+ <option value="top">{#table_dlg.align_top}</option>
56
+ <option value="middle">{#table_dlg.align_middle}</option>
57
+ <option value="bottom">{#table_dlg.align_bottom}</option>
58
+ </select>
59
+ </td>
60
+ </tr>
61
+
62
+ <tr id="styleSelectRow">
63
+ <td><label for="class">{#class_name}</label></td>
64
+ <td class="col2">
65
+ <select id="class" name="class" class="mceEditableSelect">
66
+ <option value="" selected="selected">{#not_set}</option>
67
+ </select>
68
+ </td>
69
+ </tr>
70
+
71
+ <tr>
72
+ <td><label for="height">{#table_dlg.height}</label></td>
73
+ <td class="col2"><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
74
+ </tr>
75
+ </table>
76
+ </fieldset>
77
+ </div>
78
+
79
+ <div id="advanced_panel" class="panel">
80
+ <fieldset>
81
+ <legend>{#table_dlg.advanced_props}</legend>
82
+
83
+ <table border="0" cellpadding="0" cellspacing="4">
84
+ <tr>
85
+ <td class="column1"><label for="id">{#table_dlg.id}</label></td>
86
+ <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
87
+ </tr>
88
+
89
+ <tr>
90
+ <td><label for="style">{#table_dlg.style}</label></td>
91
+ <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
92
+ </tr>
93
+
94
+ <tr>
95
+ <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
96
+ <td>
97
+ <select id="dir" name="dir" style="width: 200px">
98
+ <option value="">{#not_set}</option>
99
+ <option value="ltr">{#table_dlg.ltr}</option>
100
+ <option value="rtl">{#table_dlg.rtl}</option>
101
+ </select>
102
+ </td>
103
+ </tr>
104
+
105
+ <tr>
106
+ <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td>
107
+ <td>
108
+ <input id="lang" name="lang" type="text" value="" style="width: 200px" />
109
+ </td>
110
+ </tr>
111
+
112
+ <tr>
113
+ <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
114
+ <td>
115
+ <table border="0" cellpadding="0" cellspacing="0">
116
+ <tr>
117
+ <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>
118
+ <td id="backgroundimagebrowsercontainer">&nbsp;</td>
119
+ </tr>
120
+ </table>
121
+ </td>
122
+ </tr>
123
+
124
+ <tr>
125
+ <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
126
+ <td>
127
+ <table border="0" cellpadding="0" cellspacing="0">
128
+ <tr>
129
+ <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
130
+ <td id="bgcolor_pickcontainer">&nbsp;</td>
131
+ </tr>
132
+ </table>
133
+ </td>
134
+ </tr>
135
+ </table>
136
+ </fieldset>
137
+ </div>
138
+ </div>
139
+
140
+ <div class="mceActionPanel">
141
+ <div>
142
+ <select id="action" name="action">
143
+ <option value="row">{#table_dlg.row_row}</option>
144
+ <option value="odd">{#table_dlg.row_odd}</option>
145
+ <option value="even">{#table_dlg.row_even}</option>
146
+ <option value="all">{#table_dlg.row_all}</option>
147
+ </select>
148
+ </div>
149
+
150
+ <div style="float: left">
151
+ <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>
152
+ </div>
153
+
154
+ <div style="float: right">
155
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
156
+ </div>
157
+ </div>
158
+ </form>
159
+ </body>
160
+ </html>
tiny_mce/plugins/table/table.htm ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#table_dlg.title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>
8
+ <script type="text/javascript" src="../../utils/validate.js"></script>
9
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
10
+ <script type="text/javascript" src="js/table.js"></script>
11
+ <link href="css/table.css" rel="stylesheet" type="text/css" />
12
+ </head>
13
+ <body id="table" style="display: none">
14
+ <form onsubmit="insertTable();return false;" action="#">
15
+ <div class="tabs">
16
+ <ul>
17
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
18
+ <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
19
+ </ul>
20
+ </div>
21
+
22
+ <div class="panel_wrapper">
23
+ <div id="general_panel" class="panel current">
24
+ <fieldset>
25
+ <legend>{#table_dlg.general_props}</legend>
26
+ <table border="0" cellpadding="4" cellspacing="0" width="100%">
27
+ <tr>
28
+ <td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>
29
+ <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" /></td>
30
+ <td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>
31
+ <td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" /></td>
32
+ </tr>
33
+ <tr>
34
+ <td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>
35
+ <td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>
36
+ <td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>
37
+ <td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>
38
+ </tr>
39
+ <tr>
40
+ <td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>
41
+ <td><select id="align" name="align">
42
+ <option value="">{#not_set}</option>
43
+ <option value="center">{#table_dlg.align_middle}</option>
44
+ <option value="left">{#table_dlg.align_left}</option>
45
+ <option value="right">{#table_dlg.align_right}</option>
46
+ </select></td>
47
+ <td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>
48
+ <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="changedBorder();" class="number" /></td>
49
+ </tr>
50
+ <tr id="width_row">
51
+ <td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>
52
+ <td><input name="width" type="text" id="width" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>
53
+ <td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>
54
+ <td><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>
55
+ </tr>
56
+ <tr id="styleSelectRow">
57
+ <td><label id="classlabel" for="class">{#class_name}</label></td>
58
+ <td colspan="3">
59
+ <select id="class" name="class" class="mceEditableSelect">
60
+ <option value="" selected="selected">{#not_set}</option>
61
+ </select></td>
62
+ </tr>
63
+ <tr>
64
+ <td class="column1"><label for="caption">{#table_dlg.caption}</label></td>
65
+ <td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td>
66
+ </tr>
67
+ </table>
68
+ </fieldset>
69
+ </div>
70
+
71
+ <div id="advanced_panel" class="panel">
72
+ <fieldset>
73
+ <legend>{#table_dlg.advanced_props}</legend>
74
+
75
+ <table border="0" cellpadding="0" cellspacing="4">
76
+ <tr>
77
+ <td class="column1"><label for="id">{#table_dlg.id}</label></td>
78
+ <td><input id="id" name="id" type="text" value="" class="advfield" /></td>
79
+ </tr>
80
+
81
+ <tr>
82
+ <td class="column1"><label for="summary">{#table_dlg.summary}</label></td>
83
+ <td><input id="summary" name="summary" type="text" value="" class="advfield" /></td>
84
+ </tr>
85
+
86
+ <tr>
87
+ <td><label for="style">{#table_dlg.style}</label></td>
88
+ <td><input type="text" id="style" name="style" value="" class="advfield" onchange="changedStyle();" /></td>
89
+ </tr>
90
+
91
+ <tr>
92
+ <td class="column1"><label id="langlabel" for="lang">{#table_dlg.langcode}</label></td>
93
+ <td>
94
+ <input id="lang" name="lang" type="text" value="" class="advfield" />
95
+ </td>
96
+ </tr>
97
+
98
+ <tr>
99
+ <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
100
+ <td>
101
+ <table border="0" cellpadding="0" cellspacing="0">
102
+ <tr>
103
+ <td><input id="backgroundimage" name="backgroundimage" type="text" value="" class="advfield" onchange="changedBackgroundImage();" /></td>
104
+ <td id="backgroundimagebrowsercontainer">&nbsp;</td>
105
+ </tr>
106
+ </table>
107
+ </td>
108
+ </tr>
109
+
110
+ <tr>
111
+ <td class="column1"><label for="frame">{#table_dlg.frame}</label></td>
112
+ <td>
113
+ <select id="frame" name="frame" class="advfield">
114
+ <option value="">{#not_set}</option>
115
+ <option value="void">{#table_dlg.rules_void}</option>
116
+ <option value="above">{#table_dlg.rules_above}</option>
117
+ <option value="below">{#table_dlg.rules_below}</option>
118
+ <option value="hsides">{#table_dlg.rules_hsides}</option>
119
+ <option value="lhs">{#table_dlg.rules_lhs}</option>
120
+ <option value="rhs">{#table_dlg.rules_rhs}</option>
121
+ <option value="vsides">{#table_dlg.rules_vsides}</option>
122
+ <option value="box">{#table_dlg.rules_box}</option>
123
+ <option value="border">{#table_dlg.rules_border}</option>
124
+ </select>
125
+ </td>
126
+ </tr>
127
+
128
+ <tr>
129
+ <td class="column1"><label for="rules">{#table_dlg.rules}</label></td>
130
+ <td>
131
+ <select id="rules" name="rules" class="advfield">
132
+ <option value="">{#not_set}</option>
133
+ <option value="none">{#table_dlg.frame_none}</option>
134
+ <option value="groups">{#table_dlg.frame_groups}</option>
135
+ <option value="rows">{#table_dlg.frame_rows}</option>
136
+ <option value="cols">{#table_dlg.frame_cols}</option>
137
+ <option value="all">{#table_dlg.frame_all}</option>
138
+ </select>
139
+ </td>
140
+ </tr>
141
+
142
+ <tr>
143
+ <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
144
+ <td>
145
+ <select id="dir" name="dir" class="advfield">
146
+ <option value="">{#not_set}</option>
147
+ <option value="ltr">{#table_dlg.ltr}</option>
148
+ <option value="rtl">{#table_dlg.rtl}</option>
149
+ </select>
150
+ </td>
151
+ </tr>
152
+
153
+ <tr>
154
+ <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td>
155
+ <td>
156
+ <table border="0" cellpadding="0" cellspacing="0">
157
+ <tr>
158
+ <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>
159
+ <td id="bordercolor_pickcontainer">&nbsp;</td>
160
+ </tr>
161
+ </table>
162
+ </td>
163
+ </tr>
164
+
165
+ <tr>
166
+ <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
167
+ <td>
168
+ <table border="0" cellpadding="0" cellspacing="0">
169
+ <tr>
170
+ <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
171
+ <td id="bgcolor_pickcontainer">&nbsp;</td>
172
+ </tr>
173
+ </table>
174
+ </td>
175
+ </tr>
176
+ </table>
177
+ </fieldset>
178
+ </div>
179
+ </div>
180
+
181
+ <div class="mceActionPanel">
182
+ <div style="float: left">
183
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
184
+ </div>
185
+
186
+ <div style="float: right">
187
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
188
+ </div>
189
+ </div>
190
+ </form>
191
+ </body>
192
+ </html>
tiny_mce/themes/advanced/about.htm ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#advanced_dlg.about_title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="js/about.js"></script>
8
+ </head>
9
+ <body id="about" style="display: none">
10
+ <div class="tabs">
11
+ <ul>
12
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.about_general}</a></span></li>
13
+ <li id="help_tab" style="display:none"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{#advanced_dlg.about_help}</a></span></li>
14
+ <li id="plugins_tab"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{#advanced_dlg.about_plugins}</a></span></li>
15
+ </ul>
16
+ </div>
17
+
18
+ <div class="panel_wrapper">
19
+ <div id="general_panel" class="panel current">
20
+ <h3>{#advanced_dlg.about_title}</h3>
21
+ <p>Version: <span id="version"></span> (<span id="date"></span>)</p>
22
+ <p>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under <a href="../../license.txt" target="_blank">LGPL</a>
23
+ by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>
24
+ <p>Copyright &copy; 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>
25
+ <p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>
26
+
27
+ <div id="buttoncontainer">
28
+ <a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>
29
+ <a href="http://sourceforge.net/projects/tinymce/" target="_blank"><img src="http://sourceforge.net/sflogo.php?group_id=103281" alt="Hosted By Sourceforge" border="0" /></a>
30
+ <a href="http://www.freshmeat.net/projects/tinymce" target="_blank"><img src="http://tinymce.moxiecode.com/images/fm.gif" alt="Also on freshmeat" border="0" /></a>
31
+ </div>
32
+ </div>
33
+
34
+ <div id="plugins_panel" class="panel">
35
+ <div id="pluginscontainer">
36
+ <h3>{#advanced_dlg.about_loaded}</h3>
37
+
38
+ <div id="plugintablecontainer">
39
+ </div>
40
+
41
+ <p>&nbsp;</p>
42
+ </div>
43
+ </div>
44
+
45
+ <div id="help_panel" class="panel noscroll" style="overflow: visible;">
46
+ <div id="iframecontainer"></div>
47
+ </div>
48
+ </div>
49
+
50
+ <div class="mceActionPanel">
51
+ <div style="float: right">
52
+ <input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />
53
+ </div>
54
+ </div>
55
+ </body>
56
+ </html>
tiny_mce/themes/advanced/anchor.htm ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#advanced_dlg.anchor_title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="js/anchor.js"></script>
7
+ </head>
8
+ <body style="display: none">
9
+ <form onsubmit="AnchorDialog.update();return false;" action="#">
10
+ <table border="0" cellpadding="4" cellspacing="0">
11
+ <tr>
12
+ <td colspan="2" class="title">{#advanced_dlg.anchor_title}</td>
13
+ </tr>
14
+ <tr>
15
+ <td class="nowrap">{#advanced_dlg.anchor_name}:</td>
16
+ <td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" /></td>
17
+ </tr>
18
+ </table>
19
+
20
+ <div class="mceActionPanel">
21
+ <div style="float: left">
22
+ <input type="submit" id="insert" name="insert" value="{#update}" />
23
+ </div>
24
+
25
+ <div style="float: right">
26
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
27
+ </div>
28
+ </div>
29
+ </form>
30
+ </body>
31
+ </html>
tiny_mce/themes/advanced/charmap.htm ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#advanced_dlg.charmap_title}</title>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
6
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
7
+ <script type="text/javascript" src="js/charmap.js"></script>
8
+ </head>
9
+ <body id="charmap" style="display:none">
10
+ <table align="center" border="0" cellspacing="0" cellpadding="2">
11
+ <tr>
12
+ <td colspan="2" class="title">{#advanced_dlg.charmap_title}</td>
13
+ </tr>
14
+ <tr>
15
+ <td id="charmapView" rowspan="2" align="left" valign="top">
16
+ <!-- Chars will be rendered here -->
17
+ </td>
18
+ <td width="100" align="center" valign="top">
19
+ <table border="0" cellpadding="0" cellspacing="0" width="100" style="height:100px">
20
+ <tr>
21
+ <td id="codeV">&nbsp;</td>
22
+ </tr>
23
+ <tr>
24
+ <td id="codeN">&nbsp;</td>
25
+ </tr>
26
+ </table>
27
+ </td>
28
+ </tr>
29
+ <tr>
30
+ <td valign="bottom" style="padding-bottom: 3px;">
31
+ <table width="100" align="center" border="0" cellpadding="2" cellspacing="0">
32
+ <tr>
33
+ <td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;">HTML-Code</td>
34
+ </tr>
35
+ <tr>
36
+ <td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeA" align="center">&nbsp;</td>
37
+ </tr>
38
+ <tr>
39
+ <td style="font-size: 1px;">&nbsp;</td>
40
+ </tr>
41
+ <tr>
42
+ <td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;">NUM-Code</td>
43
+ </tr>
44
+ <tr>
45
+ <td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeB" align="center">&nbsp;</td>
46
+ </tr>
47
+ </table>
48
+ </td>
49
+ </tr>
50
+ </table>
51
+
52
+ </body>
53
+ </html>
tiny_mce/themes/advanced/color_picker.htm ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#advanced_dlg.colorpicker_title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="js/color_picker.js"></script>
8
+ </head>
9
+ <body id="colorpicker" style="display: none">
10
+ <form onsubmit="insertAction();return false" action="#">
11
+ <div class="tabs">
12
+ <ul>
13
+ <li id="picker_tab" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_picker_tab}</a></span></li>
14
+ <li id="rgb_tab"><span><a href="javascript:;" onclick="generateWebColors();mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_palette_tab}</a></span></li>
15
+ <li id="named_tab"><span><a href="javascript:;" onclick="generateNamedColors();javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_named_tab}</a></span></li>
16
+ </ul>
17
+ </div>
18
+
19
+ <div class="panel_wrapper">
20
+ <div id="picker_panel" class="panel current">
21
+ <fieldset>
22
+ <legend>{#advanced_dlg.colorpicker_picker_title}</legend>
23
+ <div id="picker">
24
+ <img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" alt=" " />
25
+
26
+ <div id="light">
27
+ <!-- Will be filled with divs -->
28
+ </div>
29
+
30
+ <br style="clear: both" />
31
+ </div>
32
+ </fieldset>
33
+ </div>
34
+
35
+ <div id="rgb_panel" class="panel">
36
+ <fieldset>
37
+ <legend>{#advanced_dlg.colorpicker_palette_title}</legend>
38
+ <div id="webcolors">
39
+ <!-- Gets filled with web safe colors-->
40
+ </div>
41
+
42
+ <br style="clear: both" />
43
+ </fieldset>
44
+ </div>
45
+
46
+ <div id="named_panel" class="panel">
47
+ <fieldset>
48
+ <legend>{#advanced_dlg.colorpicker_named_title}</legend>
49
+ <div id="namedcolors">
50
+ <!-- Gets filled with named colors-->
51
+ </div>
52
+
53
+ <br style="clear: both" />
54
+
55
+ <div id="colornamecontainer">
56
+ {#advanced_dlg.colorpicker_name} <span id="colorname"></span>
57
+ </div>
58
+ </fieldset>
59
+ </div>
60
+ </div>
61
+
62
+ <div class="mceActionPanel">
63
+ <div style="float: left">
64
+ <input type="submit" id="insert" name="insert" value="{#apply}" />
65
+ </div>
66
+
67
+ <div id="preview"></div>
68
+
69
+ <div id="previewblock">
70
+ <label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" maxlength="8" class="text mceFocus" />
71
+ </div>
72
+ </div>
73
+ </form>
74
+ </body>
75
+ </html>
tiny_mce/themes/advanced/editor_template.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);l.settings=m=h({theme_advanced_path:true,theme_advanced_toolbar_location:"bottom",theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";if(j.settings.convert_fonts_to_spans){o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}j.onInit.add(function(){j.onNodeChange.add(l._nodeChanged,l);if(j.settings.content_css!==false){j.dom.loadCSS(j.baseURI.toAbsolute("themes/advanced/skins/"+j.settings.skin+"/content.css"))}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(j){var i=this.editor,k=i.controlManager.get("styleselect");if(k.getLength()==0){f(i.dom.getClasses(),function(l){k.add(l["class"],l["class"])})}},_createStyleSelect:function(m){var j=this,i=j.editor,k=i.controlManager,l=k.createListBox("styleselect",{title:"advanced.style_select",onselect:function(n){if(l.selectedValue===n){i.execCommand("mceSetStyleInfo",0,{command:"removeformat"});l.select();return false}else{i.execCommand("mceSetCSSClass",0,n)}}});if(l){f(i.getParam("theme_advanced_styles","","hash"),function(o,n){if(o){l.add(j.editor.translate(n),o)}});l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",j._importClasses,j);b.add(p.id+"_text","mousedown",j._importClasses,j);b.add(p.id+"_open","focus",j._importClasses,j);b.add(p.id+"_open","mousedown",j._importClasses,j)}else{b.add(p.id,"focus",j._importClasses,j)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",cmd:"FontName"});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){if(i.fontSize){k.execCommand("FontSize",false,i.fontSize)}else{f(m.settings.theme_advanced_font_sizes,function(p,o){if(p["class"]){j.push(p["class"])}});k.editorCommands._applyInlineStyle("span",{"class":i["class"]},{check_classes:j})}}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",cmd:"FormatBlock"});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;m=j=d.create("span",{id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=d.stdMode?u.getElementsByTagName("tr"):u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_tbl");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,l){var j=this.editor,k=j.settings,n=d.get(j.id+"_tbl"),o=d.get(j.id+"_ifr"),m;i=Math.max(k.theme_advanced_resizing_min_width||100,i);l=Math.max(k.theme_advanced_resizing_min_height||100,l);i=Math.min(k.theme_advanced_resizing_max_width||65535,i);l=Math.min(k.theme_advanced_resizing_max_height||65535,l);m=n.clientHeight-o.clientHeight;d.setStyle(o,"height",l-m);d.setStyles(n,{width:i,height:l})},destroy:function(){var i=this.editor.id;b.clear(i+"_resize");b.clear(i+"_path_row");b.clear(i+"_external_close")},_simpleLayout:function(y,r,k,i){var x=this,u=x.editor,v=y.theme_advanced_toolbar_location,m=y.theme_advanced_statusbar_location,l,j,q,w;if(y.readonly){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});return j}if(v=="top"){x._addToolbars(r,k)}if(v=="external"){l=w=d.create("div",{style:"position:relative"});l=d.add(l,"div",{id:u.id+"_external","class":"mceExternalToolbar"});d.add(l,"a",{id:u.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});l=d.add(l,"table",{id:u.id+"_tblext",cellSpacing:0,cellPadding:0});q=d.add(l,"tbody");if(i.firstChild.className=="mceOldBoxModel"){i.firstChild.appendChild(w)}else{i.insertBefore(w,i.firstChild)}x._addToolbars(q,k);u.onMouseUp.add(function(){var o=d.get(u.id+"_external");d.show(o);d.hide(g);var n=b.add(u.id+"_external_close","click",function(){d.hide(u.id+"_external");b.remove(u.id+"_external_close","click",n)});d.show(o);d.setStyle(o,"top",0-d.getRect(u.id+"_tblext").h-1);d.hide(o);d.show(o);o.style.filter="";g=u.id+"_external";o=null})}if(m=="top"){x._addStatusBar(r,k)}if(!y.theme_advanced_toolbar_container){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"})}if(v=="bottom"){x._addToolbars(r,k)}if(m=="bottom"){x._addStatusBar(r,k)}return j},_rowLayout:function(w,m,k){var v=this,p=v.editor,u,x,i=p.controlManager,l,j,r,q;u=w.theme_advanced_containers_default_class||"";x=w.theme_advanced_containers_default_align||"center";f(c(w.theme_advanced_containers||""),function(s,o){var n=w["theme_advanced_container_"+s]||"";switch(n.toLowerCase()){case"mceeditor":l=d.add(m,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":v._addStatusBar(m,k);break;default:q=(w["theme_advanced_container_"+s+"_align"]||x).toLowerCase();q="mce"+v._ufirst(q);l=d.add(d.add(m,"tr"),"td",{"class":"mceToolbar "+(w["theme_advanced_container_"+s+"_class"]||u)+" "+q||x});r=i.createToolbar("toolbar"+o);v._addControls(n,r);d.setHTML(l,r.renderHTML());k.deltaHeight-=w.theme_advanced_row_height}});return j},_addControls:function(j,i){var k=this,l=k.settings,m,n=k.editor.controlManager;if(l.theme_advanced_disable&&!k._disabled){m={};f(c(l.theme_advanced_disable),function(o){m[o]=1});k._disabled=m}else{m=k._disabled}f(c(j),function(p){var o;if(m&&m[p]){return}if(p=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(q){q=k.createControl(q,n);if(q){i.add(q)}});return}o=k.createControl(p,n);if(o){i.add(o)}})},_addToolbars:function(w,k){var z=this,p,m,r=z.editor,A=z.settings,y,j=r.controlManager,u,l,q=[],x;x=A.theme_advanced_toolbar_align.toLowerCase();x="mce"+z._ufirst(x);l=d.add(d.add(w,"tr"),"td",{"class":"mceToolbar "+x});if(!r.getParam("accessibility_focus")){q.push(d.createHTML("a",{href:"#",onfocus:"tinyMCE.get('"+r.id+"').focus();"},"<!-- IE -->"))}q.push(d.createHTML("a",{href:"#",accesskey:"q",title:r.getLang("advanced.toolbar_focus")},"<!-- IE -->"));for(p=1;(y=A["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(A["theme_advanced_buttons"+p+"_add"]){y+=","+A["theme_advanced_buttons"+p+"_add"]}if(A["theme_advanced_buttons"+p+"_add_before"]){y=A["theme_advanced_buttons"+p+"_add_before"]+","+y}z._addControls(y,m);q.push(m.renderHTML());k.deltaHeight-=A.theme_advanced_row_height}q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},"<!-- IE -->"));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row"},w.theme_advanced_path?p.translate("advanced.path")+": ":"&#160;");d.add(k,"a",{href:"#",accesskey:"x"});if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}if(w.theme_advanced_resize_horizontal){r.style.width=Math.max(10,n.cw)+"px"}r.style.height=Math.max(10,n.ch)+"px";d.get(p.id+"_ifr").style.height=Math.max(10,parseInt(n.ch)+v.deltaHeight)+"px"})}p.onPostRender.add(function(){b.add(p.id+"_resize","mousedown",function(x){var z,t,o,s,y,r;z=d.get(p.id+"_tbl");o=z.clientWidth;s=z.clientHeight;miw=w.theme_advanced_resizing_min_width||100;mih=w.theme_advanced_resizing_min_height||100;maw=w.theme_advanced_resizing_max_width||65535;mah=w.theme_advanced_resizing_max_height||65535;t=d.add(d.get(p.id+"_parent"),"div",{"class":"mcePlaceHolder"});d.setStyles(t,{width:o,height:s});d.hide(z);d.show(t);i={x:x.screenX,y:x.screenY,w:o,h:s,dx:null,dy:null};q=b.add(d.doc,"mousemove",function(B){var n,A;i.dx=B.screenX-i.x;i.dy=B.screenY-i.y;n=Math.max(miw,i.w+i.dx);A=Math.max(mih,i.h+i.dy);n=Math.min(maw,n);A=Math.min(mah,A);if(w.theme_advanced_resize_horizontal){t.style.width=n+"px"}t.style.height=A+"px";return b.cancel(B)});u=b.add(d.doc,"mouseup",function(n){var A;b.remove(d.doc,"mousemove",q);b.remove(d.doc,"mouseup",u);z.style.display="";d.remove(t);if(i.dx===null){return}A=d.get(p.id+"_ifr");if(w.theme_advanced_resize_horizontal){z.style.width=Math.max(10,i.w+i.dx)+"px"}z.style.height=Math.max(10,i.h+i.dy)+"px";A.style.height=Math.max(10,A.clientHeight+i.dy)+"px";if(w.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+p.id+"_size",{cw:i.w+i.dx,ch:i.h+i.dy})}});return b.cancel(x)})})}j.deltaHeight-=21;k=m=null},_nodeChanged:function(l,u,k,q){var y=this,i,r=0,x,m,z=y.settings,w,j,o;if(z.readonly){return}e.each(y.stateControls,function(n){u.setActive(n,l.queryCommandState(y.controls[n][1]))});u.setActive("visualaid",l.hasVisual);u.setDisabled("undo",!l.undoManager.hasUndo()&&!l.typing);u.setDisabled("redo",!l.undoManager.hasRedo());u.setDisabled("outdent",!l.queryCommandState("Outdent"));i=d.getParent(k,"A");if(m=u.get("link")){if(!i||!i.name){m.setDisabled(!i&&q);m.setActive(!!i)}}if(m=u.get("unlink")){m.setDisabled(!i&&q);m.setActive(!!i&&!i.name)}if(m=u.get("anchor")){m.setActive(!!i&&i.name);if(e.isWebKit){i=d.getParent(k,"IMG");m.setActive(!!i&&d.getAttrib(i,"mce_name")=="a")}}i=d.getParent(k,"IMG");if(m=u.get("image")){m.setActive(!!i&&k.className.indexOf("mceItem")==-1)}if(m=u.get("styleselect")){if(k.className){y._importClasses();m.select(k.className)}else{m.select()}}if(m=u.get("formatselect")){i=d.getParent(k,d.isBlock);if(i){m.select(i.nodeName.toLowerCase())}}if(l.settings.convert_fonts_to_spans){l.dom.getParent(k,function(p){if(p.nodeName==="SPAN"){if(!w&&p.className){w=p.className}if(!j&&p.style.fontSize){j=p.style.fontSize}if(!o&&p.style.fontFamily){o=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}}return false});if(m=u.get("fontselect")){m.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==o})}if(m=u.get("fontsizeselect")){m.select(function(n){if(n.fontSize&&n.fontSize===j){return true}if(n["class"]&&n["class"]===w){return true}})}}else{if(m=u.get("fontselect")){m.select(l.queryCommandValue("FontName"))}if(m=u.get("fontsizeselect")){x=l.queryCommandValue("FontSize");m.select(function(n){return n.fontSize==x})}}if(z.theme_advanced_path&&z.theme_advanced_statusbar_location){i=d.get(l.id+"_path")||d.add(l.id+"_path_row","span",{id:l.id+"_path"});d.setHTML(i,"");l.dom.getParent(k,function(A){var p=A.nodeName.toLowerCase(),s,v,t="";if(A.nodeType!=1||A.nodeName==="BR"||(d.hasClass(A,"mceItemHidden")||d.hasClass(A,"mceItemRemoved"))){return}if(x=d.getAttrib(A,"mce_name")){p=x}if(e.isIE&&A.scopeName!=="HTML"){p=A.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(x=d.getAttrib(A,"src")){t+="src: "+x+" "}break;case"a":if(x=d.getAttrib(A,"name")){t+="name: "+x+" ";p+="#"+x}if(x=d.getAttrib(A,"href")){t+="href: "+x+" "}break;case"font":if(z.convert_fonts_to_spans){p="span"}if(x=d.getAttrib(A,"face")){t+="font: "+x+" "}if(x=d.getAttrib(A,"size")){t+="size: "+x+" "}if(x=d.getAttrib(A,"color")){t+="color: "+x+" "}break;case"span":if(x=d.getAttrib(A,"style")){t+="style: "+x+" "}break}if(x=d.getAttrib(A,"id")){t+="id: "+x+" "}if(x=A.className){x=x.replace(/(webkit-[\w\-]+|Apple-[\w\-]+|mceItem\w+|mceVisualAid)/g,"");if(x&&x.indexOf("mceItem")==-1){t+="class: "+x+" ";if(d.isBlock(A)||p=="img"||p=="span"){p+="."+x}}}p=p.replace(/(html:)/g,"");p={name:p,node:A,title:t};y.onResolveName.dispatch(y,p);t=p.title;p=p.name;v=d.create("a",{href:"javascript:;",onmousedown:"return false;",title:t,"class":"mcePath_"+(r++)},p);if(i.hasChildNodes()){i.insertBefore(d.doc.createTextNode(" \u00bb "),i.firstChild);i.insertBefore(v,i.firstChild)}else{i.appendChild(v)}},l.getBody())}},_sel:function(i){this.editor.execCommand("mceSelectNodeDepth",false,i)},_mceInsertAnchor:function(k,j){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/anchor.htm",width:320+parseInt(i.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(i.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/charmap.htm",width:550+parseInt(i.getLang("advanced.charmap_delta_width",0)),height:250+parseInt(i.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(k,j){var i=this.editor;j=j||{};i.windowManager.open({url:e.baseURL+"/themes/advanced/color_picker.htm",width:375+parseInt(i.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(i.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:j.color,func:j.func,theme_url:this.url})},_mceCodeEditor:function(j,k){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/source_editor.htm",width:parseInt(i.getParam("theme_advanced_source_editor_width",720)),height:parseInt(i.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(j,k){var i=this.editor;if(i.dom.getAttrib(i.selection.getNode(),"class").indexOf("mceItem")!=-1){return}i.windowManager.open({url:e.baseURL+"/themes/advanced/image.htm",width:355+parseInt(i.getLang("advanced.image_delta_width",0)),height:275+parseInt(i.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(j,k){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/link.htm",width:310+parseInt(i.getLang("advanced.link_delta_width",0)),height:200+parseInt(i.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var i=this.editor;i.windowManager.confirm("advanced.newdocument",function(j){if(j){i.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var i=this;this._mceColorPicker(0,{color:i.fgColor,func:function(j){i.fgColor=j;i.editor.execCommand("ForeColor",false,j)}})},_mceBackColor:function(){var i=this;this._mceColorPicker(0,{color:i.bgColor,func:function(j){i.bgColor=j;i.editor.execCommand("HiliteColor",false,j)}})},_ufirst:function(i){return i.substring(0,1).toUpperCase()+i.substring(1)}});e.ThemeManager.add("advanced",e.themes.AdvancedTheme)}(tinymce));
tiny_mce/themes/advanced/image.htm ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#advanced_dlg.image_title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>
8
+ <script type="text/javascript" src="js/image.js"></script>
9
+ </head>
10
+ <body id="image" style="display: none">
11
+ <form onsubmit="ImageDialog.update();return false;" action="#">
12
+ <div class="tabs">
13
+ <ul>
14
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.image_title}</a></span></li>
15
+ </ul>
16
+ </div>
17
+
18
+ <div class="panel_wrapper">
19
+ <div id="general_panel" class="panel current">
20
+ <table border="0" cellpadding="4" cellspacing="0">
21
+ <tr>
22
+ <td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>
23
+ <td><table border="0" cellspacing="0" cellpadding="0">
24
+ <tr>
25
+ <td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>
26
+ <td id="srcbrowsercontainer">&nbsp;</td>
27
+ </tr>
28
+ </table></td>
29
+ </tr>
30
+ <tr>
31
+ <td><label for="image_list">{#advanced_dlg.image_list}</label></td>
32
+ <td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>
33
+ </tr>
34
+ <tr>
35
+ <td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>
36
+ <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>
37
+ </tr>
38
+ <tr>
39
+ <td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>
40
+ <td><select id="align" name="align" onchange="ImageDialog.updateStyle();">
41
+ <option value="">{#not_set}</option>
42
+ <option value="baseline">{#advanced_dlg.image_align_baseline}</option>
43
+ <option value="top">{#advanced_dlg.image_align_top}</option>
44
+ <option value="middle">{#advanced_dlg.image_align_middle}</option>
45
+ <option value="bottom">{#advanced_dlg.image_align_bottom}</option>
46
+ <option value="text-top">{#advanced_dlg.image_align_texttop}</option>
47
+ <option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>
48
+ <option value="left">{#advanced_dlg.image_align_left}</option>
49
+ <option value="right">{#advanced_dlg.image_align_right}</option>
50
+ </select></td>
51
+ </tr>
52
+ <tr>
53
+ <td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>
54
+ <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />
55
+ x
56
+ <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>
57
+ </tr>
58
+ <tr>
59
+ <td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>
60
+ <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
61
+ </tr>
62
+ <tr>
63
+ <td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>
64
+ <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
65
+ </tr>
66
+ <tr>
67
+ <td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>
68
+ <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
69
+ </tr>
70
+ </table>
71
+ </div>
72
+ </div>
73
+
74
+ <div class="mceActionPanel">
75
+ <div style="float: left">
76
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
77
+ </div>
78
+
79
+ <div style="float: right">
80
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
81
+ </div>
82
+ </div>
83
+ </form>
84
+ </body>
85
+ </html>
tiny_mce/themes/advanced/img/colorpicker.jpg ADDED
Binary file
tiny_mce/themes/advanced/img/icons.gif ADDED
Binary file
tiny_mce/themes/advanced/js/about.js ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ function init() {
4
+ var ed, tcont;
5
+
6
+ tinyMCEPopup.resizeToInnerSize();
7
+ ed = tinyMCEPopup.editor;
8
+
9
+ // Give FF some time
10
+ window.setTimeout(insertHelpIFrame, 10);
11
+
12
+ tcont = document.getElementById('plugintablecontainer');
13
+ document.getElementById('plugins_tab').style.display = 'none';
14
+
15
+ var html = "";
16
+ html += '<table id="plugintable">';
17
+ html += '<thead>';
18
+ html += '<tr>';
19
+ html += '<td>' + ed.getLang('advanced_dlg.about_plugin') + '</td>';
20
+ html += '<td>' + ed.getLang('advanced_dlg.about_author') + '</td>';
21
+ html += '<td>' + ed.getLang('advanced_dlg.about_version') + '</td>';
22
+ html += '</tr>';
23
+ html += '</thead>';
24
+ html += '<tbody>';
25
+
26
+ tinymce.each(ed.plugins, function(p, n) {
27
+ var info;
28
+
29
+ if (!p.getInfo)
30
+ return;
31
+
32
+ html += '<tr>';
33
+
34
+ info = p.getInfo();
35
+
36
+ if (info.infourl != null && info.infourl != '')
37
+ html += '<td width="50%" title="' + n + '"><a href="' + info.infourl + '" target="_blank">' + info.longname + '</a></td>';
38
+ else
39
+ html += '<td width="50%" title="' + n + '">' + info.longname + '</td>';
40
+
41
+ if (info.authorurl != null && info.authorurl != '')
42
+ html += '<td width="35%"><a href="' + info.authorurl + '" target="_blank">' + info.author + '</a></td>';
43
+ else
44
+ html += '<td width="35%">' + info.author + '</td>';
45
+
46
+ html += '<td width="15%">' + info.version + '</td>';
47
+ html += '</tr>';
48
+
49
+ document.getElementById('plugins_tab').style.display = '';
50
+
51
+ });
52
+
53
+ html += '</tbody>';
54
+ html += '</table>';
55
+
56
+ tcont.innerHTML = html;
57
+
58
+ tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion;
59
+ tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate;
60
+ }
61
+
62
+ function insertHelpIFrame() {
63
+ var html;
64
+
65
+ if (tinyMCEPopup.getParam('docs_url')) {
66
+ html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';
67
+ document.getElementById('iframecontainer').innerHTML = html;
68
+ document.getElementById('help_tab').style.display = 'block';
69
+ }
70
+ }
71
+
72
+ tinyMCEPopup.onInit.add(init);
tiny_mce/themes/advanced/js/anchor.js ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ var AnchorDialog = {
4
+ init : function(ed) {
5
+ var action, elm, f = document.forms[0];
6
+
7
+ this.editor = ed;
8
+ elm = ed.dom.getParent(ed.selection.getNode(), 'A,IMG');
9
+ v = ed.dom.getAttrib(elm, 'name');
10
+
11
+ if (v) {
12
+ this.action = 'update';
13
+ f.anchorName.value = v;
14
+ }
15
+
16
+ f.insert.value = ed.getLang(elm ? 'update' : 'insert');
17
+ },
18
+
19
+ update : function() {
20
+ var ed = this.editor;
21
+
22
+ tinyMCEPopup.restoreSelection();
23
+
24
+ if (this.action != 'update')
25
+ ed.selection.collapse(1);
26
+
27
+ // Webkit acts weird if empty inline element is inserted so we need to use a image instead
28
+ if (tinymce.isWebKit)
29
+ ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('img', {mce_name : 'a', name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}));
30
+ else
31
+ ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}, ''));
32
+
33
+ tinyMCEPopup.close();
34
+ }
35
+ };
36
+
37
+ tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);
tiny_mce/themes/advanced/js/charmap.js ADDED
@@ -0,0 +1,325 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ var charmap = [
4
+ ['&nbsp;', '&#160;', true, 'no-break space'],
5
+ ['&amp;', '&#38;', true, 'ampersand'],
6
+ ['&quot;', '&#34;', true, 'quotation mark'],
7
+ // finance
8
+ ['&cent;', '&#162;', true, 'cent sign'],
9
+ ['&euro;', '&#8364;', true, 'euro sign'],
10
+ ['&pound;', '&#163;', true, 'pound sign'],
11
+ ['&yen;', '&#165;', true, 'yen sign'],
12
+ // signs
13
+ ['&copy;', '&#169;', true, 'copyright sign'],
14
+ ['&reg;', '&#174;', true, 'registered sign'],
15
+ ['&trade;', '&#8482;', true, 'trade mark sign'],
16
+ ['&permil;', '&#8240;', true, 'per mille sign'],
17
+ ['&micro;', '&#181;', true, 'micro sign'],
18
+ ['&middot;', '&#183;', true, 'middle dot'],
19
+ ['&bull;', '&#8226;', true, 'bullet'],
20
+ ['&hellip;', '&#8230;', true, 'three dot leader'],
21
+ ['&prime;', '&#8242;', true, 'minutes / feet'],
22
+ ['&Prime;', '&#8243;', true, 'seconds / inches'],
23
+ ['&sect;', '&#167;', true, 'section sign'],
24
+ ['&para;', '&#182;', true, 'paragraph sign'],
25
+ ['&szlig;', '&#223;', true, 'sharp s / ess-zed'],
26
+ // quotations
27
+ ['&lsaquo;', '&#8249;', true, 'single left-pointing angle quotation mark'],
28
+ ['&rsaquo;', '&#8250;', true, 'single right-pointing angle quotation mark'],
29
+ ['&laquo;', '&#171;', true, 'left pointing guillemet'],
30
+ ['&raquo;', '&#187;', true, 'right pointing guillemet'],
31
+ ['&lsquo;', '&#8216;', true, 'left single quotation mark'],
32
+ ['&rsquo;', '&#8217;', true, 'right single quotation mark'],
33
+ ['&ldquo;', '&#8220;', true, 'left double quotation mark'],
34
+ ['&rdquo;', '&#8221;', true, 'right double quotation mark'],
35
+ ['&sbquo;', '&#8218;', true, 'single low-9 quotation mark'],
36
+ ['&bdquo;', '&#8222;', true, 'double low-9 quotation mark'],
37
+ ['&lt;', '&#60;', true, 'less-than sign'],
38
+ ['&gt;', '&#62;', true, 'greater-than sign'],
39
+ ['&le;', '&#8804;', true, 'less-than or equal to'],
40
+ ['&ge;', '&#8805;', true, 'greater-than or equal to'],
41
+ ['&ndash;', '&#8211;', true, 'en dash'],
42
+ ['&mdash;', '&#8212;', true, 'em dash'],
43
+ ['&macr;', '&#175;', true, 'macron'],
44
+ ['&oline;', '&#8254;', true, 'overline'],
45
+ ['&curren;', '&#164;', true, 'currency sign'],
46
+ ['&brvbar;', '&#166;', true, 'broken bar'],
47
+ ['&uml;', '&#168;', true, 'diaeresis'],
48
+ ['&iexcl;', '&#161;', true, 'inverted exclamation mark'],
49
+ ['&iquest;', '&#191;', true, 'turned question mark'],
50
+ ['&circ;', '&#710;', true, 'circumflex accent'],
51
+ ['&tilde;', '&#732;', true, 'small tilde'],
52
+ ['&deg;', '&#176;', true, 'degree sign'],
53
+ ['&minus;', '&#8722;', true, 'minus sign'],
54
+ ['&plusmn;', '&#177;', true, 'plus-minus sign'],
55
+ ['&divide;', '&#247;', true, 'division sign'],
56
+ ['&frasl;', '&#8260;', true, 'fraction slash'],
57
+ ['&times;', '&#215;', true, 'multiplication sign'],
58
+ ['&sup1;', '&#185;', true, 'superscript one'],
59
+ ['&sup2;', '&#178;', true, 'superscript two'],
60
+ ['&sup3;', '&#179;', true, 'superscript three'],
61
+ ['&frac14;', '&#188;', true, 'fraction one quarter'],
62
+ ['&frac12;', '&#189;', true, 'fraction one half'],
63
+ ['&frac34;', '&#190;', true, 'fraction three quarters'],
64
+ // math / logical
65
+ ['&fnof;', '&#402;', true, 'function / florin'],
66
+ ['&int;', '&#8747;', true, 'integral'],
67
+ ['&sum;', '&#8721;', true, 'n-ary sumation'],
68
+ ['&infin;', '&#8734;', true, 'infinity'],
69
+ ['&radic;', '&#8730;', true, 'square root'],
70
+ ['&sim;', '&#8764;', false,'similar to'],
71
+ ['&cong;', '&#8773;', false,'approximately equal to'],
72
+ ['&asymp;', '&#8776;', true, 'almost equal to'],
73
+ ['&ne;', '&#8800;', true, 'not equal to'],
74
+ ['&equiv;', '&#8801;', true, 'identical to'],
75
+ ['&isin;', '&#8712;', false,'element of'],
76
+ ['&notin;', '&#8713;', false,'not an element of'],
77
+ ['&ni;', '&#8715;', false,'contains as member'],
78
+ ['&prod;', '&#8719;', true, 'n-ary product'],
79
+ ['&and;', '&#8743;', false,'logical and'],
80
+ ['&or;', '&#8744;', false,'logical or'],
81
+ ['&not;', '&#172;', true, 'not sign'],
82
+ ['&cap;', '&#8745;', true, 'intersection'],
83
+ ['&cup;', '&#8746;', false,'union'],
84
+ ['&part;', '&#8706;', true, 'partial differential'],
85
+ ['&forall;', '&#8704;', false,'for all'],
86
+ ['&exist;', '&#8707;', false,'there exists'],
87
+ ['&empty;', '&#8709;', false,'diameter'],
88
+ ['&nabla;', '&#8711;', false,'backward difference'],
89
+ ['&lowast;', '&#8727;', false,'asterisk operator'],
90
+ ['&prop;', '&#8733;', false,'proportional to'],
91
+ ['&ang;', '&#8736;', false,'angle'],
92
+ // undefined
93
+ ['&acute;', '&#180;', true, 'acute accent'],
94
+ ['&cedil;', '&#184;', true, 'cedilla'],
95
+ ['&ordf;', '&#170;', true, 'feminine ordinal indicator'],
96
+ ['&ordm;', '&#186;', true, 'masculine ordinal indicator'],
97
+ ['&dagger;', '&#8224;', true, 'dagger'],
98
+ ['&Dagger;', '&#8225;', true, 'double dagger'],
99
+ // alphabetical special chars
100
+ ['&Agrave;', '&#192;', true, 'A - grave'],
101
+ ['&Aacute;', '&#193;', true, 'A - acute'],
102
+ ['&Acirc;', '&#194;', true, 'A - circumflex'],
103
+ ['&Atilde;', '&#195;', true, 'A - tilde'],
104
+ ['&Auml;', '&#196;', true, 'A - diaeresis'],
105
+ ['&Aring;', '&#197;', true, 'A - ring above'],
106
+ ['&AElig;', '&#198;', true, 'ligature AE'],
107
+ ['&Ccedil;', '&#199;', true, 'C - cedilla'],
108
+ ['&Egrave;', '&#200;', true, 'E - grave'],
109
+ ['&Eacute;', '&#201;', true, 'E - acute'],
110
+ ['&Ecirc;', '&#202;', true, 'E - circumflex'],
111
+ ['&Euml;', '&#203;', true, 'E - diaeresis'],
112
+ ['&Igrave;', '&#204;', true, 'I - grave'],
113
+ ['&Iacute;', '&#205;', true, 'I - acute'],
114
+ ['&Icirc;', '&#206;', true, 'I - circumflex'],
115
+ ['&Iuml;', '&#207;', true, 'I - diaeresis'],
116
+ ['&ETH;', '&#208;', true, 'ETH'],
117
+ ['&Ntilde;', '&#209;', true, 'N - tilde'],
118
+ ['&Ograve;', '&#210;', true, 'O - grave'],
119
+ ['&Oacute;', '&#211;', true, 'O - acute'],
120
+ ['&Ocirc;', '&#212;', true, 'O - circumflex'],
121
+ ['&Otilde;', '&#213;', true, 'O - tilde'],
122
+ ['&Ouml;', '&#214;', true, 'O - diaeresis'],
123
+ ['&Oslash;', '&#216;', true, 'O - slash'],
124
+ ['&OElig;', '&#338;', true, 'ligature OE'],
125
+ ['&Scaron;', '&#352;', true, 'S - caron'],
126
+ ['&Ugrave;', '&#217;', true, 'U - grave'],
127
+ ['&Uacute;', '&#218;', true, 'U - acute'],
128
+ ['&Ucirc;', '&#219;', true, 'U - circumflex'],
129
+ ['&Uuml;', '&#220;', true, 'U - diaeresis'],
130
+ ['&Yacute;', '&#221;', true, 'Y - acute'],
131
+ ['&Yuml;', '&#376;', true, 'Y - diaeresis'],
132
+ ['&THORN;', '&#222;', true, 'THORN'],
133
+ ['&agrave;', '&#224;', true, 'a - grave'],
134
+ ['&aacute;', '&#225;', true, 'a - acute'],
135
+ ['&acirc;', '&#226;', true, 'a - circumflex'],
136
+ ['&atilde;', '&#227;', true, 'a - tilde'],
137
+ ['&auml;', '&#228;', true, 'a - diaeresis'],
138
+ ['&aring;', '&#229;', true, 'a - ring above'],
139
+ ['&aelig;', '&#230;', true, 'ligature ae'],
140
+ ['&ccedil;', '&#231;', true, 'c - cedilla'],
141
+ ['&egrave;', '&#232;', true, 'e - grave'],
142
+ ['&eacute;', '&#233;', true, 'e - acute'],
143
+ ['&ecirc;', '&#234;', true, 'e - circumflex'],
144
+ ['&euml;', '&#235;', true, 'e - diaeresis'],
145
+ ['&igrave;', '&#236;', true, 'i - grave'],
146
+ ['&iacute;', '&#237;', true, 'i - acute'],
147
+ ['&icirc;', '&#238;', true, 'i - circumflex'],
148
+ ['&iuml;', '&#239;', true, 'i - diaeresis'],
149
+ ['&eth;', '&#240;', true, 'eth'],
150
+ ['&ntilde;', '&#241;', true, 'n - tilde'],
151
+ ['&ograve;', '&#242;', true, 'o - grave'],
152
+ ['&oacute;', '&#243;', true, 'o - acute'],
153
+ ['&ocirc;', '&#244;', true, 'o - circumflex'],
154
+ ['&otilde;', '&#245;', true, 'o - tilde'],
155
+ ['&ouml;', '&#246;', true, 'o - diaeresis'],
156
+ ['&oslash;', '&#248;', true, 'o slash'],
157
+ ['&oelig;', '&#339;', true, 'ligature oe'],
158
+ ['&scaron;', '&#353;', true, 's - caron'],
159
+ ['&ugrave;', '&#249;', true, 'u - grave'],
160
+ ['&uacute;', '&#250;', true, 'u - acute'],
161
+ ['&ucirc;', '&#251;', true, 'u - circumflex'],
162
+ ['&uuml;', '&#252;', true, 'u - diaeresis'],
163
+ ['&yacute;', '&#253;', true, 'y - acute'],
164
+ ['&thorn;', '&#254;', true, 'thorn'],
165
+ ['&yuml;', '&#255;', true, 'y - diaeresis'],
166
+ ['&Alpha;', '&#913;', true, 'Alpha'],
167
+ ['&Beta;', '&#914;', true, 'Beta'],
168
+ ['&Gamma;', '&#915;', true, 'Gamma'],
169
+ ['&Delta;', '&#916;', true, 'Delta'],
170
+ ['&Epsilon;', '&#917;', true, 'Epsilon'],
171
+ ['&Zeta;', '&#918;', true, 'Zeta'],
172
+ ['&Eta;', '&#919;', true, 'Eta'],
173
+ ['&Theta;', '&#920;', true, 'Theta'],
174
+ ['&Iota;', '&#921;', true, 'Iota'],
175
+ ['&Kappa;', '&#922;', true, 'Kappa'],
176
+ ['&Lambda;', '&#923;', true, 'Lambda'],
177
+ ['&Mu;', '&#924;', true, 'Mu'],
178
+ ['&Nu;', '&#925;', true, 'Nu'],
179
+ ['&Xi;', '&#926;', true, 'Xi'],
180
+ ['&Omicron;', '&#927;', true, 'Omicron'],
181
+ ['&Pi;', '&#928;', true, 'Pi'],
182
+ ['&Rho;', '&#929;', true, 'Rho'],
183
+ ['&Sigma;', '&#931;', true, 'Sigma'],
184
+ ['&Tau;', '&#932;', true, 'Tau'],
185
+ ['&Upsilon;', '&#933;', true, 'Upsilon'],
186
+ ['&Phi;', '&#934;', true, 'Phi'],
187
+ ['&Chi;', '&#935;', true, 'Chi'],
188
+ ['&Psi;', '&#936;', true, 'Psi'],
189
+ ['&Omega;', '&#937;', true, 'Omega'],
190
+ ['&alpha;', '&#945;', true, 'alpha'],
191
+ ['&beta;', '&#946;', true, 'beta'],
192
+ ['&gamma;', '&#947;', true, 'gamma'],
193
+ ['&delta;', '&#948;', true, 'delta'],
194
+ ['&epsilon;', '&#949;', true, 'epsilon'],
195
+ ['&zeta;', '&#950;', true, 'zeta'],
196
+ ['&eta;', '&#951;', true, 'eta'],
197
+ ['&theta;', '&#952;', true, 'theta'],
198
+ ['&iota;', '&#953;', true, 'iota'],
199
+ ['&kappa;', '&#954;', true, 'kappa'],
200
+ ['&lambda;', '&#955;', true, 'lambda'],
201
+ ['&mu;', '&#956;', true, 'mu'],
202
+ ['&nu;', '&#957;', true, 'nu'],
203
+ ['&xi;', '&#958;', true, 'xi'],
204
+ ['&omicron;', '&#959;', true, 'omicron'],
205
+ ['&pi;', '&#960;', true, 'pi'],
206
+ ['&rho;', '&#961;', true, 'rho'],
207
+ ['&sigmaf;', '&#962;', true, 'final sigma'],
208
+ ['&sigma;', '&#963;', true, 'sigma'],
209
+ ['&tau;', '&#964;', true, 'tau'],
210
+ ['&upsilon;', '&#965;', true, 'upsilon'],
211
+ ['&phi;', '&#966;', true, 'phi'],
212
+ ['&chi;', '&#967;', true, 'chi'],
213
+ ['&psi;', '&#968;', true, 'psi'],
214
+ ['&omega;', '&#969;', true, 'omega'],
215
+ // symbols
216
+ ['&alefsym;', '&#8501;', false,'alef symbol'],
217
+ ['&piv;', '&#982;', false,'pi symbol'],
218
+ ['&real;', '&#8476;', false,'real part symbol'],
219
+ ['&thetasym;','&#977;', false,'theta symbol'],
220
+ ['&upsih;', '&#978;', false,'upsilon - hook symbol'],
221
+ ['&weierp;', '&#8472;', false,'Weierstrass p'],
222
+ ['&image;', '&#8465;', false,'imaginary part'],
223
+ // arrows
224
+ ['&larr;', '&#8592;', true, 'leftwards arrow'],
225
+ ['&uarr;', '&#8593;', true, 'upwards arrow'],
226
+ ['&rarr;', '&#8594;', true, 'rightwards arrow'],
227
+ ['&darr;', '&#8595;', true, 'downwards arrow'],
228
+ ['&harr;', '&#8596;', true, 'left right arrow'],
229
+ ['&crarr;', '&#8629;', false,'carriage return'],
230
+ ['&lArr;', '&#8656;', false,'leftwards double arrow'],
231
+ ['&uArr;', '&#8657;', false,'upwards double arrow'],
232
+ ['&rArr;', '&#8658;', false,'rightwards double arrow'],
233
+ ['&dArr;', '&#8659;', false,'downwards double arrow'],
234
+ ['&hArr;', '&#8660;', false,'left right double arrow'],
235
+ ['&there4;', '&#8756;', false,'therefore'],
236
+ ['&sub;', '&#8834;', false,'subset of'],
237
+ ['&sup;', '&#8835;', false,'superset of'],
238
+ ['&nsub;', '&#8836;', false,'not a subset of'],
239
+ ['&sube;', '&#8838;', false,'subset of or equal to'],
240
+ ['&supe;', '&#8839;', false,'superset of or equal to'],
241
+ ['&oplus;', '&#8853;', false,'circled plus'],
242
+ ['&otimes;', '&#8855;', false,'circled times'],
243
+ ['&perp;', '&#8869;', false,'perpendicular'],
244
+ ['&sdot;', '&#8901;', false,'dot operator'],
245
+ ['&lceil;', '&#8968;', false,'left ceiling'],
246
+ ['&rceil;', '&#8969;', false,'right ceiling'],
247
+ ['&lfloor;', '&#8970;', false,'left floor'],
248
+ ['&rfloor;', '&#8971;', false,'right floor'],
249
+ ['&lang;', '&#9001;', false,'left-pointing angle bracket'],
250
+ ['&rang;', '&#9002;', false,'right-pointing angle bracket'],
251
+ ['&loz;', '&#9674;', true,'lozenge'],
252
+ ['&spades;', '&#9824;', false,'black spade suit'],
253
+ ['&clubs;', '&#9827;', true, 'black club suit'],
254
+ ['&hearts;', '&#9829;', true, 'black heart suit'],
255
+ ['&diams;', '&#9830;', true, 'black diamond suit'],
256
+ ['&ensp;', '&#8194;', false,'en space'],
257
+ ['&emsp;', '&#8195;', false,'em space'],
258
+ ['&thinsp;', '&#8201;', false,'thin space'],
259
+ ['&zwnj;', '&#8204;', false,'zero width non-joiner'],
260
+ ['&zwj;', '&#8205;', false,'zero width joiner'],
261
+ ['&lrm;', '&#8206;', false,'left-to-right mark'],
262
+ ['&rlm;', '&#8207;', false,'right-to-left mark'],
263
+ ['&shy;', '&#173;', false,'soft hyphen']
264
+ ];
265
+
266
+ tinyMCEPopup.onInit.add(function() {
267
+ tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());
268
+ });
269
+
270
+ function renderCharMapHTML() {
271
+ var charsPerRow = 20, tdWidth=20, tdHeight=20, i;
272
+ var html = '<table border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + '"><tr height="' + tdHeight + '">';
273
+ var cols=-1;
274
+
275
+ for (i=0; i<charmap.length; i++) {
276
+ if (charmap[i][2]==true) {
277
+ cols++;
278
+ html += ''
279
+ + '<td class="charmap">'
280
+ + '<a onmouseover="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'
281
+ + charmap[i][1]
282
+ + '</a></td>';
283
+ if ((cols+1) % charsPerRow == 0)
284
+ html += '</tr><tr height="' + tdHeight + '">';
285
+ }
286
+ }
287
+
288
+ if (cols % charsPerRow > 0) {
289
+ var padd = charsPerRow - (cols % charsPerRow);
290
+ for (var i=0; i<padd-1; i++)
291
+ html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap">&nbsp;</td>';
292
+ }
293
+
294
+ html += '</tr></table>';
295
+
296
+ return html;
297
+ }
298
+
299
+ function insertChar(chr) {
300
+ tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');
301
+
302
+ // Refocus in window
303
+ if (tinyMCEPopup.isWindow)
304
+ window.focus();
305
+
306
+ tinyMCEPopup.editor.focus();
307
+ tinyMCEPopup.close();
308
+ }
309
+
310
+ function previewChar(codeA, codeB, codeN) {
311
+ var elmA = document.getElementById('codeA');
312
+ var elmB = document.getElementById('codeB');
313
+ var elmV = document.getElementById('codeV');
314
+ var elmN = document.getElementById('codeN');
315
+
316
+ if (codeA=='#160;') {
317
+ elmV.innerHTML = '__';
318
+ } else {
319
+ elmV.innerHTML = '&' + codeA;
320
+ }
321
+
322
+ elmB.innerHTML = '&amp;' + codeA;
323
+ elmA.innerHTML = '&amp;' + codeB;
324
+ elmN.innerHTML = codeN;
325
+ }
tiny_mce/themes/advanced/js/color_picker.js ADDED
@@ -0,0 +1,253 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;
4
+
5
+ var colors = [
6
+ "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",
7
+ "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",
8
+ "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",
9
+ "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033",
10
+ "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399",
11
+ "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff",
12
+ "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333",
13
+ "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399",
14
+ "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff",
15
+ "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633",
16
+ "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699",
17
+ "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff",
18
+ "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633",
19
+ "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999",
20
+ "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff",
21
+ "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933",
22
+ "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999",
23
+ "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff",
24
+ "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33",
25
+ "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99",
26
+ "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff",
27
+ "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33",
28
+ "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99",
29
+ "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff",
30
+ "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",
31
+ "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",
32
+ "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"
33
+ ];
34
+
35
+ var named = {
36
+ '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',
37
+ '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown',
38
+ '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue',
39
+ '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod',
40
+ '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen',
41
+ '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue',
42
+ '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue',
43
+ '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen',
44
+ '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey',
45
+ '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory',
46
+ '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue',
47
+ '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen',
48
+ '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey',
49
+ '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',
50
+ '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue',
51
+ '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin',
52
+ '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid',
53
+ '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff',
54
+ '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue',
55
+ '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver',
56
+ '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen',
57
+ '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',
58
+ '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen'
59
+ };
60
+
61
+ function init() {
62
+ var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color'));
63
+
64
+ tinyMCEPopup.resizeToInnerSize();
65
+
66
+ generatePicker();
67
+
68
+ if (inputColor) {
69
+ changeFinalColor(inputColor);
70
+
71
+ col = convertHexToRGB(inputColor);
72
+
73
+ if (col)
74
+ updateLight(col.r, col.g, col.b);
75
+ }
76
+ }
77
+
78
+ function insertAction() {
79
+ var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');
80
+
81
+ tinyMCEPopup.restoreSelection();
82
+
83
+ if (f)
84
+ f(color);
85
+
86
+ tinyMCEPopup.close();
87
+ }
88
+
89
+ function showColor(color, name) {
90
+ if (name)
91
+ document.getElementById("colorname").innerHTML = name;
92
+
93
+ document.getElementById("preview").style.backgroundColor = color;
94
+ document.getElementById("color").value = color.toLowerCase();
95
+ }
96
+
97
+ function convertRGBToHex(col) {
98
+ var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
99
+
100
+ if (!col)
101
+ return col;
102
+
103
+ var rgb = col.replace(re, "$1,$2,$3").split(',');
104
+ if (rgb.length == 3) {
105
+ r = parseInt(rgb[0]).toString(16);
106
+ g = parseInt(rgb[1]).toString(16);
107
+ b = parseInt(rgb[2]).toString(16);
108
+
109
+ r = r.length == 1 ? '0' + r : r;
110
+ g = g.length == 1 ? '0' + g : g;
111
+ b = b.length == 1 ? '0' + b : b;
112
+
113
+ return "#" + r + g + b;
114
+ }
115
+
116
+ return col;
117
+ }
118
+
119
+ function convertHexToRGB(col) {
120
+ if (col.indexOf('#') != -1) {
121
+ col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
122
+
123
+ r = parseInt(col.substring(0, 2), 16);
124
+ g = parseInt(col.substring(2, 4), 16);
125
+ b = parseInt(col.substring(4, 6), 16);
126
+
127
+ return {r : r, g : g, b : b};
128
+ }
129
+
130
+ return null;
131
+ }
132
+
133
+ function generatePicker() {
134
+ var el = document.getElementById('light'), h = '', i;
135
+
136
+ for (i = 0; i < detail; i++){
137
+ h += '<div id="gs'+i+'" style="background-color:#000000; width:15px; height:3px; border-style:none; border-width:0px;"'
138
+ + ' onclick="changeFinalColor(this.style.backgroundColor)"'
139
+ + ' onmousedown="isMouseDown = true; return false;"'
140
+ + ' onmouseup="isMouseDown = false;"'
141
+ + ' onmousemove="if (isMouseDown && isMouseOver) changeFinalColor(this.style.backgroundColor); return false;"'
142
+ + ' onmouseover="isMouseOver = true;"'
143
+ + ' onmouseout="isMouseOver = false;"'
144
+ + '></div>';
145
+ }
146
+
147
+ el.innerHTML = h;
148
+ }
149
+
150
+ function generateWebColors() {
151
+ var el = document.getElementById('webcolors'), h = '', i;
152
+
153
+ if (el.className == 'generated')
154
+ return;
155
+
156
+ h += '<table border="0" cellspacing="1" cellpadding="0">'
157
+ + '<tr>';
158
+
159
+ for (i=0; i<colors.length; i++) {
160
+ h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'
161
+ + '<a href="javascript:insertAction();" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');" style="display:block;width:10px;height:10px;overflow:hidden;">'
162
+ + '</a></td>';
163
+ if ((i+1) % 18 == 0)
164
+ h += '</tr><tr>';
165
+ }
166
+
167
+ h += '</table>';
168
+
169
+ el.innerHTML = h;
170
+ el.className = 'generated';
171
+ }
172
+
173
+ function generateNamedColors() {
174
+ var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;
175
+
176
+ if (el.className == 'generated')
177
+ return;
178
+
179
+ for (n in named) {
180
+ v = named[n];
181
+ h += '<a href="javascript:insertAction();" onmouseover="showColor(\'' + n + '\',\'' + v + '\');" style="background-color: ' + n + '"><!-- IE --></a>'
182
+ }
183
+
184
+ el.innerHTML = h;
185
+ el.className = 'generated';
186
+ }
187
+
188
+ function dechex(n) {
189
+ return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);
190
+ }
191
+
192
+ function computeColor(e) {
193
+ var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB;
194
+
195
+ x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0);
196
+ y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0);
197
+
198
+ partWidth = document.getElementById('colors').width / 6;
199
+ partDetail = detail / 2;
200
+ imHeight = document.getElementById('colors').height;
201
+
202
+ r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;
203
+ g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);
204
+ b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth);
205
+
206
+ coef = (imHeight - y) / imHeight;
207
+ r = 128 + (r - 128) * coef;
208
+ g = 128 + (g - 128) * coef;
209
+ b = 128 + (b - 128) * coef;
210
+
211
+ changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));
212
+ updateLight(r, g, b);
213
+ }
214
+
215
+ function updateLight(r, g, b) {
216
+ var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color;
217
+
218
+ for (i=0; i<detail; i++) {
219
+ if ((i>=0) && (i<partDetail)) {
220
+ finalCoef = i / partDetail;
221
+ finalR = dechex(255 - (255 - r) * finalCoef);
222
+ finalG = dechex(255 - (255 - g) * finalCoef);
223
+ finalB = dechex(255 - (255 - b) * finalCoef);
224
+ } else {
225
+ finalCoef = 2 - i / partDetail;
226
+ finalR = dechex(r * finalCoef);
227
+ finalG = dechex(g * finalCoef);
228
+ finalB = dechex(b * finalCoef);
229
+ }
230
+
231
+ color = finalR + finalG + finalB;
232
+
233
+ setCol('gs' + i, '#'+color);
234
+ }
235
+ }
236
+
237
+ function changeFinalColor(color) {
238
+ if (color.indexOf('#') == -1)
239
+ color = convertRGBToHex(color);
240
+
241
+ setCol('preview', color);
242
+ document.getElementById('color').value = color;
243
+ }
244
+
245
+ function setCol(e, c) {
246
+ try {
247
+ document.getElementById(e).style.backgroundColor = c;
248
+ } catch (ex) {
249
+ // Ignore IE warning
250
+ }
251
+ }
252
+
253
+ tinyMCEPopup.onInit.add(init);
tiny_mce/themes/advanced/js/image.js ADDED
@@ -0,0 +1,245 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var ImageDialog = {
2
+ preInit : function() {
3
+ var url;
4
+
5
+ tinyMCEPopup.requireLangPack();
6
+
7
+ if (url = tinyMCEPopup.getParam("external_image_list_url"))
8
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
9
+ },
10
+
11
+ init : function() {
12
+ var f = document.forms[0], ed = tinyMCEPopup.editor;
13
+
14
+ // Setup browse button
15
+ document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
16
+ if (isVisible('srcbrowser'))
17
+ document.getElementById('src').style.width = '180px';
18
+
19
+ e = ed.selection.getNode();
20
+
21
+ this.fillFileList('image_list', 'tinyMCEImageList');
22
+
23
+ if (e.nodeName == 'IMG') {
24
+ f.src.value = ed.dom.getAttrib(e, 'src');
25
+ f.alt.value = ed.dom.getAttrib(e, 'alt');
26
+ f.border.value = this.getAttrib(e, 'border');
27
+ f.vspace.value = this.getAttrib(e, 'vspace');
28
+ f.hspace.value = this.getAttrib(e, 'hspace');
29
+ f.width.value = ed.dom.getAttrib(e, 'width');
30
+ f.height.value = ed.dom.getAttrib(e, 'height');
31
+ f.insert.value = ed.getLang('update');
32
+ this.styleVal = ed.dom.getAttrib(e, 'style');
33
+ selectByValue(f, 'image_list', f.src.value);
34
+ selectByValue(f, 'align', this.getAttrib(e, 'align'));
35
+ this.updateStyle();
36
+ }
37
+ },
38
+
39
+ fillFileList : function(id, l) {
40
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
41
+
42
+ l = window[l];
43
+
44
+ if (l && l.length > 0) {
45
+ lst.options[lst.options.length] = new Option('', '');
46
+
47
+ tinymce.each(l, function(o) {
48
+ lst.options[lst.options.length] = new Option(o[0], o[1]);
49
+ });
50
+ } else
51
+ dom.remove(dom.getParent(id, 'tr'));
52
+ },
53
+
54
+ update : function() {
55
+ var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;
56
+
57
+ tinyMCEPopup.restoreSelection();
58
+
59
+ if (f.src.value === '') {
60
+ if (ed.selection.getNode().nodeName == 'IMG') {
61
+ ed.dom.remove(ed.selection.getNode());
62
+ ed.execCommand('mceRepaint');
63
+ }
64
+
65
+ tinyMCEPopup.close();
66
+ return;
67
+ }
68
+
69
+ if (!ed.settings.inline_styles) {
70
+ args = tinymce.extend(args, {
71
+ vspace : nl.vspace.value,
72
+ hspace : nl.hspace.value,
73
+ border : nl.border.value,
74
+ align : getSelectValue(f, 'align')
75
+ });
76
+ } else
77
+ args.style = this.styleVal;
78
+
79
+ tinymce.extend(args, {
80
+ src : f.src.value,
81
+ alt : f.alt.value,
82
+ width : f.width.value,
83
+ height : f.height.value
84
+ });
85
+
86
+ el = ed.selection.getNode();
87
+
88
+ if (el && el.nodeName == 'IMG') {
89
+ ed.dom.setAttribs(el, args);
90
+ } else {
91
+ ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});
92
+ ed.dom.setAttribs('__mce_tmp', args);
93
+ ed.dom.setAttrib('__mce_tmp', 'id', '');
94
+ ed.undoManager.add();
95
+ }
96
+
97
+ tinyMCEPopup.close();
98
+ },
99
+
100
+ updateStyle : function() {
101
+ var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];
102
+
103
+ if (tinyMCEPopup.editor.settings.inline_styles) {
104
+ st = tinyMCEPopup.dom.parseStyle(this.styleVal);
105
+
106
+ // Handle align
107
+ v = getSelectValue(f, 'align');
108
+ if (v) {
109
+ if (v == 'left' || v == 'right') {
110
+ st['float'] = v;
111
+ delete st['vertical-align'];
112
+ } else {
113
+ st['vertical-align'] = v;
114
+ delete st['float'];
115
+ }
116
+ } else {
117
+ delete st['float'];
118
+ delete st['vertical-align'];
119
+ }
120
+
121
+ // Handle border
122
+ v = f.border.value;
123
+ if (v || v == '0') {
124
+ if (v == '0')
125
+ st['border'] = '0';
126
+ else
127
+ st['border'] = v + 'px solid black';
128
+ } else
129
+ delete st['border'];
130
+
131
+ // Handle hspace
132
+ v = f.hspace.value;
133
+ if (v) {
134
+ delete st['margin'];
135
+ st['margin-left'] = v + 'px';
136
+ st['margin-right'] = v + 'px';
137
+ } else {
138
+ delete st['margin-left'];
139
+ delete st['margin-right'];
140
+ }
141
+
142
+ // Handle vspace
143
+ v = f.vspace.value;
144
+ if (v) {
145
+ delete st['margin'];
146
+ st['margin-top'] = v + 'px';
147
+ st['margin-bottom'] = v + 'px';
148
+ } else {
149
+ delete st['margin-top'];
150
+ delete st['margin-bottom'];
151
+ }
152
+
153
+ // Merge
154
+ st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st));
155
+ this.styleVal = dom.serializeStyle(st);
156
+ }
157
+ },
158
+
159
+ getAttrib : function(e, at) {
160
+ var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;
161
+
162
+ if (ed.settings.inline_styles) {
163
+ switch (at) {
164
+ case 'align':
165
+ if (v = dom.getStyle(e, 'float'))
166
+ return v;
167
+
168
+ if (v = dom.getStyle(e, 'vertical-align'))
169
+ return v;
170
+
171
+ break;
172
+
173
+ case 'hspace':
174
+ v = dom.getStyle(e, 'margin-left')
175
+ v2 = dom.getStyle(e, 'margin-right');
176
+ if (v && v == v2)
177
+ return parseInt(v.replace(/[^0-9]/g, ''));
178
+
179
+ break;
180
+
181
+ case 'vspace':
182
+ v = dom.getStyle(e, 'margin-top')
183
+ v2 = dom.getStyle(e, 'margin-bottom');
184
+ if (v && v == v2)
185
+ return parseInt(v.replace(/[^0-9]/g, ''));
186
+
187
+ break;
188
+
189
+ case 'border':
190
+ v = 0;
191
+
192
+ tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {
193
+ sv = dom.getStyle(e, 'border-' + sv + '-width');
194
+
195
+ // False or not the same as prev
196
+ if (!sv || (sv != v && v !== 0)) {
197
+ v = 0;
198
+ return false;
199
+ }
200
+
201
+ if (sv)
202
+ v = sv;
203
+ });
204
+
205
+ if (v)
206
+ return parseInt(v.replace(/[^0-9]/g, ''));
207
+
208
+ break;
209
+ }
210
+ }
211
+
212
+ if (v = dom.getAttrib(e, at))
213
+ return v;
214
+
215
+ return '';
216
+ },
217
+
218
+ resetImageData : function() {
219
+ var f = document.forms[0];
220
+
221
+ f.width.value = f.height.value = "";
222
+ },
223
+
224
+ updateImageData : function() {
225
+ var f = document.forms[0], t = ImageDialog;
226
+
227
+ if (f.width.value == "")
228
+ f.width.value = t.preloadImg.width;
229
+
230
+ if (f.height.value == "")
231
+ f.height.value = t.preloadImg.height;
232
+ },
233
+
234
+ getImageData : function() {
235
+ var f = document.forms[0];
236
+
237
+ this.preloadImg = new Image();
238
+ this.preloadImg.onload = this.updateImageData;
239
+ this.preloadImg.onerror = this.resetImageData;
240
+ this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);
241
+ }
242
+ };
243
+
244
+ ImageDialog.preInit();
245
+ tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);
tiny_mce/themes/advanced/js/link.js ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ var LinkDialog = {
4
+ preInit : function() {
5
+ var url;
6
+
7
+ if (url = tinyMCEPopup.getParam("external_link_list_url"))
8
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
9
+ },
10
+
11
+ init : function() {
12
+ var f = document.forms[0], ed = tinyMCEPopup.editor;
13
+
14
+ // Setup browse button
15
+ document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link');
16
+ if (isVisible('hrefbrowser'))
17
+ document.getElementById('href').style.width = '180px';
18
+
19
+ this.fillClassList('class_list');
20
+ this.fillFileList('link_list', 'tinyMCELinkList');
21
+ this.fillTargetList('target_list');
22
+
23
+ if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) {
24
+ f.href.value = ed.dom.getAttrib(e, 'href');
25
+ f.linktitle.value = ed.dom.getAttrib(e, 'title');
26
+ f.insert.value = ed.getLang('update');
27
+ selectByValue(f, 'link_list', f.href.value);
28
+ selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target'));
29
+ selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class'));
30
+ }
31
+ },
32
+
33
+ update : function() {
34
+ var f = document.forms[0], ed = tinyMCEPopup.editor, e, b;
35
+
36
+ tinyMCEPopup.restoreSelection();
37
+ e = ed.dom.getParent(ed.selection.getNode(), 'A');
38
+
39
+ // Remove element if there is no href
40
+ if (!f.href.value) {
41
+ if (e) {
42
+ tinyMCEPopup.execCommand("mceBeginUndoLevel");
43
+ b = ed.selection.getBookmark();
44
+ ed.dom.remove(e, 1);
45
+ ed.selection.moveToBookmark(b);
46
+ tinyMCEPopup.execCommand("mceEndUndoLevel");
47
+ tinyMCEPopup.close();
48
+ return;
49
+ }
50
+ }
51
+
52
+ tinyMCEPopup.execCommand("mceBeginUndoLevel");
53
+
54
+ // Create new anchor elements
55
+ if (e == null) {
56
+ ed.getDoc().execCommand("unlink", false, null);
57
+ tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});
58
+
59
+ tinymce.each(ed.dom.select("a"), function(n) {
60
+ if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') {
61
+ e = n;
62
+
63
+ ed.dom.setAttribs(e, {
64
+ href : f.href.value,
65
+ title : f.linktitle.value,
66
+ target : f.target_list ? f.target_list.options[f.target_list.selectedIndex].value : null,
67
+ 'class' : f.class_list ? f.class_list.options[f.class_list.selectedIndex].value : null
68
+ });
69
+ }
70
+ });
71
+ } else {
72
+ ed.dom.setAttribs(e, {
73
+ href : f.href.value,
74
+ title : f.linktitle.value,
75
+ target : f.target_list ? f.target_list.options[f.target_list.selectedIndex].value : null,
76
+ 'class' : f.class_list ? f.class_list.options[f.class_list.selectedIndex].value : null
77
+ });
78
+ }
79
+
80
+ // Don't move caret if selection was image
81
+ if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') {
82
+ ed.focus();
83
+ ed.selection.select(e);
84
+ ed.selection.collapse(0);
85
+ tinyMCEPopup.storeSelection();
86
+ }
87
+
88
+ tinyMCEPopup.execCommand("mceEndUndoLevel");
89
+ tinyMCEPopup.close();
90
+ },
91
+
92
+ checkPrefix : function(n) {
93
+ if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))
94
+ n.value = 'mailto:' + n.value;
95
+
96
+ if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))
97
+ n.value = 'http://' + n.value;
98
+ },
99
+
100
+ fillFileList : function(id, l) {
101
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
102
+
103
+ l = window[l];
104
+
105
+ if (l && l.length > 0) {
106
+ lst.options[lst.options.length] = new Option('', '');
107
+
108
+ tinymce.each(l, function(o) {
109
+ lst.options[lst.options.length] = new Option(o[0], o[1]);
110
+ });
111
+ } else
112
+ dom.remove(dom.getParent(id, 'tr'));
113
+ },
114
+
115
+ fillClassList : function(id) {
116
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
117
+
118
+ if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {
119
+ cl = [];
120
+
121
+ tinymce.each(v.split(';'), function(v) {
122
+ var p = v.split('=');
123
+
124
+ cl.push({'title' : p[0], 'class' : p[1]});
125
+ });
126
+ } else
127
+ cl = tinyMCEPopup.editor.dom.getClasses();
128
+
129
+ if (cl.length > 0) {
130
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
131
+
132
+ tinymce.each(cl, function(o) {
133
+ lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);
134
+ });
135
+ } else
136
+ dom.remove(dom.getParent(id, 'tr'));
137
+ },
138
+
139
+ fillTargetList : function(id) {
140
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v;
141
+
142
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
143
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self');
144
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank');
145
+
146
+ if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) {
147
+ tinymce.each(v.split(','), function(v) {
148
+ v = v.split('=');
149
+ lst.options[lst.options.length] = new Option(v[0], v[1]);
150
+ });
151
+ }
152
+ }
153
+ };
154
+
155
+ LinkDialog.preInit();
156
+ tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog);
tiny_mce/themes/advanced/js/source_editor.js ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+ tinyMCEPopup.onInit.add(onLoadInit);
3
+
4
+ function saveContent() {
5
+ tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true});
6
+ tinyMCEPopup.close();
7
+ }
8
+
9
+ function onLoadInit() {
10
+ tinyMCEPopup.resizeToInnerSize();
11
+
12
+ // Remove Gecko spellchecking
13
+ if (tinymce.isGecko)
14
+ document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");
15
+
16
+ document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true});
17
+
18
+ if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {
19
+ setWrap('soft');
20
+ document.getElementById('wraped').checked = true;
21
+ }
22
+
23
+ resizeInputs();
24
+ }
25
+
26
+ function setWrap(val) {
27
+ var v, n, s = document.getElementById('htmlSource');
28
+
29
+ s.wrap = val;
30
+
31
+ if (!tinymce.isIE) {
32
+ v = s.value;
33
+ n = s.cloneNode(false);
34
+ n.setAttribute("wrap", val);
35
+ s.parentNode.replaceChild(n, s);
36
+ n.value = v;
37
+ }
38
+ }
39
+
40
+ function toggleWordWrap(elm) {
41
+ if (elm.checked)
42
+ setWrap('soft');
43
+ else
44
+ setWrap('off');
45
+ }
46
+
47
+ var wHeight=0, wWidth=0, owHeight=0, owWidth=0;
48
+
49
+ function resizeInputs() {
50
+ var el = document.getElementById('htmlSource');
51
+
52
+ if (!tinymce.isIE) {
53
+ wHeight = self.innerHeight - 65;
54
+ wWidth = self.innerWidth - 16;
55
+ } else {
56
+ wHeight = document.body.clientHeight - 70;
57
+ wWidth = document.body.clientWidth - 16;
58
+ }
59
+
60
+ el.style.height = Math.abs(wHeight) + 'px';
61
+ el.style.width = Math.abs(wWidth) + 'px';
62
+ }
tiny_mce/themes/advanced/langs/en.js ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCE.addI18n('en.advanced',{
2
+ style_select:"Styles",
3
+ font_size:"Font size",
4
+ fontdefault:"Font family",
5
+ block:"Format",
6
+ paragraph:"Paragraph",
7
+ div:"Div",
8
+ address:"Address",
9
+ pre:"Preformatted",
10
+ h1:"Heading 1",
11
+ h2:"Heading 2",
12
+ h3:"Heading 3",
13
+ h4:"Heading 4",
14
+ h5:"Heading 5",
15
+ h6:"Heading 6",
16
+ blockquote:"Blockquote",
17
+ code:"Code",
18
+ samp:"Code sample",
19
+ dt:"Definition term ",
20
+ dd:"Definition description",
21
+ bold_desc:"Bold (Ctrl+B)",
22
+ italic_desc:"Italic (Ctrl+I)",
23
+ underline_desc:"Underline (Ctrl+U)",
24
+ striketrough_desc:"Strikethrough",
25
+ justifyleft_desc:"Align left",
26
+ justifycenter_desc:"Align center",
27
+ justifyright_desc:"Align right",
28
+ justifyfull_desc:"Align full",
29
+ bullist_desc:"Unordered list",
30
+ numlist_desc:"Ordered list",
31
+ outdent_desc:"Outdent",
32
+ indent_desc:"Indent",
33
+ undo_desc:"Undo (Ctrl+Z)",
34
+ redo_desc:"Redo (Ctrl+Y)",
35
+ link_desc:"Insert/edit link",
36
+ unlink_desc:"Unlink",
37
+ image_desc:"Insert/edit image",
38
+ cleanup_desc:"Cleanup messy code",
39
+ code_desc:"Edit HTML Source",
40
+ sub_desc:"Subscript",
41
+ sup_desc:"Superscript",
42
+ hr_desc:"Insert horizontal ruler",
43
+ removeformat_desc:"Remove formatting",
44
+ custom1_desc:"Your custom description here",
45
+ forecolor_desc:"Select text color",
46
+ backcolor_desc:"Select background color",
47
+ charmap_desc:"Insert custom character",
48
+ visualaid_desc:"Toggle guidelines/invisible elements",
49
+ anchor_desc:"Insert/edit anchor",
50
+ cut_desc:"Cut",
51
+ copy_desc:"Copy",
52
+ paste_desc:"Paste",
53
+ image_props_desc:"Image properties",
54
+ newdocument_desc:"New document",
55
+ help_desc:"Help",
56
+ blockquote_desc:"Blockquote",
57
+ clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\r\nDo you want more information about this issue?",
58
+ path:"Path",
59
+ newdocument:"Are you sure you want clear all contents?",
60
+ toolbar_focus:"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",
61
+ more_colors:"More colors"
62
+ });
tiny_mce/themes/advanced/langs/en_dlg.js ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCE.addI18n('en.advanced_dlg',{
2
+ about_title:"About TinyMCE",
3
+ about_general:"About",
4
+ about_help:"Help",
5
+ about_license:"License",
6
+ about_plugins:"Plugins",
7
+ about_plugin:"Plugin",
8
+ about_author:"Author",
9
+ about_version:"Version",
10
+ about_loaded:"Loaded plugins",
11
+ anchor_title:"Insert/edit anchor",
12
+ anchor_name:"Anchor name",
13
+ code_title:"HTML Source Editor",
14
+ code_wordwrap:"Word wrap",
15
+ colorpicker_title:"Select a color",
16
+ colorpicker_picker_tab:"Picker",
17
+ colorpicker_picker_title:"Color picker",
18
+ colorpicker_palette_tab:"Palette",
19
+ colorpicker_palette_title:"Palette colors",
20
+ colorpicker_named_tab:"Named",
21
+ colorpicker_named_title:"Named colors",
22
+ colorpicker_color:"Color:",
23
+ colorpicker_name:"Name:",
24
+ charmap_title:"Select custom character",
25
+ image_title:"Insert/edit image",
26
+ image_src:"Image URL",
27
+ image_alt:"Image description",
28
+ image_list:"Image list",
29
+ image_border:"Border",
30
+ image_dimensions:"Dimensions",
31
+ image_vspace:"Vertical space",
32
+ image_hspace:"Horizontal space",
33
+ image_align:"Alignment",
34
+ image_align_baseline:"Baseline",
35
+ image_align_top:"Top",
36
+ image_align_middle:"Middle",
37
+ image_align_bottom:"Bottom",
38
+ image_align_texttop:"Text top",
39
+ image_align_textbottom:"Text bottom",
40
+ image_align_left:"Left",
41
+ image_align_right:"Right",
42
+ link_title:"Insert/edit link",
43
+ link_url:"Link URL",
44
+ link_target:"Target",
45
+ link_target_same:"Open link in the same window",
46
+ link_target_blank:"Open link in a new window",
47
+ link_titlefield:"Title",
48
+ link_is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",
49
+ link_is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?",
50
+ link_list:"Link list"
51
+ });
tiny_mce/themes/advanced/link.htm ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#advanced_dlg.link_title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>
8
+ <script type="text/javascript" src="../../utils/validate.js"></script>
9
+ <script type="text/javascript" src="js/link.js"></script>
10
+ </head>
11
+ <body id="link" style="display: none">
12
+ <form onsubmit="LinkDialog.update();return false;" action="#">
13
+ <div class="tabs">
14
+ <ul>
15
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.link_title}</a></span></li>
16
+ </ul>
17
+ </div>
18
+
19
+ <div class="panel_wrapper">
20
+ <div id="general_panel" class="panel current">
21
+
22
+ <table border="0" cellpadding="4" cellspacing="0">
23
+ <tr>
24
+ <td class="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>
25
+ <td><table border="0" cellspacing="0" cellpadding="0">
26
+ <tr>
27
+ <td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td>
28
+ <td id="hrefbrowsercontainer">&nbsp;</td>
29
+ </tr>
30
+ </table></td>
31
+ </tr>
32
+ <tr>
33
+ <td><label for="link_list">{#advanced_dlg.link_list}</label></td>
34
+ <td><select id="link_list" name="link_list" onchange="document.getElementById('href').value=this.options[this.selectedIndex].value;"></select></td>
35
+ </tr>
36
+ <tr>
37
+ <td><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>
38
+ <td><select id="target_list" name="target_list"></select></td>
39
+ </tr>
40
+ <tr>
41
+ <td class="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>
42
+ <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>
43
+ </tr>
44
+ <tr>
45
+ <td><label for="class_list">{#class_name}</label></td>
46
+ <td><select id="class_list" name="class_list"></select></td>
47
+ </tr>
48
+ </table>
49
+ </div>
50
+ </div>
51
+
52
+ <div class="mceActionPanel">
53
+ <div style="float: left">
54
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
55
+ </div>
56
+
57
+ <div style="float: right">
58
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
59
+ </div>
60
+ </div>
61
+ </form>
62
+ </body>
63
+ </html>
tiny_mce/themes/advanced/skins/default/content.css ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}
2
+ body {background:#FFF;}
3
+ body.mceForceColors {background:#FFF; color:#000;}
4
+ h1 {font-size: 2em}
5
+ h2 {font-size: 1.5em}
6
+ h3 {font-size: 1.17em}
7
+ h4 {font-size: 1em}
8
+ h5 {font-size: .83em}
9
+ h6 {font-size: .75em}
10
+ .mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}
11
+ a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(img/items.gif) no-repeat bottom left;}
12
+ img.mceItemAnchor {width:12px; height:12px; background:url(img/items.gif) no-repeat;}
13
+ img {border:0;}
14
+ table {cursor:default}
15
+ table td, table th {cursor:text}
16
+ ins {border-bottom:1px solid green; text-decoration: none; color:green}
17
+ del {color:red; text-decoration:line-through}
18
+ cite {border-bottom:1px dashed blue}
19
+ acronym {border-bottom:1px dotted #CCC; cursor:help}
20
+ abbr, html\:abbr {border-bottom:1px dashed #CCC; cursor:help}
21
+
22
+ /* IE */
23
+ * html body {
24
+ scrollbar-3dlight-color:#F0F0EE;
25
+ scrollbar-arrow-color:#676662;
26
+ scrollbar-base-color:#F0F0EE;
27
+ scrollbar-darkshadow-color:#DDD;
28
+ scrollbar-face-color:#E0E0DD;
29
+ scrollbar-highlight-color:#F0F0EE;
30
+ scrollbar-shadow-color:#F0F0EE;
31
+ scrollbar-track-color:#F5F5F5;
32
+ }
tiny_mce/themes/advanced/skins/default/dialog.css ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Generic */
2
+ body {
3
+ font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;
4
+ scrollbar-3dlight-color:#F0F0EE;
5
+ scrollbar-arrow-color:#676662;
6
+ scrollbar-base-color:#F0F0EE;
7
+ scrollbar-darkshadow-color:#DDDDDD;
8
+ scrollbar-face-color:#E0E0DD;
9
+ scrollbar-highlight-color:#F0F0EE;
10
+ scrollbar-shadow-color:#F0F0EE;
11
+ scrollbar-track-color:#F5F5F5;
12
+ background:#F0F0EE;
13
+ padding:0;
14
+ margin:8px 8px 0 8px;
15
+ }
16
+
17
+ html {background:#F0F0EE;}
18
+ td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
19
+ textarea {resize:none;outline:none;}
20
+ a:link, a:visited {color:black;}
21
+ a:hover {color:#2B6FB6;}
22
+ .nowrap {white-space: nowrap}
23
+
24
+ /* Forms */
25
+ fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}
26
+ legend {color:#2B6FB6; font-weight:bold;}
27
+ label.msg {display:none;}
28
+ label.invalid {color:#EE0000; display:inline;}
29
+ input.invalid {border:1px solid #EE0000;}
30
+ input {background:#FFF; border:1px solid #CCC;}
31
+ input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
32
+ input, select, textarea {border:1px solid #808080;}
33
+ input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
34
+ input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
35
+ .input_noborder {border:0;}
36
+
37
+ /* Buttons */
38
+ #insert, #cancel, input.button, .updateButton {
39
+ border:0; margin:0; padding:0;
40
+ font-weight:bold;
41
+ width:94px; height:26px;
42
+ background:url(img/buttons.png) 0 -26px;
43
+ cursor:pointer;
44
+ padding-bottom:2px;
45
+ }
46
+
47
+ #insert {background:url(img/buttons.png) 0 -52px;}
48
+ #cancel {background:url(img/buttons.png) 0 0;}
49
+
50
+ /* Browse */
51
+ a.pickcolor, a.browse {text-decoration:none}
52
+ a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
53
+ .mceOldBoxModel a.browse span {width:22px; height:20px;}
54
+ a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
55
+ a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
56
+ a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
57
+ a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
58
+ .mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
59
+ a.pickcolor:hover span {background-color:#B2BBD0;}
60
+ a.pickcolor:hover span.disabled {}
61
+
62
+ /* Charmap */
63
+ table.charmap {border:1px solid #AAA; text-align:center}
64
+ td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}
65
+ #charmap a {display:block; color:#000; text-decoration:none; border:0}
66
+ #charmap a:hover {background:#CCC;color:#2B6FB6}
67
+ #charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}
68
+ #charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
69
+
70
+ /* Source */
71
+ .wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
72
+ .mceActionPanel {margin-top:5px;}
73
+
74
+ /* Tabs classes */
75
+ .tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;}
76
+ .tabs ul {margin:0; padding:0; list-style:none;}
77
+ .tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}
78
+ .tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}
79
+ .tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}
80
+ .tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;}
81
+ .tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}
82
+ .tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}
83
+
84
+ /* Panels */
85
+ .panel_wrapper div.panel {display:none;}
86
+ .panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
87
+ .panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}
88
+
89
+ /* Columns */
90
+ .column {float:left;}
91
+ .properties {width:100%;}
92
+ .properties .column1 {}
93
+ .properties .column2 {text-align:left;}
94
+
95
+ /* Titles */
96
+ h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
97
+ h3 {font-size:14px;}
98
+ .title {font-size:12px; font-weight:bold; color:#2B6FB6;}
99
+
100
+ /* Dialog specific */
101
+ #link .panel_wrapper, #link div.current {height:125px;}
102
+ #image .panel_wrapper, #image div.current {height:200px;}
103
+ #plugintable thead {font-weight:bold; background:#DDD;}
104
+ #plugintable, #about #plugintable td {border:1px solid #919B9C;}
105
+ #plugintable {width:96%; margin-top:10px;}
106
+ #pluginscontainer {height:290px; overflow:auto;}
107
+ #colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
108
+ #colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
109
+ #colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
110
+ #colorpicker #light div {overflow:hidden;}
111
+ #colorpicker #previewblock {float:right; padding-left:10px; height:20px;}
112
+ #colorpicker .panel_wrapper div.current {height:175px;}
113
+ #colorpicker #namedcolors {width:150px;}
114
+ #colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
115
+ #colorpicker #colornamecontainer {margin-top:5px;}
116
+ #colorpicker #picker_panel fieldset {margin:auto;width:325px;}
tiny_mce/themes/advanced/skins/default/img/buttons.png ADDED
Binary file
tiny_mce/themes/advanced/skins/default/img/items.gif ADDED
Binary file
tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif ADDED
Binary file
tiny_mce/themes/advanced/skins/default/img/menu_check.gif ADDED
Binary file
tiny_mce/themes/advanced/skins/default/img/progress.gif ADDED
Binary file
tiny_mce/themes/advanced/skins/default/img/tabs.gif ADDED
Binary file
tiny_mce/themes/advanced/skins/default/ui.css ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Reset */
2
+ .defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}
3
+ .defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}
4
+ .defaultSkin table td {vertical-align:middle}
5
+
6
+ /* Containers */
7
+ .defaultSkin table {background:#F0F0EE}
8
+ .defaultSkin iframe {display:block; background:#FFF}
9
+ .defaultSkin .mceToolbar {height:26px}
10
+ .defaultSkin .mceLeft {text-align:left}
11
+ .defaultSkin .mceRight {text-align:right}
12
+
13
+ /* External */
14
+ .defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;}
15
+ .defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}
16
+ .defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}
17
+
18
+ /* Layout */
19
+ .defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC}
20
+ .defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC}
21
+ .defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC}
22
+ .defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;}
23
+ .defaultSkin td.mceToolbar {padding-top:1px; vertical-align:top}
24
+ .defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC}
25
+ .defaultSkin .mceStatusbar {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}
26
+ .defaultSkin .mceStatusbar div {float:left; margin:2px}
27
+ .defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize}
28
+ .defaultSkin .mceStatusbar a:hover {text-decoration:underline}
29
+ .defaultSkin table.mceToolbar {margin-left:3px}
30
+ .defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px}
31
+ .defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
32
+ .defaultSkin td.mceCenter {text-align:center;}
33
+ .defaultSkin td.mceCenter table {margin:0 auto; text-align:left;}
34
+ .defaultSkin td.mceRight table {margin:0 0 0 auto;}
35
+
36
+ /* Button */
37
+ .defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px}
38
+ .defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}
39
+ .defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0}
40
+ .defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
41
+ .defaultSkin .mceButtonLabeled {width:auto}
42
+ .defaultSkin .mceButtonLabeled span.mceIcon {float:left}
43
+ .defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}
44
+ .defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888}
45
+
46
+ /* Separator */
47
+ .defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px}
48
+
49
+ /* ListBox */
50
+ .defaultSkin .mceListBox {direction:ltr}
51
+ .defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block}
52
+ .defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}
53
+ .defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}
54
+ .defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}
55
+ .defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}
56
+ .defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}
57
+ .defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}
58
+ .defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px}
59
+ .defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}
60
+ .defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}
61
+
62
+ /* SplitButton */
63
+ .defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr}
64
+ .defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block}
65
+ .defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;}
66
+ .defaultSkin .mceSplitButton span.mceAction {width:20px; background:url(../../img/icons.gif) 20px 20px;}
67
+ .defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;}
68
+ .defaultSkin .mceSplitButton span.mceOpen {display:none}
69
+ .defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0}
70
+ .defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;}
71
+ .defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
72
+ .defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}
73
+ .defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;}
74
+
75
+ /* ColorSplitButton */
76
+ .defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}
77
+ .defaultSkin .mceColorSplitMenu td {padding:2px}
78
+ .defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}
79
+ .defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
80
+ .defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}
81
+ .defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}
82
+ .defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A}
83
+ .defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}
84
+ .defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}
85
+
86
+ /* Menu */
87
+ .defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}
88
+ .defaultSkin .mceNoIcons span.mceIcon {width:0;}
89
+ .defaultSkin .mceNoIcons a .mceText {padding-left:10px}
90
+ .defaultSkin .mceMenu table {background:#FFF}
91
+ .defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block}
92
+ .defaultSkin .mceMenu td {height:20px}
93
+ .defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0}
94
+ .defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}
95
+ .defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px}
96
+ .defaultSkin .mceMenu pre.mceText {font-family:Monospace}
97
+ .defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}
98
+ .defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}
99
+ .defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px}
100
+ .defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}
101
+ .defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}
102
+ .defaultSkin .mceMenuItemDisabled .mceText {color:#888}
103
+ .defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}
104
+ .defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}
105
+ .defaultSkin .mceMenu span.mceMenuLine {display:none}
106
+ .defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}
107
+
108
+ /* Progress,Resize */
109
+ .defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF}
110
+ .defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}
111
+ .defaultSkin .mcePlaceHolder {border:1px dotted gray}
112
+
113
+ /* Formats */
114
+ .defaultSkin .mce_formatPreview a {font-size:10px}
115
+ .defaultSkin .mce_p span.mceText {}
116
+ .defaultSkin .mce_address span.mceText {font-style:italic}
117
+ .defaultSkin .mce_pre span.mceText {font-family:monospace}
118
+ .defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}
119
+ .defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}
120
+ .defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}
121
+ .defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}
122
+ .defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}
123
+ .defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}
124
+
125
+ /* Theme */
126
+ .defaultSkin span.mce_bold {background-position:0 0}
127
+ .defaultSkin span.mce_italic {background-position:-60px 0}
128
+ .defaultSkin span.mce_underline {background-position:-140px 0}
129
+ .defaultSkin span.mce_strikethrough {background-position:-120px 0}
130
+ .defaultSkin span.mce_undo {background-position:-160px 0}
131
+ .defaultSkin span.mce_redo {background-position:-100px 0}
132
+ .defaultSkin span.mce_cleanup {background-position:-40px 0}
133
+ .defaultSkin span.mce_bullist {background-position:-20px 0}
134
+ .defaultSkin span.mce_numlist {background-position:-80px 0}
135
+ .defaultSkin span.mce_justifyleft {background-position:-460px 0}
136
+ .defaultSkin span.mce_justifyright {background-position:-480px 0}
137
+ .defaultSkin span.mce_justifycenter {background-position:-420px 0}
138
+ .defaultSkin span.mce_justifyfull {background-position:-440px 0}
139
+ .defaultSkin span.mce_anchor {background-position:-200px 0}
140
+ .defaultSkin span.mce_indent {background-position:-400px 0}
141
+ .defaultSkin span.mce_outdent {background-position:-540px 0}
142
+ .defaultSkin span.mce_link {background-position:-500px 0}
143
+ .defaultSkin span.mce_unlink {background-position:-640px 0}
144
+ .defaultSkin span.mce_sub {background-position:-600px 0}
145
+ .defaultSkin span.mce_sup {background-position:-620px 0}
146
+ .defaultSkin span.mce_removeformat {background-position:-580px 0}
147
+ .defaultSkin span.mce_newdocument {background-position:-520px 0}
148
+ .defaultSkin span.mce_image {background-position:-380px 0}
149
+ .defaultSkin span.mce_help {background-position:-340px 0}
150
+ .defaultSkin span.mce_code {background-position:-260px 0}
151
+ .defaultSkin span.mce_hr {background-position:-360px 0}
152
+ .defaultSkin span.mce_visualaid {background-position:-660px 0}
153
+ .defaultSkin span.mce_charmap {background-position:-240px 0}
154
+ .defaultSkin span.mce_paste {background-position:-560px 0}
155
+ .defaultSkin span.mce_copy {background-position:-700px 0}
156
+ .defaultSkin span.mce_cut {background-position:-680px 0}
157
+ .defaultSkin span.mce_blockquote {background-position:-220px 0}
158
+ .defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0}
159
+ .defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0}
160
+ .defaultSkin span.mce_forecolorpicker {background-position:-720px 0}
161
+ .defaultSkin span.mce_backcolorpicker {background-position:-760px 0}
162
+
163
+ /* Plugins */
164
+ .defaultSkin span.mce_advhr {background-position:-0px -20px}
165
+ .defaultSkin span.mce_ltr {background-position:-20px -20px}
166
+ .defaultSkin span.mce_rtl {background-position:-40px -20px}
167
+ .defaultSkin span.mce_emotions {background-position:-60px -20px}
168
+ .defaultSkin span.mce_fullpage {background-position:-80px -20px}
169
+ .defaultSkin span.mce_fullscreen {background-position:-100px -20px}
170
+ .defaultSkin span.mce_iespell {background-position:-120px -20px}
171
+ .defaultSkin span.mce_insertdate {background-position:-140px -20px}
172
+ .defaultSkin span.mce_inserttime {background-position:-160px -20px}
173
+ .defaultSkin span.mce_absolute {background-position:-180px -20px}
174
+ .defaultSkin span.mce_backward {background-position:-200px -20px}
175
+ .defaultSkin span.mce_forward {background-position:-220px -20px}
176
+ .defaultSkin span.mce_insert_layer {background-position:-240px -20px}
177
+ .defaultSkin span.mce_insertlayer {background-position:-260px -20px}
178
+ .defaultSkin span.mce_movebackward {background-position:-280px -20px}
179
+ .defaultSkin span.mce_moveforward {background-position:-300px -20px}
180
+ .defaultSkin span.mce_media {background-position:-320px -20px}
181
+ .defaultSkin span.mce_nonbreaking {background-position:-340px -20px}
182
+ .defaultSkin span.mce_pastetext {background-position:-360px -20px}
183
+ .defaultSkin span.mce_pasteword {background-position:-380px -20px}
184
+ .defaultSkin span.mce_selectall {background-position:-400px -20px}
185
+ .defaultSkin span.mce_preview {background-position:-420px -20px}
186
+ .defaultSkin span.mce_print {background-position:-440px -20px}
187
+ .defaultSkin span.mce_cancel {background-position:-460px -20px}
188
+ .defaultSkin span.mce_save {background-position:-480px -20px}
189
+ .defaultSkin span.mce_replace {background-position:-500px -20px}
190
+ .defaultSkin span.mce_search {background-position:-520px -20px}
191
+ .defaultSkin span.mce_styleprops {background-position:-560px -20px}
192
+ .defaultSkin span.mce_table {background-position:-580px -20px}
193
+ .defaultSkin span.mce_cell_props {background-position:-600px -20px}
194
+ .defaultSkin span.mce_delete_table {background-position:-620px -20px}
195
+ .defaultSkin span.mce_delete_col {background-position:-640px -20px}
196
+ .defaultSkin span.mce_delete_row {background-position:-660px -20px}
197
+ .defaultSkin span.mce_col_after {background-position:-680px -20px}
198
+ .defaultSkin span.mce_col_before {background-position:-700px -20px}
199
+ .defaultSkin span.mce_row_after {background-position:-720px -20px}
200
+ .defaultSkin span.mce_row_before {background-position:-740px -20px}
201
+ .defaultSkin span.mce_merge_cells {background-position:-760px -20px}
202
+ .defaultSkin span.mce_table_props {background-position:-980px -20px}
203
+ .defaultSkin span.mce_row_props {background-position:-780px -20px}
204
+ .defaultSkin span.mce_split_cells {background-position:-800px -20px}
205
+ .defaultSkin span.mce_template {background-position:-820px -20px}
206
+ .defaultSkin span.mce_visualchars {background-position:-840px -20px}
207
+ .defaultSkin span.mce_abbr {background-position:-860px -20px}
208
+ .defaultSkin span.mce_acronym {background-position:-880px -20px}
209
+ .defaultSkin span.mce_attribs {background-position:-900px -20px}
210
+ .defaultSkin span.mce_cite {background-position:-920px -20px}
211
+ .defaultSkin span.mce_del {background-position:-940px -20px}
212
+ .defaultSkin span.mce_ins {background-position:-960px -20px}
213
+ .defaultSkin span.mce_pagebreak {background-position:0 -40px}
214
+ .defaultSkin .mce_spellchecker span.mceAction {background-position:-540px -20px}
tiny_mce/themes/advanced/source_editor.htm ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <html xmlns="http://www.w3.org/1999/xhtml">
2
+ <head>
3
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
4
+ <title>{#advanced_dlg.code_title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="js/source_editor.js"></script>
7
+ </head>
8
+ <body onresize="resizeInputs();" style="display:none; overflow:hidden;">
9
+ <form name="source" onsubmit="saveContent();return false;" action="#">
10
+ <div style="float: left" class="title">{#advanced_dlg.code_title}</div>
11
+
12
+ <div id="wrapline" style="float: right">
13
+ <input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{#advanced_dlg.code_wordwrap}</label>
14
+ </div>
15
+
16
+ <br style="clear: both" />
17
+
18
+ <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px;" dir="ltr" wrap="off" class="mceFocus"></textarea>
19
+
20
+ <div class="mceActionPanel">
21
+ <div style="float: left">
22
+ <input type="submit" name="insert" value="{#update}" id="insert" />
23
+ </div>
24
+
25
+ <div style="float: right">
26
+ <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
27
+ </div>
28
+ </div>
29
+ </form>
30
+ </body>
31
+ </html>
tiny_mce/tiny_mce.js ADDED
@@ -0,0 +1 @@
 
1
+ var tinymce={majorVersion:"3",minorVersion:"2.3.1",releaseDate:"2009-05-05",_init:function(){var o=this,k=document,l=window,j=navigator,b=j.userAgent,h,a,g,f,e,m;o.isOpera=l.opera&&opera.buildNumber;o.isWebKit=/WebKit/.test(b);o.isIE=!o.isWebKit&&!o.isOpera&&(/MSIE/gi).test(b)&&(/Explorer/gi).test(j.appName);o.isIE6=o.isIE&&/MSIE [56]/.test(b);o.isGecko=!o.isWebKit&&/Gecko/.test(b);o.isMac=b.indexOf("Mac")!=-1;o.isAir=/adobeair/i.test(b);if(l.tinyMCEPreInit){o.suffix=tinyMCEPreInit.suffix;o.baseURL=tinyMCEPreInit.base;o.query=tinyMCEPreInit.query;return}o.suffix="";a=k.getElementsByTagName("base");for(h=0;h<a.length;h++){if(m=a[h].href){if(/^https?:\/\/[^\/]+$/.test(m)){m+="/"}f=m?m.match(/.*\//)[0]:""}}function c(d){if(d.src&&/tiny_mce(|_dev|_src|_gzip|_jquery|_prototype).js/.test(d.src)){if(/_(src|dev)\.js/g.test(d.src)){o.suffix="_src"}if((e=d.src.indexOf("?"))!=-1){o.query=d.src.substring(e+1)}o.baseURL=d.src.substring(0,d.src.lastIndexOf("/"));if(f&&o.baseURL.indexOf("://")==-1){o.baseURL=f+o.baseURL}return o.baseURL}return null}a=k.getElementsByTagName("script");for(h=0;h<a.length;h++){if(c(a[h])){return}}g=k.getElementsByTagName("head")[0];if(g){a=g.getElementsByTagName("script");for(h=0;h<a.length;h++){if(c(a[h])){return}}}return},is:function(b,a){var c=typeof(b);if(!a){return c!="undefined"}if(a=="array"&&(b.hasOwnProperty&&b instanceof Array)){return true}return c==a},each:function(d,a,c){var e,b;if(!d){return 0}c=c||d;if(typeof(d.length)!="undefined"){for(e=0,b=d.length;e<b;e++){if(a.call(c,d[e],e,d)===false){return 0}}}else{for(e in d){if(d.hasOwnProperty(e)){if(a.call(c,d[e],e,d)===false){return 0}}}}return 1},map:function(b,c){var d=[];tinymce.each(b,function(a){d.push(c(a))});return d},grep:function(b,c){var d=[];tinymce.each(b,function(a){if(!c||c(a)){d.push(a)}});return d},inArray:function(c,d){var e,b;if(c){for(e=0,b=c.length;e<b;e++){if(c[e]===d){return e}}}return -1},extend:function(f,d){var c,b=arguments;for(c=1;c<b.length;c++){d=b[c];tinymce.each(d,function(a,e){if(typeof(a)!=="undefined"){f[e]=a}})}return f},trim:function(a){return(a?""+a:"").replace(/^\s*|\s*$/g,"")},create:function(j,a){var i=this,b,e,f,g,d,h=0;j=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(j);f=j[3].match(/(^|\.)(\w+)$/i)[2];e=i.createNS(j[3].replace(/\.\w+$/,""));if(e[f]){return}if(j[2]=="static"){e[f]=a;if(this.onCreate){this.onCreate(j[2],j[3],e[f])}return}if(!a[f]){a[f]=function(){};h=1}e[f]=a[f];i.extend(e[f].prototype,a);if(j[5]){b=i.resolve(j[5]).prototype;g=j[5].match(/\.(\w+)$/i)[1];d=e[f];if(h){e[f]=function(){return b[g].apply(this,arguments)}}else{e[f]=function(){this.parent=b[g];return d.apply(this,arguments)}}e[f].prototype[f]=e[f];i.each(b,function(c,k){e[f].prototype[k]=b[k]});i.each(a,function(c,k){if(b[k]){e[f].prototype[k]=function(){this.parent=b[k];return c.apply(this,arguments)}}else{if(k!=f){e[f].prototype[k]=c}}})}i.each(a["static"],function(c,k){e[f][k]=c});if(this.onCreate){this.onCreate(j[2],j[3],e[f].prototype)}},walk:function(c,b,d,a){a=a||this;if(c){if(d){c=c[d]}tinymce.each(c,function(f,e){if(b.call(a,f,e,d)===false){return false}tinymce.walk(f,b,d,a)})}},createNS:function(d,c){var b,a;c=c||window;d=d.split(".");for(b=0;b<d.length;b++){a=d[b];if(!c[a]){c[a]={}}c=c[a]}return c},resolve:function(d,c){var b,a;c=c||window;d=d.split(".");for(b=0,a=d.length;b<a;b++){c=c[d[b]];if(!c){break}}return c},addUnload:function(e,d){var c=this,a=window;e={func:e,scope:d||this};if(!c.unloads){function b(){var f=c.unloads,h,i;if(f){for(i in f){h=f[i];if(h&&h.func){h.func.call(h.scope,1)}}if(a.detachEvent){a.detachEvent("onbeforeunload",g);a.detachEvent("onunload",b)}else{if(a.removeEventListener){a.removeEventListener("unload",b,false)}}c.unloads=h=f=a=b=0;if(window.CollectGarbage){window.CollectGarbage()}}}function g(){var h=document;if(h.readyState=="interactive"){function f(){h.detachEvent("onstop",f);if(b){b()}h=0}if(h){h.attachEvent("onstop",f)}window.setTimeout(function(){if(h){h.detachEvent("onstop",f)}},0)}}if(a.attachEvent){a.attachEvent("onunload",b);a.attachEvent("onbeforeunload",g)}else{if(a.addEventListener){a.addEventListener("unload",b,false)}}c.unloads=[e]}else{c.unloads.push(e)}return e},removeUnload:function(c){var a=this.unloads,b=null;tinymce.each(a,function(e,d){if(e&&e.func==c){a.splice(d,1);b=c;return false}});return b},explode:function(a,b){return a?tinymce.map(a.split(b||","),tinymce.trim):a},_addVer:function(b){var a;if(!this.query){return b}a=(b.indexOf("?")==-1?"?":"&")+this.query;if(b.indexOf("#")==-1){return b+a}return b.replace("#",a+"#")}};window.tinymce=tinymce;tinymce._init();tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(a,b){this.listeners.push({cb:a,scope:b||this.scope});return a},addToTop:function(a,b){this.listeners.unshift({cb:a,scope:b||this.scope});return a},remove:function(a){var b=this.listeners,c=null;tinymce.each(b,function(e,d){if(a==e.cb){c=a;b.splice(d,1);return false}});return c},dispatch:function(){var f,d=arguments,e,b=this.listeners,g;for(e=0;e<b.length;e++){g=b[e];f=g.cb.apply(g.scope,d);if(f===false){break}}return f}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,h,d,c;g=f.settings=g||{};if(/^(mailto|tel|news|javascript|about):/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(e.indexOf(":/")===-1&&e.indexOf("//")!==0){e=(g.base_uri.protocol||"http")+"://mce_host"+f.toAbsPath(g.base_uri.path,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});if(c=g.base_uri){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host=="mce_host"){f.port=c.port}if(!f.host||f.host=="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var c=this,d;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:c});if((b.host!="mce_host"&&c.host!=b.host&&b.host)||c.port!=b.port||c.protocol!=b.protocol){return b.getURI()}d=c.toRelPath(c.path,b.path);if(b.query){d+="?"+b.query}if(b.anchor){d+="#"+b.anchor}return d},toAbsolute:function(b,c){var b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,g=[],d;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(h){if(h){g.push(h)}});e=g;for(c=f.length-1,g=[];c>=0;c--){if(f[c].length==0||f[c]=="."){continue}if(f[c]==".."){b++;continue}if(b>0){b--;continue}g.push(f[c])}c=e.length-b;if(c<=0){return"/"+g.reverse().join("/")+d}return"/"+e.slice(0,c).join("/")+"/"+g.reverse().join("/")+d},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!=0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();tinymce.create("static tinymce.util.JSON",{serialize:function(e){var c,a,d=tinymce.util.JSON.serialize,b;if(e==null){return"null"}b=typeof e;if(b=="string"){a="\bb\tt\nn\ff\rr\"\"''\\\\";return'"'+e.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(g,f){c=a.indexOf(f);if(c+1){return"\\"+a.charAt(c+1)}g=f.charCodeAt().toString(16);return"\\u"+"0000".substring(g.length)+g})+'"'}if(b=="object"){if(e.hasOwnProperty&&e instanceof Array){for(c=0,a="[";c<e.length;c++){a+=(c>0?",":"")+d(e[c])}return a+"]"}a="{";for(c in e){a+=typeof e[c]!="function"?(a.length>1?',"':'"')+c+'":'+d(e[c]):""}return a+"}"}return""+e},parse:function(s){try{return eval("("+s+")")}catch(ex){}}});tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.send(g.data);function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){e.call(f.error_scope||f.scope,h,g)};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(c){var e=c.each,b=c.is;var d=c.isWebKit,a=c.isIE;c.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(i,g){var f=this;f.doc=i;f.win=window;f.files={};f.cssFlicker=false;f.counter=0;f.boxModel=!c.isIE||i.compatMode=="CSS1Compat";f.stdMode=i.documentMode===8;this.settings=g=c.extend({keep_values:false,hex_colors:1,process_html:1},g);if(c.isIE6){try{i.execCommand("BackgroundImageCache",false,true)}catch(h){f.cssFlicker=true}}c.addUnload(f.destroy,f)},getRoot:function(){var f=this,g=f.settings;return(g&&f.get(g.root_element))||f.doc.body},getViewPort:function(g){var h,f;g=!g?this.win:g;h=g.document;f=this.boxModel?h.documentElement:h.body;return{x:g.pageXOffset||f.scrollLeft,y:g.pageYOffset||f.scrollTop,w:g.innerWidth||f.clientWidth,h:g.innerHeight||f.clientHeight}},getRect:function(i){var h,f=this,g;i=f.get(i);h=f.getPos(i);g=f.getSize(i);return{x:h.x,y:h.y,w:g.w,h:g.h}},getSize:function(j){var g=this,f,i;j=g.get(j);f=g.getStyle(j,"width");i=g.getStyle(j,"height");if(f.indexOf("px")===-1){f=0}if(i.indexOf("px")===-1){i=0}return{w:parseInt(f)||j.offsetWidth||j.clientWidth,h:parseInt(i)||j.offsetHeight||j.clientHeight}},is:function(g,f){return c.dom.Sizzle.matches(f,g.nodeType?[g]:g).length>0},getParent:function(i,h,g){return this.getParents(i,h,g,false)},getParents:function(p,k,i,m){var h=this,g,j=h.settings,l=[];p=h.get(p);m=m===undefined;if(j.strict_root){i=i||h.getRoot()}if(b(k,"string")){g=k;if(k==="*"){k=function(f){return f.nodeType==1}}else{k=function(f){return h.is(f,g)}}}while(p){if(p==i||!p.nodeType||p.nodeType===9){break}if(!k||k(p)){if(m){l.push(p)}else{return p}}p=p.parentNode}return m?l:null},get:function(f){var g;if(f&&this.doc&&typeof(f)=="string"){g=f;f=this.doc.getElementById(f);if(f&&f.id!==g){return this.doc.getElementsByName(g)[1]}}return f},select:function(h,g){var f=this;return c.dom.Sizzle(h,f.get(g)||f.get(f.settings.root_element)||f.doc,[])},add:function(j,l,f,i,k){var g=this;return this.run(j,function(n){var m,h;m=b(l,"string")?g.doc.createElement(l):l;g.setAttribs(m,f);if(i){if(i.nodeType){m.appendChild(i)}else{g.setHTML(m,i)}}return !k?n.appendChild(m):m})},create:function(i,f,g){return this.add(this.doc.createElement(i),i,f,g,1)},createHTML:function(m,f,j){var l="",i=this,g;l+="<"+m;for(g in f){if(f.hasOwnProperty(g)){l+=" "+g+'="'+i.encode(f[g])+'"'}}if(c.is(j)){return l+">"+j+"</"+m+">"}return l+" />"},remove:function(h,f){var g=this;return this.run(h,function(m){var l,k,j;l=m.parentNode;if(!l){return null}if(f){for(j=m.childNodes.length-1;j>=0;j--){g.insertAfter(m.childNodes[j],m)}}if(g.fixPsuedoLeaks){l=m.cloneNode(true);f="IELeakGarbageBin";k=g.get(f)||g.add(g.doc.body,"div",{id:f,style:"display:none"});k.appendChild(m);k.innerHTML="";return l}return l.removeChild(m)})},setStyle:function(i,f,g){var h=this;return h.run(i,function(l){var k,j;k=l.style;f=f.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(h.pixelStyles.test(f)&&(c.is(g,"number")||/^[\-0-9\.]+$/.test(g))){g+="px"}switch(f){case"opacity":if(a){k.filter=g===""?"":"alpha(opacity="+(g*100)+")";if(!i.currentStyle||!i.currentStyle.hasLayout){k.display="inline-block"}}k[f]=k["-moz-opacity"]=k["-khtml-opacity"]=g||"";break;case"float":a?k.styleFloat=g:k.cssFloat=g;break;default:k[f]=g||""}if(h.settings.update_styles){h.setAttrib(l,"mce_style")}})},getStyle:function(i,f,h){i=this.get(i);if(!i){return false}if(this.doc.defaultView&&h){f=f.replace(/[A-Z]/g,function(j){return"-"+j});try{return this.doc.defaultView.getComputedStyle(i,null).getPropertyValue(f)}catch(g){return null}}f=f.replace(/-(\D)/g,function(k,j){return j.toUpperCase()});if(f=="float"){f=a?"styleFloat":"cssFloat"}if(i.currentStyle&&h){return i.currentStyle[f]}return i.style[f]},setStyles:function(i,j){var g=this,h=g.settings,f;f=h.update_styles;h.update_styles=0;e(j,function(k,l){g.setStyle(i,l,k)});h.update_styles=f;if(h.update_styles){g.setAttrib(i,h.cssText)}},setAttrib:function(h,i,f){var g=this;if(!h||!i){return}if(g.settings.strict){i=i.toLowerCase()}return this.run(h,function(k){var j=g.settings;switch(i){case"style":if(!b(f,"string")){e(f,function(l,m){g.setStyle(k,m,l)});return}if(j.keep_values){if(f&&!g._isRes(f)){k.setAttribute("mce_style",f,2)}else{k.removeAttribute("mce_style",2)}}k.style.cssText=f;break;case"class":k.className=f||"";break;case"src":case"href":if(j.keep_values){if(j.url_converter){f=j.url_converter.call(j.url_converter_scope||g,f,i,k)}g.setAttrib(k,"mce_"+i,f,2)}break;case"shape":k.setAttribute("mce_style",f);break}if(b(f)&&f!==null&&f.length!==0){k.setAttribute(i,""+f,2)}else{k.removeAttribute(i,2)}})},setAttribs:function(g,h){var f=this;return this.run(g,function(i){e(h,function(j,k){f.setAttrib(i,k,j)})})},getAttrib:function(i,j,h){var f,g=this;i=g.get(i);if(!i||i.nodeType!==1){return false}if(!b(h)){h=""}if(/^(src|href|style|coords|shape)$/.test(j)){f=i.getAttribute("mce_"+j);if(f){return f}}if(a&&g.props[j]){f=i[g.props[j]];f=f&&f.nodeValue?f.nodeValue:f}if(!f){f=i.getAttribute(j,2)}if(j==="style"){f=f||i.style.cssText;if(f){f=g.serializeStyle(g.parseStyle(f));if(g.settings.keep_values&&!g._isRes(f)){i.setAttribute("mce_style",f)}}}if(d&&j==="class"&&f){f=f.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(a){switch(j){case"rowspan":case"colspan":if(f===1){f=""}break;case"size":if(f==="+0"||f===20||f===0){f=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(f===0){f=""}break;case"hspace":if(f===-1){f=""}break;case"maxlength":case"tabindex":if(f===32768||f===2147483647||f==="32768"){f=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(f===65535){return j}return h;case"shape":f=f.toLowerCase();break;default:if(j.indexOf("on")===0&&f){f=(""+f).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1")}}}return(f!==undefined&&f!==null&&f!=="")?""+f:h},getPos:function(m,i){var g=this,f=0,l=0,j,k=g.doc,h;m=g.get(m);i=i||k.body;if(m){if(a&&!g.stdMode){m=m.getBoundingClientRect();j=g.boxModel?k.documentElement:k.body;f=g.getStyle(g.select("html")[0],"borderWidth");f=(f=="medium"||g.boxModel&&!g.isIE6)&&2||f;m.top+=g.win.self!=g.win.top?2:0;return{x:m.left+j.scrollLeft-f,y:m.top+j.scrollTop-f}}h=m;while(h&&h!=i&&h.nodeType){f+=h.offsetLeft||0;l+=h.offsetTop||0;h=h.offsetParent}h=m.parentNode;while(h&&h!=i&&h.nodeType){f-=h.scrollLeft||0;l-=h.scrollTop||0;h=h.parentNode}}return{x:f,y:l}},parseStyle:function(h){var i=this,j=i.settings,k={};if(!h){return k}function f(w,q,v){var o,u,m,n;o=k[w+"-top"+q];if(!o){return}u=k[w+"-right"+q];if(o!=u){return}m=k[w+"-bottom"+q];if(u!=m){return}n=k[w+"-left"+q];if(m!=n){return}k[v]=n;delete k[w+"-top"+q];delete k[w+"-right"+q];delete k[w+"-bottom"+q];delete k[w+"-left"+q]}function g(n,m,l,p){var o;o=k[m];if(!o){return}o=k[l];if(!o){return}o=k[p];if(!o){return}k[n]=k[m]+" "+k[l]+" "+k[p];delete k[m];delete k[l];delete k[p]}h=h.replace(/&(#?[a-z0-9]+);/g,"&$1_MCE_SEMI_");e(h.split(";"),function(m){var l,n=[];if(m){m=m.replace(/_MCE_SEMI_/g,";");m=m.replace(/url\([^\)]+\)/g,function(o){n.push(o);return"url("+n.length+")"});m=m.split(":");l=c.trim(m[1]);l=l.replace(/url\(([^\)]+)\)/g,function(p,o){return n[parseInt(o)-1]});l=l.replace(/rgb\([^\)]+\)/g,function(o){return i.toHex(o)});if(j.url_converter){l=l.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(o,p){return"url("+j.url_converter.call(j.url_converter_scope||i,i.decode(p),"style",null)+")"})}k[c.trim(m[0]).toLowerCase()]=l}});f("border","","border");f("border","-width","border-width");f("border","-color","border-color");f("border","-style","border-style");f("padding","","padding");f("margin","","margin");g("border","border-width","border-style","border-color");if(a){if(k.border=="medium none"){k.border=""}}return k},serializeStyle:function(g){var f="";e(g,function(i,h){if(h&&i){if(c.isGecko&&h.indexOf("-moz-")===0){return}switch(h){case"color":case"background-color":i=i.toLowerCase();break}f+=(f?" ":"")+h+": "+i+";"}});return f},loadCSS:function(f){var g=this,h=g.doc;if(!f){f=""}e(f.split(","),function(i){if(g.files[i]){return}g.files[i]=true;g.add(g.select("head")[0],"link",{rel:"stylesheet",href:c._addVer(i)})})},addClass:function(f,g){return this.run(f,function(h){var i;if(!g){return 0}if(this.hasClass(h,g)){return h.className}i=this.removeClass(h,g);return h.className=(i!=""?(i+" "):"")+g})},removeClass:function(h,i){var f=this,g;return f.run(h,function(k){var j;if(f.hasClass(k,i)){if(!g){g=new RegExp("(^|\\s+)"+i+"(\\s+|$)","g")}j=k.className.replace(g," ");return k.className=c.trim(j!=" "?j:"")}return k.className})},hasClass:function(g,f){g=this.get(g);if(!g||!f){return false}return(" "+g.className+" ").indexOf(" "+f+" ")!==-1},show:function(f){return this.setStyle(f,"display","block")},hide:function(f){return this.setStyle(f,"display","none")},isHidden:function(f){f=this.get(f);return !f||f.style.display=="none"||this.getStyle(f,"display")=="none"},uniqueId:function(f){return(!f?"mce_":f)+(this.counter++)},setHTML:function(i,g){var f=this;return this.run(i,function(m){var h,k,j,q,l,h;g=f.processHTML(g);if(a){function o(){try{m.innerHTML="<br />"+g;m.removeChild(m.firstChild)}catch(n){while(m.firstChild){m.firstChild.removeNode()}h=f.create("div");h.innerHTML="<br />"+g;e(h.childNodes,function(r,p){if(p){m.appendChild(r)}})}}if(f.settings.fix_ie_paragraphs){g=g.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi,'<p$1 mce_keep="true">&nbsp;</p>')}o();if(f.settings.fix_ie_paragraphs){j=m.getElementsByTagName("p");for(k=j.length-1,h=0;k>=0;k--){q=j[k];if(!q.hasChildNodes()){if(!q.mce_keep){h=1;break}q.removeAttribute("mce_keep")}}}if(h){g=g.replace(/<p ([^>]+)>|<p>/g,'<div $1 mce_tmp="1">');g=g.replace(/<\/p>/g,"</div>");o();if(f.settings.fix_ie_paragraphs){j=m.getElementsByTagName("DIV");for(k=j.length-1;k>=0;k--){q=j[k];if(q.mce_tmp){l=f.doc.createElement("p");q.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(p,n){var r;if(n!=="mce_tmp"){r=q.getAttribute(n);if(!r&&n==="class"){r=q.className}l.setAttribute(n,r)}});for(h=0;h<q.childNodes.length;h++){l.appendChild(q.childNodes[h].cloneNode(true))}q.swapNode(l)}}}}}else{m.innerHTML=g}return g})},processHTML:function(j){var g=this,i=g.settings;if(!i.process_html){return j}if(c.isGecko){j=j.replace(/<(\/?)strong>|<strong( [^>]+)>/gi,"<$1b$2>");j=j.replace(/<(\/?)em>|<em( [^>]+)>/gi,"<$1i$2>")}else{if(a){j=j.replace(/&apos;/g,"&#39;");j=j.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi,"")}}j=j.replace(/<a( )([^>]+)\/>|<a\/>/gi,"<a$1$2></a>");if(i.keep_values){if(/<script|style/.test(j)){function f(h){h=h.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n");h=h.replace(/^[\r\n]*|[\r\n]*$/g,"");h=h.replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g,"");h=h.replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g,"");return h}j=j.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/g,function(l,k,h){h=f(h);if(!k){k=' type="text/javascript"'}if(h){h="<!--\n"+h+"\n// -->"}return"<mce:script"+k+">"+h+"</mce:script>"});j=j.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/g,function(l,k,h){h=f(h);return"<mce:style"+k+"><!--\n"+h+"\n--></mce:style><style"+k+' mce_bogus="1">'+h+"</style>"})}j=j.replace(/<!\[CDATA\[([\s\S]+)\]\]>/g,"<!--[CDATA[$1]]-->");j=j.replace(/<([\w:]+) [^>]*(src|href|style|shape|coords)[^>]*>/gi,function(h,l){function k(o,n,q){var p=q;if(h.indexOf("mce_"+n)!=-1){return o}if(n=="style"){if(g._isRes(q)){return o}if(i.hex_colors){p=p.replace(/rgb\([^\)]+\)/g,function(m){return g.toHex(m)})}if(i.url_converter){p=p.replace(/url\([\'\"]?([^\)\'\"]+)\)/g,function(m,r){return"url("+g.encode(i.url_converter.call(i.url_converter_scope||g,g.decode(r),n,l))+")"})}}else{if(n!="coords"&&n!="shape"){if(i.url_converter){p=g.encode(i.url_converter.call(i.url_converter_scope||g,g.decode(q),n,l))}}}return" "+n+'="'+q+'" mce_'+n+'="'+p+'"'}h=h.replace(/ (src|href|style|coords|shape)=[\"]([^\"]+)[\"]/gi,k);h=h.replace(/ (src|href|style|coords|shape)=[\']([^\']+)[\']/gi,k);return h.replace(/ (src|href|style|coords|shape)=([^\s\"\'>]+)/gi,k)})}return j},getOuterHTML:function(f){var g;f=this.get(f);if(!f){return null}if(f.outerHTML!==undefined){return f.outerHTML}g=(f.ownerDocument||this.doc).createElement("body");g.appendChild(f.cloneNode(true));return g.innerHTML},setOuterHTML:function(i,g,j){var f=this;return this.run(i,function(h){var l,k;h=f.get(h);j=j||h.ownerDocument||f.doc;if(a&&h.nodeType==1){h.outerHTML=g}else{k=j.createElement("body");k.innerHTML=g;l=k.lastChild;while(l){f.insertAfter(l.cloneNode(true),h);l=l.previousSibling}f.remove(h)}})},decode:function(g){var h,i,f;if(/&[^;]+;/.test(g)){h=this.doc.createElement("div");h.innerHTML=g;i=h.firstChild;f="";if(i){do{f+=i.nodeValue}while(i.nextSibling)}return f||g}return g},encode:function(f){return f?(""+f).replace(/[<>&\"]/g,function(h,g){switch(h){case"&":return"&amp;";case'"':return"&quot;";case"<":return"&lt;";case">":return"&gt;"}return h}):f},insertAfter:function(h,g){var f=this;g=f.get(g);return this.run(h,function(k){var j,i;j=g.parentNode;i=g.nextSibling;if(i){j.insertBefore(k,i)}else{j.appendChild(k)}return k})},isBlock:function(f){if(f.nodeType&&f.nodeType!==1){return false}f=f.nodeName||f;return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TR|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(f)},replace:function(i,h,f){var g=this;if(b(h,"array")){i=i.cloneNode(true)}return g.run(h,function(j){if(f){e(j.childNodes,function(k){i.appendChild(k.cloneNode(true))})}if(g.fixPsuedoLeaks&&j.nodeType===1){j.parentNode.insertBefore(i,j);g.remove(j);return i}return j.parentNode.replaceChild(i,j)})},findCommonAncestor:function(h,f){var i=h,g;while(i){g=f;while(g&&i!=g){g=g.parentNode}if(i==g){break}i=i.parentNode}if(!i&&h.ownerDocument){return h.ownerDocument.documentElement}return i},toHex:function(f){var h=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(f);function g(i){i=parseInt(i).toString(16);return i.length>1?i:"0"+i}if(h){f="#"+g(h[1])+g(h[2])+g(h[3]);return f}return f},getClasses:function(){var l=this,g=[],k,m={},n=l.settings.class_filter,j;if(l.classes){return l.classes}function o(f){e(f.imports,function(i){o(i)});e(f.cssRules||f.rules,function(i){switch(i.type||1){case 1:if(i.selectorText){e(i.selectorText.split(","),function(p){p=p.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(p)||!/\.[\w\-]+$/.test(p)){return}j=p;p=p.replace(/.*\.([a-z0-9_\-]+).*/i,"$1");if(n&&!(p=n(p,j))){return}if(!m[p]){g.push({"class":p});m[p]=1}})}break;case 3:o(i.styleSheet);break}})}try{e(l.doc.styleSheets,o)}catch(h){}if(g.length>0){l.classes=g}return g},run:function(j,i,h){var g=this,k;if(g.doc&&typeof(j)==="string"){j=g.get(j)}if(!j){return false}h=h||this;if(!j.nodeType&&(j.length||j.length===0)){k=[];e(j,function(l,f){if(l){if(typeof(l)=="string"){l=g.doc.getElementById(l)}k.push(i.call(h,l,f))}});return k}return i.call(h,j)},getAttribs:function(g){var f;g=this.get(g);if(!g){return[]}if(a){f=[];if(g.nodeName=="OBJECT"){return g.attributes}g.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(i,h){f.push({specified:1,nodeName:h})});return f}return g.attributes},destroy:function(g){var f=this;f.win=f.doc=f.root=null;if(!g){c.removeUnload(f.destroy)}},createRng:function(){var f=this.doc;return f.createRange?f.createRange():new c.dom.Range(this)},split:function(k,j,n){var o=this,f=o.createRng(),l,i,m;function g(q,p){q=q[p];if(q&&q[p]&&q[p].nodeType==1&&h(q[p])){o.remove(q[p])}}function h(p){p=o.getOuterHTML(p);p=p.replace(/<(img|hr|table)/gi,"-");p=p.replace(/<[^>]+>/g,"");return p.replace(/[ \t\r\n]+|&nbsp;|&#160;/g,"")==""}if(k&&j){f.setStartBefore(k);f.setEndBefore(j);l=f.extractContents();f=o.createRng();f.setStartAfter(j);f.setEndAfter(k);i=f.extractContents();m=k.parentNode;g(l,"lastChild");if(!h(l)){m.insertBefore(l,k)}if(n){m.replaceChild(n,j)}else{m.insertBefore(j,k)}g(i,"firstChild");if(!h(i)){m.insertBefore(i,k)}o.remove(k);return n||j}},_isRes:function(f){return/^(top|left|bottom|right|width|height)/i.test(f)||/;\s*(top|left|bottom|right|width|height)/i.test(f)}});c.DOM=new c.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(f){var h=0,c=1,e=2,d=tinymce.extend;function g(m,k){var j,l;if(m.parentNode!=k){return -1}for(l=k.firstChild,j=0;l!=m;l=l.nextSibling){j++}return j}function b(k){var j=0;while(k.previousSibling){j++;k=k.previousSibling}return j}function i(j,k){var l;if(j.nodeType==3){return j}if(k<0){return j}l=j.firstChild;while(l!=null&&k>0){--k;l=l.nextSibling}if(l!=null){return l}return j}function a(k){var j=k.doc;d(this,{dom:k,startContainer:j,startOffset:0,endContainer:j,endOffset:0,collapsed:true,commonAncestorContainer:j,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3})}d(a.prototype,{setStart:function(k,j){this._setEndPoint(true,k,j)},setEnd:function(k,j){this._setEndPoint(false,k,j)},setStartBefore:function(j){this.setStart(j.parentNode,b(j))},setStartAfter:function(j){this.setStart(j.parentNode,b(j)+1)},setEndBefore:function(j){this.setEnd(j.parentNode,b(j))},setEndAfter:function(j){this.setEnd(j.parentNode,b(j)+1)},collapse:function(k){var j=this;if(k){j.endContainer=j.startContainer;j.endOffset=j.startOffset}else{j.startContainer=j.endContainer;j.startOffset=j.endOffset}j.collapsed=true},selectNode:function(j){this.setStartBefore(j);this.setEndAfter(j)},selectNodeContents:function(j){this.setStart(j,0);this.setEnd(j,j.nodeType===1?j.childNodes.length:j.nodeValue.length)},compareBoundaryPoints:function(m,n){var l=this,p=l.startContainer,o=l.startOffset,k=l.endContainer,j=l.endOffset;if(m===0){return l._compareBoundaryPoints(p,o,p,o)}if(m===1){return l._compareBoundaryPoints(p,o,k,j)}if(m===2){return l._compareBoundaryPoints(k,j,k,j)}if(m===3){return l._compareBoundaryPoints(k,j,p,o)}},deleteContents:function(){this._traverse(e)},extractContents:function(){return this._traverse(h)},cloneContents:function(){return this._traverse(c)},insertNode:function(m){var j=this,l,k;if(m.nodeType===3||m.nodeType===4){l=j.startContainer.splitText(j.startOffset);j.startContainer.parentNode.insertBefore(m,l)}else{if(j.startContainer.childNodes.length>0){k=j.startContainer.childNodes[j.startOffset]}j.startContainer.insertBefore(m,k)}},surroundContents:function(l){var j=this,k=j.extractContents();j.insertNode(l);l.appendChild(k);j.selectNode(l)},cloneRange:function(){var j=this;return d(new a(j.dom),{startContainer:j.startContainer,startOffset:j.startOffset,endContainer:j.endContainer,endOffset:j.endOffset,collapsed:j.collapsed,commonAncestorContainer:j.commonAncestorContainer})},_isCollapsed:function(){return(this.startContainer==this.endContainer&&this.startOffset==this.endOffset)},_compareBoundaryPoints:function(m,p,k,o){var q,l,j,r,t,s;if(m==k){if(p==o){return 0}else{if(p<o){return -1}else{return 1}}}q=k;while(q&&q.parentNode!=m){q=q.parentNode}if(q){l=0;j=m.firstChild;while(j!=q&&l<p){l++;j=j.nextSibling}if(p<=l){return -1}else{return 1}}q=m;while(q&&q.parentNode!=k){q=q.parentNode}if(q){l=0;j=k.firstChild;while(j!=q&&l<o){l++;j=j.nextSibling}if(l<o){return -1}else{return 1}}r=this.dom.findCommonAncestor(m,k);t=m;while(t&&t.parentNode!=r){t=t.parentNode}if(!t){t=r}s=k;while(s&&s.parentNode!=r){s=s.parentNode}if(!s){s=r}if(t==s){return 0}j=r.firstChild;while(j){if(j==t){return -1}if(j==s){return 1}j=j.nextSibling}},_setEndPoint:function(k,q,p){var l=this,j,m;if(k){l.startContainer=q;l.startOffset=p}else{l.endContainer=q;l.endOffset=p}j=l.endContainer;while(j.parentNode){j=j.parentNode}m=l.startContainer;while(m.parentNode){m=m.parentNode}if(m!=j){l.collapse(k)}else{if(l._compareBoundaryPoints(l.startContainer,l.startOffset,l.endContainer,l.endOffset)>0){l.collapse(k)}}l.collapsed=l._isCollapsed();l.commonAncestorContainer=l.dom.findCommonAncestor(l.startContainer,l.endContainer)},_traverse:function(r){var s=this,q,m=0,v=0,k,o,l,n,j,u;if(s.startContainer==s.endContainer){return s._traverseSameContainer(r)}for(q=s.endContainer,k=q.parentNode;k!=null;q=k,k=k.parentNode){if(k==s.startContainer){return s._traverseCommonStartContainer(q,r)}++m}for(q=s.startContainer,k=q.parentNode;k!=null;q=k,k=k.parentNode){if(k==s.endContainer){return s._traverseCommonEndContainer(q,r)}++v}o=v-m;l=s.startContainer;while(o>0){l=l.parentNode;o--}n=s.endContainer;while(o<0){n=n.parentNode;o++}for(j=l.parentNode,u=n.parentNode;j!=u;j=j.parentNode,u=u.parentNode){l=j;n=u}return s._traverseCommonAncestors(l,n,r)},_traverseSameContainer:function(o){var r=this,q,u,j,k,l,p,m;if(o!=e){q=r.dom.doc.createDocumentFragment()}if(r.startOffset==r.endOffset){return q}if(r.startContainer.nodeType==3){u=r.startContainer.nodeValue;j=u.substring(r.startOffset,r.endOffset);if(o!=c){r.startContainer.deleteData(r.startOffset,r.endOffset-r.startOffset);r.collapse(true)}if(o==e){return null}q.appendChild(r.dom.doc.createTextNode(j));return q}k=i(r.startContainer,r.startOffset);l=r.endOffset-r.startOffset;while(l>0){p=k.nextSibling;m=r._traverseFullySelected(k,o);if(q){q.appendChild(m)}--l;k=p}if(o!=c){r.collapse(true)}return q},_traverseCommonStartContainer:function(j,p){var s=this,r,k,l,m,q,o;if(p!=e){r=s.dom.doc.createDocumentFragment()}k=s._traverseRightBoundary(j,p);if(r){r.appendChild(k)}l=g(j,s.startContainer);m=l-s.startOffset;if(m<=0){if(p!=c){s.setEndBefore(j);s.collapse(false)}return r}k=j.previousSibling;while(m>0){q=k.previousSibling;o=s._traverseFullySelected(k,p);if(r){r.insertBefore(o,r.firstChild)}--m;k=q}if(p!=c){s.setEndBefore(j);s.collapse(false)}return r},_traverseCommonEndContainer:function(m,p){var s=this,r,o,j,k,q,l;if(p!=e){r=s.dom.doc.createDocumentFragment()}j=s._traverseLeftBoundary(m,p);if(r){r.appendChild(j)}o=g(m,s.endContainer);++o;k=s.endOffset-o;j=m.nextSibling;while(k>0){q=j.nextSibling;l=s._traverseFullySelected(j,p);if(r){r.appendChild(l)}--k;j=q}if(p!=c){s.setStartAfter(m);s.collapse(true)}return r},_traverseCommonAncestors:function(p,j,s){var w=this,l,v,o,q,r,k,u,m;if(s!=e){v=w.dom.doc.createDocumentFragment()}l=w._traverseLeftBoundary(p,s);if(v){v.appendChild(l)}o=p.parentNode;q=g(p,o);r=g(j,o);++q;k=r-q;u=p.nextSibling;while(k>0){m=u.nextSibling;l=w._traverseFullySelected(u,s);if(v){v.appendChild(l)}u=m;--k}l=w._traverseRightBoundary(j,s);if(v){v.appendChild(l)}if(s!=c){w.setStartAfter(p);w.collapse(true)}return v},_traverseRightBoundary:function(p,q){var s=this,l=i(s.endContainer,s.endOffset-1),r,o,n,j,k;var m=l!=s.endContainer;if(l==p){return s._traverseNode(l,m,false,q)}r=l.parentNode;o=s._traverseNode(r,false,false,q);while(r!=null){while(l!=null){n=l.previousSibling;j=s._traverseNode(l,m,false,q);if(q!=e){o.insertBefore(j,o.firstChild)}m=true;l=n}if(r==p){return o}l=r.previousSibling;r=r.parentNode;k=s._traverseNode(r,false,false,q);if(q!=e){k.appendChild(o)}o=k}return null},_traverseLeftBoundary:function(p,q){var s=this,m=i(s.startContainer,s.startOffset);var n=m!=s.startContainer,r,o,l,j,k;if(m==p){return s._traverseNode(m,n,true,q)}r=m.parentNode;o=s._traverseNode(r,false,true,q);while(r!=null){while(m!=null){l=m.nextSibling;j=s._traverseNode(m,n,true,q);if(q!=e){o.appendChild(j)}n=true;m=l}if(r==p){return o}m=r.nextSibling;r=r.parentNode;k=s._traverseNode(r,false,true,q);if(q!=e){k.appendChild(o)}o=k}return null},_traverseNode:function(j,o,r,s){var u=this,m,l,p,k,q;if(o){return u._traverseFullySelected(j,s)}if(j.nodeType==3){m=j.nodeValue;if(r){k=u.startOffset;l=m.substring(k);p=m.substring(0,k)}else{k=u.endOffset;l=m.substring(0,k);p=m.substring(k)}if(s!=c){j.nodeValue=p}if(s==e){return null}q=j.cloneNode(false);q.nodeValue=l;return q}if(s==e){return null}return j.cloneNode(false)},_traverseFullySelected:function(l,k){var j=this;if(k!=e){return k==c?l.cloneNode(true):l}l.parentNode.removeChild(l);return null}});f.Range=a})(tinymce.dom);(function(){function a(e){var d=this,h="\uFEFF",b,g;function c(j,i){if(j&&i){if(j.item&&i.item&&j.item(0)===i.item(0)){return 1}if(j.isEqual&&i.isEqual&&i.isEqual(j)){return 1}}return 0}function f(){var m=e.dom,j=e.getRng(),s=m.createRng(),p,k,n,q,o,l;function i(v){var t=v.parentNode.childNodes,u;for(u=t.length-1;u>=0;u--){if(t[u]==v){return u}}return -1}function r(v){var t=j.duplicate(),B,y,u,w,x=0,z=0,A,C;t.collapse(v);B=t.parentElement();t.pasteHTML(h);u=B.childNodes;for(y=0;y<u.length;y++){w=u[y];if(y>0&&(w.nodeType!==3||u[y-1].nodeType!==3)){z++}if(w.nodeType===3){A=w.nodeValue.indexOf(h);if(A!==-1){x+=A;break}x+=w.nodeValue.length}else{x=0}}t.moveStart("character",-1);t.text="";return{index:z,offset:x,parent:B}}n=j.item?j.item(0):j.parentElement();if(n.ownerDocument!=m.doc){return s}if(j.item||!n.hasChildNodes()){s.setStart(n.parentNode,i(n));s.setEnd(s.startContainer,s.startOffset+1);return s}l=e.isCollapsed();p=r(true);k=r(false);p.parent.normalize();k.parent.normalize();q=p.parent.childNodes[Math.min(p.index,p.parent.childNodes.length-1)];if(q.nodeType!=3){s.setStart(p.parent,p.index)}else{s.setStart(p.parent.childNodes[p.index],p.offset)}o=k.parent.childNodes[Math.min(k.index,k.parent.childNodes.length-1)];if(o.nodeType!=3){if(!l){k.index++}s.setEnd(k.parent,k.index)}else{s.setEnd(k.parent.childNodes[k.index],k.offset)}if(!l){q=s.startContainer;if(q.nodeType==1){s.setStart(q,Math.min(s.startOffset,q.childNodes.length))}o=s.endContainer;if(o.nodeType==1){s.setEnd(o,Math.min(s.endOffset,o.childNodes.length))}}d.addRange(s);return s}this.addRange=function(j){var o,m=e.dom.doc.body,p,k,q,l,n,i;q=j.startContainer;l=j.startOffset;n=j.endContainer;i=j.endOffset;o=m.createTextRange();q=q.nodeType==1?q.childNodes[Math.min(l,q.childNodes.length-1)]:q;n=n.nodeType==1?n.childNodes[Math.min(l==i?i:i-1,n.childNodes.length-1)]:n;if(q==n&&q.nodeType==1){if(/^(IMG|TABLE)$/.test(q.nodeName)&&l!=i){o=m.createControlRange();o.addElement(q)}else{o=m.createTextRange();if(!q.hasChildNodes()&&q.canHaveHTML){q.innerHTML=h}o.moveToElementText(q);if(q.innerHTML==h){o.collapse(true);q.removeChild(q.firstChild)}}if(l==i){o.collapse(i<=j.endContainer.childNodes.length-1)}o.select();return}function r(t,v){var u,s,w;if(t.nodeType!=3){return -1}u=t.nodeValue;s=m.createTextRange();t.nodeValue=u.substring(0,v)+h+u.substring(v);s.moveToElementText(t.parentNode);s.findText(h);w=Math.abs(s.moveStart("character",-1048575));t.nodeValue=u;return w}if(j.collapsed){pos=r(q,l);o=m.createTextRange();o.move("character",pos);o.select();return}else{if(q==n&&q.nodeType==3){p=r(q,l);o.move("character",p);o.moveEnd("character",i-l);o.select();return}p=r(q,l);k=r(n,i);o=m.createTextRange();if(p==-1){o.moveToElementText(q);p=0}else{o.move("character",p)}tmpRng=m.createTextRange();if(k==-1){tmpRng.moveToElementText(n)}else{tmpRng.move("character",k)}o.setEndPoint("EndToEnd",tmpRng);o.select();return}};this.getRangeAt=function(){if(!b||!c(g,e.getRng())){b=f();g=e.getRng()}return b};this.destroy=function(){g=b=null}}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,i=0,d=Object.prototype.toString,n=false;var b=function(D,t,A,v){A=A||[];var e=t=t||document;if(t.nodeType!==1&&t.nodeType!==9){return[]}if(!D||typeof D!=="string"){return A}var B=[],C,y,G,F,z,s,r=true,w=o(t);p.lastIndex=0;while((C=p.exec(D))!==null){B.push(C[1]);if(C[2]){s=RegExp.rightContext;break}}if(B.length>1&&j.exec(D)){if(B.length===2&&f.relative[B[0]]){y=g(B[0]+B[1],t)}else{y=f.relative[B[0]]?[t]:b(B.shift(),t);while(B.length){D=B.shift();if(f.relative[D]){D+=B.shift()}y=g(D,y)}}}else{if(!v&&B.length>1&&t.nodeType===9&&!w&&f.match.ID.test(B[0])&&!f.match.ID.test(B[B.length-1])){var H=b.find(B.shift(),t,w);t=H.expr?b.filter(H.expr,H.set)[0]:H.set[0]}if(t){var H=v?{expr:B.pop(),set:a(v)}:b.find(B.pop(),B.length===1&&(B[0]==="~"||B[0]==="+")&&t.parentNode?t.parentNode:t,w);y=H.expr?b.filter(H.expr,H.set):H.set;if(B.length>0){G=a(y)}else{r=false}while(B.length){var u=B.pop(),x=u;if(!f.relative[u]){u=""}else{x=B.pop()}if(x==null){x=t}f.relative[u](G,x,w)}}else{G=B=[]}}if(!G){G=y}if(!G){throw"Syntax error, unrecognized expression: "+(u||D)}if(d.call(G)==="[object Array]"){if(!r){A.push.apply(A,G)}else{if(t&&t.nodeType===1){for(var E=0;G[E]!=null;E++){if(G[E]&&(G[E]===true||G[E].nodeType===1&&h(t,G[E]))){A.push(y[E])}}}else{for(var E=0;G[E]!=null;E++){if(G[E]&&G[E].nodeType===1){A.push(y[E])}}}}}else{a(G,A)}if(s){b(s,e,A,v);b.uniqueSort(A)}return A};b.uniqueSort=function(r){if(c){n=false;r.sort(c);if(n){for(var e=1;e<r.length;e++){if(r[e]===r[e-1]){r.splice(e--,1)}}}}};b.matches=function(e,r){return b(e,null,null,r)};b.find=function(x,e,y){var w,u;if(!x){return[]}for(var t=0,s=f.order.length;t<s;t++){var v=f.order[t],u;if((u=f.match[v].exec(x))){var r=RegExp.leftContext;if(r.substr(r.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");w=f.find[v](u,e,y);if(w!=null){x=x.replace(f.match[v],"");break}}}}if(!w){w=e.getElementsByTagName("*")}return{set:w,expr:x}};b.filter=function(A,z,D,t){var s=A,F=[],x=z,v,e,w=z&&z[0]&&o(z[0]);while(A&&z.length){for(var y in f.filter){if((v=f.match[y].exec(A))!=null){var r=f.filter[y],E,C;e=false;if(x==F){F=[]}if(f.preFilter[y]){v=f.preFilter[y](v,x,D,F,t,w);if(!v){e=E=true}else{if(v===true){continue}}}if(v){for(var u=0;(C=x[u])!=null;u++){if(C){E=r(C,v,u,x);var B=t^!!E;if(D&&E!=null){if(B){e=true}else{x[u]=false}}else{if(B){F.push(C);e=true}}}}}if(E!==undefined){if(!D){x=F}A=A.replace(f.match[y],"");if(!e){return[]}break}}}if(A==s){if(e==null){throw"Syntax error, unrecognized expression: "+A}else{break}}s=A}return x};var f=b.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")}},relative:{"+":function(x,e,w){var u=typeof e==="string",y=u&&!/\W/.test(e),v=u&&!y;if(y&&!w){e=e.toUpperCase()}for(var t=0,s=x.length,r;t<s;t++){if((r=x[t])){while((r=r.previousSibling)&&r.nodeType!==1){}x[t]=v||r&&r.nodeName===e?r||false:r===e}}if(v){b.filter(e,x,true)}},">":function(w,r,x){var u=typeof r==="string";if(u&&!/\W/.test(r)){r=x?r:r.toUpperCase();for(var s=0,e=w.length;s<e;s++){var v=w[s];if(v){var t=v.parentNode;w[s]=t.nodeName===r?t:false}}}else{for(var s=0,e=w.length;s<e;s++){var v=w[s];if(v){w[s]=u?v.parentNode:v.parentNode===r}}if(u){b.filter(r,w,true)}}},"":function(t,r,v){var s=i++,e=q;if(!r.match(/\W/)){var u=r=v?r:r.toUpperCase();e=m}e("parentNode",r,s,t,u,v)},"~":function(t,r,v){var s=i++,e=q;if(typeof r==="string"&&!r.match(/\W/)){var u=r=v?r:r.toUpperCase();e=m}e("previousSibling",r,s,t,u,v)}},find:{ID:function(r,s,t){if(typeof s.getElementById!=="undefined"&&!t){var e=s.getElementById(r[1]);return e?[e]:[]}},NAME:function(s,v,w){if(typeof v.getElementsByName!=="undefined"){var r=[],u=v.getElementsByName(s[1]);for(var t=0,e=u.length;t<e;t++){if(u[t].getAttribute("name")===s[1]){r.push(u[t])}}return r.length===0?null:r}},TAG:function(e,r){return r.getElementsByTagName(e[1])}},preFilter:{CLASS:function(t,r,s,e,w,x){t=" "+t[1].replace(/\\/g,"")+" ";if(x){return t}for(var u=0,v;(v=r[u])!=null;u++){if(v){if(w^(v.className&&(" "+v.className+" ").indexOf(t)>=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){for(var s=0;e[s]===false;s++){}return e[s]&&o(e[s])?r[1]:r[1].toUpperCase()},CHILD:function(e){if(e[1]=="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]=="even"&&"2n"||e[2]=="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=i++;return e},ATTR:function(u,r,s,e,v,w){var t=u[1].replace(/\\/g,"");if(!w&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if(u[3].match(p).length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return/h\d/i.test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toUpperCase()==="BUTTON"},input:function(e){return/input|select|textarea|button/i.test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return r<e[3]-0},gt:function(s,r,e){return r>e[3]-0},nth:function(s,r,e){return e[3]-0==r},eq:function(s,r,e){return e[3]-0==r}},filter:{PSEUDO:function(w,s,t,x){var r=s[1],u=f.filters[r];if(u){return u(w,t,s,x)}else{if(r==="contains"){return(w.textContent||w.innerText||"").indexOf(s[3])>=0}else{if(r==="not"){var v=s[3];for(var t=0,e=v.length;t<e;t++){if(v[t]===w){return false}}return true}}}},CHILD:function(e,t){var w=t[1],r=e;switch(w){case"only":case"first":while(r=r.previousSibling){if(r.nodeType===1){return false}}if(w=="first"){return true}r=e;case"last":while(r=r.nextSibling){if(r.nodeType===1){return false}}return true;case"nth":var s=t[2],z=t[3];if(s==1&&z==0){return true}var v=t[0],y=e.parentNode;if(y&&(y.sizcache!==v||!e.nodeIndex)){var u=0;for(r=y.firstChild;r;r=r.nextSibling){if(r.nodeType===1){r.nodeIndex=++u}}y.sizcache=v}var x=e.nodeIndex-z;if(s==0){return x==0}else{return(x%s==0&&x/s>=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),w=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?w===r:u==="*="?w.indexOf(r)>=0:u==="~="?(" "+w+" ").indexOf(r)>=0:!r?w&&e!==false:u==="!="?w!=r:u==="^="?w.indexOf(r)===0:u==="$="?w.substr(w.length-r.length)===r:u==="|="?w===r||w.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var j=f.match.POS;for(var l in f.match){f.match[l]=new RegExp(f.match[l].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var a=function(r,e){r=Array.prototype.slice.call(r);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(k){a=function(u,t){var r=t||[];if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var s=0,e=u.length;s<e;s++){r.push(u[s])}}else{for(var s=0;u[s];s++){r.push(u[s])}}}return r}}var c;if(document.documentElement.compareDocumentPosition){c=function(r,e){var s=r.compareDocumentPosition(e)&4?-1:r===e?0:1;if(s===0){n=true}return s}}else{if("sourceIndex" in document.documentElement){c=function(r,e){var s=r.sourceIndex-e.sourceIndex;if(s===0){n=true}return s}}else{if(document.createRange){c=function(t,r){var s=t.ownerDocument.createRange(),e=r.ownerDocument.createRange();s.setStart(t,0);s.setEnd(t,0);e.setStart(r,0);e.setEnd(r,0);var u=s.compareBoundaryPoints(Range.START_TO_END,e);if(u===0){n=true}return u}}}}(function(){var r=document.createElement("div"),s="script"+(new Date).getTime();r.innerHTML="<a name='"+s+"'/>";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(!!document.getElementById(s)){f.find.ID=function(u,v,w){if(typeof v.getElementById!=="undefined"&&!w){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r)})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="<p class='TEST'></p>";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(w,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!o(v)){try{return a(v.querySelectorAll(w),t)}catch(x){}}return e(w,v,t,u)};for(var r in e){b[r]=e[r]}})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}}})()}function m(r,w,v,A,x,z){var y=r=="previousSibling"&&!z;for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){if(y&&e.nodeType===1){e.sizcache=v;e.sizset=t}e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1&&!z){e.sizcache=v;e.sizset=t}if(e.nodeName===w){u=e;break}e=e[r]}A[t]=u}}}function q(r,w,v,A,x,z){var y=r=="previousSibling"&&!z;for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){if(y&&e.nodeType===1){e.sizcache=v;e.sizset=t}e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1){if(!z){e.sizcache=v;e.sizset=t}if(typeof w!=="string"){if(e===w){u=true;break}}else{if(b.filter(w,[e]).length>0){u=e;break}}}e=e[r]}A[t]=u}}}var h=document.compareDocumentPosition?function(r,e){return r.compareDocumentPosition(e)&16}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};var o=function(e){return e.nodeType===9&&e.documentElement.nodeName!=="HTML"||!!e.ownerDocument&&e.ownerDocument.documentElement.nodeName!=="HTML"};var g=function(e,x){var t=[],u="",v,s=x.nodeType?[x]:x;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var w=0,r=s.length;w<r;w++){b(e,s[w],t)}return b.filter(u,t)};window.tinymce.dom.Sizzle=b})();(function(d){var f=d.each,c=d.DOM,b=d.isIE,e=d.isWebKit,a;d.create("static tinymce.dom.Event",{inits:[],events:[],add:function(m,p,l,j){var g,h=this,i=h.events,k;if(m&&m.hasOwnProperty&&m instanceof Array){k=[];f(m,function(n){n=c.get(n);k.push(h.add(n,p,l,j))});return k}m=c.get(m);if(!m){return}g=function(n){n=n||window.event;if(n&&!n.target&&b){n.target=n.srcElement}if(!j){return l(n)}return l.call(j,n)};if(p=="unload"){d.unloads.unshift({func:g});return g}if(p=="init"){if(h.domLoaded){g()}else{h.inits.push(g)}return g}i.push({obj:m,name:p,func:l,cfunc:g,scope:j});h._add(m,p,g);return l},remove:function(l,m,k){var h=this,g=h.events,i=false,j;if(l&&l.hasOwnProperty&&l instanceof Array){j=[];f(l,function(n){n=c.get(n);j.push(h.remove(n,m,k))});return j}l=c.get(l);f(g,function(o,n){if(o.obj==l&&o.name==m&&(!k||(o.func==k||o.cfunc==k))){g.splice(n,1);h._remove(l,m,o.cfunc);i=true;return false}});return i},clear:function(l){var j=this,g=j.events,h,k;if(l){l=c.get(l);for(h=g.length-1;h>=0;h--){k=g[h];if(k.obj===l){j._remove(k.obj,k.name,k.cfunc);k.obj=k.cfunc=null;g.splice(h,1)}}}},cancel:function(g){if(!g){return false}this.stop(g);return this.prevent(g)},stop:function(g){if(g.stopPropagation){g.stopPropagation()}else{g.cancelBubble=true}return false},prevent:function(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false},_unload:function(){var g=a;f(g.events,function(j,h){g._remove(j.obj,j.name,j.cfunc);j.obj=j.cfunc=null});g.events=[];g=null},_add:function(h,i,g){if(h.attachEvent){h.attachEvent("on"+i,g)}else{if(h.addEventListener){h.addEventListener(i,g,false)}else{h["on"+i]=g}}},_remove:function(i,j,h){if(i){try{if(i.detachEvent){i.detachEvent("on"+j,h)}else{if(i.removeEventListener){i.removeEventListener(j,h,false)}else{i["on"+j]=null}}}catch(g){}}},_pageInit:function(){var g=a;if(g.domLoaded){return}g._remove(window,"DOMContentLoaded",g._pageInit);g.domLoaded=true;f(g.inits,function(h){h()});g.inits=[]},_wait:function(){if(window.tinyMCE_GZ&&tinyMCE_GZ.loaded){a.domLoaded=1;return}if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);a._pageInit()}});if(document.documentElement.doScroll&&window==window.top){(function(){if(a.domLoaded){return}try{document.documentElement.doScroll("left")}catch(g){setTimeout(arguments.callee,0);return}a._pageInit()})()}}else{if(document.addEventListener){a._add(window,"DOMContentLoaded",a._pageInit,a)}}a._add(window,"load",a._pageInit,a)}});a=d.dom.Event;a._wait();d.addUnload(a._unload)})(tinymce);(function(a){var b=a.each;a.create("tinymce.dom.Element",{Element:function(g,e){var c=this,f,d;e=e||{};c.id=g;c.dom=f=e.dom||a.DOM;c.settings=e;if(!a.isIE){d=c.dom.get(c.id)}b(["getPos","getRect","getParent","add","setStyle","getStyle","setStyles","setAttrib","setAttribs","getAttrib","addClass","removeClass","hasClass","getOuterHTML","setOuterHTML","remove","show","hide","isHidden","setHTML","get"],function(h){c[h]=function(){var j=[g],k;for(k=0;k<arguments.length;k++){j.push(arguments[k])}j=f[h].apply(f,j);c.update(h);return j}})},on:function(e,d,c){return a.dom.Event.add(this.id,e,d,c)},getXY:function(){return{x:parseInt(this.getStyle("left")),y:parseInt(this.getStyle("top"))}},getSize:function(){var c=this.dom.get(this.id);return{w:parseInt(this.getStyle("width")||c.clientWidth),h:parseInt(this.getStyle("height")||c.clientHeight)}},moveTo:function(c,d){this.setStyles({left:c,top:d})},moveBy:function(c,e){var d=this.getXY();this.moveTo(d.x+c,d.y+e)},resizeTo:function(c,d){this.setStyles({width:c,height:d})},resizeBy:function(c,e){var d=this.getSize();this.resizeTo(d.w+c,d.h+e)},update:function(d){var e=this,c,f=e.dom;if(a.isIE6&&e.settings.blocker){d=d||"";if(d.indexOf("get")===0||d.indexOf("has")===0||d.indexOf("is")===0){return}if(d=="remove"){f.remove(e.blocker);return}if(!e.blocker){e.blocker=f.uniqueId();c=f.add(e.settings.container||f.getRoot(),"iframe",{id:e.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});f.setStyle(c,"opacity",0)}else{c=f.get(e.blocker)}f.setStyle(c,"left",e.getStyle("left",1));f.setStyle(c,"top",e.getStyle("top",1));f.setStyle(c,"width",e.getStyle("width",1));f.setStyle(c,"height",e.getStyle("height",1));f.setStyle(c,"display",e.getStyle("display",1));f.setStyle(c,"zIndex",parseInt(e.getStyle("zIndex",1)||0)-1)}}})})(tinymce);(function(c){function e(f){return f.replace(/[\n\r]+/g,"")}var b=c.is,a=c.isIE,d=c.each;c.create("tinymce.dom.Selection",{Selection:function(i,h,g){var f=this;f.dom=i;f.win=h;f.serializer=g;d(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(j){f[j]=new c.util.Dispatcher(f)});if(!f.win.getSelection){f.tridentSel=new c.dom.TridentSelection(f)}c.addUnload(f.destroy,f)},getContent:function(g){var f=this,h=f.getRng(),l=f.dom.create("body"),j=f.getSel(),i,k,m;g=g||{};i=k="";g.get=true;g.format=g.format||"html";f.onBeforeGetContent.dispatch(f,g);if(g.format=="text"){return f.isCollapsed()?"":(h.text||(j.toString?j.toString():""))}if(h.cloneContents){m=h.cloneContents();if(m){l.appendChild(m)}}else{if(b(h.item)||b(h.htmlText)){l.innerHTML=h.item?h.item(0).outerHTML:h.htmlText}else{l.innerHTML=h.toString()}}if(/^\s/.test(l.innerHTML)){i=" "}if(/\s+$/.test(l.innerHTML)){k=" "}g.getInner=true;g.content=f.isCollapsed()?"":i+f.serializer.serialize(l,g)+k;f.onGetContent.dispatch(f,g);return g.content},setContent:function(i,g){var f=this,j=f.getRng(),l,k=f.win.document;g=g||{format:"html"};g.set=true;i=g.content=f.dom.processHTML(i);f.onBeforeSetContent.dispatch(f,g);i=g.content;if(j.insertNode){i+='<span id="__caret">_</span>';j.deleteContents();j.insertNode(f.getRng().createContextualFragment(i));l=f.dom.get("__caret");j=k.createRange();j.setStartBefore(l);j.setEndAfter(l);f.setRng(j);f.dom.remove("__caret")}else{if(j.item){k.execCommand("Delete",false,null);j=f.getRng()}j.pasteHTML(i)}f.onSetContent.dispatch(f,g)},getStart:function(){var f=this,g=f.getRng(),h;if(a){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(1);h=g.parentElement();if(h&&h.nodeName=="BODY"){return h.firstChild}return h}else{h=g.startContainer;if(h.nodeName=="BODY"){return h.firstChild}return f.dom.getParent(h,"*")}},getEnd:function(){var f=this,g=f.getRng(),h;if(a){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);h=g.parentElement();if(h&&h.nodeName=="BODY"){return h.lastChild}return h}else{h=g.endContainer;if(h.nodeName=="BODY"){return h.lastChild}return f.dom.getParent(h,"*")}},getBookmark:function(x){var j=this,m=j.getRng(),f,n,l,u=j.dom.getViewPort(j.win),v,p,z,o,w=-16777215,k,h=j.dom.getRoot(),g=0,i=0,y;n=u.x;l=u.y;if(x=="simple"){return{rng:m,scrollX:n,scrollY:l}}if(a){if(m.item){v=m.item(0);d(j.dom.select(v.nodeName),function(s,r){if(v==s){p=r;return false}});return{tag:v.nodeName,index:p,scrollX:n,scrollY:l}}f=j.dom.doc.body.createTextRange();f.moveToElementText(h);f.collapse(true);z=Math.abs(f.move("character",w));f=m.duplicate();f.collapse(true);p=Math.abs(f.move("character",w));f=m.duplicate();f.collapse(false);o=Math.abs(f.move("character",w))-p;return{start:p-z,length:o,scrollX:n,scrollY:l}}v=j.getNode();k=j.getSel();if(!k){return null}if(v&&v.nodeName=="IMG"){return{scrollX:n,scrollY:l}}function q(A,D,t){var s=j.dom.doc.createTreeWalker(A,NodeFilter.SHOW_TEXT,null,false),E,B=0,C={};while((E=s.nextNode())!=null){if(E==D){C.start=B}if(E==t){C.end=B;return C}B+=e(E.nodeValue||"").length}return null}if(k.anchorNode==k.focusNode&&k.anchorOffset==k.focusOffset){v=q(h,k.anchorNode,k.focusNode);if(!v){return{scrollX:n,scrollY:l}}e(k.anchorNode.nodeValue||"").replace(/^\s+/,function(r){g=r.length});return{start:Math.max(v.start+k.anchorOffset-g,0),end:Math.max(v.end+k.focusOffset-g,0),scrollX:n,scrollY:l,beg:k.anchorOffset-g==0}}else{v=q(h,m.startContainer,m.endContainer);if(!v){return{scrollX:n,scrollY:l}}return{start:Math.max(v.start+m.startOffset-g,0),end:Math.max(v.end+m.endOffset-i,0),scrollX:n,scrollY:l,beg:m.startOffset-g==0}}},moveToBookmark:function(n){var o=this,g=o.getRng(),p=o.getSel(),j=o.dom.getRoot(),m,h,k;function i(q,t,D){var B=o.dom.doc.createTreeWalker(q,NodeFilter.SHOW_TEXT,null,false),x,s=0,A={},u,C,z,y;while((x=B.nextNode())!=null){z=y=0;k=x.nodeValue||"";h=e(k).length;s+=h;if(s>=t&&!A.startNode){u=t-(s-h);if(n.beg&&u>=h){continue}A.startNode=x;A.startOffset=u+y}if(s>=D){A.endNode=x;A.endOffset=D-(s-h)+y;return A}}return null}if(!n){return false}o.win.scrollTo(n.scrollX,n.scrollY);if(a){if(g=n.rng){try{g.select()}catch(l){}return true}o.win.focus();if(n.tag){g=j.createControlRange();d(o.dom.select(n.tag),function(r,q){if(q==n.index){g.addElement(r)}})}else{try{if(n.start<0){return true}g=p.createRange();g.moveToElementText(j);g.collapse(true);g.moveStart("character",n.start);g.moveEnd("character",n.length)}catch(f){return true}}try{g.select()}catch(l){}return true}if(!p){return false}if(n.rng){p.removeAllRanges();p.addRange(n.rng)}else{if(b(n.start)&&b(n.end)){try{m=i(j,n.start,n.end);if(m){g=o.dom.doc.createRange();g.setStart(m.startNode,m.startOffset);g.setEnd(m.endNode,m.endOffset);p.removeAllRanges();p.addRange(g)}if(!c.isOpera){o.win.focus()}}catch(l){}}}},select:function(g,l){var p=this,f=p.getRng(),q=p.getSel(),o,m,k,j=p.win.document;function h(u,t){var s,r;if(u){s=j.createTreeWalker(u,NodeFilter.SHOW_TEXT,null,false);while(u=s.nextNode()){r=u;if(c.trim(u.nodeValue).length!=0){if(t){return u}else{r=u}}}}return r}if(a){try{o=j.body;if(/^(IMG|TABLE)$/.test(g.nodeName)){f=o.createControlRange();f.addElement(g)}else{f=o.createTextRange();f.moveToElementText(g)}f.select()}catch(i){}}else{if(l){m=h(g,1)||p.dom.select("br:first",g)[0];k=h(g,0)||p.dom.select("br:last",g)[0];if(m&&k){f=j.createRange();if(m.nodeName=="BR"){f.setStartBefore(m)}else{f.setStart(m,0)}if(k.nodeName=="BR"){f.setEndBefore(k)}else{f.setEnd(k,k.nodeValue.length)}}else{f.selectNode(g)}}else{f.selectNode(g)}p.setRng(f)}return g},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}return !g||h.boundingWidth==0||h.collapsed},collapse:function(f){var g=this,h=g.getRng(),i;if(h.item){i=h.item(0);h=this.win.document.body.createTextRange();h.moveToElementText(i)}h.collapse(!!f);g.setRng(h)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(j){var g=this,h,i;if(j&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():g.win.document.createRange())}}catch(f){}if(!i){i=a?g.win.document.body.createTextRange():g.win.document.createRange()}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){h.removeAllRanges();h.addRange(i)}}else{if(i.cloneRange){g.tridentSel.addRange(i);return}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var f=this,h=f.getRng(),g=f.getSel(),i;if(!a){if(!h){return f.dom.getRoot()}i=h.commonAncestorContainer;if(!h.collapsed){if(c.isWebKit&&g.anchorNode&&g.anchorNode.nodeType==1){return g.anchorNode.childNodes[g.anchorOffset]}if(h.startContainer==h.endContainer){if(h.startOffset-h.endOffset<2){if(h.startContainer.hasChildNodes()){i=h.startContainer.childNodes[h.startOffset]}}}}return f.dom.getParent(i,"*")}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(g,f){var i=this,j=i.dom,m,h,l,k=[];m=j.getParent(g||i.getStart(),j.isBlock);h=j.getParent(f||i.getEnd(),j.isBlock);if(m){k.push(m)}if(m&&h&&m!=h){l=m;while((l=l.nextSibling)&&l!=h){if(j.isBlock(l)){k.push(l)}}}if(h&&m!=h){k.push(h)}return k},destroy:function(g){var f=this;f.win=null;if(f.tridentSel){f.tridentSel.destroy()}if(!g){c.removeUnload(f.destroy)}}})})(tinymce);(function(a){a.create("tinymce.dom.XMLWriter",{node:null,XMLWriter:function(c){function b(){var e=document.implementation;if(!e||!e.createDocument){try{return new ActiveXObject("MSXML2.DOMDocument")}catch(d){}try{return new ActiveXObject("Microsoft.XmlDom")}catch(d){}}else{return e.createDocument("","",null)}}this.doc=b();this.valid=a.isOpera||a.isWebKit;this.reset()},reset:function(){var b=this,c=b.doc;if(c.firstChild){c.removeChild(c.firstChild)}b.node=c.appendChild(c.createElement("html"))},writeStartElement:function(c){var b=this;b.node=b.node.appendChild(b.doc.createElement(c))},writeAttribute:function(c,b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.setAttribute(c,b)},writeEndElement:function(){this.node=this.node.parentNode},writeFullEndElement:function(){var b=this,c=b.node;c.appendChild(b.doc.createTextNode(""));b.node=c.parentNode},writeText:function(b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.appendChild(this.doc.createTextNode(b))},writeCDATA:function(b){this.node.appendChild(this.doc.createCDATA(b))},writeComment:function(b){if(a.isIE){b=b.replace(/^\-|\-$/g," ")}this.node.appendChild(this.doc.createComment(b.replace(/\-\-/g," ")))},getContent:function(){var b;b=this.doc.xml||new XMLSerializer().serializeToString(this.doc);b=b.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g,"");b=b.replace(/ ?\/>/g," />");if(this.valid){b=b.replace(/\%MCGT%/g,"&gt;")}return b}})})(tinymce);(function(a){a.create("tinymce.dom.StringWriter",{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(b){this.settings=a.extend({indent_char:" ",indentation:1},b);this.reset()},reset:function(){this.indent="";this.str="";this.tags=[];this.count=0},writeStartElement:function(b){this._writeAttributesEnd();this.writeRaw("<"+b);this.tags.push(b);this.inAttr=true;this.count++;this.elementCount=this.count},writeAttribute:function(d,b){var c=this;c.writeRaw(" "+c.encode(d)+'="'+c.encode(b)+'"')},writeEndElement:function(){var b;if(this.tags.length>0){b=this.tags.pop();if(this._writeAttributesEnd(1)){this.writeRaw("</"+b+">")}if(this.settings.indentation>0){this.writeRaw("\n")}}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw("</"+this.tags.pop()+">");if(this.settings.indentation>0){this.writeRaw("\n")}}},writeText:function(b){this._writeAttributesEnd();this.writeRaw(this.encode(b));this.count++},writeCDATA:function(b){this._writeAttributesEnd();this.writeRaw("<![CDATA["+b+"]]>");this.count++},writeComment:function(b){this._writeAttributesEnd();this.writeRaw("<!-- "+b+"-->");this.count++},writeRaw:function(b){this.str+=b},encode:function(b){return b.replace(/[<>&"]/g,function(c){switch(c){case"<":return"&lt;";case">":return"&gt;";case"&":return"&amp;";case'"':return"&quot;"}return c})},getContent:function(){return this.str},_writeAttributesEnd:function(b){if(!this.inAttr){return}this.inAttr=false;if(b&&this.elementCount==this.count){this.writeRaw(" />");return false}this.writeRaw(">");return true}})})(tinymce);(function(e){var g=e.extend,f=e.each,b=e.util.Dispatcher,d=e.isIE,a=e.isGecko;function c(h){return h.replace(/([?+*])/g,".$1")}e.create("tinymce.dom.Serializer",{Serializer:function(j){var i=this;i.key=0;i.onPreProcess=new b(i);i.onPostProcess=new b(i);try{i.writer=new e.dom.XMLWriter()}catch(h){i.writer=new e.dom.StringWriter()}i.settings=j=g({dom:e.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(mce_|_moz_)/,closed:/^(br|hr|input|meta|img|link|param|area)$/,entity_encoding:"named",entities:"160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",bool_attrs:/(checked|disabled|readonly|selected|nowrap)/,valid_elements:"*[*]",extended_valid_elements:0,valid_child_elements:0,invalid_elements:0,fix_table_elements:1,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,font_size_style_values:0,apply_source_formatting:0,indent_mode:"simple",indent_char:"\t",indent_levels:1,remove_linebreaks:1,remove_redundant_brs:1,element_format:"xhtml"},j);i.dom=j.dom;if(j.remove_redundant_brs){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/(<br \/>\s*)+<\/(p|h[1-6]|div|li)>/gi,function(n,m,o){if(/^<br \/>\s*<\//.test(n)){return"</"+o+">"}return n})})}if(j.element_format=="html"){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/<([^>]+) \/>/g,"<$1>")})}if(j.fix_list_elements){i.onPreProcess.add(function(v,s){var l,y,w=["ol","ul"],u,t,q,k=/^(OL|UL)$/,z;function m(r,x){var o=x.split(","),p;while((r=r.previousSibling)!=null){for(p=0;p<o.length;p++){if(r.nodeName==o[p]){return r}}}return null}for(y=0;y<w.length;y++){l=i.dom.select(w[y],s.node);for(u=0;u<l.length;u++){t=l[u];q=t.parentNode;if(k.test(q.nodeName)){z=m(t,"LI");if(!z){z=i.dom.create("li");z.innerHTML="&nbsp;";z.appendChild(t);q.insertBefore(z,q.firstChild)}else{z.appendChild(t)}}}}})}if(j.fix_table_elements){i.onPreProcess.add(function(k,l){f(i.dom.select("p table",l.node),function(m){i.dom.split(i.dom.getParent(m,"p"),m)})})}},setEntities:function(p){var n=this,j,m,h={},o="",k;if(n.entityLookup){return}j=p.split(",");for(m=0;m<j.length;m+=2){k=j[m];if(k==34||k==38||k==60||k==62){continue}h[String.fromCharCode(j[m])]=j[m+1];k=parseInt(j[m]).toString(16);o+="\\u"+"0000".substring(k.length)+k}if(!o){n.settings.entity_encoding="raw";return}n.entitiesRE=new RegExp("["+o+"]","g");n.entityLookup=h},setValidChildRules:function(h){this.childRules=null;this.addValidChildRules(h)},addValidChildRules:function(k){var j=this,l,h,i;if(!k){return}l="A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment";h="A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment";i="H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP";f(k.split(","),function(n){var o=n.split(/\[|\]/),m;n="";f(o[1].split("|"),function(p){if(n){n+="|"}switch(p){case"%itrans":p=h;break;case"%itrans_na":p=h.substring(2);break;case"%istrict":p=l;break;case"%istrict_na":p=l.substring(2);break;case"%btrans":p=i;break;case"%bstrict":p=i;break}n+=p});m=new RegExp("^("+n.toLowerCase()+")$","i");f(o[0].split("/"),function(p){j.childRules=j.childRules||{};j.childRules[p]=m})});k="";f(j.childRules,function(n,m){if(k){k+="|"}k+=m});j.parentElementsRE=new RegExp("^("+k.toLowerCase()+")$","i")},setRules:function(i){var h=this;h._setup();h.rules={};h.wildRules=[];h.validElements={};return h.addRules(i)},addRules:function(i){var h=this,j;if(!i){return}h._setup();f(i.split(","),function(m){var q=m.split(/\[|\]/),l=q[0].split("/"),r,k,o,n=[];if(j){k=e.extend([],j.attribs)}if(q.length>1){f(q[1].split("|"),function(u){var p={},t;k=k||[];u=u.replace(/::/g,"~");u=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(u);u[2]=u[2].replace(/~/g,":");if(u[1]=="!"){r=r||[];r.push(u[2])}if(u[1]=="-"){for(t=0;t<k.length;t++){if(k[t].name==u[2]){k.splice(t,1);return}}}switch(u[3]){case"=":p.defaultVal=u[4]||"";break;case":":p.forcedVal=u[4];break;case"<":p.validVals=u[4].split("?");break}if(/[*.?]/.test(u[2])){o=o||[];p.nameRE=new RegExp("^"+c(u[2])+"$");o.push(p)}else{p.name=u[2];k.push(p)}n.push(u[2])})}f(l,function(v,u){var w=v.charAt(0),t=1,p={};if(j){if(j.noEmpty){p.noEmpty=j.noEmpty}if(j.fullEnd){p.fullEnd=j.fullEnd}if(j.padd){p.padd=j.padd}}switch(w){case"-":p.noEmpty=true;break;case"+":p.fullEnd=true;break;case"#":p.padd=true;break;default:t=0}l[u]=v=v.substring(t);h.validElements[v]=1;if(/[*.?]/.test(l[0])){p.nameRE=new RegExp("^"+c(l[0])+"$");h.wildRules=h.wildRules||{};h.wildRules.push(p)}else{p.name=l[0];if(l[0]=="@"){j=p}h.rules[v]=p}p.attribs=k;if(r){p.requiredAttribs=r}if(o){v="";f(n,function(s){if(v){v+="|"}v+="("+c(s)+")"});p.validAttribsRE=new RegExp("^"+v.toLowerCase()+"$");p.wildAttribs=o}})});i="";f(h.validElements,function(m,l){if(i){i+="|"}if(l!="@"){i+=l}});h.validElementsRE=new RegExp("^("+c(i.toLowerCase())+")$")},findRule:function(m){var j=this,l=j.rules,h,k;j._setup();k=l[m];if(k){return k}l=j.wildRules;for(h=0;h<l.length;h++){if(l[h].nameRE.test(m)){return l[h]}}return null},findAttribRule:function(h,l){var j,k=h.wildAttribs;for(j=0;j<k.length;j++){if(k[j].nameRE.test(l)){return k[j]}}return null},serialize:function(l,k){var j,i=this;i._setup();k=k||{};k.format=k.format||"html";i.processObj=k;l=l.cloneNode(true);i.key=""+(parseInt(i.key)+1);if(!k.no_events){k.node=l;i.onPreProcess.dispatch(i,k)}i.writer.reset();i._serializeNode(l,k.getInner);k.content=i.writer.getContent();if(!k.no_events){i.onPostProcess.dispatch(i,k)}i._postProcess(k);k.node=null;return e.trim(k.content)},_postProcess:function(n){var i=this,k=i.settings,j=n.content,m=[],l;if(n.format=="html"){l=i._protect({content:j,patterns:[{pattern:/(<script[^>]*>)(.*?)(<\/script>)/g},{pattern:/(<style[^>]*>)(.*?)(<\/style>)/g},{pattern:/(<pre[^>]*>)(.*?)(<\/pre>)/g,encode:1},{pattern:/(<!--\[CDATA\[)(.*?)(\]\]-->)/g}]});j=l.content;if(k.entity_encoding!=="raw"){j=i._encode(j)}if(!n.set){j=j.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g,k.entity_encoding=="numeric"?"<p$1>&#160;</p>":"<p$1>&nbsp;</p>");if(k.remove_linebreaks){j=j.replace(/\r?\n|\r/g," ");j=j.replace(/(<[^>]+>)\s+/g,"$1 ");j=j.replace(/\s+(<\/[^>]+>)/g," $1");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,"<$1 $2>");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,"<$1>");j=j.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,"</$1>")}if(k.apply_source_formatting&&k.indent_mode=="simple"){j=j.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,"\n<$1$2$3>\n");j=j.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,"\n<$1$2>");j=j.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,"</$1>\n");j=j.replace(/\n\n/g,"\n")}}j=i._unprotect(j,l);j=j.replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g,"<![CDATA[$1]]>");if(k.entity_encoding=="raw"){j=j.replace(/<p>&nbsp;<\/p>|<p([^>]+)>&nbsp;<\/p>/g,"<p$1>\u00a0</p>")}}n.content=j},_serializeNode:function(C,m){var y=this,z=y.settings,u=y.writer,p,j,r,E,D,F,A,h,x,k,q,B,o;if(!z.node_filter||z.node_filter(C)){switch(C.nodeType){case 1:if(C.hasAttribute?C.hasAttribute("mce_bogus"):C.getAttribute("mce_bogus")){return}o=false;p=C.hasChildNodes();k=C.getAttribute("mce_name")||C.nodeName.toLowerCase();if(d){if(C.scopeName!=="HTML"&&C.scopeName!=="html"){k=C.scopeName+":"+k}}if(k.indexOf("mce:")===0){k=k.substring(4)}if(!y.validElementsRE.test(k)||(y.invalidElementsRE&&y.invalidElementsRE.test(k))||m){o=true;break}if(d){if(z.fix_content_duplication){if(C.mce_serialized==y.key){return}C.mce_serialized=y.key}if(k.charAt(0)=="/"){k=k.substring(1)}}else{if(a){if(C.nodeName==="BR"&&C.getAttribute("type")=="_moz"){return}}}if(y.childRules){if(y.parentElementsRE.test(y.elementName)){if(!y.childRules[y.elementName].test(k)){o=true;break}}y.elementName=k}q=y.findRule(k);k=q.name||k;if((!p&&q.noEmpty)||(d&&!k)){o=true;break}if(q.requiredAttribs){F=q.requiredAttribs;for(E=F.length-1;E>=0;E--){if(this.dom.getAttrib(C,F[E])!==""){break}}if(E==-1){o=true;break}}u.writeStartElement(k);if(q.attribs){for(E=0,A=q.attribs,D=A.length;E<D;E++){F=A[E];x=y._getAttrib(C,F);if(x!==null){u.writeAttribute(F.name,x)}}}if(q.validAttribsRE){A=y.dom.getAttribs(C);for(E=A.length-1;E>-1;E--){h=A[E];if(h.specified){F=h.nodeName.toLowerCase();if(z.invalid_attrs.test(F)||!q.validAttribsRE.test(F)){continue}B=y.findAttribRule(q,F);x=y._getAttrib(C,B,F);if(x!==null){u.writeAttribute(F,x)}}}}if(q.padd){if(p&&(r=C.firstChild)&&r.nodeType===1&&C.childNodes.length===1){if(r.hasAttribute?r.hasAttribute("mce_bogus"):r.getAttribute("mce_bogus")){u.writeText("\u00a0")}}else{if(!p){u.writeText("\u00a0")}}}break;case 3:if(y.childRules&&y.parentElementsRE.test(y.elementName)){if(!y.childRules[y.elementName].test(C.nodeName)){return}}return u.writeText(C.nodeValue);case 4:return u.writeCDATA(C.nodeValue);case 8:return u.writeComment(C.nodeValue)}}else{if(C.nodeType==1){p=C.hasChildNodes()}}if(p){r=C.firstChild;while(r){y._serializeNode(r);y.elementName=k;r=r.nextSibling}}if(!o){if(p||!z.closed.test(k)){u.writeFullEndElement()}else{u.writeEndElement()}}},_protect:function(j){var i=this;j.items=j.items||[];function h(l){return l.replace(/[\r\n\\]/g,function(m){if(m==="\n"){return"\\n"}else{if(m==="\\"){return"\\\\"}}return"\\r"})}function k(l){return l.replace(/\\[\\rn]/g,function(m){if(m==="\\n"){return"\n"}else{if(m==="\\\\"){return"\\"}}return"\r"})}f(j.patterns,function(l){j.content=k(h(j.content).replace(l.pattern,function(n,o,m,p){m=k(m);if(l.encode){m=i._encode(m)}j.items.push(m);return o+"<!--mce:"+(j.items.length-1)+"-->"+p}))});return j},_unprotect:function(i,j){i=i.replace(/\<!--mce:([0-9]+)--\>/g,function(k,h){return j.items[parseInt(h)]});j.items=[];return i},_encode:function(m){var j=this,k=j.settings,i;if(k.entity_encoding!=="raw"){if(k.entity_encoding.indexOf("named")!=-1){j.setEntities(k.entities);i=j.entityLookup;m=m.replace(j.entitiesRE,function(h){var l;if(l=i[h]){h="&"+l+";"}return h})}if(k.entity_encoding.indexOf("numeric")!=-1){m=m.replace(/[\u007E-\uFFFF]/g,function(h){return"&#"+h.charCodeAt(0)+";"})}}return m},_setup:function(){var h=this,i=this.settings;if(h.done){return}h.done=1;h.setRules(i.valid_elements);h.addRules(i.extended_valid_elements);h.addValidChildRules(i.valid_child_elements);if(i.invalid_elements){h.invalidElementsRE=new RegExp("^("+c(i.invalid_elements.replace(/,/g,"|").toLowerCase())+")$")}if(i.attrib_value_filter){h.attribValueFilter=i.attribValueFilter}},_getAttrib:function(m,j,h){var l,k;h=h||j.name;if(j.forcedVal&&(k=j.forcedVal)){if(k==="{$uid}"){return this.dom.uniqueId()}return k}k=this.dom.getAttrib(m,h);if(this.settings.bool_attrs.test(h)&&k){k=(""+k).toLowerCase();if(k==="false"||k==="0"){return null}k=h}switch(h){case"rowspan":case"colspan":if(k=="1"){k=""}break}if(this.attribValueFilter){k=this.attribValueFilter(h,k,m)}if(j.validVals){for(l=j.validVals.length-1;l>=0;l--){if(k==j.validVals[l]){break}}if(l==-1){return null}}if(k===""&&typeof(j.defaultVal)!="undefined"){k=j.defaultVal;if(k==="{$uid}"){return this.dom.uniqueId()}return k}else{if(h=="class"&&this.processObj.get){k=k.replace(/\s?mceItem\w+\s?/g,"")}}if(k===""){return null}return k}})})(tinymce);(function(tinymce){var each=tinymce.each,Event=tinymce.dom.Event;tinymce.create("tinymce.dom.ScriptLoader",{ScriptLoader:function(s){this.settings=s||{};this.queue=[];this.lookup={}},isDone:function(u){return this.lookup[u]?this.lookup[u].state==2:0},markDone:function(u){this.lookup[u]={state:2,url:u}},add:function(u,cb,s,pr){var t=this,lo=t.lookup,o;if(o=lo[u]){if(cb&&o.state==2){cb.call(s||this)}return o}o={state:0,url:u,func:cb,scope:s||this};if(pr){t.queue.unshift(o)}else{t.queue.push(o)}lo[u]=o;return o},load:function(u,cb,s){var t=this,o;if(o=t.lookup[u]){if(cb&&o.state==2){cb.call(s||t)}return o}function loadScript(u){if(Event.domLoaded||t.settings.strict_mode){tinymce.util.XHR.send({url:tinymce._addVer(u),error:t.settings.error,async:false,success:function(co){t.eval(co)}})}else{document.write('<script type="text/javascript" src="'+tinymce._addVer(u)+'"><\/script>')}}if(!tinymce.is(u,"string")){each(u,function(u){loadScript(u)});if(cb){cb.call(s||t)}}else{loadScript(u);if(cb){cb.call(s||t)}}},loadQueue:function(cb,s){var t=this;if(!t.queueLoading){t.queueLoading=1;t.queueCallbacks=[];t.loadScripts(t.queue,function(){t.queueLoading=0;if(cb){cb.call(s||t)}each(t.queueCallbacks,function(o){o.func.call(o.scope)})})}else{if(cb){t.queueCallbacks.push({func:cb,scope:s||t})}}},eval:function(co){var w=window;if(!w.execScript){try{eval.call(w,co)}catch(ex){eval(co,w)}}else{w.execScript(co)}},loadScripts:function(sc,cb,s){var t=this,lo=t.lookup;function done(o){o.state=2;if(o.func){o.func.call(o.scope||t)}}function allDone(){var l;l=sc.length;each(sc,function(o){o=lo[o.url];if(o.state===2){done(o);l--}else{load(o)}});if(l===0&&cb){cb.call(s||t);cb=0}}function load(o){if(o.state>0){return}o.state=1;tinymce.dom.ScriptLoader.loadScript(o.url,function(){done(o);allDone()})}each(sc,function(o){var u=o.url;if(!lo[u]){lo[u]=o;t.queue.push(o)}else{o=lo[u]}if(o.state>0){return}if(!Event.domLoaded&&!t.settings.strict_mode){var ix,ol="";if(cb||o.func){o.state=1;ix=tinymce.dom.ScriptLoader._addOnLoad(function(){done(o);allDone()});if(tinymce.isIE){ol=' onreadystatechange="'}else{ol=' onload="'}ol+="tinymce.dom.ScriptLoader._onLoad(this,'"+u+"',"+ix+');"'}document.write('<script type="text/javascript" src="'+tinymce._addVer(u)+'"'+ol+"><\/script>");if(!o.func){done(o)}}else{load(o)}});allDone()},"static":{_addOnLoad:function(f){var t=this;t._funcs=t._funcs||[];t._funcs.push(f);return t._funcs.length-1},_onLoad:function(e,u,ix){if(!tinymce.isIE||e.readyState=="complete"){this._funcs[ix].call(this)}},loadScript:function(u,cb){var id=tinymce.DOM.uniqueId(),e;function done(){Event.clear(id);tinymce.DOM.remove(id);if(cb){cb.call(document,u);cb=0}}if(tinymce.isIE){tinymce.util.XHR.send({url:tinymce._addVer(u),async:false,success:function(co){window.execScript(co);done()}})}else{e=tinymce.DOM.create("script",{id:id,type:"text/javascript",src:tinymce._addVer(u)});Event.add(e,"load",done);(document.getElementsByTagName("head")[0]||document.body).appendChild(e)}}}});tinymce.ScriptLoader=new tinymce.dom.ScriptLoader()})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(e,d){this.id=e;this.settings=d=d||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=d.scope||this;this.disabled=0;this.active=0},setDisabled:function(d){var f;if(d!=this.disabled){f=b.get(this.id);if(f&&this.settings.unavailable_prefix){if(d){this.prevTitle=f.title;f.title=this.settings.unavailable_prefix+": "+f.title}else{f.title=this.prevTitle}}this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(b,a){this.parent(b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator"},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.clientWidth,j.max_width):g.clientWidth;k=j.max_height?Math.min(g.clientHeight,j.max_height):g.clientHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return a.cancel(s)}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(w){var h,t,s;w=w.target;if(w&&(w=c.getParent(w,"tr"))){h=z.items[w.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(w&&c.hasClass(w,m+"ItemSub")){t=c.getRect(w);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}z.onShowMenu.dispatch(z);if(A.keyboard_focus){a.add(o,"keydown",z._keyHandler,z);c.select("a","menu_"+z.id)[0].focus();z._focusIdx=0}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);a.remove(h,"mouseover",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000"});k=c.add(g,"div",{id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_keyHandler:function(j){var i=this,h=j.keyCode;function g(m){var k=i._focusIdx+m,l=c.select("a","menu_"+i.id)[k];if(l){i._focusIdx=k;l.focus()}}switch(h){case 38:g(-1);return;case 40:g(1);return;case 13:return;case 27:return this.hideMenu()}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,"td");i=p=c.add(i,"a",{href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(d,c){this.parent(d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" title="'+a.encode(e.title)+'">';if(e.image){d+='<img class="mceIcon" src="'+e.image+'" />'+c+"</a>"}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")+"</a>"}return d},postRender:function(){var c=this,d=c.settings;b.dom.Event.add(c.id,"click",function(f){if(!c.isDisabled()){return d.onclick.call(d.scope,f)}})}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(h,g){var f=this;f.parent(h,g);f.items=[];f.onChange=new a(f);f.onPostRender=new a(f);f.onAdd=new a(f);f.onRenderMenu=new d.util.Dispatcher(this);f.classPrefix="mceListBox"},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){var g=this,h,i;if(f!=g.selectedIndex){h=c.get(g.id+"_text");i=g.items[f];if(i){g.selectedValue=i.value;g.selectedIndex=f;c.setHTML(h,c.encode(i.title));c.removeClass(h,"mceTitle")}else{c.setHTML(h,c.encode(g.settings.title));c.addClass(h,"mceTitle");g.selectedValue=g.selectedIndex=null}h=0}},add:function(i,f,h){var g=this;h=h||{};h=d.extend(h,{title:i,value:f});g.items.push(h);g.onAdd.dispatch(g,h)},getLength:function(){return this.items.length},renderHTML:function(){var i="",f=this,g=f.settings,j=f.classPrefix;i='<table id="'+f.id+'" cellpadding="0" cellspacing="0" class="'+j+" "+j+"Enabled"+(g["class"]?(" "+g["class"]):"")+'"><tbody><tr>';i+="<td>"+c.createHTML("a",{id:f.id+"_text",href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},c.encode(f.settings.title))+"</td>";i+="<td>"+c.createHTML("a",{id:f.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},"<span></span>")+"</td>";i+="</tr></tbody></table>";return i},showMenu:function(){var g=this,j,i,h=c.get(this.id),f;if(g.isDisabled()||g.items.length==0){return}if(g.menu&&g.menu.isMenuVisible){return g.hideMenu()}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}j=c.getPos(this.settings.menu_container);i=c.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.keyboard_focus=!d.isOpera;if(g.oldID){f.items[g.oldID].setSelected(0)}e(g.items,function(k){if(k.value===g.selectedValue){f.items[k.id].setSelected(1);g.oldID=k.id}});f.showMenu(0,h.clientHeight);b.add(c.doc,"mousedown",g.hideMenu,g);c.addClass(g.id,g.classPrefix+"Selected")},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&(g.target.id==f.id+"_text"||g.target.id==f.id+"_open")){return}if(!g||!c.getParent(g.target,".mceMenu")){c.removeClass(f.id,f.classPrefix+"Selected");b.remove(c.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}},renderMenu:function(){var g=this,f;f=g.settings.control_manager.createDropMenu(g.id+"_menu",{menu_line:1,"class":g.classPrefix+"Menu mceNoIcons",max_width:150,max_height:150});f.onHideMenu.add(g.hideMenu,g);f.add({title:g.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}});e(g.items,function(h){h.id=c.uniqueId();h.onclick=function(){if(g.settings.onselect(h.value)!==false){g.select(h.value)}};f.add(h)});g.onRenderMenu.dispatch(g,f);g.menu=f},postRender:function(){var f=this,g=f.classPrefix;b.add(f.id,"click",f.showMenu,f);b.add(f.id+"_text","focus",function(h){if(!f._focused){f.keyDownHandler=b.add(f.id+"_text","keydown",function(l){var i=-1,j,k=l.keyCode;e(f.items,function(m,n){if(f.selectedValue==m.value){i=n}});if(k==38){j=f.items[i-1]}else{if(k==40){j=f.items[i+1]}else{if(k==13){j=f.selectedValue;f.selectedValue=null;f.settings.onselect(j);return b.cancel(l)}}}if(j){f.hideMenu();f.select(j.value)}})}f._focused=1});b.add(f.id+"_text","blur",function(){b.remove(f.id+"_text","keydown",f.keyDownHandler);f._focused=0});if(d.isIE6||!c.boxModel){b.add(f.id,"mouseover",function(){if(!c.hasClass(f.id,g+"Disabled")){c.addClass(f.id,g+"Hover")}});b.add(f.id,"mouseout",function(){if(!c.hasClass(f.id,g+"Disabled")){c.removeClass(f.id,g+"Hover")}})}f.onPostRender.dispatch(f,c.get(f.id))},destroy:function(){this.parent();b.clear(this.id+"_text")}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(g,f){this.parent(g,f);this.classPrefix="mceNativeListBox"},setDisabled:function(f){c.get(this.id).disabled=f},isDisabled:function(){return c.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){c.get(this.id).selectedIndex=f+1;this.selectedValue=this.items[f]?this.items[f].value:null},add:function(j,g,f){var i,h=this;f=f||{};f.value=g;if(h.isRendered()){c.add(c.get(this.id),"option",f,j)}i={title:j,value:g,attribs:f};h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return c.get(this.id).options.length-1},renderHTML:function(){var g,f=this;g=c.createHTML("option",{value:""},"-- "+f.settings.title+" --");e(f.items,function(h){g+=c.createHTML("option",{value:h.value},h.title)});g=c.createHTML("select",{id:f.id,"class":"mceNativeListBox"},g);return g},postRender:function(){var g=this,h;g.rendered=true;function f(j){var i=g.items[j.target.selectedIndex-1];if(i&&(i=i.value)){g.onChange.dispatch(g,i);if(g.settings.onselect){g.settings.onselect(i)}}}b.add(g.id,"change",f);b.add(g.id,"keydown",function(j){var i;b.remove(g.id,"change",h);i=b.add(g.id,"blur",function(){b.add(g.id,"change",f);b.remove(g.id,"blur",i)});if(j.keyCode==13||j.keyCode==32){f(j);return b.cancel(j)}});g.onPostRender.dispatch(g,c.get(g.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(f,e){this.parent(f,e);this.onRenderMenu=new c.util.Dispatcher(this);e.menu_container=e.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(f.hideMenu,f);f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(f,e){this.parent(f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,"class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}i+="<td>"+b.createHTML("a",{id:f.id+"_action",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]});i+="<td>"+b.createHTML("a",{id:f.id+"_open",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";return b.createHTML("table",{id:f.id,"class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",onmousedown:"return false;",title:g.title},i)},postRender:function(){var e=this,f=e.settings;if(f.onclick){a.add(e.id+"_action","click",function(){if(!e.isDisabled()){f.onclick(e.value)}})}a.add(e.id+"_open","click",e.showMenu,e);a.add(e.id+"_open","focus",function(){e._focused=1});a.add(e.id+"_open","blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(h,g){var f=this;f.parent(h,g);f.settings=g=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},f.settings);f.onShowMenu=new d.util.Dispatcher(f);f.onHideMenu=new d.util.Dispatcher(f);f.value=g.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.onShowMenu.dispatch(f);f.isMenuVisible=1},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.onHideMenu.dispatch(f);f.isMenuVisible=0},renderMenu:function(){var k=this,f,j=0,l=k.settings,p,h,o,g;g=c.add(l.menu_container,"div",{id:k.id+"_menu","class":l.menu_class+" "+l["class"],style:"position:absolute;left:0;top:-1000px;"});f=c.add(g,"div",{"class":l["class"]+" mceSplitButtonMenu"});c.add(f,"span",{"class":"mceMenuLine"});p=c.add(f,"table",{"class":"mceColorSplitMenu"});h=c.add(p,"tbody");j=0;e(b(l.colors,"array")?l.colors:l.colors.split(","),function(i){i=i.replace(/^#/,"");if(!j--){o=c.add(h,"tr");j=l.grid_width-1}p=c.add(o,"td");p=c.add(p,"a",{href:"javascript:;",style:{backgroundColor:"#"+i},mce_color:"#"+i})});if(l.more_colors_func){p=c.add(h,"tr");p=c.add(p,"td",{colspan:l.grid_width,"class":"mceMoreColors"});p=c.add(p,"a",{id:k.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},l.more_colors_title);a.add(p,"click",function(i){l.more_colors_func.call(l.more_colors_scope||this);return a.cancel(i)})}c.addClass(f,"mceColorSplitMenu");a.add(k.id+"_menu","click",function(i){var m;i=i.target;if(i.nodeName=="A"&&(m=i.getAttribute("mce_color"))){k.setColor(m)}return a.cancel(i)});return g},setColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g;f.hideMenu();f.settings.onselect(g)},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){this.parent();a.clear(this.id+"_menu");a.clear(this.id+"_more");c.remove(this.id+"_menu")}})})(tinymce);tinymce.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var l=this,e="",g,j,b=tinymce.DOM,m=l.settings,d,a,f,k;k=l.controls;for(d=0;d<k.length;d++){j=k[d];a=k[d-1];f=k[d+1];if(d===0){g="mceToolbarStart";if(j.Button){g+=" mceToolbarStartButton"}else{if(j.SplitButton){g+=" mceToolbarStartSplitButton"}else{if(j.ListBox){g+=" mceToolbarStartListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,"<!-- IE -->"))}if(a&&j.ListBox){if(a.Button||a.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarEnd"},b.createHTML("span",null,"<!-- IE -->"))}}if(b.stdMode){e+='<td style="position: relative">'+j.renderHTML()+"</td>"}else{e+="<td>"+j.renderHTML()+"</td>"}if(f&&j.ListBox){if(f.Button||f.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarStart"},b.createHTML("span",null,"<!-- IE -->"))}}}g="mceToolbarEnd";if(j.Button){g+=" mceToolbarEndButton"}else{if(j.SplitButton){g+=" mceToolbarEndSplitButton"}else{if(j.ListBox){g+=" mceToolbarEndListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,"<!-- IE -->"));return b.createHTML("table",{id:l.id,"class":"mceToolbar"+(m["class"]?" "+m["class"]:""),cellpadding:"0",cellspacing:"0",align:l.settings.align||""},"<tbody><tr>"+e+"</tr></tbody>")}});(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{items:[],urls:{},lookup:{},onAdd:new a(this),get:function(d){return this.lookup[d]},requireLangPack:function(f){var d,e=b.EditorManager.settings;if(e&&e.language){d=this.urls[f]+"/langs/"+e.language+".js";if(!b.dom.Event.domLoaded&&!e.strict_mode){b.ScriptLoader.load(d)}else{b.ScriptLoader.add(d)}}},add:function(e,d){this.items.push(d);this.lookup[e]=d;this.onAdd.dispatch(this,e,d);return d},load:function(h,e,d,g){var f=this;if(f.urls[h]){return}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}f.urls[h]=e.substring(0,e.lastIndexOf("/"));b.ScriptLoader.add(e,d,g)}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(f){var g=f.each,h=f.extend,e=f.DOM,a=f.dom.Event,c=f.ThemeManager,b=f.PluginManager,d=f.explode;f.create("static tinymce.EditorManager",{editors:{},i18n:{},activeEditor:null,preInit:function(){var i=this,j=window.location;f.documentBaseURL=j.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(f.documentBaseURL)){f.documentBaseURL+="/"}f.baseURL=new f.util.URI(f.documentBaseURL).toAbsolute(f.baseURL);f.EditorManager.baseURI=new f.util.URI(f.baseURL);if(document.domain&&j.hostname!=document.domain){f.relaxedDomain=document.domain}i.onBeforeUnload=new f.util.Dispatcher(i);a.add(window,"beforeunload",function(k){i.onBeforeUnload.dispatch(i,k)})},init:function(q){var p=this,l,k=f.ScriptLoader,o,n,i=[],m;function j(u,v,r){var t=u[v];if(!t){return}if(f.is(t,"string")){r=t.replace(/\.\w+$/,"");r=r?f.resolve(r):0;t=f.resolve(t)}return t.apply(r||this,Array.prototype.slice.call(arguments,2))}q=h({theme:"simple",language:"en",strict_loading_mode:document.contentType=="application/xhtml+xml"},q);p.settings=q;if(!a.domLoaded&&!q.strict_loading_mode){if(q.language){k.add(f.baseURL+"/langs/"+q.language+".js")}if(q.theme&&q.theme.charAt(0)!="-"&&!c.urls[q.theme]){c.load(q.theme,"themes/"+q.theme+"/editor_template"+f.suffix+".js")}if(q.plugins){l=d(q.plugins);if(f.inArray(l,"compat2x")!=-1){b.load("compat2x","plugins/compat2x/editor_plugin"+f.suffix+".js")}g(l,function(r){if(r&&r.charAt(0)!="-"&&!b.urls[r]){if(!f.isWebKit&&r=="safari"){return}b.load(r,"plugins/"+r+"/editor_plugin"+f.suffix+".js")}})}k.loadQueue()}a.add(document,"init",function(){var r,t;j(q,"onpageload");if(q.browsers){r=false;g(d(q.browsers),function(u){switch(u){case"ie":case"msie":if(f.isIE){r=true}break;case"gecko":if(f.isGecko){r=true}break;case"safari":case"webkit":if(f.isWebKit){r=true}break;case"opera":if(f.isOpera){r=true}break}});if(!r){return}}switch(q.mode){case"exact":r=q.elements||"";if(r.length>0){g(d(r),function(u){if(e.get(u)){m=new f.Editor(u,q);i.push(m);m.render(1)}else{o=0;g(document.forms,function(v){g(v.elements,function(w){if(w.name===u){u="mce_editor_"+o;e.setAttrib(w,"id",u);m=new f.Editor(u,q);i.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function s(v,u){return u.constructor===RegExp?u.test(v.className):e.hasClass(v,u)}g(e.select("textarea"),function(u){if(q.editor_deselector&&s(u,q.editor_deselector)){return}if(!q.editor_selector||s(u,q.editor_selector)){n=e.get(u.name);if(!u.id&&!n){u.id=u.name}if(!u.id||p.get(u.id)){u.id=e.uniqueId()}m=new f.Editor(u.id,q);i.push(m);m.render(1)}});break}if(q.oninit){r=t=0;g(i,function(u){t++;if(!u.initialized){u.onInit.add(function(){r++;if(r==t){j(q,"oninit")}})}else{r++}if(r==t){j(q,"oninit")}})}})},get:function(i){return this.editors[i]},getInstanceById:function(i){return this.get(i)},add:function(i){this.editors[i.id]=i;this._setActive(i);return i},remove:function(j){var i=this;if(!i.editors[j.id]){return null}delete i.editors[j.id];if(i.activeEditor==j){g(i.editors,function(k){i._setActive(k);return false})}j.destroy();return j},execCommand:function(o,m,l){var n=this,k=n.get(l),i;switch(o){case"mceFocus":k.focus();return true;case"mceAddEditor":case"mceAddControl":if(!n.get(l)){new f.Editor(l,n.settings).render()}return true;case"mceAddFrameControl":i=l.window;i.tinyMCE=tinyMCE;i.tinymce=f;f.DOM.doc=i.document;f.DOM.win=i;k=new f.Editor(l.element_id,l);k.render();if(f.isIE){function j(){k.destroy();i.detachEvent("onunload",j);i=i.tinyMCE=i.tinymce=null}i.attachEvent("onunload",j)}l.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(k){k.remove()}return true;case"mceToggleEditor":if(!k){n.execCommand("mceAddControl",0,l);return true}if(k.isHidden()){k.show()}else{k.hide()}return true}if(n.activeEditor){return n.activeEditor.execCommand(o,m,l)}return false},execInstanceCommand:function(m,l,k,j){var i=this.get(m);if(i){return i.execCommand(l,k,j)}return false},triggerSave:function(){g(this.editors,function(i){i.save()})},addI18n:function(k,l){var i,j=this.i18n;if(!f.is(k,"string")){g(k,function(n,m){g(n,function(q,p){g(q,function(s,r){if(p==="common"){j[m+"."+r]=s}else{j[m+"."+p+"."+r]=s}})})})}else{g(l,function(n,m){j[k+"."+m]=n})}},_setActive:function(i){this.selectedInstance=this.activeEditor=i}});f.EditorManager.preInit()})(tinymce);var tinyMCE=window.tinyMCE=tinymce.EditorManager;(function(n){var o=n.DOM,k=n.dom.Event,f=n.extend,l=n.util.Dispatcher;var j=n.each,a=n.isGecko,b=n.isIE,e=n.isWebKit;var d=n.is,h=n.ThemeManager,c=n.PluginManager,i=n.EditorManager;var p=n.inArray,m=n.grep,g=n.explode;n.create("tinymce.Editor",{Editor:function(u,r){var q=this;q.id=q.editorId=u;q.execCommands={};q.queryStateCommands={};q.queryValueCommands={};q.plugins={};j(["onPreInit","onBeforeRenderUI","onPostRender","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState"],function(s){q[s]=new l(q)});q.settings=r=f({id:u,language:"en",docs_language:"en",theme:"simple",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:n.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',visual_table_class:"mceItemTable",visual:1,inline_styles:true,convert_fonts_to_spans:true,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",valid_elements:"@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p[align],-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote[cite],-table[border=0|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value|tabindex|accesskey],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big",hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:"30px",keep_styles:1,fix_table_elements:1,removeformat_selector:"span,b,strong,em,i,font,u,strike"},r);q.documentBaseURI=new n.util.URI(r.document_base_url||n.documentBaseURL,{base_uri:tinyMCE.baseURI});q.baseURI=i.baseURI;q.execCallback("setup",q)},render:function(u){var v=this,w=v.settings,x=v.id,q=n.ScriptLoader;if(!k.domLoaded){k.add(document,"init",function(){v.render()});return}if(!u){w.strict_loading_mode=1;tinyMCE.settings=w}if(!v.getElement()){return}if(w.strict_loading_mode){q.settings.strict_mode=w.strict_loading_mode;n.DOM.settings.strict=1}if(!/TEXTAREA|INPUT/i.test(v.getElement().nodeName)&&w.hidden_input&&o.getParent(x,"form")){o.insertAfter(o.create("input",{type:"hidden",name:x}),x)}if(n.WindowManager){v.windowManager=new n.WindowManager(v)}if(w.encoding=="xml"){v.onGetContent.add(function(s,t){if(t.save){t.content=o.encode(t.content)}})}if(w.add_form_submit_trigger){v.onSubmit.addToTop(function(){if(v.initialized){v.save();v.isNotDirty=1}})}if(w.add_unload_trigger){v._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(v.initialized&&!v.destroyed&&!v.isHidden()){v.save({format:"raw",no_events:true})}})}n.addUnload(v.destroy,v);if(w.submit_patch){v.onBeforeRenderUI.add(function(){var s=v.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){v.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){i.triggerSave();v.isNotDirty=1;return v.formElement._mceOldSubmit(v.formElement)}}s=null})}function r(){if(w.language){q.add(n.baseURL+"/langs/"+w.language+".js")}if(w.theme&&w.theme.charAt(0)!="-"&&!h.urls[w.theme]){h.load(w.theme,"themes/"+w.theme+"/editor_template"+n.suffix+".js")}j(g(w.plugins),function(s){if(s&&s.charAt(0)!="-"&&!c.urls[s]){if(!e&&s=="safari"){return}c.load(s,"plugins/"+s+"/editor_plugin"+n.suffix+".js")}});q.loadQueue(function(){if(!v.removed){v.init()}})}if(w.plugins.indexOf("compat2x")!=-1){c.load("compat2x","plugins/compat2x/editor_plugin"+n.suffix+".js");q.loadQueue(r)}else{r()}},init:function(){var v,F=this,G=F.settings,C,z,B=F.getElement(),r,q,D,y,A,E;i.add(F);if(G.theme){G.theme=G.theme.replace(/-/,"");r=h.get(G.theme);F.theme=new r();if(F.theme.init&&G.init_theme){F.theme.init(F,h.urls[G.theme]||n.documentBaseURL.replace(/\/$/,""))}}j(g(G.plugins.replace(/\-/g,"")),function(w){var H=c.get(w),t=c.urls[w]||n.documentBaseURL.replace(/\/$/,""),s;if(H){s=new H(F,t);F.plugins[w]=s;if(s.init){s.init(F,t)}}});if(G.popup_css!==false){if(G.popup_css){G.popup_css=F.documentBaseURI.toAbsolute(G.popup_css)}else{G.popup_css=F.baseURI.toAbsolute("themes/"+G.theme+"/skins/"+G.skin+"/dialog.css")}}if(G.popup_css_add){G.popup_css+=","+F.documentBaseURI.toAbsolute(G.popup_css_add)}F.controlManager=new n.ControlManager(F);F.undoManager=new n.UndoManager(F);F.undoManager.onAdd.add(function(t,s){if(!s.initial){return F.onChange.dispatch(F,s,t)}});F.undoManager.onUndo.add(function(t,s){return F.onUndo.dispatch(F,s,t)});F.undoManager.onRedo.add(function(t,s){return F.onRedo.dispatch(F,s,t)});if(G.custom_undo_redo){F.onExecCommand.add(function(t,w,u,H,s){if(w!="Undo"&&w!="Redo"&&w!="mceRepaint"&&(!s||!s.skip_undo)){F.undoManager.add()}})}F.onExecCommand.add(function(s,t){if(!/^(FontName|FontSize)$/.test(t)){F.nodeChanged()}});if(a){function x(s,t){if(!t||!t.initial){F.execCommand("mceRepaint")}}F.onUndo.add(x);F.onRedo.add(x);F.onSetContent.add(x)}F.onBeforeRenderUI.dispatch(F,F.controlManager);if(G.render_ui){C=G.width||B.style.width||B.offsetWidth;z=G.height||B.style.height||B.offsetHeight;F.orgDisplay=B.style.display;E=/^[0-9\.]+(|px)$/i;if(E.test(""+C)){C=Math.max(parseInt(C)+(r.deltaWidth||0),100)}if(E.test(""+z)){z=Math.max(parseInt(z)+(r.deltaHeight||0),100)}r=F.theme.renderUI({targetNode:B,width:C,height:z,deltaWidth:G.delta_width,deltaHeight:G.delta_height});F.editorContainer=r.editorContainer}o.setStyles(r.sizeContainer||r.editorContainer,{width:C,height:z});z=(r.iframeHeight||z)+(typeof(z)=="number"?(r.deltaHeight||0):"");if(z<100){z=100}F.iframeHTML=G.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="'+F.documentBaseURI.getURI()+'" />';F.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';if(n.relaxedDomain){F.iframeHTML+='<script type="text/javascript">document.domain = "'+n.relaxedDomain+'";<\/script>'}y=G.body_id||"tinymce";if(y.indexOf("=")!=-1){y=F.getParam("body_id","","hash");y=y[F.id]||y}A=G.body_class||"";if(A.indexOf("=")!=-1){A=F.getParam("body_class","","hash");A=A[F.id]||""}F.iframeHTML+='</head><body id="'+y+'" class="mceContentBody '+A+'"></body></html>';if(n.relaxedDomain){if(b||(n.isOpera&&parseFloat(opera.version())>=9.5)){D='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+F.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'}else{if(n.isOpera){D='javascript:(function(){document.open();document.domain="'+document.domain+'";document.close();ed.setupIframe();})()'}}}v=o.add(r.iframeContainer,"iframe",{id:F.id+"_ifr",src:D||'javascript:""',frameBorder:"0",style:{width:"100%",height:z}});F.contentAreaContainer=r.iframeContainer;o.get(r.editorContainer).style.display=F.orgDisplay;o.get(F.id).style.display="none";if(!b||!n.relaxedDomain){F.setupIframe()}B=v=r=null},setupIframe:function(){var z=this,A=z.settings,u=o.get(z.id),v=z.getDoc(),r,x;if(!b||!n.relaxedDomain){v.open();v.write(z.iframeHTML);v.close()}if(!b){try{if(!A.readonly){v.designMode="On"}}catch(w){}}if(b){x=z.getBody();o.hide(x);if(!A.readonly){x.contentEditable=true}o.show(x)}z.dom=new n.DOM.DOMUtils(z.getDoc(),{keep_values:true,url_converter:z.convertURL,url_converter_scope:z,hex_colors:A.force_hex_style_colors,class_filter:A.class_filter,update_styles:1,fix_ie_paragraphs:1});z.serializer=new n.dom.Serializer({entity_encoding:A.entity_encoding,entities:A.entities,valid_elements:A.verify_html===false?"*[*]":A.valid_elements,extended_valid_elements:A.extended_valid_elements,valid_child_elements:A.valid_child_elements,invalid_elements:A.invalid_elements,fix_table_elements:A.fix_table_elements,fix_list_elements:A.fix_list_elements,fix_content_duplication:A.fix_content_duplication,convert_fonts_to_spans:A.convert_fonts_to_spans,font_size_classes:A.font_size_classes,font_size_style_values:A.font_size_style_values,apply_source_formatting:A.apply_source_formatting,remove_linebreaks:A.remove_linebreaks,element_format:A.element_format,dom:z.dom});z.selection=new n.dom.Selection(z.dom,z.getWin(),z.serializer);z.forceBlocks=new n.ForceBlocks(z,{forced_root_block:A.forced_root_block});z.editorCommands=new n.EditorCommands(z);z.serializer.onPreProcess.add(function(s,t){return z.onPreProcess.dispatch(z,t,s)});z.serializer.onPostProcess.add(function(s,t){return z.onPostProcess.dispatch(z,t,s)});z.onPreInit.dispatch(z);if(!A.gecko_spellcheck){z.getBody().spellcheck=0}if(!A.readonly){z._addEvents()}z.controlManager.onPostRender.dispatch(z,z.controlManager);z.onPostRender.dispatch(z);if(A.directionality){z.getBody().dir=A.directionality}if(A.nowrap){z.getBody().style.whiteSpace="nowrap"}if(A.auto_resize){z.onNodeChange.add(z.resizeToContent,z)}if(A.custom_elements){function y(s,t){j(g(A.custom_elements),function(B){var C;if(B.indexOf("~")===0){B=B.substring(1);C="span"}else{C="div"}t.content=t.content.replace(new RegExp("<("+B+")([^>]*)>","g"),"<"+C+' mce_name="$1"$2>');t.content=t.content.replace(new RegExp("</("+B+")>","g"),"</"+C+">")})}z.onBeforeSetContent.add(y);z.onPostProcess.add(function(s,t){if(t.set){y(s,t)}})}if(A.handle_node_change_callback){z.onNodeChange.add(function(t,s,B){z.execCallback("handle_node_change_callback",z.id,B,-1,-1,true,z.selection.isCollapsed())})}if(A.save_callback){z.onSaveContent.add(function(s,B){var t=z.execCallback("save_callback",z.id,B.content,z.getBody());if(t){B.content=t}})}if(A.onchange_callback){z.onChange.add(function(t,s){z.execCallback("onchange_callback",z,s)})}if(A.convert_newlines_to_brs){z.onBeforeSetContent.add(function(s,t){if(t.initial){t.content=t.content.replace(/\r?\n/g,"<br />")}})}if(A.fix_nesting&&b){z.onBeforeSetContent.add(function(s,t){t.content=z._fixNesting(t.content)})}if(A.preformatted){z.onPostProcess.add(function(s,t){t.content=t.content.replace(/^\s*<pre.*?>/,"");t.content=t.content.replace(/<\/pre>\s*$/,"");if(t.set){t.content='<pre class="mceItemHidden">'+t.content+"</pre>"}})}if(A.verify_css_classes){z.serializer.attribValueFilter=function(D,B){var C,t;if(D=="class"){if(!z.classesRE){t=z.dom.getClasses();if(t.length>0){C="";j(t,function(s){C+=(C?"|":"")+s["class"]});z.classesRE=new RegExp("("+C+")","gi")}}return !z.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(B)||z.classesRE.test(B)?B:""}return B}}if(A.convert_fonts_to_spans){z._convertFonts()}if(A.inline_styles){z._convertInlineElements()}if(A.cleanup_callback){z.onBeforeSetContent.add(function(s,t){t.content=z.execCallback("cleanup_callback","insert_to_editor",t.content,t)});z.onPreProcess.add(function(s,t){if(t.set){z.execCallback("cleanup_callback","insert_to_editor_dom",t.node,t)}if(t.get){z.execCallback("cleanup_callback","get_from_editor_dom",t.node,t)}});z.onPostProcess.add(function(s,t){if(t.set){t.content=z.execCallback("cleanup_callback","insert_to_editor",t.content,t)}if(t.get){t.content=z.execCallback("cleanup_callback","get_from_editor",t.content,t)}})}if(A.save_callback){z.onGetContent.add(function(s,t){if(t.save){t.content=z.execCallback("save_callback",z.id,t.content,z.getBody())}})}if(A.handle_event_callback){z.onEvent.add(function(s,t,B){if(z.execCallback("handle_event_callback",t,s,B)===false){k.cancel(t)}})}z.onSetContent.add(function(){z.addVisual(z.getBody())});if(A.padd_empty_editor){z.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}if(a){function q(s,t){j(s.dom.select("a"),function(C){var B=C.parentNode;if(s.dom.isBlock(B)&&B.lastChild===C){s.dom.add(B,"br",{mce_bogus:1})}})}z.onExecCommand.add(function(s,t){if(t==="CreateLink"){q(s)}});z.onSetContent.add(z.selection.onSetContent.add(q));if(!A.readonly){try{v.designMode="Off";v.designMode="On"}catch(w){}}}setTimeout(function(){if(z.removed){return}z.load({initial:true,format:(A.cleanup_on_startup?"html":"raw")});z.startContent=z.getContent({format:"raw"});z.undoManager.add({initial:true});z.initialized=true;z.onInit.dispatch(z);z.execCallback("setupcontent_callback",z.id,z.getBody(),z.getDoc());z.execCallback("init_instance_callback",z);z.focus(true);z.nodeChanged({initial:1});if(A.content_css){n.each(g(A.content_css),function(s){z.dom.loadCSS(z.documentBaseURI.toAbsolute(s))})}if(A.auto_focus){setTimeout(function(){var s=i.get(A.auto_focus);s.selection.select(s.getBody(),1);s.selection.collapse(1);s.getWin().focus()},100)}},1);u=null},focus:function(r){var u,q=this,s=q.settings.content_editable;if(!r){if(!s&&(!b||q.selection.getNode().ownerDocument!=q.getDoc())){q.getWin().focus()}}if(i.activeEditor!=q){if((u=i.activeEditor)!=null){u.onDeactivate.dispatch(u,q)}q.onActivate.dispatch(q,u)}i._setActive(q)},execCallback:function(v){var q=this,u=q.settings[v],r;if(!u){return}if(q.callbackLookup&&(r=q.callbackLookup[v])){u=r.func;r=r.scope}if(d(u,"string")){r=u.replace(/\.\w+$/,"");r=r?n.resolve(r):0;u=n.resolve(u);q.callbackLookup=q.callbackLookup||{};q.callbackLookup[v]={func:u,scope:r}}return u.apply(r||q,Array.prototype.slice.call(arguments,1))},translate:function(q){var t=this.settings.language||"en",r=i.i18n;if(!q){return""}return r[t+"."+q]||q.replace(/{\#([^}]+)\}/g,function(u,s){return r[t+"."+s]||"{#"+s+"}"})},getLang:function(r,q){return i.i18n[(this.settings.language||"en")+"."+r]||(d(q)?q:"{#"+r+"}")},getParam:function(w,s,q){var t=n.trim,r=d(this.settings[w])?this.settings[w]:s,u;if(q==="hash"){u={};if(d(r,"string")){j(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(x){x=x.split("=");if(x.length>1){u[t(x[0])]=t(x[1])}else{u[t(x[0])]=t(x)}})}else{u=r}return u}return r},nodeChanged:function(u){var q=this,r=q.selection,v=r.getNode()||q.getBody();if(q.initialized){q.onNodeChange.dispatch(q,u?u.controlManager||q.controlManager:q.controlManager,b&&v.ownerDocument!=q.getDoc()?q.getBody():v,r.isCollapsed(),u)}},addButton:function(u,r){var q=this;q.buttons=q.buttons||{};q.buttons[u]=r},addCommand:function(t,r,q){this.execCommands[t]={func:r,scope:q||this}},addQueryStateHandler:function(t,r,q){this.queryStateCommands[t]={func:r,scope:q||this}},addQueryValueHandler:function(t,r,q){this.queryValueCommands[t]={func:r,scope:q||this}},addShortcut:function(s,v,q,u){var r=this,w;if(!r.settings.custom_shortcuts){return false}r.shortcuts=r.shortcuts||{};if(d(q,"string")){w=q;q=function(){r.execCommand(w,false,null)}}if(d(q,"object")){w=q;q=function(){r.execCommand(w[0],w[1],w[2])}}j(g(s),function(t){var x={func:q,scope:u||this,desc:v,alt:false,ctrl:false,shift:false};j(g(t,"+"),function(y){switch(y){case"alt":case"ctrl":case"shift":x[y]=true;break;default:x.charCode=y.charCodeAt(0);x.keyCode=y.toUpperCase().charCodeAt(0)}});r.shortcuts[(x.ctrl?"ctrl":"")+","+(x.alt?"alt":"")+","+(x.shift?"shift":"")+","+x.keyCode]=x});return true},execCommand:function(x,w,z,q){var u=this,v=0,y,r;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(x)&&(!q||!q.skip_focus)){u.focus()}y={};u.onBeforeExecCommand.dispatch(u,x,w,z,y);if(y.terminate){return false}if(u.execCallback("execcommand_callback",u.id,u.selection.getNode(),x,w,z)){u.onExecCommand.dispatch(u,x,w,z,q);return true}if(y=u.execCommands[x]){r=y.func.call(y.scope,w,z);if(r!==true){u.onExecCommand.dispatch(u,x,w,z,q);return r}}j(u.plugins,function(s){if(s.execCommand&&s.execCommand(x,w,z)){u.onExecCommand.dispatch(u,x,w,z,q);v=1;return false}});if(v){return true}if(u.theme&&u.theme.execCommand&&u.theme.execCommand(x,w,z)){u.onExecCommand.dispatch(u,x,w,z,q);return true}if(n.GlobalCommands.execCommand(u,x,w,z)){u.onExecCommand.dispatch(u,x,w,z,q);return true}if(u.editorCommands.execCommand(x,w,z)){u.onExecCommand.dispatch(u,x,w,z,q);return true}u.getDoc().execCommand(x,w,z);u.onExecCommand.dispatch(u,x,w,z,q)},queryCommandState:function(w){var r=this,v,u;if(r._isHidden()){return}if(v=r.queryStateCommands[w]){u=v.func.call(v.scope);if(u!==true){return u}}v=r.editorCommands.queryCommandState(w);if(v!==-1){return v}try{return this.getDoc().queryCommandState(w)}catch(q){}},queryCommandValue:function(w){var r=this,v,u;if(r._isHidden()){return}if(v=r.queryValueCommands[w]){u=v.func.call(v.scope);if(u!==true){return u}}v=r.editorCommands.queryCommandValue(w);if(d(v)){return v}try{return this.getDoc().queryCommandValue(w)}catch(q){}},show:function(){var q=this;o.show(q.getContainer());o.hide(q.id);q.load()},hide:function(){var q=this,r=q.getDoc();if(b&&r){r.execCommand("SelectAll")}q.save();o.hide(q.getContainer());o.setStyle(q.id,"display",q.orgDisplay)},isHidden:function(){return !o.isHidden(this.id)},setProgressState:function(q,r,s){this.onSetProgressState.dispatch(this,q,r,s);return q},resizeToContent:function(){var q=this;o.setStyle(q.id+"_ifr","height",q.getBody().scrollHeight)},load:function(u){var q=this,s=q.getElement(),r;if(s){u=u||{};u.load=true;r=q.setContent(d(s.value)?s.value:s.innerHTML,u);u.element=s;if(!u.no_events){q.onLoadContent.dispatch(q,u)}u.element=s=null;return r}},save:function(v){var q=this,u=q.getElement(),r,s;if(!u||!q.initialized){return}v=v||{};v.save=true;if(!v.no_events){q.undoManager.typing=0;q.undoManager.add()}v.element=u;r=v.content=q.getContent(v);if(!v.no_events){q.onSaveContent.dispatch(q,v)}r=v.content;if(!/TEXTAREA|INPUT/i.test(u.nodeName)){u.innerHTML=r;if(s=o.getParent(q.id,"form")){j(s.elements,function(t){if(t.name==q.id){t.value=r;return false}})}}else{u.value=r}v.element=u=null;return r},setContent:function(r,s){var q=this;s=s||{};s.format=s.format||"html";s.set=true;s.content=r;if(!s.no_events){q.onBeforeSetContent.dispatch(q,s)}if(!n.isIE&&(r.length===0||/^\s+$/.test(r))){s.content=q.dom.setHTML(q.getBody(),'<br mce_bogus="1" />');s.format="raw"}s.content=q.dom.setHTML(q.getBody(),n.trim(s.content));if(s.format!="raw"&&q.settings.cleanup){s.getInner=true;s.content=q.dom.setHTML(q.getBody(),q.serializer.serialize(q.getBody(),s))}if(!s.no_events){q.onSetContent.dispatch(q,s)}return s.content},getContent:function(s){var q=this,r;s=s||{};s.format=s.format||"html";s.get=true;if(!s.no_events){q.onBeforeGetContent.dispatch(q,s)}if(s.format!="raw"&&q.settings.cleanup){s.getInner=true;r=q.serializer.serialize(q.getBody(),s)}else{r=q.getBody().innerHTML}r=r.replace(/^\s*|\s*$/g,"");s.content=r;if(!s.no_events){q.onGetContent.dispatch(q,s)}return s.content},isDirty:function(){var q=this;return n.trim(q.startContent)!=n.trim(q.getContent({format:"raw",no_events:1}))&&!q.isNotDirty},getContainer:function(){var q=this;if(!q.container){q.container=o.get(q.editorContainer||q.id+"_parent")}return q.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return o.get(this.settings.content_element||this.id)},getWin:function(){var q=this,r;if(!q.contentWindow){r=o.get(q.id+"_ifr");if(r){q.contentWindow=r.contentWindow}}return q.contentWindow},getDoc:function(){var r=this,q;if(!r.contentDocument){q=r.getWin();if(q){r.contentDocument=q.document}}return r.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(q,x,w){var r=this,v=r.settings;if(v.urlconverter_callback){return r.execCallback("urlconverter_callback",q,w,true,x)}if(!v.convert_urls||(w&&w.nodeName=="LINK")||q.indexOf("file:")===0){return q}if(v.relative_urls){return r.documentBaseURI.toRelative(q)}q=r.documentBaseURI.toAbsolute(q,v.remove_script_host);return q},addVisual:function(u){var q=this,r=q.settings;u=u||q.getBody();if(!d(q.hasVisual)){q.hasVisual=r.visual}j(q.dom.select("table,a",u),function(t){var s;switch(t.nodeName){case"TABLE":s=q.dom.getAttrib(t,"border");if(!s||s=="0"){if(q.hasVisual){q.dom.addClass(t,r.visual_table_class)}else{q.dom.removeClass(t,r.visual_table_class)}}return;case"A":s=q.dom.getAttrib(t,"name");if(s){if(q.hasVisual){q.dom.addClass(t,"mceItemAnchor")}else{q.dom.removeClass(t,"mceItemAnchor")}}return}});q.onVisualAid.dispatch(q,u,q.hasVisual)},remove:function(){var q=this,r=q.getContainer();q.removed=1;q.hide();q.execCallback("remove_instance_callback",q);q.onRemove.dispatch(q);q.onExecCommand.listeners=[];i.remove(q);o.remove(r)},destroy:function(r){var q=this;if(q.destroyed){return}if(!r){n.removeUnload(q.destroy);tinyMCE.onBeforeUnload.remove(q._beforeUnload);if(q.theme&&q.theme.destroy){q.theme.destroy()}q.controlManager.destroy();q.selection.destroy();q.dom.destroy();if(!q.settings.content_editable){k.clear(q.getWin());k.clear(q.getDoc())}k.clear(q.getBody());k.clear(q.formElement)}if(q.formElement){q.formElement.submit=q.formElement._mceOldSubmit;q.formElement._mceOldSubmit=null}q.contentAreaContainer=q.formElement=q.container=q.settings.content_element=q.bodyElement=q.contentDocument=q.contentWindow=null;if(q.selection){q.selection=q.selection.win=q.selection.dom=q.selection.dom.doc=null}q.destroyed=1},_addEvents:function(){var w=this,v,y=w.settings,x={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function u(t,A){var s=t.type;if(w.removed){return}if(w.onEvent.dispatch(w,t,A)!==false){w[x[t.fakeType||t.type]].dispatch(w,t,A)}}j(x,function(t,s){switch(s){case"contextmenu":if(n.isOpera){k.add(w.getBody(),"mousedown",function(A){if(A.ctrlKey){A.fakeType="contextmenu";u(A)}})}else{k.add(w.getBody(),s,u)}break;case"paste":k.add(w.getBody(),s,function(A){u(A)});break;case"submit":case"reset":k.add(w.getElement().form||o.getParent(w.id,"form"),s,u);break;default:k.add(y.content_editable?w.getBody():w.getDoc(),s,u)}});k.add(y.content_editable?w.getBody():(a?w.getDoc():w.getWin()),"focus",function(s){w.focus(true)});if(n.isGecko){k.add(w.getDoc(),"DOMNodeInserted",function(t){var s;t=t.target;if(t.nodeType===1&&t.nodeName==="IMG"&&(s=t.getAttribute("mce_src"))){t.src=w.documentBaseURI.toAbsolute(s)}})}if(a){function q(){var B=this,D=B.getDoc(),C=B.settings;if(a&&!C.readonly){if(B._isHidden()){try{if(!C.content_editable){D.designMode="On"}}catch(A){}}try{D.execCommand("styleWithCSS",0,false)}catch(A){if(!B._isHidden()){try{D.execCommand("useCSS",0,true)}catch(A){}}}if(!C.table_inline_editing){try{D.execCommand("enableInlineTableEditing",false,false)}catch(A){}}if(!C.object_resizing){try{D.execCommand("enableObjectResizing",false,false)}catch(A){}}}}w.onBeforeExecCommand.add(q);w.onMouseDown.add(q)}w.onMouseUp.add(w.nodeChanged);w.onClick.add(w.nodeChanged);w.onKeyUp.add(function(s,t){var A=t.keyCode;if((A>=33&&A<=36)||(A>=37&&A<=40)||A==13||A==45||A==46||A==8||(n.isMac&&(A==91||A==93))||t.ctrlKey){w.nodeChanged()}});w.onReset.add(function(){w.setContent(w.startContent,{format:"raw"})});if(y.custom_shortcuts){if(y.custom_undo_redo_keyboard_shortcuts){w.addShortcut("ctrl+z",w.getLang("undo_desc"),"Undo");w.addShortcut("ctrl+y",w.getLang("redo_desc"),"Redo")}if(a){w.addShortcut("ctrl+b",w.getLang("bold_desc"),"Bold");w.addShortcut("ctrl+i",w.getLang("italic_desc"),"Italic");w.addShortcut("ctrl+u",w.getLang("underline_desc"),"Underline")}for(v=1;v<=6;v++){w.addShortcut("ctrl+"+v,"",["FormatBlock",false,"<h"+v+">"])}w.addShortcut("ctrl+7","",["FormatBlock",false,"<p>"]);w.addShortcut("ctrl+8","",["FormatBlock",false,"<div>"]);w.addShortcut("ctrl+9","",["FormatBlock",false,"<address>"]);function z(t){var s=null;if(!t.altKey&&!t.ctrlKey&&!t.metaKey){return s}j(w.shortcuts,function(A){if(n.isMac&&A.ctrl!=t.metaKey){return}else{if(!n.isMac&&A.ctrl!=t.ctrlKey){return}}if(A.alt!=t.altKey){return}if(A.shift!=t.shiftKey){return}if(t.keyCode==A.keyCode||(t.charCode&&t.charCode==A.charCode)){s=A;return false}});return s}w.onKeyUp.add(function(s,t){var A=z(t);if(A){return k.cancel(t)}});w.onKeyPress.add(function(s,t){var A=z(t);if(A){return k.cancel(t)}});w.onKeyDown.add(function(s,t){var A=z(t);if(A){A.func.call(A.scope);return k.cancel(t)}})}if(n.isIE){k.add(w.getDoc(),"controlselect",function(A){var t=w.resizeInfo,s;A=A.target;if(A.nodeName!=="IMG"){return}if(t){k.remove(t.node,t.ev,t.cb)}if(!w.dom.hasClass(A,"mceItemNoResize")){ev="resizeend";s=k.add(A,ev,function(C){var B;C=C.target;if(B=w.dom.getStyle(C,"width")){w.dom.setAttrib(C,"width",B.replace(/[^0-9%]+/g,""));w.dom.setStyle(C,"width","")}if(B=w.dom.getStyle(C,"height")){w.dom.setAttrib(C,"height",B.replace(/[^0-9%]+/g,""));w.dom.setStyle(C,"height","")}})}else{ev="resizestart";s=k.add(A,"resizestart",k.cancel,k)}t=w.resizeInfo={node:A,ev:ev,cb:s}});w.onKeyDown.add(function(s,t){switch(t.keyCode){case 8:if(w.selection.getRng().item){w.selection.getRng().item(0).removeNode();return k.cancel(t)}}})}if(n.isOpera){w.onClick.add(function(s,t){k.prevent(t)})}if(y.custom_undo_redo){function r(){w.undoManager.typing=0;w.undoManager.add()}if(n.isIE){k.add(w.getWin(),"blur",function(s){var t;if(w.selection){t=w.selection.getNode();if(!w.removed&&t.ownerDocument&&t.ownerDocument!=w.getDoc()){r()}}})}else{k.add(w.getDoc(),"blur",function(){if(w.selection&&!w.removed){r()}})}w.onMouseDown.add(r);w.onKeyUp.add(function(s,t){if((t.keyCode>=33&&t.keyCode<=36)||(t.keyCode>=37&&t.keyCode<=40)||t.keyCode==13||t.keyCode==45||t.ctrlKey){w.undoManager.typing=0;w.undoManager.add()}});w.onKeyDown.add(function(s,t){if((t.keyCode>=33&&t.keyCode<=36)||(t.keyCode>=37&&t.keyCode<=40)||t.keyCode==13||t.keyCode==45){if(w.undoManager.typing){w.undoManager.add();w.undoManager.typing=0}return}if(!w.undoManager.typing){w.undoManager.add();w.undoManager.typing=1}})}},_convertInlineElements:function(){var z=this,B=z.settings,r=z.dom,y,w,u,A,q;function x(s,t){if(!B.inline_styles){return}if(t.get){j(z.dom.select("table,u,strike",t.node),function(v){switch(v.nodeName){case"TABLE":if(y=r.getAttrib(v,"height")){r.setStyle(v,"height",y);r.setAttrib(v,"height","")}break;case"U":case"STRIKE":v.style.textDecoration=v.nodeName=="U"?"underline":"line-through";r.setAttrib(v,"mce_style","");r.setAttrib(v,"mce_name","span");break}})}else{if(t.set){j(z.dom.select("table,span",t.node).reverse(),function(v){if(v.nodeName=="TABLE"){if(y=r.getStyle(v,"height")){r.setAttrib(v,"height",y.replace(/[^0-9%]+/g,""))}}else{if(v.style.textDecoration=="underline"){u="u"}else{if(v.style.textDecoration=="line-through"){u="strike"}else{u=""}}if(u){v.style.textDecoration="";r.setAttrib(v,"mce_style","");w=r.create(u,{style:r.getAttrib(v,"style")});r.replace(w,v,1)}}})}}}z.onPreProcess.add(x);if(!B.cleanup_on_startup){z.onSetContent.add(function(s,t){if(t.initial){x(z,{node:z.getBody(),set:1})}})}},_convertFonts:function(){var w=this,x=w.settings,z=w.dom,v,r,q,u;if(!x.inline_styles){return}v=[8,10,12,14,18,24,36];r=["xx-small","x-small","small","medium","large","x-large","xx-large"];if(q=x.font_size_style_values){q=g(q)}if(u=x.font_size_classes){u=g(u)}function y(B){var C,A,t,s;if(!x.inline_styles){return}t=w.dom.select("font",B);for(s=t.length-1;s>=0;s--){C=t[s];A=z.create("span",{style:z.getAttrib(C,"style"),"class":z.getAttrib(C,"class")});z.setStyles(A,{fontFamily:z.getAttrib(C,"face"),color:z.getAttrib(C,"color"),backgroundColor:C.style.backgroundColor});if(C.size){if(q){z.setStyle(A,"fontSize",q[parseInt(C.size)-1])}else{z.setAttrib(A,"class",u[parseInt(C.size)-1])}}z.setAttrib(A,"mce_style","");z.replace(A,C,1)}}w.onPreProcess.add(function(s,t){if(t.get){y(t.node)}});w.onSetContent.add(function(s,t){if(t.initial){y(t.node)}})},_isHidden:function(){var q;if(!a){return 0}q=this.selection.getSel();return(!q||!q.rangeCount||q.rangeCount==0)},_fixNesting:function(r){var t=[],q;r=r.replace(/<(\/)?([^\s>]+)[^>]*?>/g,function(u,s,w){var v;if(s==="/"){if(!t.length){return""}if(w!==t[t.length-1].tag){for(q=t.length-1;q>=0;q--){if(t[q].tag===w){t[q].close=1;break}}return""}else{t.pop();if(t.length&&t[t.length-1].close){u=u+"</"+t[t.length-1].tag+">";t.pop()}}}else{if(/^(br|hr|input|meta|img|link|param)$/i.test(w)){return u}if(/\/>$/.test(u)){return u}t.push({tag:w})}return u});for(q=t.length-1;q>=0;q--){r+="</"+t[q].tag+">"}return r}})})(tinymce);(function(d){var f=d.each,c=d.isIE,a=d.isGecko,b=d.isOpera,e=d.isWebKit;d.create("tinymce.EditorCommands",{EditorCommands:function(g){this.editor=g},execCommand:function(k,j,l){var h=this,g=h.editor,i;switch(k){case"mceResetDesignMode":case"mceBeginUndoLevel":return true;case"unlink":h.UnLink();return true;case"JustifyLeft":case"JustifyCenter":case"JustifyRight":case"JustifyFull":h.mceJustify(k,k.substring(7).toLowerCase());return true;default:i=this[k];if(i){i.call(this,j,l);return true}}return false},Indent:function(){var g=this.editor,l=g.dom,j=g.selection,k,h,i;h=g.settings.indentation;i=/[a-z%]+$/i.exec(h);h=parseInt(h);if(g.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){f(j.getSelectedBlocks(),function(m){l.setStyle(m,"paddingLeft",(parseInt(m.style.paddingLeft||0)+h)+i)});return}g.getDoc().execCommand("Indent",false,null);if(c){l.getParent(j.getNode(),function(m){if(m.nodeName=="BLOCKQUOTE"){m.dir=m.style.cssText=""}})}},Outdent:function(){var h=this.editor,m=h.dom,k=h.selection,l,g,i,j;i=h.settings.indentation;j=/[a-z%]+$/i.exec(i);i=parseInt(i);if(h.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){f(k.getSelectedBlocks(),function(n){g=Math.max(0,parseInt(n.style.paddingLeft||0)-i);m.setStyle(n,"paddingLeft",g?g+j:"")});return}h.getDoc().execCommand("Outdent",false,null)},mceSetContent:function(h,g){this.editor.setContent(g)},mceToggleVisualAid:function(){var g=this.editor;g.hasVisual=!g.hasVisual;g.addVisual()},mceReplaceContent:function(h,g){var i=this.editor.selection;i.setContent(g.replace(/\{\$selection\}/g,i.getContent({format:"text"})))},mceInsertLink:function(i,h){var g=this.editor,j=g.selection,k=g.dom.getParent(j.getNode(),"a");if(d.is(h,"string")){h={href:h}}function l(m){f(h,function(o,n){g.dom.setAttrib(m,n,o)})}if(!k){g.execCommand("CreateLink",false,"javascript:mctmp(0);");f(g.dom.select("a[href=javascript:mctmp(0);]"),function(m){l(m)})}else{if(h.href){l(k)}else{g.dom.remove(k,1)}}},UnLink:function(){var g=this.editor,h=g.selection;if(h.isCollapsed()){h.select(h.getNode())}g.getDoc().execCommand("unlink",false,null);h.collapse(0)},FontName:function(i,h){var j=this,g=j.editor,k=g.selection,l;if(!h){if(k.isCollapsed()){k.select(k.getNode())}}else{if(g.settings.convert_fonts_to_spans){j._applyInlineStyle("span",{style:{fontFamily:h}})}else{g.getDoc().execCommand("FontName",false,h)}}},FontSize:function(j,i){var h=this.editor,l=h.settings,k,g;if(l.convert_fonts_to_spans&&i>=1&&i<=7){g=d.explode(l.font_size_style_values);k=d.explode(l.font_size_classes);if(k){i=k[i-1]||i}else{i=g[i-1]||i}}if(i>=1&&i<=7){h.getDoc().execCommand("FontSize",false,i)}else{this._applyInlineStyle("span",{style:{fontSize:i}})}},queryCommandValue:function(h){var g=this["queryValue"+h];if(g){return g.call(this,h)}return false},queryCommandState:function(h){var g;switch(h){case"JustifyLeft":case"JustifyCenter":case"JustifyRight":case"JustifyFull":return this.queryStateJustify(h,h.substring(7).toLowerCase());default:if(g=this["queryState"+h]){return g.call(this,h)}}return -1},_queryState:function(h){try{return this.editor.getDoc().queryCommandState(h)}catch(g){}},_queryVal:function(h){try{return this.editor.getDoc().queryCommandValue(h)}catch(g){}},queryValueFontSize:function(){var h=this.editor,g=0,i;if(i=h.dom.getParent(h.selection.getNode(),"span")){g=i.style.fontSize}if(!g&&(b||e)){if(i=h.dom.getParent(h.selection.getNode(),"font")){g=i.size}return g}return g||this._queryVal("FontSize")},queryValueFontName:function(){var h=this.editor,g=0,i;if(i=h.dom.getParent(h.selection.getNode(),"font")){g=i.face}if(i=h.dom.getParent(h.selection.getNode(),"span")){g=i.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}if(!g){g=this._queryVal("FontName")}return g},mceJustify:function(o,p){var k=this.editor,m=k.selection,g=m.getNode(),q=g.nodeName,h,j,i=k.dom,l;if(k.settings.inline_styles&&this.queryStateJustify(o,p)){l=1}h=i.getParent(g,k.dom.isBlock);if(q=="IMG"){if(p=="full"){return}if(l){if(p=="center"){i.setStyle(h||g.parentNode,"textAlign","")}i.setStyle(g,"float","");this.mceRepaint();return}if(p=="center"){if(h&&/^(TD|TH)$/.test(h.nodeName)){h=0}if(!h||h.childNodes.length>1){j=i.create("p");j.appendChild(g.cloneNode(false));if(h){i.insertAfter(j,h)}else{i.insertAfter(j,g)}i.remove(g);g=j.firstChild;h=j}i.setStyle(h,"textAlign",p);i.setStyle(g,"float","")}else{i.setStyle(g,"float",p);i.setStyle(h||g.parentNode,"textAlign","")}this.mceRepaint();return}if(k.settings.inline_styles&&k.settings.forced_root_block){if(l){p=""}f(m.getSelectedBlocks(i.getParent(m.getStart(),i.isBlock),i.getParent(m.getEnd(),i.isBlock)),function(n){i.setAttrib(n,"align","");i.setStyle(n,"textAlign",p=="full"?"justify":p)});return}else{if(!l){k.getDoc().execCommand(o,false,null)}}if(k.settings.inline_styles){if(l){i.getParent(k.selection.getNode(),function(r){if(r.style&&r.style.textAlign){i.setStyle(r,"textAlign","")}});return}f(i.select("*"),function(s){var r=s.align;if(r){if(r=="full"){r="justify"}i.setStyle(s,"textAlign",r);i.setAttrib(s,"align","")}})}},mceSetCSSClass:function(h,g){this.mceSetStyleInfo(0,{command:"setattrib",name:"class",value:g})},getSelectedElement:function(){var w=this,o=w.editor,n=o.dom,s=o.selection,h=s.getRng(),l,k,u,p,j,g,q,i,x,v;if(s.isCollapsed()||h.item){return s.getNode()}v=o.settings.merge_styles_invalid_parents;if(d.is(v,"string")){v=new RegExp(v,"i")}if(c){l=h.duplicate();l.collapse(true);u=l.parentElement();k=h.duplicate();k.collapse(false);p=k.parentElement();if(u!=p){l.move("character",1);u=l.parentElement()}if(u==p){l=h.duplicate();l.moveToElementText(u);if(l.compareEndPoints("StartToStart",h)==0&&l.compareEndPoints("EndToEnd",h)==0){return v&&v.test(u.nodeName)?null:u}}}else{function m(r){return n.getParent(r,"*")}u=h.startContainer;p=h.endContainer;j=h.startOffset;g=h.endOffset;if(!h.collapsed){if(u==p){if(j-g<2){if(u.hasChildNodes()){i=u.childNodes[j];return v&&v.test(i.nodeName)?null:i}}}}if(u.nodeType!=3||p.nodeType!=3){return null}if(j==0){i=m(u);if(i&&i.firstChild!=u){i=null}}if(j==u.nodeValue.length){q=u.nextSibling;if(q&&q.nodeType==1){i=u.nextSibling}}if(g==0){q=p.previousSibling;if(q&&q.nodeType==1){x=q}}if(g==p.nodeValue.length){x=m(p);if(x&&x.lastChild!=p){x=null}}if(i==x){return v&&i&&v.test(i.nodeName)?null:i}}return null},mceSetStyleInfo:function(n,m){var q=this,h=q.editor,j=h.getDoc(),g=h.dom,i,k,r=h.selection,p=m.wrapper||"span",k=r.getBookmark(),o;function l(t,s){if(t.nodeType==1){switch(m.command){case"setattrib":return g.setAttrib(t,m.name,m.value);case"setstyle":return g.setStyle(t,m.name,m.value);case"removeformat":return g.setAttrib(t,"class","")}}}o=h.settings.merge_styles_invalid_parents;if(d.is(o,"string")){o=new RegExp(o,"i")}if((i=q.getSelectedElement())&&!h.settings.force_span_wrappers){l(i,1)}else{j.execCommand("FontName",false,"__");f(g.select("span,font"),function(u){var s,t;if(g.getAttrib(u,"face")=="__"||u.style.fontFamily==="__"){s=g.create(p,{mce_new:"1"});l(s);f(u.childNodes,function(v){s.appendChild(v.cloneNode(true))});g.replace(s,u)}})}f(g.select(p).reverse(),function(t){var s=t.parentNode;if(!g.getAttrib(t,"mce_new")){s=g.getParent(t,"*[mce_new]");if(s){g.remove(t,1)}}});f(g.select(p).reverse(),function(t){var s=t.parentNode;if(!s||!g.getAttrib(t,"mce_new")){return}if(h.settings.force_span_wrappers&&s.nodeName!="SPAN"){return}if(s.nodeName==p.toUpperCase()&&s.childNodes.length==1){return g.remove(s,1)}if(t.nodeType==1&&(!o||!o.test(s.nodeName))&&s.childNodes.length==1){l(s);g.setAttrib(t,"class","")}});f(g.select(p).reverse(),function(s){if(g.getAttrib(s,"mce_new")||(g.getAttribs(s).length<=1&&s.className==="")){if(!g.getAttrib(s,"class")&&!g.getAttrib(s,"style")){return g.remove(s,1)}g.setAttrib(s,"mce_new","")}});r.moveToBookmark(k)},queryStateJustify:function(k,h){var g=this.editor,j=g.selection.getNode(),i=g.dom;if(j&&j.nodeName=="IMG"){if(i.getStyle(j,"float")==h){return 1}return j.parentNode.style.textAlign==h}j=i.getParent(g.selection.getStart(),function(l){return l.nodeType==1&&l.style.textAlign});if(h=="full"){h="justify"}if(g.settings.inline_styles){return(j&&j.style.textAlign==h)}return this._queryState(k)},ForeColor:function(i,h){var g=this.editor;if(g.settings.convert_fonts_to_spans){this._applyInlineStyle("span",{style:{color:h}});return}else{g.getDoc().execCommand("ForeColor",false,h)}},HiliteColor:function(i,k){var h=this,g=h.editor,j=g.getDoc();if(g.settings.convert_fonts_to_spans){this._applyInlineStyle("span",{style:{backgroundColor:k}});return}function l(n){if(!a){return}try{j.execCommand("styleWithCSS",0,n)}catch(m){j.execCommand("useCSS",0,!n)}}if(a||b){l(true);j.execCommand("hilitecolor",false,k);l(false)}else{j.execCommand("BackColor",false,k)}},FormatBlock:function(n,h){var o=this,l=o.editor,p=l.selection,j=l.dom,g,k,m;function i(q){return/^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(q.nodeName)}g=j.getParent(p.getNode(),function(q){return i(q)});if(g){if((c&&i(g.parentNode))||g.nodeName=="DIV"){k=l.dom.create(h);f(j.getAttribs(g),function(q){j.setAttrib(k,q.nodeName,j.getAttrib(g,q.nodeName))});m=p.getBookmark();j.replace(k,g,1);p.moveToBookmark(m);l.nodeChanged();return}}h=l.settings.forced_root_block?(h||"<p>"):h;if(h.indexOf("<")==-1){h="<"+h+">"}if(d.isGecko){h=h.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi,"$1")}l.getDoc().execCommand("FormatBlock",false,h)},mceCleanup:function(){var h=this.editor,i=h.selection,g=i.getBookmark();h.setContent(h.getContent());i.moveToBookmark(g)},mceRemoveNode:function(j,k){var h=this.editor,i=h.selection,g,l=k||i.getNode();if(l==h.getBody()){return}g=i.getBookmark();h.dom.remove(l,1);i.moveToBookmark(g);h.nodeChanged()},mceSelectNodeDepth:function(i,j){var g=this.editor,h=g.selection,k=0;g.dom.getParent(h.getNode(),function(l){if(l.nodeType==1&&k++==j){h.select(l);g.nodeChanged();return false}},g.getBody())},mceSelectNode:function(h,g){this.editor.selection.select(g)},mceInsertContent:function(g,h){this.editor.selection.setContent(h)},mceInsertRawHTML:function(h,i){var g=this.editor;g.selection.setContent("tiny_mce_marker");g.setContent(g.getContent().replace(/tiny_mce_marker/g,i))},mceRepaint:function(){var i,g,j=this.editor;if(d.isGecko){try{i=j.selection;g=i.getBookmark(true);if(i.getSel()){i.getSel().selectAllChildren(j.getBody())}i.collapse(true);i.moveToBookmark(g)}catch(h){}}},queryStateUnderline:function(){var g=this.editor,h=g.selection.getNode();if(h&&h.nodeName=="A"){return false}return this._queryState("Underline")},queryStateOutdent:function(){var g=this.editor,h;if(g.settings.inline_styles){if((h=g.dom.getParent(g.selection.getStart(),g.dom.isBlock))&&parseInt(h.style.paddingLeft)>0){return true}if((h=g.dom.getParent(g.selection.getEnd(),g.dom.isBlock))&&parseInt(h.style.paddingLeft)>0){return true}}return this.queryStateInsertUnorderedList()||this.queryStateInsertOrderedList()||(!g.settings.inline_styles&&!!g.dom.getParent(g.selection.getNode(),"BLOCKQUOTE"))},queryStateInsertUnorderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),"UL")},queryStateInsertOrderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),"OL")},queryStatemceBlockQuote:function(){return !!this.editor.dom.getParent(this.editor.selection.getStart(),function(g){return g.nodeName==="BLOCKQUOTE"})},_applyInlineStyle:function(o,j,m){var q=this,n=q.editor,l=n.dom,i,p={},k,r;o=o.toUpperCase();if(m&&m.check_classes&&j["class"]){m.check_classes.push(j["class"])}function h(){f(l.select(o).reverse(),function(t){var s=0;f(l.getAttribs(t),function(u){if(u.nodeName.substring(0,1)!="_"&&l.getAttrib(t,u.nodeName)!=""){s++}});if(s==0){l.remove(t,1)}})}function g(){var s;f(l.select("span,font"),function(t){if(t.style.fontFamily=="mceinline"||t.face=="mceinline"){if(!s){s=n.selection.getBookmark()}j._mce_new="1";l.replace(l.create(o,j),t,1)}});f(l.select(o+"[_mce_new]"),function(u){function t(v){if(v.nodeType==1){f(j.style,function(x,w){l.setStyle(v,w,"")});if(j["class"]&&v.className&&m){f(m.check_classes,function(w){if(l.hasClass(v,w)){l.removeClass(v,w)}})}}}f(l.select(o,u),t);if(u.parentNode&&u.parentNode.nodeType==1&&u.parentNode.childNodes.length==1){t(u.parentNode)}l.getParent(u.parentNode,function(v){if(v.nodeType==1){if(j.style){f(j.style,function(y,x){var w;if(!p[x]&&(w=l.getStyle(v,x))){if(w===y){l.setStyle(u,x,"")}p[x]=1}})}if(j["class"]&&v.className&&m){f(m.check_classes,function(w){if(l.hasClass(v,w)){l.removeClass(u,w)}})}}return false});u.removeAttribute("_mce_new")});h();n.selection.moveToBookmark(s);return !!s}n.focus();n.getDoc().execCommand("FontName",false,"mceinline");g();if(k=q._applyInlineStyle.keyhandler){n.onKeyUp.remove(k);n.onKeyPress.remove(k);n.onKeyDown.remove(k);n.onSetContent.remove(q._applyInlineStyle.chandler)}if(n.selection.isCollapsed()){if(!c){f(l.getParents(n.selection.getNode(),"span"),function(s){f(j.style,function(u,t){var w;if(w=l.getStyle(s,t)){if(w==u){l.setStyle(s,t,"");r=2;return false}r=1;return false}});if(r){return false}});if(r==2){i=n.selection.getBookmark();h();n.selection.moveToBookmark(i);window.setTimeout(function(){n.nodeChanged()},1);return}}q._pendingStyles=d.extend(q._pendingStyles||{},j.style);q._applyInlineStyle.chandler=n.onSetContent.add(function(){delete q._pendingStyles});q._applyInlineStyle.keyhandler=k=function(s){if(q._pendingStyles){j.style=q._pendingStyles;delete q._pendingStyles}if(g()){n.onKeyDown.remove(q._applyInlineStyle.keyhandler);n.onKeyPress.remove(q._applyInlineStyle.keyhandler)}if(s.type=="keyup"){n.onKeyUp.remove(q._applyInlineStyle.keyhandler)}};n.onKeyDown.add(k);n.onKeyPress.add(k);n.onKeyUp.add(k)}else{q._pendingStyles=0}}})})(tinymce);(function(a){a.create("tinymce.UndoManager",{index:0,data:null,typing:0,UndoManager:function(c){var d=this,b=a.util.Dispatcher;d.editor=c;d.data=[];d.onAdd=new b(this);d.onUndo=new b(this);d.onRedo=new b(this)},add:function(d){var g=this,f,e=g.editor,c,h=e.settings,j;d=d||{};d.content=d.content||e.getContent({format:"raw",no_events:1});d.content=d.content.replace(/^\s*|\s*$/g,"");j=g.data[g.index>0&&(g.index==0||g.index==g.data.length)?g.index-1:g.index];if(!d.initial&&j&&d.content==j.content){return null}if(h.custom_undo_redo_levels){if(g.data.length>h.custom_undo_redo_levels){for(f=0;f<g.data.length-1;f++){g.data[f]=g.data[f+1]}g.data.length--;g.index=g.data.length}}if(h.custom_undo_redo_restore_selection&&!d.initial){d.bookmark=c=d.bookmark||e.selection.getBookmark()}if(g.index<g.data.length){g.index++}if(g.data.length===0&&!d.initial){return null}g.data.length=g.index+1;g.data[g.index++]=d;if(d.initial){g.index=0}if(g.data.length==2&&g.data[0].initial){g.data[0].bookmark=c}g.onAdd.dispatch(g,d);e.isNotDirty=0;return d},undo:function(){var e=this,c=e.editor,b=b,d;if(e.typing){e.add();e.typing=0}if(e.index>0){if(e.index==e.data.length&&e.index>1){d=e.index;e.typing=0;if(!e.add()){e.index=d}--e.index}b=e.data[--e.index];c.setContent(b.content,{format:"raw"});c.selection.moveToBookmark(b.bookmark);e.onUndo.dispatch(e,b)}return b},redo:function(){var d=this,c=d.editor,b=null;if(d.index<d.data.length-1){b=d.data[++d.index];c.setContent(b.content,{format:"raw"});c.selection.moveToBookmark(b.bookmark);d.onRedo.dispatch(d,b)}return b},clear:function(){var b=this;b.data=[];b.index=0;b.typing=0;b.add({initial:true})},hasUndo:function(){return this.index!=0||this.typing},hasRedo:function(){return this.index<this.data.length-1}})})(tinymce);(function(e){var b,d,a,c,f,h;b=e.dom.Event;d=e.isIE;a=e.isGecko;c=e.isOpera;f=e.each;h=e.extend;function g(i){i=i.innerHTML;i=i.replace(/<\w+ .*?mce_\w+\"?=.*?>/gi,"-");i=i.replace(/<(img|hr|table|input|select|textarea)[ \>]/gi,"-");i=i.replace(/<[^>]+>/g,"");return i.replace(/[ \t\r\n]+/g,"")==""}e.create("tinymce.ForceBlocks",{ForceBlocks:function(j){var k=this,l=j.settings,m;k.editor=j;k.dom=j.dom;m=(l.forced_root_block||"p").toLowerCase();l.element=m.toUpperCase();j.onPreInit.add(k.setup,k);k.reOpera=new RegExp("(\\u00a0|&#160;|&nbsp;)</"+m+">","gi");k.rePadd=new RegExp("<p( )([^>]+)><\\/p>|<p( )([^>]+)\\/>|<p( )([^>]+)>\\s+<\\/p>|<p><\\/p>|<p\\/>|<p>\\s+<\\/p>".replace(/p/g,m),"gi");k.reNbsp2BR1=new RegExp("<p( )([^>]+)>[\\s\\u00a0]+<\\/p>|<p>[\\s\\u00a0]+<\\/p>".replace(/p/g,m),"gi");k.reNbsp2BR2=new RegExp("<%p()([^>]+)>(&nbsp;|&#160;)<\\/%p>|<%p>(&nbsp;|&#160;)<\\/%p>".replace(/%p/g,m),"gi");k.reBR2Nbsp=new RegExp("<p( )([^>]+)>\\s*<br \\/>\\s*<\\/p>|<p>\\s*<br \\/>\\s*<\\/p>".replace(/p/g,m),"gi");function i(n,p){if(c){p.content=p.content.replace(k.reOpera,"</"+m+">")}p.content=p.content.replace(k.rePadd,"<"+m+"$1$2$3$4$5$6>\u00a0</"+m+">");if(!d&&!c&&p.set){p.content=p.content.replace(k.reNbsp2BR1,"<"+m+"$1$2><br /></"+m+">");p.content=p.content.replace(k.reNbsp2BR2,"<"+m+"$1$2><br /></"+m+">")}else{p.content=p.content.replace(k.reBR2Nbsp,"<"+m+"$1$2>\u00a0</"+m+">")}}j.onBeforeSetContent.add(i);j.onPostProcess.add(i);if(l.forced_root_block){j.onInit.add(k.forceRoots,k);j.onSetContent.add(k.forceRoots,k);j.onBeforeGetContent.add(k.forceRoots,k)}},setup:function(){var j=this,i=j.editor,k=i.settings;if(k.forced_root_block){i.onKeyUp.add(j.forceRoots,j);i.onPreProcess.add(j.forceRoots,j)}if(k.force_br_newlines){if(d){i.onKeyPress.add(function(m,p){var q,o=m.selection;if(p.keyCode==13&&o.getNode().nodeName!="LI"){o.setContent('<br id="__" /> ',{format:"raw"});q=m.dom.get("__");q.removeAttribute("id");o.select(q);o.collapse();return b.cancel(p)}})}return}if(!d&&k.force_p_newlines){i.onKeyPress.add(function(m,n){if(n.keyCode==13&&!n.shiftKey){if(!j.insertPara(n)){b.cancel(n)}}});if(a){i.onKeyDown.add(function(m,n){if((n.keyCode==8||n.keyCode==46)&&!n.shiftKey){j.backspaceDelete(n,n.keyCode==8)}})}}function l(n,m){var o=i.dom.create(m);f(n.attributes,function(p){if(p.specified&&p.nodeValue){o.setAttribute(p.nodeName.toLowerCase(),p.nodeValue)}});f(n.childNodes,function(p){o.appendChild(p.cloneNode(true))});n.parentNode.replaceChild(o,n);return o}if(d){i.onPreProcess.add(function(m,n){f(m.dom.select("p,h1,h2,h3,h4,h5,h6,div",n.node),function(o){if(g(o)){o.innerHTML=""}})});if(k.element!="P"){i.onKeyPress.add(function(m,n){j.lastElm=m.selection.getNode().nodeName});i.onKeyUp.add(function(o,q){var s,p=o.selection,r=p.getNode(),m=o.getBody();if(m.childNodes.length===1&&r.nodeName=="P"){r=l(r,k.element);p.select(r);p.collapse();o.nodeChanged()}else{if(q.keyCode==13&&!q.shiftKey&&j.lastElm!="P"){s=o.dom.getParent(r,"p");if(s){l(s,k.element);o.nodeChanged()}}}})}}},find:function(o,k,l){var j=this.editor,i=j.getDoc().createTreeWalker(o,4,null,false),m=-1;while(o=i.nextNode()){m++;if(k==0&&o==l){return m}if(k==1&&m==l){return o}}return -1},forceRoots:function(p,D){var u=this,p=u.editor,H=p.getBody(),E=p.getDoc(),K=p.selection,v=K.getSel(),w=K.getRng(),I=-2,o,B,j,k,F=-16777215;var G,l,J,A,x,m=H.childNodes,z,y,q;for(z=m.length-1;z>=0;z--){G=m[z];if(G.nodeType==3||(!u.dom.isBlock(G)&&G.nodeType!=8)){if(!l){if(G.nodeType!=3||/[^\s]/g.test(G.nodeValue)){if(I==-2&&w){if(!d){if(w.startContainer.nodeType==1&&(y=w.startContainer.childNodes[w.startOffset])&&y.nodeType==1){q=y.getAttribute("id");y.setAttribute("id","__mce")}else{if(p.dom.getParent(w.startContainer,function(i){return i===H})){B=w.startOffset;j=w.endOffset;I=u.find(H,0,w.startContainer);o=u.find(H,0,w.endContainer)}}}else{k=E.body.createTextRange();k.moveToElementText(H);k.collapse(1);J=k.move("character",F)*-1;k=w.duplicate();k.collapse(1);A=k.move("character",F)*-1;k=w.duplicate();k.collapse(0);x=(k.move("character",F)*-1)-A;I=A-J;o=x}}l=p.dom.create(p.settings.forced_root_block);l.appendChild(G.cloneNode(1));G.parentNode.replaceChild(l,G)}}else{if(l.hasChildNodes()){l.insertBefore(G,l.firstChild)}else{l.appendChild(G)}}}else{l=null}}if(I!=-2){if(!d){l=H.getElementsByTagName(p.settings.element)[0];w=E.createRange();if(I!=-1){w.setStart(u.find(H,1,I),B)}else{w.setStart(l,0)}if(o!=-1){w.setEnd(u.find(H,1,o),j)}else{w.setEnd(l,0)}if(v){v.removeAllRanges();v.addRange(w)}}else{try{w=v.createRange();w.moveToElementText(H);w.collapse(1);w.moveStart("character",I);w.moveEnd("character",o);w.select()}catch(C){}}}else{if(!d&&(y=p.dom.get("__mce"))){if(q){y.setAttribute("id",q)}else{y.removeAttribute("id")}w=E.createRange();w.setStartBefore(y);w.setEndBefore(y);K.setRng(w)}}},getParentBlock:function(j){var i=this.dom;return i.getParent(j,i.isBlock)},insertPara:function(M){var A=this,o=A.editor,I=o.dom,N=o.getDoc(),R=o.settings,B=o.selection.getSel(),C=B.getRangeAt(0),Q=N.body;var F,G,D,K,J,l,j,m,q,i,x,P,k,p,E,H=I.getViewPort(o.getWin()),w,z,v;F=N.createRange();F.setStart(B.anchorNode,B.anchorOffset);F.collapse(true);G=N.createRange();G.setStart(B.focusNode,B.focusOffset);G.collapse(true);D=F.compareBoundaryPoints(F.START_TO_END,G)<0;K=D?B.anchorNode:B.focusNode;J=D?B.anchorOffset:B.focusOffset;l=D?B.focusNode:B.anchorNode;j=D?B.focusOffset:B.anchorOffset;if(K===l&&/^(TD|TH)$/.test(K.nodeName)){if(K.firstChild.nodeName=="BR"){I.remove(K.firstChild)}if(K.childNodes.length==0){o.dom.add(K,R.element,null,"<br />");P=o.dom.add(K,R.element,null,"<br />")}else{E=K.innerHTML;K.innerHTML="";o.dom.add(K,R.element,null,E);P=o.dom.add(K,R.element,null,"<br />")}C=N.createRange();C.selectNodeContents(P);C.collapse(1);o.selection.setRng(C);return false}if(K==Q&&l==Q&&Q.firstChild&&o.dom.isBlock(Q.firstChild)){K=l=K.firstChild;J=j=0;F=N.createRange();F.setStart(K,0);G=N.createRange();G.setStart(l,0)}K=K.nodeName=="HTML"?N.body:K;K=K.nodeName=="BODY"?K.firstChild:K;l=l.nodeName=="HTML"?N.body:l;l=l.nodeName=="BODY"?l.firstChild:l;m=A.getParentBlock(K);q=A.getParentBlock(l);i=m?m.nodeName:R.element;if(A.dom.getParent(m,"ol,ul,pre")){return true}if(m&&(m.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(I.getStyle(m,"position",1)))){i=R.element;m=null}if(q&&(q.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(I.getStyle(m,"position",1)))){i=R.element;q=null}if(/(TD|TABLE|TH|CAPTION)/.test(i)||(m&&i=="DIV"&&/left|right/gi.test(I.getStyle(m,"float",1)))){i=R.element;m=q=null}x=(m&&m.nodeName==i)?m.cloneNode(0):o.dom.create(i);P=(q&&q.nodeName==i)?q.cloneNode(0):o.dom.create(i);P.removeAttribute("id");if(/^(H[1-6])$/.test(i)&&K.nodeValue&&J==K.nodeValue.length){P=o.dom.create(R.element)}E=k=K;do{if(E==Q||E.nodeType==9||A.dom.isBlock(E)||/(TD|TABLE|TH|CAPTION)/.test(E.nodeName)){break}k=E}while((E=E.previousSibling?E.previousSibling:E.parentNode));E=p=l;do{if(E==Q||E.nodeType==9||A.dom.isBlock(E)||/(TD|TABLE|TH|CAPTION)/.test(E.nodeName)){break}p=E}while((E=E.nextSibling?E.nextSibling:E.parentNode));if(k.nodeName==i){F.setStart(k,0)}else{F.setStartBefore(k)}F.setEnd(K,J);x.appendChild(F.cloneContents()||N.createTextNode(""));try{G.setEndAfter(p)}catch(L){}G.setStart(l,j);P.appendChild(G.cloneContents()||N.createTextNode(""));C=N.createRange();if(!k.previousSibling&&k.parentNode.nodeName==i){C.setStartBefore(k.parentNode)}else{if(F.startContainer.nodeName==i&&F.startOffset==0){C.setStartBefore(F.startContainer)}else{C.setStart(F.startContainer,F.startOffset)}}if(!p.nextSibling&&p.parentNode.nodeName==i){C.setEndAfter(p.parentNode)}else{C.setEnd(G.endContainer,G.endOffset)}C.deleteContents();if(c){o.getWin().scrollTo(0,H.y)}if(x.firstChild&&x.firstChild.nodeName==i){x.innerHTML=x.firstChild.innerHTML}if(P.firstChild&&P.firstChild.nodeName==i){P.innerHTML=P.firstChild.innerHTML}if(g(x)){x.innerHTML="<br />"}function O(y,s){var r=[],T,S,t;y.innerHTML="";if(R.keep_styles){S=s;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(S.nodeName)){T=S.cloneNode(false);I.setAttrib(T,"id","");r.push(T)}}while(S=S.parentNode)}if(r.length>0){for(t=r.length-1,T=y;t>=0;t--){T=T.appendChild(r[t])}r[0].innerHTML=c?"&nbsp;":"<br />";return r[0]}else{y.innerHTML=c?"&nbsp;":"<br />"}}if(g(P)){v=O(P,l)}if(c&&parseFloat(opera.version())<9.5){C.insertNode(x);C.insertNode(P)}else{C.insertNode(P);C.insertNode(x)}P.normalize();x.normalize();function u(r){return N.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false).nextNode()||r}C=N.createRange();C.selectNodeContents(a?u(v||P):v||P);C.collapse(1);B.removeAllRanges();B.addRange(C);w=o.dom.getPos(P).y;z=P.clientHeight;if(w<H.y||w+z>H.y+H.h){o.getWin().scrollTo(0,w<H.y?w:w-H.h+25)}return false},backspaceDelete:function(l,u){var x=this,k=x.editor,p=k.getBody(),j,m=k.selection,i=m.getRng(),o=i.startContainer,j,q,s;if(o&&k.dom.isBlock(o)&&!/^(TD|TH)$/.test(o.nodeName)&&u){if(o.childNodes.length==0||(o.childNodes.length==1&&o.firstChild.nodeName=="BR")){j=o;while((j=j.previousSibling)&&!k.dom.isBlock(j)){}if(j){if(o!=p.firstChild){q=k.dom.doc.createTreeWalker(j,NodeFilter.SHOW_TEXT,null,false);while(s=q.nextNode()){j=s}i=k.getDoc().createRange();i.setStart(j,j.nodeValue?j.nodeValue.length:0);i.setEnd(j,j.nodeValue?j.nodeValue.length:0);m.setRng(i);k.dom.remove(o)}return b.cancel(l)}}}function v(n){var r;n=n.target;if(n&&n.parentNode&&n.nodeName=="BR"&&(j=x.getParentBlock(n))){r=n.previousSibling;b.remove(p,"DOMNodeInserted",v);if(r&&r.nodeType==3&&/\s+$/.test(r.nodeValue)){return}if(n.previousSibling||n.nextSibling){k.dom.remove(n)}}}b._add(p,"DOMNodeInserted",v);window.setTimeout(function(){b._remove(p,"DOMNodeInserted",v)},1)}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(i){var h,g=this,f=g.editor;d(f.plugins,function(j){if(j.createControl){h=j.createControl(i,g);if(h){return false}}});switch(i){case"|":case"separator":return g.createSeparator()}if(!h&&f.buttons&&(h=f.buttons[i])){return g.createButton(i,h)}return g.add(h)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){i.execCommand(p.cmd,p.ui||false,p.value)}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;if(g.settings.use_native_selects){k=new c.ui.NativeListBox(m,i)}else{f=l||h._cls.listbox||c.ui.ListBox;k=new f(m,i)}h.controls[m]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){g.bookmark=g.selection.getBookmark("simple")});a.add(o,"focus",function(){g.selection.moveToBookmark(g.bookmark);g.bookmark=null})})}if(k.hideMenu){g.onMouseDown.add(k.hideMenu,k)}return h.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){a.CommandManager=function(){var c={},b={},d={};function e(i,h,g,f){if(typeof(h)=="string"){h=[h]}a.each(h,function(j){i[j.toLowerCase()]={func:g,scope:f}})}a.extend(this,{add:function(h,g,f){e(c,h,g,f)},addQueryStateHandler:function(h,g,f){e(b,h,g,f)},addQueryValueHandler:function(h,g,f){e(d,h,g,f)},execCommand:function(g,j,i,h,f){if(j=c[j.toLowerCase()]){if(j.func.call(g||j.scope,i,h,f)!==false){return true}}},queryCommandValue:function(){if(cmd=d[cmd.toLowerCase()]){return cmd.func.call(scope||cmd.scope,ui,value,args)}},queryCommandState:function(){if(cmd=b[cmd.toLowerCase()]){return cmd.func.call(scope||cmd.scope,ui,value,args)}}})};a.GlobalCommands=new a.CommandManager()})(tinymce);(function(b){function a(i,d,h,m){var j,g,e,l,f;function k(p,o){do{if(p.parentNode==o){return p}p=p.parentNode}while(p)}function c(o){m(o);b.walk(o,m,"childNodes")}j=i.findCommonAncestor(d,h);e=k(d,j)||d;l=k(h,j)||h;for(g=d;g&&g!=e;g=g.parentNode){for(f=g.nextSibling;f;f=f.nextSibling){c(f)}}if(e!=l){for(g=e.nextSibling;g&&g!=l;g=g.nextSibling){c(g)}}else{c(e)}for(g=h;g&&g!=l;g=g.parentNode){for(f=g.previousSibling;f;f=f.previousSibling){c(f)}}}b.GlobalCommands.add("RemoveFormat",function(){var m=this,l=m.dom,u=m.selection,d=u.getRng(1),e=[],h,f,j,q,g,o,c,i;function k(s){var r;l.getParent(s,function(v){if(l.is(v,m.getParam("removeformat_selector"))){r=v}return l.isBlock(v)},m.getBody());return r}function p(r){if(l.is(r,m.getParam("removeformat_selector"))){e.push(r)}}function t(r){p(r);b.walk(r,p,"childNodes")}h=u.getBookmark();q=d.startContainer;o=d.endContainer;g=d.startOffset;c=d.endOffset;q=q.nodeType==1?q.childNodes[Math.min(g,q.childNodes.length-1)]:q;o=o.nodeType==1?o.childNodes[Math.min(g==c?c:c-1,o.childNodes.length-1)]:o;if(q==o){f=k(q);if(q.nodeType==3){if(f&&f.nodeType==1){i=q.splitText(g);i.splitText(c-g);l.split(f,i);u.moveToBookmark(h)}return}t(l.split(f,q)||q)}else{f=k(q);j=k(o);if(f){if(q.nodeType==3){if(g==q.nodeValue.length){q.nodeValue+="\uFEFF"}q=q.splitText(g)}}if(j){if(o.nodeType==3){o.splitText(c)}}if(f&&f==j){l.replace(l.create("span",{id:"__end"},o.cloneNode(true)),o)}if(f){f=l.split(f,q)}else{f=q}if(i=l.get("__end")){o=i;j=k(o)}if(j){j=l.split(j,o)}else{j=o}a(l,f,j,p);if(q.nodeValue=="\uFEFF"){q.nodeValue=""}t(o);t(q)}b.each(e,function(r){l.remove(r,1)});l.remove("__end",1);u.moveToBookmark(h)})})(tinymce);(function(a){a.GlobalCommands.add("mceBlockQuote",function(){var j=this,o=j.selection,f=j.dom,l,k,e,d,p,c,m,h,b;function g(i){return f.getParent(i,function(q){return q.nodeName==="BLOCKQUOTE"})}l=f.getParent(o.getStart(),f.isBlock);k=f.getParent(o.getEnd(),f.isBlock);if(p=g(l)){if(l!=k||l.childNodes.length>1||(l.childNodes.length==1&&l.firstChild.nodeName!="BR")){d=o.getBookmark()}if(g(k)){m=p.cloneNode(false);while(e=k.nextSibling){m.appendChild(e.parentNode.removeChild(e))}}if(m){f.insertAfter(m,p)}b=o.getSelectedBlocks(l,k);for(h=b.length-1;h>=0;h--){f.insertAfter(b[h],p)}if(/^\s*$/.test(p.innerHTML)){f.remove(p,1)}if(m&&/^\s*$/.test(m.innerHTML)){f.remove(m,1)}if(!d){if(!a.isIE){c=j.getDoc().createRange();c.setStart(l,0);c.setEnd(l,0);o.setRng(c)}else{o.select(l);o.collapse(0);if(f.getParent(o.getStart(),f.isBlock)!=l){c=o.getRng();c.move("character",-1);c.select()}}}else{j.selection.moveToBookmark(d)}return}if(a.isIE&&!l&&!k){j.getDoc().execCommand("Indent");e=g(o.getNode());e.style.margin=e.dir="";return}if(!l||!k){return}if(l!=k||l.childNodes.length>1||(l.childNodes.length==1&&l.firstChild.nodeName!="BR")){d=o.getBookmark()}a.each(o.getSelectedBlocks(g(o.getStart()),g(o.getEnd())),function(i){if(i.nodeName=="BLOCKQUOTE"&&!p){p=i;return}if(!p){p=f.create("blockquote");i.parentNode.insertBefore(p,i)}if(i.nodeName=="BLOCKQUOTE"&&p){e=i.firstChild;while(e){p.appendChild(e.cloneNode(true));e=e.nextSibling}f.remove(i);return}p.appendChild(f.remove(i))});if(!d){if(!a.isIE){c=j.getDoc().createRange();c.setStart(l,0);c.setEnd(l,0);o.setRng(c)}else{o.select(l);o.collapse(1)}}else{o.moveToBookmark(d)}})})(tinymce);(function(a){a.each(["Cut","Copy","Paste"],function(b){a.GlobalCommands.add(b,function(){var c=this,e=c.getDoc();try{e.execCommand(b,false,null);if(!e.queryCommandSupported(b)){throw"Error"}}catch(d){c.windowManager.alert(c.getLang("clipboard_no_support"))}})})})(tinymce);(function(a){a.GlobalCommands.add("InsertHorizontalRule",function(){if(a.isOpera){return this.getDoc().execCommand("InsertHorizontalRule",false,"")}this.selection.setContent("<hr />")})})(tinymce);(function(){var a=tinymce.GlobalCommands;a.add(["mceEndUndoLevel","mceAddUndoLevel"],function(){this.undoManager.add()});a.add("Undo",function(){var b=this;if(b.settings.custom_undo_redo){b.undoManager.undo();b.nodeChanged();return true}return false});a.add("Redo",function(){var b=this;if(b.settings.custom_undo_redo){b.undoManager.redo();b.nodeChanged();return true}return false})})();
tiny_mce/tiny_mce_popup.js ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+
2
+ // Uncomment and change this document.domain value if you are loading the script cross subdomains
3
+ // document.domain = 'moxiecode.com';
4
+
5
+ var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return window.dialogArguments||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var e=this,g,a=document.body,c=e.dom.getViewPort(window),d,f;d=e.getWindowArg("mce_width")-c.w;f=e.getWindowArg("mce_height")-c.h;if(e.isWindow){window.resizeBy(d,f)}else{e.editor.windowManager.resizeBy(d,f,e.id)}},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark("simple")},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('<script type="text/javascript" src="'+tinymce._addVer(a)+'"><\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(){var a=window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.domLoaded){return}b.domLoaded=1;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}document.body.style.display="";if(tinymce.isIE){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){tinymce.dom.Event._add(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){a=a.target||a.srcElement;if(a.onchange){a.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_wait:function(){if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);tinyMCEPopup._onDOMLoaded()}});if(document.documentElement.doScroll&&window==window.top){(function(){if(tinyMCEPopup.domLoaded){return}try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,0);return}tinyMCEPopup._onDOMLoaded()})()}document.attachEvent("onload",tinyMCEPopup._onDOMLoaded)}else{if(document.addEventListener){window.addEventListener("DOMContentLoaded",tinyMCEPopup._onDOMLoaded,false);window.addEventListener("load",tinyMCEPopup._onDOMLoaded,false)}}}};tinyMCEPopup.init();tinyMCEPopup._wait();
tiny_mce/utils/editable_selects.js ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * $Id: editable_selects.js 867 2008-06-09 20:33:40Z spocke $
3
+ *
4
+ * Makes select boxes editable.
5
+ *
6
+ * @author Moxiecode
7
+ * @copyright Copyright � 2004-2008, Moxiecode Systems AB, All rights reserved.
8
+ */
9
+
10
+ var TinyMCE_EditableSelects = {
11
+ editSelectElm : null,
12
+
13
+ init : function() {
14
+ var nl = document.getElementsByTagName("select"), i, d = document, o;
15
+
16
+ for (i=0; i<nl.length; i++) {
17
+ if (nl[i].className.indexOf('mceEditableSelect') != -1) {
18
+ o = new Option('(value)', '__mce_add_custom__');
19
+
20
+ o.className = 'mceAddSelectValue';
21
+
22
+ nl[i].options[nl[i].options.length] = o;
23
+ nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;
24
+ }
25
+ }
26
+ },
27
+
28
+ onChangeEditableSelect : function(e) {
29
+ var d = document, ne, se = window.event ? window.event.srcElement : e.target;
30
+
31
+ if (se.options[se.selectedIndex].value == '__mce_add_custom__') {
32
+ ne = d.createElement("input");
33
+ ne.id = se.id + "_custom";
34
+ ne.name = se.name + "_custom";
35
+ ne.type = "text";
36
+
37
+ ne.style.width = se.offsetWidth + 'px';
38
+ se.parentNode.insertBefore(ne, se);
39
+ se.style.display = 'none';
40
+ ne.focus();
41
+ ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;
42
+ ne.onkeydown = TinyMCE_EditableSelects.onKeyDown;
43
+ TinyMCE_EditableSelects.editSelectElm = se;
44
+ }
45
+ },
46
+
47
+ onBlurEditableSelectInput : function() {
48
+ var se = TinyMCE_EditableSelects.editSelectElm;
49
+
50
+ if (se) {
51
+ if (se.previousSibling.value != '') {
52
+ addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);
53
+ selectByValue(document.forms[0], se.id, se.previousSibling.value);
54
+ } else
55
+ selectByValue(document.forms[0], se.id, '');
56
+
57
+ se.style.display = 'inline';
58
+ se.parentNode.removeChild(se.previousSibling);
59
+ TinyMCE_EditableSelects.editSelectElm = null;
60
+ }
61
+ },
62
+
63
+ onKeyDown : function(e) {
64
+ e = e || window.event;
65
+
66
+ if (e.keyCode == 13)
67
+ TinyMCE_EditableSelects.onBlurEditableSelectInput();
68
+ }
69
+ };
tiny_mce/utils/form_utils.js ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * $Id: form_utils.js 996 2009-02-06 17:32:20Z spocke $
3
+ *
4
+ * Various form utilitiy functions.
5
+ *
6
+ * @author Moxiecode
7
+ * @copyright Copyright � 2004-2008, Moxiecode Systems AB, All rights reserved.
8
+ */
9
+
10
+ var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));
11
+
12
+ function getColorPickerHTML(id, target_form_element) {
13
+ var h = "";
14
+
15
+ h += '<a id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';
16
+ h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;</span></a>';
17
+
18
+ return h;
19
+ }
20
+
21
+ function updateColor(img_id, form_element_id) {
22
+ document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;
23
+ }
24
+
25
+ function setBrowserDisabled(id, state) {
26
+ var img = document.getElementById(id);
27
+ var lnk = document.getElementById(id + "_link");
28
+
29
+ if (lnk) {
30
+ if (state) {
31
+ lnk.setAttribute("realhref", lnk.getAttribute("href"));
32
+ lnk.removeAttribute("href");
33
+ tinyMCEPopup.dom.addClass(img, 'disabled');
34
+ } else {
35
+ if (lnk.getAttribute("realhref"))
36
+ lnk.setAttribute("href", lnk.getAttribute("realhref"));
37
+
38
+ tinyMCEPopup.dom.removeClass(img, 'disabled');
39
+ }
40
+ }
41
+ }
42
+
43
+ function getBrowserHTML(id, target_form_element, type, prefix) {
44
+ var option = prefix + "_" + type + "_browser_callback", cb, html;
45
+
46
+ cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));
47
+
48
+ if (!cb)
49
+ return "";
50
+
51
+ html = "";
52
+ html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';
53
+ html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;</span></a>';
54
+
55
+ return html;
56
+ }
57
+
58
+ function openBrowser(img_id, target_form_element, type, option) {
59
+ var img = document.getElementById(img_id);
60
+
61
+ if (img.className != "mceButtonDisabled")
62
+ tinyMCEPopup.openBrowser(target_form_element, type, option);
63
+ }
64
+
65
+ function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
66
+ if (!form_obj || !form_obj.elements[field_name])
67
+ return;
68
+
69
+ var sel = form_obj.elements[field_name];
70
+
71
+ var found = false;
72
+ for (var i=0; i<sel.options.length; i++) {
73
+ var option = sel.options[i];
74
+
75
+ if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
76
+ option.selected = true;
77
+ found = true;
78
+ } else
79
+ option.selected = false;
80
+ }
81
+
82
+ if (!found && add_custom && value != '') {
83
+ var option = new Option(value, value);
84
+ option.selected = true;
85
+ sel.options[sel.options.length] = option;
86
+ sel.selectedIndex = sel.options.length - 1;
87
+ }
88
+
89
+ return found;
90
+ }
91
+
92
+ function getSelectValue(form_obj, field_name) {
93
+ var elm = form_obj.elements[field_name];
94
+
95
+ if (elm == null || elm.options == null)
96
+ return "";
97
+
98
+ return elm.options[elm.selectedIndex].value;
99
+ }
100
+
101
+ function addSelectValue(form_obj, field_name, name, value) {
102
+ var s = form_obj.elements[field_name];
103
+ var o = new Option(name, value);
104
+ s.options[s.options.length] = o;
105
+ }
106
+
107
+ function addClassesToList(list_id, specific_option) {
108
+ // Setup class droplist
109
+ var styleSelectElm = document.getElementById(list_id);
110
+ var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);
111
+ styles = tinyMCEPopup.getParam(specific_option, styles);
112
+
113
+ if (styles) {
114
+ var stylesAr = styles.split(';');
115
+
116
+ for (var i=0; i<stylesAr.length; i++) {
117
+ if (stylesAr != "") {
118
+ var key, value;
119
+
120
+ key = stylesAr[i].split('=')[0];
121
+ value = stylesAr[i].split('=')[1];
122
+
123
+ styleSelectElm.options[styleSelectElm.length] = new Option(key, value);
124
+ }
125
+ }
126
+ } else {
127
+ tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {
128
+ styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);
129
+ });
130
+ }
131
+ }
132
+
133
+ function isVisible(element_id) {
134
+ var elm = document.getElementById(element_id);
135
+
136
+ return elm && elm.style.display != "none";
137
+ }
138
+
139
+ function convertRGBToHex(col) {
140
+ var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
141
+
142
+ var rgb = col.replace(re, "$1,$2,$3").split(',');
143
+ if (rgb.length == 3) {
144
+ r = parseInt(rgb[0]).toString(16);
145
+ g = parseInt(rgb[1]).toString(16);
146
+ b = parseInt(rgb[2]).toString(16);
147
+
148
+ r = r.length == 1 ? '0' + r : r;
149
+ g = g.length == 1 ? '0' + g : g;
150
+ b = b.length == 1 ? '0' + b : b;
151
+
152
+ return "#" + r + g + b;
153
+ }
154
+
155
+ return col;
156
+ }
157
+
158
+ function convertHexToRGB(col) {
159
+ if (col.indexOf('#') != -1) {
160
+ col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
161
+
162
+ r = parseInt(col.substring(0, 2), 16);
163
+ g = parseInt(col.substring(2, 4), 16);
164
+ b = parseInt(col.substring(4, 6), 16);
165
+
166
+ return "rgb(" + r + "," + g + "," + b + ")";
167
+ }
168
+
169
+ return col;
170
+ }
171
+
172
+ function trimSize(size) {
173
+ return size.replace(/([0-9\.]+)px|(%|in|cm|mm|em|ex|pt|pc)/, '$1$2');
174
+ }
175
+
176
+ function getCSSSize(size) {
177
+ size = trimSize(size);
178
+
179
+ if (size == "")
180
+ return "";
181
+
182
+ // Add px
183
+ if (/^[0-9]+$/.test(size))
184
+ size += 'px';
185
+
186
+ return size;
187
+ }
188
+
189
+ function getStyle(elm, attrib, style) {
190
+ var val = tinyMCEPopup.dom.getAttrib(elm, attrib);
191
+
192
+ if (val != '')
193
+ return '' + val;
194
+
195
+ if (typeof(style) == 'undefined')
196
+ style = attrib;
197
+
198
+ return tinyMCEPopup.dom.getStyle(elm, style);
199
+ }
tiny_mce/utils/mctabs.js ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * $Id: mctabs.js 758 2008-03-30 13:53:29Z spocke $
3
+ *
4
+ * Moxiecode DHTML Tabs script.
5
+ *
6
+ * @author Moxiecode
7
+ * @copyright Copyright � 2004-2008, Moxiecode Systems AB, All rights reserved.
8
+ */
9
+
10
+ function MCTabs() {
11
+ this.settings = [];
12
+ };
13
+
14
+ MCTabs.prototype.init = function(settings) {
15
+ this.settings = settings;
16
+ };
17
+
18
+ MCTabs.prototype.getParam = function(name, default_value) {
19
+ var value = null;
20
+
21
+ value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
22
+
23
+ // Fix bool values
24
+ if (value == "true" || value == "false")
25
+ return (value == "true");
26
+
27
+ return value;
28
+ };
29
+
30
+ MCTabs.prototype.displayTab = function(tab_id, panel_id) {
31
+ var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i;
32
+
33
+ panelElm= document.getElementById(panel_id);
34
+ panelContainerElm = panelElm ? panelElm.parentNode : null;
35
+ tabElm = document.getElementById(tab_id);
36
+ tabContainerElm = tabElm ? tabElm.parentNode : null;
37
+ selectionClass = this.getParam('selection_class', 'current');
38
+
39
+ if (tabElm && tabContainerElm) {
40
+ nodes = tabContainerElm.childNodes;
41
+
42
+ // Hide all other tabs
43
+ for (i = 0; i < nodes.length; i++) {
44
+ if (nodes[i].nodeName == "LI")
45
+ nodes[i].className = '';
46
+ }
47
+
48
+ // Show selected tab
49
+ tabElm.className = 'current';
50
+ }
51
+
52
+ if (panelElm && panelContainerElm) {
53
+ nodes = panelContainerElm.childNodes;
54
+
55
+ // Hide all other panels
56
+ for (i = 0; i < nodes.length; i++) {
57
+ if (nodes[i].nodeName == "DIV")
58
+ nodes[i].className = 'panel';
59
+ }
60
+
61
+ // Show selected panel
62
+ panelElm.className = 'current';
63
+ }
64
+ };
65
+
66
+ MCTabs.prototype.getAnchor = function() {
67
+ var pos, url = document.location.href;
68
+
69
+ if ((pos = url.lastIndexOf('#')) != -1)
70
+ return url.substring(pos + 1);
71
+
72
+ return "";
73
+ };
74
+
75
+ // Global instance
76
+ var mcTabs = new MCTabs();
tiny_mce/utils/validate.js ADDED
@@ -0,0 +1,219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * $Id: validate.js 758 2008-03-30 13:53:29Z spocke $
3
+ *
4
+ * Various form validation methods.
5
+ *
6
+ * @author Moxiecode
7
+ * @copyright Copyright � 2004-2008, Moxiecode Systems AB, All rights reserved.
8
+ */
9
+
10
+ /**
11
+ // String validation:
12
+
13
+ if (!Validator.isEmail('myemail'))
14
+ alert('Invalid email.');
15
+
16
+ // Form validation:
17
+
18
+ var f = document.forms['myform'];
19
+
20
+ if (!Validator.isEmail(f.myemail))
21
+ alert('Invalid email.');
22
+ */
23
+
24
+ var Validator = {
25
+ isEmail : function(s) {
26
+ return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
27
+ },
28
+
29
+ isAbsUrl : function(s) {
30
+ return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');
31
+ },
32
+
33
+ isSize : function(s) {
34
+ return this.test(s, '^[0-9]+(%|in|cm|mm|em|ex|pt|pc|px)?$');
35
+ },
36
+
37
+ isId : function(s) {
38
+ return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');
39
+ },
40
+
41
+ isEmpty : function(s) {
42
+ var nl, i;
43
+
44
+ if (s.nodeName == 'SELECT' && s.selectedIndex < 1)
45
+ return true;
46
+
47
+ if (s.type == 'checkbox' && !s.checked)
48
+ return true;
49
+
50
+ if (s.type == 'radio') {
51
+ for (i=0, nl = s.form.elements; i<nl.length; i++) {
52
+ if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)
53
+ return false;
54
+ }
55
+
56
+ return true;
57
+ }
58
+
59
+ return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);
60
+ },
61
+
62
+ isNumber : function(s, d) {
63
+ return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
64
+ },
65
+
66
+ test : function(s, p) {
67
+ s = s.nodeType == 1 ? s.value : s;
68
+
69
+ return s == '' || new RegExp(p).test(s);
70
+ }
71
+ };
72
+
73
+ var AutoValidator = {
74
+ settings : {
75
+ id_cls : 'id',
76
+ int_cls : 'int',
77
+ url_cls : 'url',
78
+ number_cls : 'number',
79
+ email_cls : 'email',
80
+ size_cls : 'size',
81
+ required_cls : 'required',
82
+ invalid_cls : 'invalid',
83
+ min_cls : 'min',
84
+ max_cls : 'max'
85
+ },
86
+
87
+ init : function(s) {
88
+ var n;
89
+
90
+ for (n in s)
91
+ this.settings[n] = s[n];
92
+ },
93
+
94
+ validate : function(f) {
95
+ var i, nl, s = this.settings, c = 0;
96
+
97
+ nl = this.tags(f, 'label');
98
+ for (i=0; i<nl.length; i++)
99
+ this.removeClass(nl[i], s.invalid_cls);
100
+
101
+ c += this.validateElms(f, 'input');
102
+ c += this.validateElms(f, 'select');
103
+ c += this.validateElms(f, 'textarea');
104
+
105
+ return c == 3;
106
+ },
107
+
108
+ invalidate : function(n) {
109
+ this.mark(n.form, n);
110
+ },
111
+
112
+ reset : function(e) {
113
+ var t = ['label', 'input', 'select', 'textarea'];
114
+ var i, j, nl, s = this.settings;
115
+
116
+ if (e == null)
117
+ return;
118
+
119
+ for (i=0; i<t.length; i++) {
120
+ nl = this.tags(e.form ? e.form : e, t[i]);
121
+ for (j=0; j<nl.length; j++)
122
+ this.removeClass(nl[j], s.invalid_cls);
123
+ }
124
+ },
125
+
126
+ validateElms : function(f, e) {
127
+ var nl, i, n, s = this.settings, st = true, va = Validator, v;
128
+
129
+ nl = this.tags(f, e);
130
+ for (i=0; i<nl.length; i++) {
131
+ n = nl[i];
132
+
133
+ this.removeClass(n, s.invalid_cls);
134
+
135
+ if (this.hasClass(n, s.required_cls) && va.isEmpty(n))
136
+ st = this.mark(f, n);
137
+
138
+ if (this.hasClass(n, s.number_cls) && !va.isNumber(n))
139
+ st = this.mark(f, n);
140
+
141
+ if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))
142
+ st = this.mark(f, n);
143
+
144
+ if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))
145
+ st = this.mark(f, n);
146
+
147
+ if (this.hasClass(n, s.email_cls) && !va.isEmail(n))
148
+ st = this.mark(f, n);
149
+
150
+ if (this.hasClass(n, s.size_cls) && !va.isSize(n))
151
+ st = this.mark(f, n);
152
+
153
+ if (this.hasClass(n, s.id_cls) && !va.isId(n))
154
+ st = this.mark(f, n);
155
+
156
+ if (this.hasClass(n, s.min_cls, true)) {
157
+ v = this.getNum(n, s.min_cls);
158
+
159
+ if (isNaN(v) || parseInt(n.value) < parseInt(v))
160
+ st = this.mark(f, n);
161
+ }
162
+
163
+ if (this.hasClass(n, s.max_cls, true)) {
164
+ v = this.getNum(n, s.max_cls);
165
+
166
+ if (isNaN(v) || parseInt(n.value) > parseInt(v))
167
+ st = this.mark(f, n);
168
+ }
169
+ }
170
+
171
+ return st;
172
+ },
173
+
174
+ hasClass : function(n, c, d) {
175
+ return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);
176
+ },
177
+
178
+ getNum : function(n, c) {
179
+ c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];
180
+ c = c.replace(/[^0-9]/g, '');
181
+
182
+ return c;
183
+ },
184
+
185
+ addClass : function(n, c, b) {
186
+ var o = this.removeClass(n, c);
187
+ n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
188
+ },
189
+
190
+ removeClass : function(n, c) {
191
+ c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
192
+ return n.className = c != ' ' ? c : '';
193
+ },
194
+
195
+ tags : function(f, s) {
196
+ return f.getElementsByTagName(s);
197
+ },
198
+
199
+ mark : function(f, n) {
200
+ var s = this.settings;
201
+
202
+ this.addClass(n, s.invalid_cls);
203
+ this.markLabels(f, n, s.invalid_cls);
204
+
205
+ return false;
206
+ },
207
+
208
+ markLabels : function(f, n, ic) {
209
+ var nl, i;
210
+
211
+ nl = this.tags(f, "label");
212
+ for (i=0; i<nl.length; i++) {
213
+ if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)
214
+ this.addClass(nl[i], ic);
215
+ }
216
+
217
+ return null;
218
+ }
219
+ };
widget.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ function widget_newsletter_init()
4
+ {
5
+ function widget_newsletter($args)
6
+ {
7
+ $options = get_option('newsletter');
8
+
9
+ // $args is an array of strings that help widgets to conform to
10
+ // the active theme: before_widget, before_title, after_widget,
11
+ // and after_title are the array keys. Default tags: li and h2.
12
+ extract($args);
13
+
14
+ // Each widget can store its own options. We keep strings here.
15
+ $optionsw = get_option('newsletter_widget');
16
+ $title = $optionsw['title'];
17
+ $text = $optionsw['text'];
18
+
19
+ // These lines generate our output. Widgets can be very complex
20
+ // but as you can see here, they can also be very, very simple.
21
+ echo $before_widget . $before_title . $title . $after_title;
22
+
23
+ $buffer = str_replace('{newsletter_url}', $options['url'], newsletter_label('widget_form'));
24
+ $buffer = str_replace('{text}', $optionsw['text'], $buffer);
25
+ echo $buffer;
26
+
27
+ echo $after_widget;
28
+ }
29
+
30
+ function widget_newsletter_control()
31
+ {
32
+ // Get our options and see if we're handling a form submission.
33
+ $options = get_option('newsletter_widget');
34
+ if (!is_array($options))
35
+ {
36
+ $options = array('title'=>'Newsletter subscription');
37
+ $options = array('text'=>'');
38
+ }
39
+
40
+ if ( $_POST['newsletter-submit'] )
41
+ {
42
+ // Remember to sanitize and format use input appropriately.
43
+ $options['title'] = strip_tags(stripslashes($_POST['newsletter-title']));
44
+ $options['text'] = stripslashes($_POST['newsletter-text']);
45
+ update_option('newsletter_widget', $options);
46
+ }
47
+
48
+ // Be sure you format your options to be valid HTML attributes.
49
+ $title = htmlspecialchars($options['title'], ENT_QUOTES);
50
+ $text = htmlspecialchars($options['text'], ENT_QUOTES);
51
+
52
+ // Here is our little form segment. Notice that we don't need a
53
+ // complete form. This will be embedded into the existing form.
54
+ echo 'Title<br /><input id="newsletter-title" name="newsletter-title" type="text" value="'.$title.'" />';
55
+ echo '<br /><br />';
56
+ echo 'Introduction<br /><textarea style="width: 350px;" id="newsletter-text" name="newsletter-text">'.$text.'</textarea>';
57
+ echo '<input type="hidden" id="newsletter-submit" name="newsletter-submit" value="1" />';
58
+ }
59
+
60
+ register_sidebar_widget('Newsletter', 'widget_newsletter');
61
+ register_widget_control('Newsletter', 'widget_newsletter_control', 370, 200);
62
+ }
63
+
64
+ add_action('widgets_init', 'widget_newsletter_init');
65
+ //add_action('init', widget_newsletter_register);
66
+ ?>