View | Details | Raw Unified | Return to bug 5401
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/css/elrte-inner.css (+95 lines)
Line 0 Link Here
1
2
body.el-rte-rtl, body.el-rte-rtl * {
3
	direction:rtl;
4
}
5
6
body.el-rte-structure table,
7
body.el-rte-structure caption,
8
body.el-rte-structure td,
9
body.el-rte-structure th,
10
body.el-rte-structure p,
11
body.el-rte-structure div,
12
body.el-rte-structure blockquote
13
{ outline:1px dotted #99ccff; }
14
15
body.el-rte-structure a[name] {
16
	display:inline-block;
17
	vertical-align:baseline;
18
	width:12px;
19
	height:12px;
20
	border:1px dotted #ccc;
21
	background: url('../images/elrte-toolbar.png') -564px -8px no-repeat;
22
}
23
img { cursor: default; }
24
25
img.elrte-webkit-hl { outline:1px dashed #777; }
26
27
.elrtebm {
28
}
29
30
.elrte-media-x-shockwave-flash,
31
.elrte-media-quicktime,
32
.elrte-media-x-director,
33
.elrte-media-x-mplayer2,
34
.elrte-media-x-pn-realaudio-plugin,
35
.elrte-media-youtube,
36
.elrte-media-rutube,
37
.elrte-media-vimeo,
38
.elrte-yandex-maps,
39
.elrte-google-maps,
40
.elrte-media {
41
	border:1px solid #ccc;
42
	background:#eee url(../images/media-flash.png) center center no-repeat;
43
}
44
.elrte-media-x-shockwave-flash {
45
	background-image:url(../images/media-flash.png);
46
}
47
.elrte-media-youtube {
48
	background-image:url(../images/media-youtube.png);
49
}
50
.elrte-media-vimeo {
51
	background-image:url(../images/media-vimeo.png);
52
}
53
.elrte-media-rutube {
54
	background-image:url(../images/media-rutube.png);
55
}
56
.elrte-media-quicktime {
57
	background-image:url(../images/media-quicktime.png);
58
}
59
.elrte-media-x-director {
60
	background-image:url(../images/media-director.png);
61
}
62
.elrte-media-x-mplayer2 {
63
	background-image:url(../images/media-winmedia.png);
64
}
65
.elrte-media-x-pn-realaudio-plugin {
66
	background-image:url(../images/media-realaudio.png);
67
}
68
.elrte-yandex-maps {
69
	background-image:url(../images/yandex-maps.png);
70
}
71
.elrte-google-maps {
72
	display: block;
73
	background-image:url(../images/google-maps.png);
74
}
75
76
.elrte-pagebreak {
77
78
	display:block;
79
	clear:both;
80
	width:100%;
81
	height:7px;
82
	outline:1px dotted #777;
83
	outline-left:none;
84
	outline-right:none;
85
	background:transparent url(../images/pagebreak.gif) center center no-repeat;
86
}
87
88
.elrte-pagebreak:after {
89
  content: ".";
90
  display: block;
91
  font-size:0;
92
  height: 0;
93
  clear: both;
94
  visibility: hidden;
95
}
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/css/elrte.full.css (+524 lines)
Line 0 Link Here
1
/*!
2
 * elRTE WYSIWYG HTML-editor
3
 * Version 1.1 (2010-09-20)
4
 * http://elrte.org
5
 *
6
 * Copyright 2010, Studio 42 Ltd.
7
 * Licensed under a 3 clauses BSD license
8
 */
9
10
@charset "UTF-8";
11
a { outline: none; }
12
13
/*************  clearfix  **********************/
14
15
.clearfix:after {
16
  content: ".";
17
  display: block;
18
  font-size:0;
19
  height: 0;
20
  clear: both;
21
  visibility: hidden;
22
}
23
24
.clearfix { display: block; }
25
26
.rounded-2 { -moz-border-radius: 2px; -webkit-border-radius: 2px; border-radius: 2px; }
27
.rounded-3 { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }
28
.rounded-4 { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
29
.rounded-5 { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }
30
.rounded-6 { -moz-border-radius: 6px; -webkit-border-radius: 5px; border-radius: 6px; }
31
.rounded-7 { -moz-border-radius: 7px; -webkit-border-radius: 7px; border-radius: 7px; }
32
.rounded-left-3 { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; }
33
.rounded-bottom-7 { -moz-border-radius-bottomleft:7px; -moz-border-radius-bottomright:7px; -webkit-border-bottom-left-radius: 7px;-webkit-border-bottom-right-radius: 7px; border-bottom-left-radius: 7px; border-bottom-right-radius: 7px;}
34
35
36
.ui-widget { font-size:.9em;}
37
.ui-dialog .ui-dialog-buttonpane button { padding: .1em .6em .2em .6em; }
38
39
/* colorpicker "button" */
40
.el-colorpicker {
41
	width  : 16px;
42
	height : 16px;
43
	border:1px solid #ccc;
44
	position:relative;
45
	cursor:default;
46
}
47
48
/* colors palette */
49
.el-palette {
50
	width: 182px;
51
	border:1px solid #ccc;
52
	background:#fff;
53
	padding:3px 2px 3px 3px;
54
	z-index:10000; /* fight with ui.dialog 0_o */
55
	position:absolute;
56
	top:16px;
57
	left:0;
58
}
59
60
/* color cell in palette */
61
.el-palette .color {
62
	float:left;
63
	width:14px;
64
	height:14px;
65
	line-height:1px;
66
	border-top: 1px solid #eee;
67
	border-left:1px solid #eee;
68
}
69
70
/* side below color cells */
71
.el-palette .panel {
72
	border-top:1px solid #ccc;
73
	margin-top:7px;
74
	padding:5px 3px 5px 3px;
75
}
76
77
/* "window" with selected color */
78
.el-palette .panel .preview {
79
	float:right;
80
	width:18px;
81
	height:18px;
82
	border:1px solid #ccc;
83
}
84
85
/* color value text field */
86
.el-palette .panel input {
87
	border:1px solid #ccc;
88
}
89
/* dialog container */
90
.ui-widget .el-dialogform {
91
	padding:5px 3px;
92
93
}
94
95
.ui-widget .el-dialogform-rtl {
96
	direction: rtl;
97
}
98
99
.ui-widget .el-dialogform-rtl .ui-tabs-nav li {
100
	float:right;
101
}
102
103
.el-dialogform div.tab:hover { background:transparent; }
104
.ui-dialog .ui-dialog-title, .ui-dialog .ui-dialog-content {
105
	font-size:.9em;
106
}
107
108
/* tabs nav */
109
.ui-tabs .ui-tabs-nav li a {
110
	padding:.2em .7em;
111
}
112
113
/* tab container */
114
.el-dialogform .tab {
115
	padding:5px 0 12px 0;
116
	border:none;
117
}
118
/* line separator */
119
.el-dialogform .separator {
120
	border-top:1px solid #ccc;
121
	margin: 5px 2px;
122
}
123
124
/* table in dialog or in tab */
125
.el-dialogform table {
126
	width:100%;
127
	border: none;
128
}
129
130
.el-dialogform  table td {
131
	padding: 2px;
132
}
133
134
.el-dialogform input, .el-dialogform textarea {
135
	border:1px solid #ccc;
136
}
137
138
.el-dialogform select {
139
	padding:0;
140
/*	font-size:11px;*/
141
}
142
143
.el-dialogform .spinner {
144
	background:url(../images/loading.gif) 50% 50% no-repeat;
145
	text-align:center;
146
	width:150px;
147
	height:50px;
148
	margin:10px auto;
149
	padding-top:33px;
150
	font-weight:bold;
151
}
152
.el-dialogform-error {
153
	background: #fee; color:#ff0000; border: 2px #844 solid; padding: 10px; margin-bottom: 1em 0;
154
155
}
156
.el-dialogform-message {
157
	background: #efe; color: #040; border: 2px #484 solid; padding: 10px; margin-bottom: 1em 0;
158
}
159
160
161
.el-dialogform  table td .el-borderselect table {
162
	width:auto;
163
}
164
165
.el-dialogform  table td .el-borderselect table td {
166
	padding-left :0;
167
	padding-right:2px;
168
}
169
.el-paddinginput {
170
	display: block;
171
	white-space: nowrap;
172
}
173
.el-paddinginput input {
174
	margin :0 1px 0 0;
175
	border:1px solid #ccc;
176
}
177
.el-paddinginput select {
178
	padding:0;
179
}/* container for elselect */
180
.el-select {
181
	height:17px;
182
	width : 110px;
183
	border:1px solid #ccc;
184
	cursor: default;
185
	position:relative;
186
}
187
.el-select.hover {
188
	background-color:#eee;
189
}
190
191
/* selected element */
192
.el-select label {
193
	height:17px;
194
	line-height:17px;
195
/*	font-size:.92em;*/
196
	padding: 0 5px;
197
	margin: 0 12px 0 0;
198
	display:block;
199
	white-space:nowrap;
200
	overflow:hidden;
201
	background: #fff;
202
	border-right:1px solid #ccc;
203
}
204
/* drop-down list */
205
.el-select .list {
206
	border:1px solid #ccc;
207
	display:block;
208
	position:absolute;
209
	overflow:auto;
210
	background:#fff;
211
	z-index:1000;
212
/*	height:1610px*/
213
}
214
/* drop-down list item */
215
.el-select .list div {
216
	position:relative;
217
	padding:3px 25px 3px 7px;
218
	border-bottom:1px solid #eee;
219
}
220
/* drop-down list item hovered */
221
.el-select .list .hover {
222
	background:#efefef;
223
}
224
/* drop-down list item selected */
225
.el-select .list .active {
226
	background-color:#c3dbef;
227
}
228
/* any elements in drop-down list item */
229
.el-select .list div * {
230
	padding:0;
231
	margin:0;
232
	border:none;
233
	white-space:nowrap;
234
	display:block;
235
}
236
237
/*  контейнер */
238
.el-rte {
239
	font-family: Trebuchet MS, Verdana, Geneva,sans-serif;
240
/*	border:1px solid #aaa;*/
241
}
242
.el-rte.el-fullscreen {
243
	position:absolute;
244
	width:99%;
245
/*	height:100%;*/
246
	top:0;
247
	left:0;
248
	margin:0;
249
/*	z-index:101;*/
250
}
251
252
.elrte-swf-placeholder {
253
	width:1px;
254
	background: url('../images/swf.png') 0 0 no-repeat;
255
}
256
257
/* style to detect images url */
258
/*.el-rte */
259
.elrtetesturl { color:red; background-image:url(../images/pixel.gif);}
260
261
/* панель инструментов */
262
.el-rte .toolbar {  background-color:#eee; padding:3px 7px 2px 7px; border:1px solid #ccc; white-space:normal; display:inline-block;}
263
264
.el-rte-rtl .toolbar { direction: rtl; }
265
266
/* панель кнопок */
267
.el-rte .toolbar ul {
268
	position:relative;
269
	display:inline-block;
270
	display: -moz-inline-stack;
271
    display: inline-block;
272
    vertical-align: top;
273
    zoom: 1;
274
    *display: inline;
275
	margin:0;
276
	list-style:none;
277
	padding:0 2px 0 5px;
278
	background: url('../images/elrte-toolbar.png') -934px -2px no-repeat;
279
}
280
/* первая панель кнопок */
281
.el-rte .toolbar ul.first {
282
	background:transparent;
283
	padding-left:0;
284
}
285
/* кнопка */
286
.el-rte .toolbar ul li {
287
        clear:none;
288
	display:inline-block;
289
	display: -moz-inline-stack;
290
    display: inline-block;
291
	height:22px;
292
	width:22px;
293
    vertical-align: top;
294
    zoom: 1;
295
    *display: inline;
296
	margin:1px 1px;
297
	padding:0; /* Joomla 1.6 compat */
298
	background:url('../images/elrte-toolbar.png') no-repeat;
299
	border:1px solid #ccc;
300
}
301
/* активная и подсвеченная и неактивная кнопка */
302
.el-rte .toolbar ul li.hover    { border:1px solid #54b9bf; }
303
.el-rte .toolbar ul li.active   { background-color:#c3dbef; border:1px solid #fff; }
304
.el-rte .toolbar ul li.disabled { opacity:alpha(0.3); opacity: 0.3; filter:Alpha(Opacity=30);}
305
/*  кнопки  */
306
.el-rte .toolbar ul li.about                {background-position:-829px -5px;}
307
.el-rte .toolbar ul li.save                {background-position:-30px -2px;}
308
.el-rte .toolbar ul li.new                 {background-position:-55px -2px}
309
.el-rte .toolbar ul li.copy                {background-position:-78px -2px}
310
.el-rte .toolbar ul li.css                 {background-position:-801px -5px}
311
.el-rte .toolbar ul li.cut                 {background-position:-104px -2px}
312
.el-rte .toolbar ul li.paste               {background-position:-128px -2px}
313
.el-rte .toolbar ul li.pastetext           {background-position:-534px -2px}
314
.el-rte .toolbar ul li.pasteformattext     {background-position:-154px -2px}
315
.el-rte .toolbar ul li.removeformat        {background-position:-180px -2px}
316
.el-rte .toolbar ul li.docstructure        {background-position:-712px -4px}
317
.el-rte .toolbar ul li.undo                {background-position:-205px -2px}
318
.el-rte .toolbar ul li.redo                {background-position:-230px -2px}
319
.el-rte .toolbar ul li.bold                {background-position:-252px -2px; }
320
.el-rte .toolbar ul li.italic              {background-position:-270px -2px;}
321
.el-rte .toolbar ul li.underline           {background-position:-290px -2px; }
322
.el-rte .toolbar ul li.strikethrough       {background-position:-149px -29px}
323
.el-rte .toolbar ul li.subscript           {background-position:-54px -29px}
324
.el-rte .toolbar ul li.superscript         {background-position:-76px -29px}
325
.el-rte .toolbar ul li.justifyleft         {background-position:-311px -2px}
326
.el-rte .toolbar ul li.justifycenter       {background-position:-335px -2px}
327
.el-rte .toolbar ul li.justifyright        {background-position:-360px -2px}
328
.el-rte .toolbar ul li.justifyfull         {background-position:-174px -29px}
329
.el-rte .toolbar ul li.insertunorderedlist {background-position:-100px -29px}
330
.el-rte .toolbar ul li.insertorderedlist   {background-position:-124px -29px}
331
.el-rte .toolbar ul li.outdent             {background-position:-6px   -29px}
332
.el-rte .toolbar ul li.indent              {background-position:-32px  -29px}
333
.el-rte .toolbar ul li.blockquote          {background-position:-220px -30px}
334
.el-rte .toolbar ul li.div                 {background-position:-655px -29px}
335
.el-rte .toolbar ul li.stopfloat           {background-position:-771px -5px}
336
.el-rte .toolbar ul li.nbsp                {background-position:-580px -2px}
337
.el-rte .toolbar ul li.forecolor           {background-position:-372px -30px}
338
.el-rte .toolbar ul li.hilitecolor         {background-position:-395px -30px}
339
.el-rte .toolbar ul li.link                {background-position:-244px -29px}
340
.el-rte .toolbar ul li.unlink              {background-position:-270px -29px}
341
.el-rte .toolbar ul li.anchor              {background-position:-296px -30px}
342
.el-rte .toolbar ul li.image               {background-position:-384px -2px}
343
.el-rte .toolbar ul li.flash               {background-position:-410px -2px}
344
.el-rte .toolbar ul li.file                {background-position:-436px -3px}
345
.el-rte .toolbar ul li.table               {background-position:-421px -30px}
346
.el-rte .toolbar ul li.tableprops          {background-position:-602px -29px}
347
.el-rte .toolbar ul li.tbcellprops         {background-position:-806px -27px}
348
.el-rte .toolbar ul li.tablerm             {background-position:-461px -2px}
349
.el-rte .toolbar ul li.tbrowbefore         {background-position:-683px -4px}
350
.el-rte .toolbar ul li.tbrowafter          {background-position:-654px -4px}
351
.el-rte .toolbar ul li.tbrowrm             {background-position:-500px -30px}
352
.el-rte .toolbar ul li.tbcolbefore         {background-position:-741px -27px}
353
.el-rte .toolbar ul li.tbcolafter          {background-position:-772px -27px}
354
.el-rte .toolbar ul li.tbcolrm             {background-position:-526px -30px}
355
.el-rte .toolbar ul li.tbcellsmerge        {background-position:-552px -30px}
356
.el-rte .toolbar ul li.tbcellsplit         {background-position:-629px -29px}
357
.el-rte .toolbar ul li.smiley              {background-position:-322px -29px}
358
.el-rte .toolbar ul li.spec-text           {background-position:-487px -2px}
359
.el-rte .toolbar ul li.print               {background-position:-509px -2px}
360
.el-rte .toolbar ul li.horizontalrule      {background-position:-199px -29px}
361
.el-rte .toolbar ul li.fullscreen          {background-position:-348px -30px}
362
.el-rte .toolbar ul li.elfinder            {background-position:-436px -2px}
363
.el-rte .toolbar ul li.ltr                 {background-position:-855px -27px}
364
.el-rte .toolbar ul li.rtl                 {background-position:-855px -3px}
365
.el-rte .toolbar ul li.pagebreak           {background-position:-711px -28px}
366
367
368
/* рабочая зона (обертка над iframe) */
369
.el-rte .workzone { border:1px solid #eee; border-top:none; height:400px;}
370
.el-rte.small .workzone { min-height:250px; }
371
372
/* source code */
373
.el-rte textarea  { width:100%;  height:100%;  border:none; zoom:1; outline:none;}
374
.el-rte.small textarea  { min-height:250px;}
375
/* редактор */
376
.el-rte iframe    {
377
	width: 100%;
378
	height:400px;
379
380
	outline:none;
381
	border:0 solid;
382
	padding:0;
383
	margin:0;
384
	background:#fff;
385
	z-index:100;
386
}
387
.el-rte.small iframe  { min-height:250px;}
388
389
/* панель статуса (путь) */
390
.el-rte .statusbar {
391
	height: 21px;
392
	padding: 0 9px;
393
	font: 11px/21px 'monaco', 'andale mono', 'lucida console', monospace;
394
	background-color:#eee;
395
	border-top:1px solid #ccc;
396
	border-top:none;
397
}
398
399
.el-rte-rtl .statusbar {
400
	direction:rtl;
401
/*	text-align:right;*/
402
}
403
404
/* табы */
405
.el-rte .tabsbar { display: block;  }
406
.el-rte .tabsbar .tab {
407
	float:left;
408
	margin-right:2px;
409
	padding: 6px 17px;
410
	font-size: .82em;
411
	font-weight:bold;
412
	color:#777;
413
	text-align:center;
414
	border:1px solid #eee;
415
	border-top:none;
416
	background: #fff;
417
	cursor: default;
418
}
419
.el-rte .tabsbar div.active { background: #eee; color:#444; }
420
.el-rte-rtl .tabsbar .tab  { float:right; }
421
422
/* выпадающие меню */
423
/* container for elselect */
424
.el-rte .toolbar ul li.el-select {
425
	height:22px;
426
	width : 120px;
427
	border:1px solid #ccc;
428
	font-size:.82em;
429
	cursor: default;
430
	background-position:-475px -30px;
431
}
432
433
.el-rte .toolbar ul li.el-select.hover {
434
	background-color:#fefefe;
435
}
436
437
.el-rte .toolbar ul li.el-select label {
438
	height:19px;
439
	padding: 3px 5px 0 5px;
440
	float:none; /* Joomla 1.6 compat */
441
	width:96px; /* Joomla 1.6 compat */
442
}
443
444
/* textarea & iframe в диплогах вставки текста */
445
.el-rte-paste-input {
446
	width : 99%;
447
	height: 250px;
448
	border: 1px solid #ccc;
449
	padding:0;
450
	margin:0;
451
	outline:none;
452
}
453
/* индикатор выбраного цвета на кнопке */
454
.el-rte .toolbar ul li div.color-indicator {
455
	width:18px;
456
	height:4px;
457
	margin:16px 0 2px 2px;
458
	background-color: #000;
459
}
460
.el-rte-rtl .toolbar ul li div.color-indicator {
461
	margin:16px 2px 2px 0;
462
}
463
/* colors palette */
464
.el-palette { top:20px; }
465
466
.el-dialogform, .el-dialogform td  { font-size:.9em; }
467
.el-dialogform select { font-size:.9em;}
468
.ui-dialog .ui-dialog-buttonpane { padding: .4em, 1em;}
469
.ui-dialog .ui-dialog-buttonpane button { margin: .3em .4em .1em 0; font-size:.9em;}
470
.ui-dialog .ui-dialog-titlebar { padding: .3em 1em .3em;   }
471
/*.ui-dialog-buttonset { padding:0; background-color:#333;}*/
472
/* диалоговые окна */
473
.el-dialogform label {
474
	display:block;
475
}
476
.el-dialogform label input {
477
	margin-right:2px;
478
}
479
.el-dialogform iframe.el-rte-preview {
480
	width : 100%;
481
	height : 235px;
482
	margin:0;
483
	padding:0;
484
	outline:none;
485
	border:none;
486
}
487
.el-dialogform fieldset {
488
	border:1px solid #ccc;
489
	padding : 0;
490
}
491
.el-dialogform fieldset legend {
492
	font-size:.9em;
493
	padding: .1em .5em;
494
	margin: 0 0 5px 1em;
495
	border:1px solid #ccc;
496
	background-color: #eee;
497
}
498
.el-dialogform p { padding:.2em .3em;}
499
.el-dialogform h3 { color:#555; padding:1.2em 0 0 0; margin:0; font-size:1.2em; }
500
501
.el-dialogform h4 { color:#555;font-size:1em; padding:0; margin: 3px 9px; }
502
503
.elrte-logo {
504
	width:48px;
505
	height:46px;
506
	float:left;
507
	margin:.5em 1em;
508
	background:url('../images/elrte-toolbar.png') -880px -7px no-repeat;
509
}
510
.elrte-ver { font-size:.9em; padding-left:.7em;}
511
.elrte-copy { font-size:.9em; padding-left:.3em;}
512
table.elrte-authors { margin-bottom:1em;}
513
table.elrte-authors td { border-bottom:1px solid #eee;}
514
/* widgets */
515
.el-borderselect {}
516
.el-borderselect table      {  margin:0; }
517
.el-borderselect table td   { padding : 0 2px 0 0; vertical-align:middle; }
518
.el-borderselect input      { margin:0;  border:1px solid #ccc; }
519
520
.el-paddinginput        { display: block; white-space: nowrap; }
521
.el-paddinginput input  { margin :0 1px 0 0; border:1px solid #ccc; }
522
.el-paddinginput select { padding:0; }
523
524
.el-rte-smiley { margin:5px; }
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/elrte.full.js (+8646 lines)
Line 0 Link Here
1
/*!
2
 * elRTE WYSIWYG HTML-editor
3
 * Version 1.1 (2010-09-20)
4
 * http://elrte.org
5
 *
6
 * Copyright 2010, Studio 42 Ltd.
7
 * Licensed under a 3 clauses BSD license
8
 */
9
10
/**
11
 * @class eli18n
12
 * Javascript applications localization
13
 *
14
 * @param Object o - class options. Object. {textdomain : 'имя_группы_сообщений', messages : {textdomain1 : {}[, textdomain2 : {}]...}}
15
 *
16
 * Usage:
17
 *
18
 * var msgs = { Hello : 'Превэд', 'Hello %user' : 'Превед %user' };
19
 * //load messages and set default textdomain
20
 * var translator = new eli18n( {textdomain : 'test', messages : {test : msgs}} )
21
 * window.console.log(translator.translate('Hello'));
22
 * window.console.log(translator.format('Hello %user', {user : 'David Blain'}))
23
 * // create new textdomain
24
 * translator.load({test2 : {'Goodbye' : 'Ja, deva mata!'} })
25
 * // and use it, without changing default one
26
 * window.console.log(translator.translate('Goodbye', 'test2'));
27
 *
28
 * @author:    Dmitry (dio) Levashov dio@std42.ru
29
 * license:   BSD license
30
 **/
31
function eli18n(o) {
32
33
	/**
34
	 * Get/set default textdomain
35
	 *
36
	 * @param String d new textdomain name
37
	 * @return String  default textdomain
38
	 **/
39
	this.textdomain = function(d) {
40
		return this.messages[d] ? this._domain = d : this._domain;
41
	}
42
43
	o && o.messages   && this.load(o.messages);
44
	o && o.textdomain && this.textdomain(o.textdomain);
45
}
46
47
eli18n.prototype = new function() {
48
49
	/**
50
	 * @var Object messages (key - messages in English or message handler, value - message in selected language)
51
	 **/
52
	this.messages = {};
53
	/**
54
	 * @var String default textdomain
55
	 **/
56
	this._domain   = '';
57
58
	/**
59
	 * Load new messages
60
	 *
61
	 * @param Object msgs - messages (key - textdomain name, value - messages Object)
62
	 * @return Object this
63
	 **/
64
	this.load = function(msgs) {
65
		if (typeof(msgs) == 'object') {
66
			for (var d in msgs) {
67
				var _msgs = msgs[d];
68
				if (typeof(_msgs) == 'object') {
69
					if (!this.messages[d]) {
70
						this.messages[d] = {};
71
					}
72
					for (var k in _msgs) {
73
						if (typeof(_msgs[k]) == 'string') {
74
							this.messages[d][k] = _msgs[k];
75
						}
76
					}
77
				}
78
			}
79
		}
80
		return this;
81
	}
82
83
	/**
84
	 * Return translated message, if message exists in required or default textdomain, otherwise returns original message
85
	 *
86
	 * @param  String msg - message
87
	 * @param  String d - textdomain. If empty, default textdomain will be used
88
	 * @return String translated message
89
	 **/
90
	this.translate = function(msg, d) {
91
		var d = d && this.messages[d] ? d : this._domain;
92
		return this.messages[d] && this.messages[d][msg] ? this.messages[d][msg] : msg;
93
94
	}
95
96
	/**
97
	 * Translate message and replace placeholders (%placeholder)
98
	 *
99
	 * @param  String  msg - message
100
	 * @param  Object  replacement for placeholders (keys - placeholders name without leading %, values - replacements)
101
	 * @param  String  d - textdomain. If empty, default textdomain will be used
102
	 * @return String  translated message
103
	 **/
104
	this.format = function(msg, data, d) {
105
		msg = this.translate(msg, d);
106
		if (typeof(data) == 'object') {
107
			for (var i in data) {
108
				msg = msg.replace('%'+i, this.translate(data[i], d));
109
			}
110
		}
111
		return msg;
112
	}
113
}
114
/**
115
 * @class elDialogForm
116
 * Wraper for jquery.ui.dialog and jquery.ui.tabs
117
 *  Create form in dialog. You can decorate it as you wish - with tabs or/and tables
118
 *
119
 * Usage:
120
 *   var d = new elDialogForm(opts)
121
 *   d.append(['Field name: ', $('<input type="text" name="f1" />')])
122
 *		.separator()
123
 *		.append(['Another field name: ', $('<input type="text" name="f2" />')])
124
 *      .open()
125
 * will create dialog with pair text field separated by horizontal rule
126
 * Calling append() with 2 additional arguments ( d.append([..], null, true))
127
 *  - will create table in dialog and put text inputs and labels in table cells
128
 *
129
 * Dialog with tabs:
130
 *   var d = new elDialogForm(opts)
131
 *   d.tab('first', 'First tab label)
132
 * 	  .tab('second', 'Second tab label)
133
 *    .append(['Field name: ', $('<input type="text" name="f1" />')], 'first', true)  - add label and input to first tab in table (table will create automagicaly)
134
 *    .append(['Field name 2: ', $('<input type="text" name="f2" />')], 'second', true)  - same in secon tab
135
 *
136
 * Options:
137
 *   class     - css class for dialog
138
 *   submit    - form submit event callback. Accept 2 args - event and this object
139
 *   ajaxForm  - arguments for ajaxForm, if needed (dont forget include jquery.form.js)
140
 *   tabs      - arguments for ui.tabs
141
 *   dialog    - arguments for ui.dialog
142
 *   name      - hidden text field in wich selected value will saved
143
 *
144
 * Notice!
145
 * When close dialog, it will destroing insead of dialog('close'). Reason - strange bug with tabs in dialog on secondary opening.
146
 *
147
 * @author:    Dmitry Levashov (dio) dio@std42.ru
148
 *
149
 **/
150
151
function elDialogForm(o) {
152
	var self = this;
153
154
	var defaults = {
155
		'class'   : 'el-dialogform',
156
		submit    : function(e, d) { window.console && window.console.log && window.console.log('submit called'); d.close(); },
157
		form      : { action : window.location.href,	method : 'post'	},
158
		ajaxForm  : null,
159
		validate  : null,
160
		spinner   : 'Loading',
161
		tabs      : { active: 0 },
162
		tabPrefix : 'el-df-tab-',
163
		dialog    : {
164
			title     : 'dialog',
165
			autoOpen  : false,
166
			modal     : true,
167
			resizable : false,
168
			buttons  : {
169
				Cancel : function() { self.close(); },
170
				Ok     : function() { self.form.trigger('submit'); }
171
			}
172
		}
173
	};
174
175
	this.opts = jQuery.extend(true, defaults, o, {dialog : { autoOpen : false, close : function() { self.close(); } }});
176
177
	if (this.opts.rtl) {
178
		this.opts['class'] += ' el-dialogform-rtl';
179
	}
180
181
	if (o && o.dialog && o.dialog.buttons && typeof(o.dialog.buttons) == 'object') {
182
		this.opts.dialog.buttons = o.dialog.buttons;
183
	}
184
	this.ul     = null;
185
	this.tabs   = {};
186
	this._table = null;
187
	this.dialog = jQuery('<div />').addClass(this.opts['class']).dialog(this.opts.dialog);
188
	this.message = jQuery('<div class="el-dialogform-message rounded-5" />').hide().appendTo(this.dialog);
189
	this.error   = jQuery('<div class="el-dialogform-error rounded-5" />').hide().appendTo(this.dialog);
190
	this.spinner = jQuery('<div class="spinner" />').hide().appendTo(this.dialog);
191
	this.content = jQuery('<div class="el-dialogform-content" />').appendTo(this.dialog)
192
	this.form   = jQuery('<form />').attr(this.opts.form).appendTo(this.content);
193
194
	if (this.opts.submit) {
195
		this.form.bind('submit', function(e) { self.opts.submit(e, self) })
196
	}
197
	if (this.opts.ajaxForm && jQuery.fn.ajaxForm) {
198
		this.form.ajaxForm(this.opts.ajaxForm);
199
	}
200
	if (this.opts.validate) {
201
		this.form.validate(this.opts.validate);
202
	}
203
204
	this.option = function(name, value) {
205
		return this.dialog.dialog('option', name, value)
206
	}
207
208
	this.showError = function(msg, hideContent) {
209
		this.hideMessage();
210
		this.hideSpinner();
211
		this.error.html(msg).show();
212
		hideContent && this.content.hide();
213
		return this;
214
	}
215
216
	this.hideError= function() {
217
		this.error.text('').hide();
218
		this.content.show();
219
		return this;
220
	}
221
222
	this.showSpinner = function(txt) {
223
		this.error.hide();
224
		this.message.hide();
225
		this.content.hide();
226
		this.spinner.text(txt||this.opts.spinner).show();
227
		this.option('buttons', {});
228
		return this;
229
	}
230
231
	this.hideSpinner = function() {
232
		this.content.show();
233
		this.spinner.hide();
234
		return this;
235
	}
236
237
	this.showMessage = function(txt, hideContent) {
238
		this.hideError();
239
		this.hideSpinner();
240
		this.message.html(txt||'').show();
241
		hideContent && this.content.hide();
242
		return this;
243
	}
244
245
	this.hideMessage = function() {
246
		this.message.hide();
247
		this.content.show();
248
		return this;
249
	}
250
251
	/**
252
	 * Create new tab
253
	 * @param string id    - tab id
254
	 * @param string title - tab name
255
	 * @return elDialogForm
256
	**/
257
	this.tab = function(id, title) {
258
		id = this.opts.tabPrefix+id;
259
260
		if (!this.ul) {
261
			this.ul = jQuery('<ul />').prependTo(this.form);
262
		}
263
		jQuery('<li />').append(jQuery('<a />').attr('href', '#'+id).html(title)).appendTo(this.ul);
264
		this.tabs[id] = {tab : jQuery('<div />').attr('id', id).addClass('tab').appendTo(this.form), table : null};
265
		return this;
266
	}
267
268
	/**
269
	 * Create new table
270
	 * @param string id  tab id, if set - table will create in tab, otherwise - in dialog
271
	 * @return elDialogForm
272
	**/
273
	this.table = function(id) {
274
		id = id && id.indexOf(this.opts.tabPrefix) == -1 ? this.opts.tabPrefix+id : id;
275
		if (id && this.tabs && this.tabs[id]) {
276
			this.tabs[id].table = jQuery('<table />').appendTo(this.tabs[id].tab);
277
		} else {
278
			this._table = jQuery('<table />').appendTo(this.form);
279
		}
280
		return this;
281
	}
282
283
	/**
284
	 * Append html, dom nodes or jQuery objects to dialog or tab
285
	 * @param array|object|string  data object(s) to append to dialog
286
	 * @param string               tid  tab id, if adding to tab
287
	 * @param bool                 t    if true - data will added in table (creating automagicaly)
288
	 * @return elDialogForm
289
	**/
290
	this.append = function(data, tid, t) {
291
		tid = tid ? 'el-df-tab-'+tid : '';
292
293
		if (!data) {
294
			return this;
295
		}
296
297
		if (tid && this.tabs[tid]) {
298
			if (t) {
299
				!this.tabs[tid].table && this.table(tid);
300
				var tr = jQuery('<tr />').appendTo(this.tabs[tid].table);
301
				if (!jQuery.isArray(data)) {
302
					tr.append(jQuery('<td />').append(data));
303
				} else {
304
					for (var i=0; i < data.length; i++) {
305
						tr.append(jQuery('<td />').append(data[i]));
306
					};
307
				}
308
			} else {
309
				if (!jQuery.isArray(data)) {
310
					this.tabs[tid].tab.append(data)
311
				} else {
312
					for (var i=0; i < data.length; i++) {
313
						this.tabs[tid].tab.append(data[i]);
314
					};
315
				}
316
			}
317
318
		} else {
319
			if (!t) {
320
				if (!jQuery.isArray(data)) {
321
					this.form.append(data);
322
				} else {
323
					for (var i=0; i < data.length; i++) {
324
						this.form.append(data[i]);
325
					};
326
				}
327
			} else {
328
				if (!this._table) {
329
					this.table();
330
				}
331
				var tr = jQuery('<tr />').appendTo(this._table);
332
				if (!jQuery.isArray(data)) {
333
					tr.append(jQuery('<td />').append(data));
334
				} else {
335
					for (var i=0; i < data.length; i++) {
336
						tr.append(jQuery('<td />').append(data[i]));
337
					};
338
				}
339
			}
340
		}
341
		return this;
342
	}
343
344
	/**
345
	 * Append separator (div class="separator") to dialog or tab
346
	 * @param  string tid  tab id, if adding to tab
347
	 * @return elDialogForm
348
	**/
349
	this.separator = function(tid) {
350
		tid = 'el-df-tab-'+tid;
351
		if (this.tabs && this.tabs[tid]) {
352
			this.tabs[tid].tab.append(jQuery('<div />').addClass('separator'));
353
			this.tabs[tid].table && this.table(tid);
354
		} else {
355
			this.form.append(jQuery('<div />').addClass('separator'));
356
		}
357
		return this;
358
	}
359
360
	/**
361
	 * Open dialog window
362
	 * @return elDialogForm
363
	**/
364
	this.open = function() {
365
		this.ul && this.form.tabs(this.opts.tabs);
366
		this.form.find(':text').keyup(function(e) {
367
			if (e.keyCode == 13) {
368
				self.form.submit();
369
			}
370
		});
371
372
		this.dialog.attr('unselectable', 'on').dialog('open');
373
		var self = this;
374
		if (this.form && this.form.find(':text').length) {
375
			setTimeout(function() { self.form.find(':text')[0].focus(); }, 20);
376
		}
377
378
		return this;
379
	}
380
381
	/**
382
	 * Close dialog window and destroy content
383
	 * @return void
384
	**/
385
	this.close = function() {
386
		if (typeof(this.opts.close) == 'function') {
387
			this.opts.close();
388
		}
389
		this.dialog.dialog('destroy').remove();
390
	}
391
392
}
393
394
/**
395
 * elColorPicker. JQuery plugin
396
 * Create drop-down colors palette.
397
 *
398
 * Usage:
399
 * $(selector).elColorPicker(opts)
400
 *
401
 * set color after init:
402
 * var c = $(selector).elColorPicker(opts)
403
 * c.val('#ffff99)
404
 *
405
 * Get selected color:
406
 * var color = c.val();
407
 *
408
 * Notice!
409
 *   Palette created only after first click on element (lazzy loading)
410
 *
411
 * Options:
412
 *   colors - colors array (by default display 256 web safe colors)
413
 *   color  - current (selected) color
414
 *   class - css class for display "button" (element on wich plugin was called)
415
 *   paletteClass - css class for colors palette
416
 *   palettePosition - string indicate where palette will created:
417
 *      'inner' - palette will attach to element (acceptable in most cases)
418
 *      'outer' - palette will attach to document.body.
419
 *                Use, when create color picker inside element with overflow == 'hidden', for example in ui.dialog
420
 *   update - function wich update button view on select color (by default set selected color as background)
421
 *   change - callback, called when color was selected (by default write color to console.log)
422
 *   name   - hidden text field in wich selected color value will saved
423
 *
424
 * @author:    Dmitry Levashov (dio) dio@std42.ru
425
 *
426
 **/
427
(function($) {
428
429
	$.fn.elColorPicker = function(o) {
430
		var self     = this;
431
		var opts     = $.extend({}, $.fn.elColorPicker.defaults, o);
432
		this.hidden  = $('<input type="hidden" />').attr('name', opts.name).val(opts.color||'').appendTo(this);
433
		this.palette = null;
434
		this.preview = null;
435
		this.input   = null;
436
437
		function setColor(c) {
438
			self.val(c);
439
			opts.change && opts.change(self.val());
440
			self.palette.slideUp();
441
		}
442
443
		function init() {
444
			self.palette  = $('<div />').addClass(opts.paletteClass+' rounded-3');
445
			for (var i=0; i < opts.colors.length; i++) {
446
				$('<div />')
447
					.addClass('color')
448
					.css('background-color', opts.colors[i])
449
					.attr({title : opts.colors[i], unselectable : 'on'})
450
					.appendTo(self.palette)
451
					.mouseenter(function() {
452
						var v = $(this).attr('title');
453
						self.input.val(v);
454
						self.preview.css('background-color', v);
455
					})
456
					.click(function(e) {
457
						e.stopPropagation();
458
						setColor($(this).attr('title'));
459
					});
460
			};
461
			self.input = $('<input type="text" />')
462
				.addClass('rounded-3')
463
				.attr('size', 8)
464
				.click(function(e) {
465
					e.stopPropagation();
466
				})
467
				.keydown(function(e) {
468
					if (e.ctrlKey || e.metaKey) {
469
						return true;
470
					}
471
					var k = e.keyCode;
472
					// on esc - close palette
473
					if (k == 27) {
474
						return self.mouseleave();
475
					}
476
					// allow input only hex color value
477
					if (k!=8 && k != 13 && k!=46 && k!=37 && k != 39 && (k<48 || k>57) && (k<65 || k > 70)) {
478
						return false;
479
					}
480
					var c = $(this).val();
481
					if (c.length == 7 || c.length == 0) {
482
						if (k == 13) {
483
							e.stopPropagation();
484
							e.preventDefault();
485
							setColor(c);
486
							self.palette.slideUp();
487
						}
488
						if (e.keyCode != 8 && e.keyCode != 46 && k!=37 && k != 39) {
489
							return false;
490
						}
491
					}
492
				})
493
				.keyup(function(e) {
494
					var c = $(this).val();
495
					c.length == 7 && /^#[0-9abcdef]{6}$/i.test(c) && self.val(c);
496
				});
497
498
			self.preview = $('<div />')
499
				.addClass('preview rounded-3')
500
				.click(function(e) {
501
					e.stopPropagation();
502
					setColor(self.input.val());
503
				});
504
505
			self.palette
506
				.append($('<div />').addClass('clearfix'))
507
				.append($('<div />').addClass('panel').append(self.input).append(self.preview));
508
509
			if (opts.palettePosition == 'outer') {
510
				self.palette.hide()
511
					.appendTo(self.parents('body').eq(0))
512
					.mouseleave(function() {
513
						$(this).slideUp();
514
						self.val(self.val());
515
					})
516
				self.mouseleave(function(e) {
517
					if (e.relatedTarget != self.palette.get(0)) {
518
						self.palette.slideUp();
519
						self.val(self.val());
520
					}
521
				})
522
			} else {
523
				self.append(self.palette.hide())
524
					.mouseleave(function(e) {
525
						self.palette.slideUp();
526
						self.val(self.val());
527
					});
528
			}
529
			self.val(self.val());
530
		}
531
532
		this.empty().addClass(opts['class']+' rounded-3')
533
			.css({'position' : 'relative', 'background-color' : opts.color||''})
534
		.click(function(e) {
535
			if (!self.hasClass('disabled')) {
536
				!self.palette && init();
537
				if (opts.palettePosition == 'outer' && self.palette.css('display') == 'none') {
538
					var o = $(this).offset();
539
					var w = self.palette.width();
540
					var l = self.parents('body').width() - o.left >= w ? o.left : o.left + $(this).outerWidth() - w;
541
					self.palette.css({left : l+'px', top : o.top+$(this).height()+1+'px'});
542
				}
543
				self.palette.slideToggle();
544
			}
545
		});
546
547
		this.val = function(v) {
548
			if (!v && v!=='') {
549
				return this.hidden.val();
550
			} else {
551
				this.hidden.val(v);
552
				if (opts.update) {
553
					opts.update(this.hidden.val());
554
				} else {
555
					this.css('background-color', v);
556
				}
557
558
				if (self.palette) {
559
					self.preview.css('background-color', v);
560
					self.input.val(v);
561
				}
562
			}
563
			return this;
564
		}
565
566
		return this;
567
	}
568
569
	$.fn.elColorPicker.defaults = {
570
		'class'         : 'el-colorpicker',
571
		paletteClass    : 'el-palette',
572
		palettePosition : 'inner',
573
		name            : 'color',
574
		color           : '',
575
		update          : null,
576
		change          : function(c) {  },
577
		colors          : [
578
			'#ffffff', '#cccccc', '#999999', '#666666', '#333333', '#000000',
579
			'#ffcccc', '#cc9999', '#996666', '#663333', '#330000',
580
			'#ff9999', '#cc6666', '#cc3333', '#993333', '#660000',
581
			'#ff6666', '#ff3333', '#ff0000', '#cc0000', '#990000',
582
			'#ff9966', '#ff6633', '#ff3300', '#cc3300', '#993300',
583
			'#ffcc99', '#cc9966', '#cc6633', '#996633', '#663300',
584
			'#ff9933', '#ff6600', '#ff9900', '#cc6600', '#cc9933',
585
			'#ffcc66', '#ffcc33', '#ffcc00', '#cc9900', '#996600',
586
			'#ffffcc', '#cccc99', '#999966', '#666633', '#333300',
587
			'#ffff99', '#cccc66', '#cccc33', '#999933', '#666600',
588
			'#ffff66', '#ffff33', '#ffff00', '#cccc00', '#999900',
589
			'#ccff66', '#ccff33', '#ccff00', '#99cc00', '#669900',
590
			'#ccff99', '#99cc66', '#99cc33', '#669933', '#336600',
591
			'#99ff33', '#99ff00', '#66ff00', '#66cc00', '#66cc33',
592
			'#99ff66', '#66ff33', '#33ff00', '#33cc00', '#339900',
593
			'#ccffcc', '#99cc99', '#669966', '#336633', '#003300',
594
			'#99ff99', '#66cc66', '#33cc33', '#339933', '#006600',
595
			'#66ff66', '#33ff33', '#00ff00', '#00cc00', '#009900',
596
			'#66ff99', '#33ff66', '#00ff33', '#00cc33', '#009933',
597
			'#99ffcc', '#66cc99', '#33cc66', '#339966', '#006633',
598
			'#33ff99', '#00ff66', '#00ff99', '#00cc66', '#33cc99',
599
			'#66ffcc', '#33ffcc', '#00ffcc', '#00cc99', '#009966',
600
			'#ccffff', '#99cccc', '#669999', '#336666', '#003333',
601
			'#99ffff', '#66cccc', '#33cccc', '#339999', '#006666',
602
			'#66cccc', '#33ffff', '#00ffff', '#00cccc', '#009999',
603
			'#66ccff', '#33ccff', '#00ccff', '#0099cc', '#006699',
604
			'#99ccff', '#6699cc', '#3399cc', '#336699', '#003366',
605
			'#3399ff', '#0099ff', '#0066ff', '#066ccc', '#3366cc',
606
			'#6699ff', '#3366ff', '#0033ff', '#0033cc', '#003399',
607
			'#ccccff', '#9999cc', '#666699', '#333366', '#000033',
608
			'#9999ff', '#6666cc', '#3333cc', '#333399', '#000066',
609
			'#6666ff', '#3333ff', '#0000ff', '#0000cc', '#009999',
610
			'#9966ff', '#6633ff', '#3300ff', '#3300cc', '#330099',
611
			'#cc99ff', '#9966cc', '#6633cc', '#663399', '#330066',
612
			'#9933ff', '#6600ff', '#9900ff', '#6600cc', '#9933cc',
613
			'#cc66ff', '#cc33ff', '#cc00ff', '#9900cc', '#660099',
614
			'#ffccff', '#cc99cc', '#996699', '#663366', '#330033',
615
			'#ff99ff', '#cc66cc', '#cc33cc', '#993399', '#660066',
616
			'#ff66ff', '#ff33ff', '#ff00ff', '#cc00cc', '#990099',
617
			'#ff66cc', '#ff33cc', '#ff00cc', '#cc0099', '#990066',
618
			'#ff99cc', '#cc6699', '#cc3399', '#993366', '#660033',
619
			'#ff3399', '#ff0099', '#ff0066', '#cc0066', '#cc3366',
620
			'#ff6699', '#ff3366', '#ff0033', '#cc0033', '#990033'
621
			]
622
	};
623
624
})(jQuery);
625
/**
626
 * jQuery plugin. Create group of text input, elSelect and elColorPicker.
627
 * Allow input border-width, border-style and border-color. Used in elRTE
628
 *
629
 * @author:    Dmitry Levashov (dio) dio@std42.ru
630
 **/
631
(function($) {
632
633
	$.fn.elBorderSelect = function(o) {
634
635
		var $self = this;
636
		var self  = this.eq(0);
637
		var opts  = $.extend({}, $.fn.elBorderSelect.defaults, o);
638
		var width = $('<input type="text" />')
639
			.attr({'name' : opts.name+'[width]', size : 3}).css('text-align', 'right')
640
			.change(function() { $self.change(); });
641
642
		var color = $('<div />').css('position', 'relative')
643
			.elColorPicker({
644
				'class'         : 'el-colorpicker ui-icon ui-icon-pencil',
645
				name            : opts.name+'[color]',
646
				palettePosition : 'outer',
647
				change          : function() { $self.change(); }
648
			});
649
650
651
		var style = $('<div />').elSelect({
652
			tpl       : '<div style="border-bottom:4px %val #000;width:100%;margin:7px 0"> </div>',
653
			tpls      : { '' : '%label'},
654
			maxHeight : opts.styleHeight || null,
655
			select    : function() { $self.change(); },
656
			src       : {
657
				''       : 'none',
658
				solid    : 'solid',
659
				dashed   : 'dashed',
660
				dotted   : 'dotted',
661
				'double' : 'double',
662
				groove   : 'groove',
663
				ridge    : 'ridge',
664
				inset    : 'inset',
665
				outset   : 'outset'
666
			}
667
		});
668
669
		self.empty()
670
			.addClass(opts['class'])
671
			.attr('name', opts.name||'')
672
			.append(
673
				$('<table />').attr('cellspacing', 0).append(
674
					$('<tr />')
675
						.append($('<td />').append(width).append(' px'))
676
						.append($('<td />').append(style))
677
						.append($('<td />').append(color))
678
				)
679
			);
680
681
		function rgb2hex(str) {
682
		    function hex(x)  {
683
			hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8","9", "a", "b", "c", "d", "e", "f"];
684
		        return !x  ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x% 16];
685
		    }
686
			var rgb = (str||'').match(/\(([0-9]{1,3}),\s*([0-9]{1,3}),\s*([0-9]{1,3})\)/);
687
			return rgb ? "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]) : '';
688
		}
689
690
		function toPixels(num) {
691
			if (!num) {
692
				return num;
693
			}
694
			var m = num.match(/([0-9]+\.?[0-9]*)\s*(px|pt|em|%)/);
695
			if (m) {
696
				num  = m[1];
697
				unit = m[2];
698
			}
699
			if (num[0] == '.') {
700
				num = '0'+num;
701
			}
702
			num = parseFloat(num);
703
704
			if (isNaN(num)) {
705
				return '';
706
			}
707
			var base = parseInt($(document.body).css('font-size')) || 16;
708
			switch (unit) {
709
				case 'em': return parseInt(num*base);
710
				case 'pt': return parseInt(num*base/12);
711
				case '%' : return parseInt(num*base/100);
712
			}
713
			return num;
714
		}
715
716
		this.change = function() {
717
			opts.change && opts.change(this.val());
718
		}
719
720
		this.val = function(v) {
721
			if (!v && v !== '') {
722
				var w = parseInt(width.val());
723
				return {width : !isNaN(w) ? w+'px' : '', style : style.val(), color : color.val()};
724
			} else {
725
				var m, w, s, c, b = '';
726
				if (v.nodeName || v.css) {
727
					if (!v.css) {
728
						v = $(v);
729
					}
730
					var b = v.css('border')
731
					if ((b = v.css('border'))) {
732
						w = s = c = b;
733
					} else {
734
						w = v.css('border-width');
735
						s = v.css('border-style');
736
						c = v.css('border-color');
737
					}
738
739
				} else {
740
					w = v.width||'';
741
					s = v.style||'';
742
					c = v.color||'';
743
				}
744
745
				width.val(toPixels(w));
746
				var m = s ? s.match(/(solid|dashed|dotted|double|groove|ridge|inset|outset)/i) :'';
747
				style.val(m ? m[1] : '');
748
				color.val(rgb2hex(c));
749
				return this;
750
			}
751
		}
752
753
		this.val(opts.value);
754
		return this;
755
	}
756
757
	$.fn.elBorderSelect.defaults = {
758
		name      : 'el-borderselect',
759
		'class'   : 'el-borderselect',
760
		value     : {},
761
		change    : null
762
	}
763
764
})(jQuery);
765
/**
766
 * jQuery plugin. Create group of text input fields and selects for setting padding/margin. Used in elRTE
767
 *
768
 * @author:    Dmitry Levashov (dio) dio@std42.ru
769
 **/
770
(function($) {
771
772
	$.fn.elPaddingInput = function(o) {
773
		var self = this;
774
		var opts = $.extend({}, $.fn.elPaddingInput.defaults, {name : this.attr('name')}, o);
775
		this.regexps = {
776
			main   : new RegExp(opts.type == 'padding' ? 'padding\s*:\s*([^;"]+)'        : 'margin\s*:\s*([^;"]+)',       'im'),
777
			left   : new RegExp(opts.type == 'padding' ? 'padding-left\s*:\s*([^;"]+)'   : 'margin-left\s*:\s*([^;"]+)',  'im'),
778
			top    : new RegExp(opts.type == 'padding' ? 'padding-top\s*:\s*([^;"]+)'    : 'margin-top\s*:\s*([^;"]+)',    'im'),
779
			right  : new RegExp(opts.type == 'padding' ? 'padding-right\s*:\s*([^;"]+)'  : 'margin-right\s*:\s*([^;"]+)',  'im'),
780
			bottom : new RegExp(opts.type == 'padding' ? 'padding-bottom\s*:\s*([^;"]+)' : 'margin-bottom\s*:\s*([^;"]+)', 'im')
781
		};
782
783
		$.each(['left', 'top', 'right', 'bottom'], function() {
784
785
			self[this] = $('<input type="text" />')
786
				.attr('size', 3)
787
				.css('text-align', 'right')
788
				.css('border-'+this, '2px solid red')
789
				.bind('change', function() { $(this).val(parseNum($(this).val())); change(); })
790
				.attr('name', opts.name+'['+this+']');
791
		});
792
		$.each(['uleft', 'utop', 'uright', 'ubottom'], function() {
793
			self[this] = $('<select />')
794
				.append('<option value="px">px</option>')
795
				.append('<option value="em">em</option>')
796
				.append('<option value="pt">pt</option>')
797
				.bind('change', function() { change(); })
798
				.attr('name', opts.name+'['+this+']');
799
			if (opts.percents) {
800
				self[this].append('<option value="%">%</option>');
801
			}
802
		});
803
804
		this.empty().addClass(opts['class'])
805
			.append(this.left).append(this.uleft).append(' x ')
806
			.append(this.top).append(this.utop).append(' x ')
807
			.append(this.right).append(this.uright).append(' x ')
808
			.append(this.bottom).append(this.ubottom);
809
810
		this.val = function(v) {
811
			if (!v && v!=='') {
812
				var l = parseNum(this.left.val());
813
				var t = parseNum(this.top.val());
814
				var r = parseNum(this.right.val());
815
				var b = parseNum(this.bottom.val());
816
				var ret = {
817
					left   : l=='auto' || l==0 ? l : (l!=='' ? l+this.uleft.val()   : ''),
818
					top    : t=='auto' || t==0 ? t : (t!=='' ? t+this.utop.val()    : ''),
819
					right  : r=='auto' || r==0 ? r : (r!=='' ? r+this.uright.val()  : ''),
820
					bottom : b=='auto' || b==0 ? b : (b!=='' ? b+this.ubottom.val() : ''),
821
					css    : ''
822
				};
823
				if (ret.left!=='' && ret.right!=='' && ret.top!=='' && ret.bottom!=='') {
824
					if (ret.left == ret.right && ret.top == ret.bottom) {
825
						ret.css = ret.top+' '+ret.left;
826
					} else{
827
						ret.css = ret.top+' '+ret.right+' '+ret.bottom+' '+ret.left;
828
					}
829
				}
830
831
				return ret;
832
			} else {
833
834
				if (v.nodeName || v.css) {
835
					if (!v.css) {
836
						v = $(v);
837
					}
838
					var val   = {left : '', top : '', right: '', bottom : ''};
839
					var style = (v.attr('style')||'').toLowerCase();
840
841
					if (style) {
842
						style   = $.trim(style);
843
						var m = style.match(this.regexps.main);
844
						if (m) {
845
							var tmp    = $.trim(m[1]).replace(/\s+/g, ' ').split(' ', 4);
846
							val.top    = tmp[0];
847
							val.right  = tmp[1] && tmp[1]!=='' ? tmp[1] : val.top;
848
							val.bottom = tmp[2] && tmp[2]!=='' ? tmp[2] : val.top;
849
							val.left   = tmp[3] && tmp[3]!=='' ? tmp[3] : val.right;
850
						} else {
851
							$.each(['left', 'top', 'right', 'bottom'], function() {
852
								var name = this.toString();
853
								m = style.match(self.regexps[name]);
854
								if (m) {
855
									val[name] = m[1];
856
								}
857
							});
858
						}
859
					}
860
					var v = val;
861
				}
862
863
				$.each(['left', 'top', 'right', 'bottom'], function() {
864
					var name = this.toString();
865
					if (typeof(v[name]) != 'undefined' && v[name] !== null) {
866
						v[name] = v[name].toString();
867
						var _v = parseNum(v[name]);
868
						self[name].val(_v);
869
						var m = v[name].match(/(px|em|pt|%)/i);
870
						self['u'+name].val(m ? m[1] : 'px');
871
					}
872
				});
873
				return this;
874
			}
875
		}
876
877
		function parseNum(num) {
878
			num = $.trim(num.toString());
879
			if (num[0] == '.') {
880
				num = '0'+num;
881
			}
882
			n = parseFloat(num);
883
			return !isNaN(n) ? n : (num == 'auto' ? num : '');
884
		}
885
886
		function change() {
887
			opts.change && opts.change(self);
888
		}
889
890
		this.val(opts.value);
891
892
		return this;
893
	}
894
895
	$.fn.elPaddingInput.defaults = {
896
		name     : 'el-paddinginput',
897
		'class'  : 'el-paddinginput',
898
		type     : 'padding',
899
		value    : {},
900
		percents : true,
901
		change   : null
902
	}
903
904
})(jQuery);
905
/**
906
 * elSelect JQuery plugin
907
 * Replacement for select input
908
 * Allow to put any html and css decoration in drop-down list
909
 *
910
 * Usage:
911
 *   $(selector).elSelect(opts)
912
 *
913
 * set value after init:
914
 *   var c = $(selector).elSelect(opts)
915
 *   c.val('some value')
916
 *
917
 * Get selected value:
918
 *   var val = c.val();
919
 *
920
 * Notice!
921
 *   1. When called on multiply elements, elSelect create drop-down list only for fist element
922
 *   2. Elements list created only after first click on element (lazzy loading)
923
 *
924
 * Options:
925
 *   src       - object with pairs value:label to create drop-down list
926
 *   value     - current (selected) value
927
 *   class     - css class for display "button" (element on wich plugin was called)
928
 *   listClass - css class for drop down elements list
929
 *   select    - callback, called when value was selected (by default write value to console.log)
930
 *   name      - hidden text field in wich selected value will saved
931
 *   maxHeight - elements list max height (if height greater - scroll will appear)
932
 *   tpl       - template for element in list (contains 2 vars: %var - for src key, %label - for src[val] )
933
 *   labelTpl  - template for label (current selected element) (contains 2 placeholders: %var - for src key, %label - for src[val] )
934
 *
935
 * @author:    Dmitry Levashov (dio) dio@std42.ru
936
 **/
937
(function($) {
938
939
	$.fn.elSelect = function(o) {
940
		var $self    = this;
941
		var self     = this.eq(0);
942
		var opts     = $.extend({}, $.fn.elSelect.defaults, o);
943
		var hidden   = $('<input type="hidden" />').attr('name', opts.name);
944
		var label    = $('<label />').attr({unselectable : 'on'}).addClass('rounded-left-3');
945
		var list     = null;
946
		var ieWidth  = null;
947
948
		if (self.get(0).nodeName == 'SELECT') {
949
			opts.src = {};
950
			self.children('option').each(function() {
951
				opts.src[$(this).val()] = $(this).text();
952
			});
953
			opts.value = self.val();
954
			opts.name  = self.attr('name');
955
			self.replaceWith((self = $('<div />')));
956
		}
957
958
		if (!opts.value || !opts.src[opts.val]) {
959
			opts.value = null;
960
			var i = 0;
961
			for (var v in opts.src) {
962
				if (i++ == 0) {
963
					opts.value = v;
964
				}
965
			}
966
		}
967
968
		this.val = function(v) {
969
			if (!v && v!=='') {
970
				return hidden.val();
971
			} else {
972
				if (opts.src[v]) {
973
					hidden.val(v);
974
					updateLabel(v);
975
					if (list) {
976
						list.children().each(function() {
977
							if ($(this).attr('name') == v) {
978
								$(this).addClass('active');
979
							} else {
980
								$(this).removeClass('active');
981
							}
982
						});
983
					}
984
				}
985
				return this;
986
			}
987
		}
988
989
		// update label content
990
		function updateLabel(v) {
991
			var tpl = opts.labelTpl || opts.tpls[v] || opts.tpl;
992
			label.html(tpl.replace(/%val/g, v).replace(/%label/, opts.src[v])).children().attr({unselectable : 'on'});
993
		}
994
995
		// init "select"
996
		self.empty()
997
			.addClass(opts['class']+' rounded-3')
998
			.attr({unselectable : 'on'})
999
			.append(hidden)
1000
			.append(label)
1001
			.hover(
1002
				function() { $(this).addClass('hover') },
1003
				function() { $(this).removeClass('hover') }
1004
			)
1005
			.click(function(e) {
1006
				!list && init();
1007
				list.slideToggle();
1008
				// stupid ie inherit width from parent
1009
				if ($.browser.msie && !ieWidth) {
1010
					list.children().each(function() {
1011
						ieWidth = Math.max(ieWidth, $(this).width());
1012
					});
1013
					if (ieWidth > list.width()) {
1014
						list.width(ieWidth+40);
1015
					}
1016
				}
1017
			});
1018
1019
		this.val(opts.value);
1020
1021
		// create drop-down list
1022
		function init() {
1023
			// not ul because of ie is stupid with mouseleave in it :(
1024
			list = $('<div />')
1025
				.addClass(opts.listClass+' rounded-3')
1026
				.hide()
1027
				.appendTo(self.mouseleave(function(e) { list.slideUp(); }));
1028
1029
			for (var v in opts.src) {
1030
				var tpl = opts.tpls[v] || opts.tpl;
1031
				$('<div />')
1032
					.attr('name', v)
1033
					.append( $(tpl.replace(/%val/g, v).replace(/%label/g, opts.src[v])).attr({unselectable : 'on'}) )
1034
					.appendTo(list)
1035
					.hover(
1036
						function() { $(this).addClass('hover') },
1037
						function() { $(this).removeClass('hover') }
1038
					)
1039
					.click(function(e) {
1040
						e.stopPropagation();
1041
						e.preventDefault();
1042
1043
						var v = $(this).attr('name');
1044
						$self.val(v);
1045
						opts.select(v);
1046
						list.slideUp();
1047
					});
1048
			};
1049
1050
			var w = self.outerWidth();
1051
			if (list.width() < w) {
1052
				list.width(w);
1053
			}
1054
1055
			var h = list.height();
1056
			if (opts.maxHeight>0 && h>opts.maxHeight) {
1057
				list.height(opts.maxHeight);
1058
			}
1059
1060
			$self.val(hidden.val());
1061
		}
1062
1063
		return this;
1064
	}
1065
1066
	$.fn.elSelect.defaults = {
1067
		name      : 'el-select',
1068
		'class'   : 'el-select',
1069
		listClass : 'list',
1070
		labelTpl  : null,
1071
		tpl       : '<%val>%label</%val>',
1072
		tpls      : {},
1073
		value     : null,
1074
		src       : {},
1075
		select    : function(v) {  window.console &&  window.console.log && window.console.log('selected: '+v); },
1076
		maxHeight : 410
1077
	}
1078
1079
})(jQuery);
1080
/*
1081
 * elRTE - WSWING editor for web
1082
 *
1083
 * Usage:
1084
 * var opts = {
1085
 *	.... // see elRTE.options.js
1086
 * }
1087
 * var editor = new elRTE($('#my-id').get(0), opts)
1088
 * or
1089
 * $('#my-id').elrte(opts)
1090
 *
1091
 * $('#my-id) may be textarea or any DOM Element with text
1092
 *
1093
 * @author:    Dmitry Levashov (dio) dio@std42.ru
1094
 * Copyright: Studio 42, http://www.std42.ru
1095
 */
1096
(function($) {
1097
1098
elRTE = function(target, opts) {
1099
	if (!target || !target.nodeName) {
1100
		return alert('elRTE: argument "target" is not DOM Element');
1101
	}
1102
	var self     = this, html;
1103
	this.version = '1.1';
1104
	this.build   = '2010-09-20';
1105
	this.options = $.extend(true, {}, this.options, opts);
1106
	this.browser = $.browser;
1107
	this.target  = $(target);
1108
1109
	this.lang      = (''+this.options.lang).toLowerCase();
1110
	this._i18n     = new eli18n({textdomain : 'rte', messages : { rte : this.i18Messages[this.lang] || {}} });
1111
	this.rtl = !!(/^(ar|fa|he)$/.test(this.lang) && this.i18Messages[this.lang]);
1112
1113
	if (this.rtl) {
1114
		this.options.cssClass += ' el-rte-rtl';
1115
	}
1116
	this.toolbar   = $('<div class="toolbar"/>');
1117
	this.iframe    = document.createElement('iframe');
1118
	// this.source    = $('<textarea />').hide();
1119
	this.workzone  = $('<div class="workzone"/>').append(this.iframe).append(this.source);
1120
	this.statusbar = $('<div class="statusbar"/>');
1121
	this.tabsbar   = $('<div class="tabsbar"/>');
1122
	this.editor    = $('<div class="'+this.options.cssClass+'" />').append(this.toolbar).append(this.workzone).append(this.statusbar).append(this.tabsbar);
1123
1124
	this.doc     = null;
1125
	this.$doc    = null;
1126
	this.window  = null;
1127
1128
	this.utils  = new this.utils(this);
1129
	this.dom    = new this.dom(this);
1130
	this.filter = new this.filter(this)
1131
1132
	/**
1133
	 * Sync iframes/textareas height with workzone height
1134
	 *
1135
	 * @return void
1136
	 */
1137
	this.updateHeight = function() {
1138
		self.workzone.add(self.iframe).add(self.source).height(self.workzone.height());
1139
	}
1140
1141
	/**
1142
	 * Turn editor resizable on/off if allowed
1143
	 *
1144
	 * @param  Boolean
1145
	 * @return void
1146
	 **/
1147
	this.resizable = function(r) {
1148
		var self = this;
1149
		if (this.options.resizable && $.fn.resizable) {
1150
			if (r) {
1151
				this.editor.resizable({handles : 'se', alsoResize : this.workzone, minWidth :300, minHeight : 200 }).bind('resize', self.updateHeight);
1152
			} else {
1153
				this.editor.resizable('destroy').unbind('resize', self.updateHeight);
1154
			}
1155
		}
1156
	}
1157
1158
	/* attach editor to document */
1159
	this.editor.insertAfter(target);
1160
	/* init editor textarea */
1161
	var content = '';
1162
	if (target.nodeName == 'TEXTAREA') {
1163
		this.source = this.target;
1164
		this.source.insertAfter(this.iframe).hide();
1165
		content = this.target.val();
1166
	} else {
1167
		this.source = $('<textarea />').insertAfter(this.iframe).hide();
1168
		content = this.target.hide().html();
1169
	}
1170
	this.source.attr('name', this.target.attr('name')||this.target.attr('id'));
1171
	content = $.trim(content);
1172
	if (!content) {
1173
		content = ' ';
1174
	}
1175
1176
	/* add tabs */
1177
	if (this.options.allowSource) {
1178
		this.tabsbar.append('<div class="tab editor rounded-bottom-7 active">'+self.i18n('Editor')+'</div><div class="tab source rounded-bottom-7">'+self.i18n('Source')+'</div><div class="clearfix" style="clear:both"/>')
1179
			.children('.tab').click(function(e) {
1180
				if (!$(this).hasClass('active')) {
1181
					self.tabsbar.children('.tab').toggleClass('active');
1182
					self.workzone.children().toggle();
1183
1184
					if ($(this).hasClass('editor')) {
1185
						self.updateEditor();
1186
						self.window.focus();
1187
						self.ui.update(true);
1188
					} else {
1189
						self.updateSource();
1190
						self.source.focus();
1191
						if ($.browser.msie) {
1192
							// @todo
1193
						} else {
1194
							self.source[0].setSelectionRange(0, 0);
1195
						}
1196
						self.ui.disable();
1197
						self.statusbar.empty();
1198
1199
					}
1200
				}
1201
1202
			});
1203
	}
1204
1205
	this.window = this.iframe.contentWindow;
1206
	this.doc    = this.iframe.contentWindow.document;
1207
	this.$doc   = $(this.doc);
1208
1209
	/* put content into iframe */
1210
	html = '<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
1211
	$.each(self.options.cssfiles, function() {
1212
		html += '<link rel="stylesheet" type="text/css" href="'+this+'" />';
1213
	});
1214
	this.doc.open();
1215
	var s = this.filter.wysiwyg(content),
1216
		cl = this.rtl ? ' class="el-rte-rtl"' : '';
1217
	this.doc.write(self.options.doctype+html+'</head><body'+cl+'>'+(s)+'</body></html>');
1218
	this.doc.close();
1219
1220
	/* make iframe editable */
1221
	if ($.browser.msie) {
1222
		this.doc.body.contentEditable = true;
1223
	} else {
1224
		try { this.doc.designMode = "on"; }
1225
		catch(e) { }
1226
		this.doc.execCommand('styleWithCSS', false, this.options.styleWithCSS);
1227
	}
1228
1229
	if (this.options.height>0) {
1230
		this.workzone.height(this.options.height);
1231
1232
	}
1233
	this.updateHeight();
1234
	this.resizable(true);
1235
	this.window.focus();
1236
1237
	this.history = new this.history(this);
1238
1239
	/* init selection object */
1240
	this.selection = new this.selection(this);
1241
	/* init buttons */
1242
	this.ui = new this.ui(this);
1243
1244
1245
	/* bind updateSource to parent form submit */
1246
	this.target.parents('form').bind('submit', function(e) {
1247
		self.source.parents('form').find('[name="el-select"]').remove()
1248
		self.beforeSave();
1249
	});
1250
1251
	// on tab press - insert \t and prevent move focus
1252
	this.source.bind('keydown', function(e) {
1253
		if (e.keyCode == 9) {
1254
			e.preventDefault();
1255
1256
			if ($.browser.msie) {
1257
				var r = document.selection.createRange();
1258
				r.text = "\t"+r.text;
1259
				this.focus();
1260
			} else {
1261
				var before = this.value.substr(0, this.selectionStart),
1262
					after = this.value.substr(this.selectionEnd);
1263
				this.value = before+"\t"+after;
1264
				this.setSelectionRange(before.length+1, before.length+1);
1265
			}
1266
		}
1267
	});
1268
1269
	/* update buttons on click and keyup */
1270
	this.$doc.bind('mouseup', function() {
1271
		self.ui.update();
1272
	})
1273
	.bind('dragstart', function(e) {
1274
		e.preventDefault();
1275
		e.stopPropagation();
1276
	})
1277
	.bind('keyup', function(e) {
1278
		if ((e.keyCode >= 8 && e.keyCode <= 13) || (e.keyCode>=32 && e.keyCode<= 40) || e.keyCode == 46 || (e.keyCode >=96 && e.keyCode <= 111)) {
1279
			// self.log('keyup '+e.keyCode)
1280
			self.ui.update();
1281
		}
1282
	})
1283
	.bind('keydown', function(e) {
1284
		if ((e.metaKey || e.ctrlKey) && e.keyCode == 65) {
1285
			self.ui.update();
1286
		} else if (e.keyCode == 13) {
1287
			var n = self.selection.getNode();
1288
			// self.log(n)
1289
			if (self.dom.selfOrParent(n, /^PRE$/)) {
1290
				self.selection.insertNode(self.doc.createTextNode("\r\n"));
1291
				return false;
1292
			} else if ($.browser.safari && e.shiftKey) {
1293
				self.selection.insertNode(self.doc.createElement('br'))
1294
				return false;
1295
			}
1296
		}
1297
	})
1298
1299
	this.typing = false;
1300
	this.lastKey = null;
1301
1302
	this.$doc.bind('keydown', function(e) {
1303
		if ((e.keyCode>=48 && e.keyCode <=57) || e.keyCode==61 || e.keyCode == 109 || (e.keyCode>=65 && e.keyCode<=90) || e.keyCode==188 ||e.keyCode==190 || e.keyCode==191 || (e.keyCode>=219 && e.keyCode<=222)) {
1304
			if (!self.typing) {
1305
				self.history.add(true);
1306
			}
1307
			self.typing = true;
1308
			self.lastKey = null;
1309
		} else if (e.keyCode == 8 || e.keyCode == 46 || e.keyCode == 32 || e.keyCode == 13) {
1310
			if (e.keyCode != self.lastKey) {
1311
				self.history.add(true);
1312
			}
1313
			self.lastKey = e.keyCode;
1314
			self.typing = false;
1315
		}
1316
1317
	})
1318
	.bind('mouseup', function() {
1319
		self.typing = false;
1320
		self.lastKey = null;
1321
	})
1322
	.bind('paste', function(e) {
1323
		if (!self.options.allowPaste) {
1324
			// paste denied
1325
			e.stopPropagation();
1326
			e.preventDefault();
1327
		} else {
1328
			var n = $(self.dom.create('div'))[0],
1329
				r = self.doc.createTextNode('_');
1330
			self.history.add(true);
1331
			self.typing = true;
1332
			self.lastKey = null;
1333
			n.appendChild(r);
1334
			self.selection.deleteContents().insertNode(n);
1335
			self.selection.select(r);
1336
			setTimeout(function() {
1337
				if (n.parentNode) {
1338
					// clean sandbox content
1339
					$(n).html(self.filter.proccess('paste', $(n).html()));
1340
					r = n.lastChild;
1341
					self.dom.unwrap(n);
1342
					if (r) {
1343
						self.selection.select(r);
1344
						self.selection.collapse(false);
1345
					}
1346
				} else {
1347
					// smth wrong - clean all doc
1348
					n.parentNode && n.parentNode.removeChild(n);
1349
					self.val(self.filter.proccess('paste', self.filter.wysiwyg2wysiwyg($(self.doc.body).html())));
1350
					self.selection.select(self.doc.body.firstChild);
1351
					self.selection.collapse(true);
1352
				}
1353
				$(self.doc.body).mouseup(); // to activate history buutons
1354
			}, 15);
1355
		}
1356
	});
1357
1358
	if ($.browser.msie) {
1359
		this.$doc.bind('keyup', function(e) {
1360
			if (e.keyCode == 86 && (e.metaKey||e.ctrlKey)) {
1361
				self.history.add(true);
1362
				self.typing = true;
1363
				self.lastKey = null;
1364
				self.selection.saveIERange();
1365
				self.val(self.filter.proccess('paste', self.filter.wysiwyg2wysiwyg($(self.doc.body).html())));
1366
				self.selection.restoreIERange();
1367
				$(self.doc.body).mouseup();
1368
				this.ui.update();
1369
			}
1370
		});
1371
	}
1372
1373
	if ($.browser.safari) {
1374
		this.$doc.bind('click', function(e) {
1375
			$(self.doc.body).find('.elrte-webkit-hl').removeClass('elrte-webkit-hl');
1376
			if (e.target.nodeName == 'IMG') {
1377
				$(e.target).addClass('elrte-webkit-hl');
1378
			}
1379
		}).bind('keyup', function(e) {
1380
			$(self.doc.body).find('.elrte-webkit-hl').removeClass('elrte-webkit-hl');
1381
		})
1382
	}
1383
1384
	// this.resizable(true)
1385
	this.window.focus();
1386
	// this.log(this.editor.parents('form').find('[name="el-select"]'))
1387
1388
1389
}
1390
1391
/**
1392
 * Return message translated to selected language
1393
 *
1394
 * @param  string  msg  message text in english
1395
 * @return string
1396
 **/
1397
elRTE.prototype.i18n = function(msg) {
1398
	return this._i18n.translate(msg);
1399
}
1400
1401
1402
1403
/**
1404
 * Display editor
1405
 *
1406
 * @return void
1407
 **/
1408
elRTE.prototype.open = function() {
1409
	this.editor.show();
1410
}
1411
1412
/**
1413
 * Hide editor and display elements on wich editor was created
1414
 *
1415
 * @return void
1416
 **/
1417
elRTE.prototype.close = function() {
1418
	this.editor.hide();
1419
}
1420
1421
elRTE.prototype.updateEditor = function() {
1422
	this.val(this.source.val());
1423
}
1424
1425
elRTE.prototype.updateSource = function() {
1426
	this.source.val(this.filter.source($(this.doc.body).html()));
1427
}
1428
1429
/**
1430
 * Return edited text
1431
 *
1432
 * @return String
1433
 **/
1434
elRTE.prototype.val = function(v) {
1435
	if (typeof(v) == 'string') {
1436
		v = ''+v;
1437
		if (this.source.is(':visible')) {
1438
			this.source.val(this.filter.source2source(v));
1439
		} else {
1440
			if ($.browser.msie) {
1441
				this.doc.body.innerHTML = '<br />'+this.filter.wysiwyg(v);
1442
				this.doc.body.removeChild(this.doc.body.firstChild);
1443
			} else {
1444
				this.doc.body.innerHTML = this.filter.wysiwyg(v);
1445
			}
1446
1447
		}
1448
	} else {
1449
		if (this.source.is(':visible')) {
1450
			return this.filter.source2source(this.source.val());
1451
		} else {
1452
			return this.filter.source($(this.doc.body).html());
1453
		}
1454
	}
1455
}
1456
1457
elRTE.prototype.beforeSave = function() {
1458
	this.source.val(this.val()||'');
1459
}
1460
1461
/**
1462
 * Submit form
1463
 *
1464
 * @return void
1465
 **/
1466
elRTE.prototype.save = function() {
1467
	this.beforeSave();
1468
	this.editor.parents('form').submit();
1469
}
1470
1471
elRTE.prototype.log = function(msg) {
1472
	if (window.console && window.console.log) {
1473
		window.console.log(msg);
1474
	}
1475
1476
}
1477
1478
elRTE.prototype.i18Messages = {};
1479
1480
$.fn.elrte = function(o, v) {
1481
	var cmd = typeof(o) == 'string' ? o : '', ret;
1482
1483
	this.each(function() {
1484
		if (!this.elrte) {
1485
			this.elrte = new elRTE(this, typeof(o) == 'object' ? o : {});
1486
		}
1487
		switch (cmd) {
1488
			case 'open':
1489
			case 'show':
1490
				this.elrte.open();
1491
				break;
1492
			case 'close':
1493
			case 'hide':
1494
				this.elrte.close();
1495
				break;
1496
			case 'updateSource':
1497
				this.elrte.updateSource();
1498
				break;
1499
		}
1500
	});
1501
1502
	if (cmd == 'val') {
1503
		if (!this.length) {
1504
			return '';
1505
		} else if (this.length == 1) {
1506
			return v ? this[0].elrte.val(v) : this[0].elrte.val();
1507
		} else {
1508
			ret = {}
1509
			this.each(function() {
1510
				ret[this.elrte.source.attr('name')] = this.elrte.val();
1511
			});
1512
			return ret;
1513
		}
1514
	}
1515
	return this;
1516
}
1517
1518
})(jQuery);
1519
/*
1520
 * DOM utilites for elRTE
1521
 *
1522
 * @author:    Dmitry Levashov (dio) dio@std42.ru
1523
 */
1524
(function($) {
1525
elRTE.prototype.dom = function(rte) {
1526
	this.rte = rte;
1527
	var self = this;
1528
	this.regExp = {
1529
		textNodes         : /^(A|ABBR|ACRONYM|ADDRESS|B|BDO|BIG|BLOCKQUOTE|CAPTION|CENTER|CITE|CODE|DD|DEL|DFN|DIV|DT|EM|FIELDSET|FONT|H[1-6]|I|INS|KBD|LABEL|LEGEND|LI|MARQUEE|NOBR|NOEMBED|P|PRE|Q|SAMP|SMALL|SPAN|STRIKE|STRONG|SUB|SUP|TD|TH|TT|VAR)$/,
1530
		textContainsNodes : /^(A|ABBR|ACRONYM|ADDRESS|B|BDO|BIG|BLOCKQUOTE|CAPTION|CENTER|CITE|CODE|DD|DEL|DFN|DIV|DL|DT|EM|FIELDSET|FONT|H[1-6]|I|INS|KBD|LABEL|LEGEND|LI|MARQUEE|NOBR|NOEMBED|OL|P|PRE|Q|SAMP|SMALL|SPAN|STRIKE|STRONG|SUB|SUP|TABLE|THEAD|TBODY|TFOOT|TD|TH|TR|TT|UL|VAR)$/,
1531
		block             : /^(APPLET|BLOCKQUOTE|BR|CAPTION|CENTER|COL|COLGROUP|DD|DIV|DL|DT|H[1-6]|EMBED|FIELDSET|LI|MARQUEE|NOBR|OBJECT|OL|P|PRE|TABLE|THEAD|TBODY|TFOOT|TD|TH|TR|UL)$/,
1532
		selectionBlock    : /^(APPLET|BLOCKQUOTE|BR|CAPTION|CENTER|COL|COLGROUP|DD|DIV|DL|DT|H[1-6]|EMBED|FIELDSET|LI|MARQUEE|NOBR|OBJECT|OL|P|PRE|TD|TH|TR|UL)$/,
1533
		header            : /^H[1-6]$/,
1534
		formElement       : /^(FORM|INPUT|HIDDEN|TEXTAREA|SELECT|BUTTON)$/
1535
	};
1536
1537
	/********************************************************/
1538
	/*                      Утилиты                         */
1539
	/********************************************************/
1540
1541
	/**
1542
	 * Возвращает body редактируемого документа
1543
	 *
1544
	 * @return Element
1545
	 **/
1546
	this.root = function() {
1547
		return this.rte.body;
1548
	}
1549
1550
	this.create = function(t) {
1551
		return this.rte.doc.createElement(t);
1552
	}
1553
1554
	/**
1555
	 * Return node for bookmark with unique ID
1556
	 *
1557
	 * @return DOMElement
1558
	 **/
1559
	this.createBookmark = function() {
1560
		var b = this.rte.doc.createElement('span');
1561
		b.id = 'elrte-bm-'+Math.random().toString().substr(2);
1562
		$(b).addClass('elrtebm');
1563
		return b;
1564
	}
1565
1566
	/**
1567
	 * Вовращает индекс элемента внутри родителя
1568
	 *
1569
	 * @param  Element n  нода
1570
	 * @return integer
1571
	 **/
1572
	this.indexOf = function(n) {
1573
		var ndx = 0;
1574
		n = $(n);
1575
		while ((n = n.prev()) && n.length) {
1576
			ndx++;
1577
		}
1578
		return ndx;
1579
	}
1580
1581
	/**
1582
	 * Вовращает значение аттрибута в нижнем регистре (ох уж этот IE)
1583
	 *
1584
	 * @param  Element n  нода
1585
	 * @param  String  attr имя аттрибута
1586
	 * @return string
1587
	 **/
1588
	this.attr = function(n, attr) {
1589
		var v = '';
1590
		if (n.nodeType == 1) {
1591
			v = $(n).attr(attr);
1592
			if (v && attr != 'src' && attr != 'href') {
1593
				v = v.toString().toLowerCase();
1594
			}
1595
		}
1596
		return v||'';
1597
	}
1598
1599
	/**
1600
	 * Вовращает ближайший общий контейнер для 2-х эл-тов
1601
	 *
1602
	 * @param  Element n  нода1
1603
	 * @param  Element n  нода2
1604
	 * @return Element
1605
	 **/
1606
	this.findCommonAncestor = function(n1, n2) {
1607
		if (!n1 || !n2) {
1608
			return this.rte.log('dom.findCommonAncestor invalid arguments');
1609
		}
1610
		if (n1 == n2) {
1611
			return n1;
1612
		} else if (n1.nodeName == 'BODY' || n2.nodeName == 'BODY') {
1613
			return this.rte.doc.body;
1614
		}
1615
		var p1 = $(n1).parents(), p2 = $(n2).parents(), l  = p2.length-1, c  = p2[l];
1616
		for (var i = p1.length - 1; i >= 0; i--, l--){
1617
			if (p1[i] == p2[l]) {
1618
				c = p1[i];
1619
			} else {
1620
				break;
1621
			}
1622
		};
1623
		return c;
1624
	}
1625
	/**
1626
	 * Вовращает TRUE, если нода пустая
1627
	 * пустой считаем ноды:
1628
	 *  - текстовые эл-ты, содержащие пустую строку или тег br
1629
	 *  - текстовые ноды с пустой строкой
1630
	 *
1631
	 * @param  DOMElement n  нода
1632
	 * @return bool
1633
	 **/
1634
	this.isEmpty = function(n) {
1635
		if (n.nodeType == 1) {
1636
			return this.regExp.textNodes.test(n.nodeName) ? $.trim($(n).text()).length == 0 : false;
1637
		} else if (n.nodeType == 3) {
1638
			return /^(TABLE|THEAD|TFOOT|TBODY|TR|UL|OL|DL)$/.test(n.parentNode.nodeName)
1639
				|| n.nodeValue == ''
1640
				|| ($.trim(n.nodeValue).length== 0 && !(n.nextSibling && n.previousSibling && n.nextSibling.nodeType==1 && n.previousSibling.nodeType==1 && !this.regExp.block.test(n.nextSibling.nodeName) && !this.regExp.block.test(n.previousSibling.nodeName) ));
1641
		}
1642
		return true;
1643
	}
1644
1645
	/********************************************************/
1646
	/*                  Перемещение по DOM                  */
1647
	/********************************************************/
1648
1649
	/**
1650
	 * Вовращает следующую соседнюю ноду (не включаются текстовые ноды не создающие значимые пробелы между инлайн элементами)
1651
	 *
1652
	 * @param  DOMElement n  нода
1653
	 * @return DOMElement
1654
	 **/
1655
	this.next = function(n) {
1656
		while (n.nextSibling && (n = n.nextSibling)) {
1657
			if (n.nodeType == 1 || (n.nodeType == 3 && !this.isEmpty(n))) {
1658
				return n;
1659
			}
1660
		}
1661
		return null;
1662
	}
1663
1664
	/**
1665
	 * Вовращает предыдующую соседнюю ноду (не включаются текстовые ноды не создающие значимые пробелы между инлайн элементами)
1666
	 *
1667
	 * @param  DOMElement n  нода
1668
	 * @return DOMElement
1669
	 **/
1670
	this.prev = function(n) {
1671
		while (n.previousSibling && (n = n.previousSibling)) {
1672
			if (n.nodeType == 1 || (n.nodeType ==3 && !this.isEmpty(n))) {
1673
				return n;
1674
			}
1675
		}
1676
		return null;
1677
	}
1678
1679
	this.isPrev = function(n, prev) {
1680
		while ((n = this.prev(n))) {
1681
			if (n == prev) {
1682
				return true;
1683
			}
1684
		}
1685
		return false;
1686
	}
1687
1688
	/**
1689
	 * Вовращает все следующие соседнии ноды (не включаются текстовые ноды не создающие значимые пробелы между инлайн элементами)
1690
	 *
1691
	 * @param  DOMElement n  нода
1692
	 * @return Array
1693
	 **/
1694
	this.nextAll = function(n) {
1695
		var ret = [];
1696
		while ((n = this.next(n))) {
1697
			ret.push(n);
1698
		}
1699
		return ret;
1700
	}
1701
1702
	/**
1703
	 * Вовращает все предыдующие соседнии ноды (не включаются текстовые ноды не создающие значимые пробелы между инлайн элементами)
1704
	 *
1705
	 * @param  DOMElement n  нода
1706
	 * @return Array
1707
	 **/
1708
	this.prevAll = function(n) {
1709
		var ret = [];
1710
		while ((n = this.prev(n))) {
1711
			ret.push(n);
1712
		}
1713
		return ret;
1714
	}
1715
1716
	/**
1717
	 * Вовращает все следующие соседнии inline ноды (не включаются текстовые ноды не создающие значимые пробелы между инлайн элементами)
1718
	 *
1719
	 * @param  DOMElement n  нода
1720
	 * @return Array
1721
	 **/
1722
	this.toLineEnd = function(n) {
1723
		var ret = [];
1724
		while ((n = this.next(n)) && n.nodeName != 'BR' && n.nodeName != 'HR' && this.isInline(n)) {
1725
			ret.push(n);
1726
		}
1727
		return ret;
1728
	}
1729
1730
	/**
1731
	 * Вовращает все предыдующие соседнии inline ноды (не включаются текстовые ноды не создающие значимые пробелы между инлайн элементами)
1732
	 *
1733
	 * @param  DOMElement n  нода
1734
	 * @return Array
1735
	 **/
1736
	this.toLineStart = function(n) {
1737
		var ret = [];
1738
		while ((n = this.prev(n)) && n.nodeName != 'BR' && n.nodeName != 'HR' && this.isInline(n) ) {
1739
			ret.unshift(n);
1740
		}
1741
		return ret;
1742
	}
1743
1744
	/**
1745
	 * Вовращает TRUE, если нода - первый непустой эл-т внутри родителя
1746
	 *
1747
	 * @param  Element n  нода
1748
	 * @return bool
1749
	 **/
1750
	this.isFirstNotEmpty = function(n) {
1751
		while ((n = this.prev(n))) {
1752
			if (n.nodeType == 1 || (n.nodeType == 3 && $.trim(n.nodeValue)!='' ) ) {
1753
				return false;
1754
			}
1755
		}
1756
		return true;
1757
	}
1758
1759
	/**
1760
	 * Вовращает TRUE, если нода - последний непустой эл-т внутри родителя
1761
	 *
1762
	 * @param  Element n  нода
1763
	 * @return bool
1764
	 **/
1765
	this.isLastNotEmpty = function(n) {
1766
		while ((n = this.next(n))) {
1767
			if (!this.isEmpty(n)) {
1768
				return false;
1769
			}
1770
		}
1771
		return true;
1772
	}
1773
1774
	/**
1775
	 * Вовращает TRUE, если нода - единственный непустой эл-т внутри родителя
1776
	 *
1777
	 * @param  DOMElement n  нода
1778
	 * @return bool
1779
	 **/
1780
	this.isOnlyNotEmpty = function(n) {
1781
		return this.isFirstNotEmpty(n) && this.isLastNotEmpty(n);
1782
	}
1783
1784
	/**
1785
	 * Вовращает последний непустой дочерний эл-т ноды или FALSE
1786
	 *
1787
	 * @param  Element n  нода
1788
	 * @return Element
1789
	 **/
1790
	this.findLastNotEmpty = function(n) {
1791
		this.rte.log('findLastNotEmpty Who is here 0_o');
1792
		if (n.nodeType == 1 && (l = n.lastChild)) {
1793
			if (!this.isEmpty(l)) {
1794
				return l;
1795
			}
1796
			while (l.previousSibling && (l = l.previousSibling)) {
1797
				if (!this.isEmpty(l)) {
1798
					return l;
1799
				}
1800
			}
1801
		}
1802
		return false;
1803
	}
1804
1805
	/**
1806
	 * Возвращает TRUE, если нода "inline"
1807
	 *
1808
	 * @param  DOMElement n  нода
1809
	 * @return bool
1810
	 **/
1811
	this.isInline = function(n) {
1812
		if (n.nodeType == 3) {
1813
			return true;
1814
		} else if (n.nodeType == 1) {
1815
			n = $(n);
1816
			var d = n.css('display');
1817
			var f = n.css('float');
1818
			return d == 'inline' || d == 'inline-block' || f == 'left' || f == 'right';
1819
		}
1820
		return true;
1821
	}
1822
1823
1824
	/********************************************************/
1825
	/*                  Поиск элементов                     */
1826
	/********************************************************/
1827
1828
	this.is = function(n, f) {
1829
		if (n && n.nodeName) {
1830
			if (typeof(f) == 'string') {
1831
				f = this.regExp[f]||/.?/;
1832
			}
1833
			if (f instanceof RegExp && n.nodeName) {
1834
				return f.test(n.nodeName);
1835
			} else if (typeof(f) == 'function') {
1836
				return f(n);
1837
			}
1838
		}
1839
1840
		return false;
1841
	}
1842
1843
	/**
1844
	 * Вовращает элемент(ы) отвечающие условиям поиска
1845
	 *
1846
	 * @param  DOMElement||Array  n       нода
1847
	 * @param  RegExp||String     filter  фильтр условия поиска (RegExp или имя ключа this.regExp или *)
1848
	 * @return DOMElement||Array
1849
	 **/
1850
	this.filter = function(n, filter) {
1851
		var ret = [], i;
1852
		if (!n.push) {
1853
			return this.is(n, filter) ? n : null;
1854
		}
1855
		for (i=0; i < n.length; i++) {
1856
			if (this.is(n[i], filter)) {
1857
				ret.push(n[i]);
1858
			}
1859
		};
1860
		return ret;
1861
	}
1862
1863
1864
	/**
1865
	 * Вовращает массив родительских элементов, отвечающих условиям поиска
1866
	 *
1867
	 * @param  DOMElement      n  нода, родителей, которой ищем
1868
	 * @param  RegExp||String  filter   фильтр условия поиска (RegExp или имя ключа this.regExp или *)
1869
	 * @return Array
1870
	 **/
1871
	this.parents = function(n, filter) {
1872
		var ret = [];
1873
1874
		while (n && (n = n.parentNode) && n.nodeName != 'BODY' && n.nodeName != 'HTML') {
1875
			if (this.is(n, filter)) {
1876
				ret.push(n);
1877
			}
1878
		}
1879
		return ret;
1880
	}
1881
1882
	/**
1883
	 * Вовращает ближайший родительский эл-т, отвечающий условиям поиска
1884
	 *
1885
	 * @param  DOMElement     n  нода, родителя, которой ищем
1886
	 * @param  RegExp||String f   фильтр условия поиска (RegExp или имя ключа this.regExp или *)
1887
	 * @return DOMElement
1888
	 **/
1889
	this.parent = function(n, f) {
1890
		return this.parents(n, f)[0] || null;
1891
	}
1892
1893
	/**
1894
	 * Вовращает или саму ноду или ее ближайшего родителя, если выполняются условия sf для самой ноды или pf для родителя
1895
	 *
1896
	 * @param  DOMElement     n  нода, родителя, которой ищем
1897
	 * @param  RegExp||String sf   фильтр условия для самой ноды
1898
	* @param  RegExp||String  pf   фильтр условия для родителя
1899
	 * @return DOMElement
1900
	 **/
1901
	this.selfOrParent = function(n, sf, pf) {
1902
		return this.is(n, sf) ? n : this.parent(n, pf||sf);
1903
	}
1904
1905
	/**
1906
	 * Вовращает родительскую ноду - ссылку
1907
	 *
1908
	 * @param  Element n  нода
1909
	 * @return Element
1910
	 **/
1911
	this.selfOrParentLink = function(n) {
1912
		n = this.selfOrParent(n, /^A$/);
1913
		return n && n.href ? n : null;
1914
	}
1915
1916
	/**
1917
	 * Вовращает TRUE, если нода -  anchor
1918
	 *
1919
	 * @param  Element n  нода
1920
	 * @return bool
1921
	 **/
1922
	this.selfOrParentAnchor = function(n) {
1923
		n = this.selfOrParent(n, /^A$/);
1924
		return n && !n.href && n.name ? n : null;
1925
	}
1926
1927
	/**
1928
	 * Вовращает массив дочерних ссылок
1929
	 *
1930
	 * @param  DOMElement n  нода
1931
	 * @return Array
1932
	 **/
1933
	this.childLinks = function(n) {
1934
		var res = [];
1935
		$('a[href]', n).each(function() { res.push(this); });
1936
		return res;
1937
	}
1938
1939
	this.selectionHas = function(f) {
1940
		var n = this.rte.selection.cloneContents(), i;
1941
		if (n && n.childNodes && n.childNodes.length) {
1942
			for (i=0; i < n.childNodes.length; i++) {
1943
				if (typeof(f) == 'function') {
1944
					if (f(n.childNodes[i])) {
1945
						return true;
1946
					}
1947
				} else if (n instanceof RegExp) {
1948
					if (f.test(n.childNodes[i].nodeName)) {
1949
						return true;
1950
					}
1951
				}
1952
			};
1953
		}
1954
1955
		return false;
1956
	}
1957
	/********************************************************/
1958
	/*                    Изменения DOM                     */
1959
	/********************************************************/
1960
1961
	/**
1962
	 * Оборачивает одну ноду другой
1963
	 *
1964
	 * @param  DOMElement n  оборачиваемая нода
1965
	 * @param  DOMElement w  нода обертка или имя тега
1966
	 * @return DOMElement
1967
	 **/
1968
	this.wrap = function(n, w) {
1969
		n = $.isArray(n) ? n : [n];
1970
		w = w.nodeName ? w : this.create(w);
1971
1972
		if (n[0] && n[0].nodeType && n[0].parentNode) {
1973
			w = n[0].parentNode.insertBefore(w, n[0]);
1974
			$(n).each(function() {
1975
				if (this!=w) {
1976
					w.appendChild(this);
1977
				}
1978
			});
1979
		}
1980
1981
		return w;
1982
	}
1983
1984
	/**
1985
	 * Replace node with its contents
1986
	 *
1987
	 * @param  DOMElement n node
1988
	 * @return void
1989
	 **/
1990
	this.unwrap = function(n) {
1991
		while (n.firstChild) {
1992
			n.parentNode.insertBefore(n.firstChild, n);
1993
		}
1994
		n.parentNode.removeChild(n);
1995
	}
1996
1997
	/**
1998
	 * Оборачивает все содержимое ноды
1999
	 *
2000
	 * @param  DOMElement n  оборачиваемая нода
2001
	 * @param  DOMElement w  нода обертка или имя тега
2002
	 * @return DOMElement
2003
	 **/
2004
	this.wrapContents = function(n, w) {
2005
		w = w.nodeName ? w : this.create(w);
2006
		for (var i=0; i < n.childNodes.length; i++) {
2007
			w.appendChild(n.childNodes[i]);
2008
		};
2009
		n.appendChild(w);
2010
		return w;
2011
	}
2012
2013
	this.cleanNode = function(n) {
2014
2015
		if (n.nodeType != 1) {
2016
			return;
2017
		}
2018
		if (/^(P|LI)$/.test(n.nodeName) && (l = this.findLastNotEmpty(n)) && l.nodeName == 'BR') {
2019
			$(l).remove();
2020
		}
2021
		$n = $(n);
2022
		$n.children().each(function() {
2023
			this.cleanNode(this);
2024
		});
2025
		if (n.nodeName != 'BODY' && !/^(TABLE|TR|TD)$/.test(n) && this.isEmpty(n)) {
2026
			return $n.remove();
2027
		}
2028
		if ($n.attr('style') === '') {
2029
			$n.removeAttr('style');
2030
		}
2031
		if (this.rte.browser.safari && $n.hasClass('Apple-span')) {
2032
			$n.removeClass('Apple-span');
2033
		}
2034
		if (n.nodeName == 'SPAN' && !$n.attr('style') && !$n.attr('class') && !$n.attr('id')) {
2035
			$n.replaceWith($n.html());
2036
		}
2037
	}
2038
2039
	this.cleanChildNodes = function(n) {
2040
		var cmd = this.cleanNode;
2041
		$(n).children().each(function() { cmd(this); });
2042
	}
2043
2044
	/********************************************************/
2045
	/*                       Таблицы                        */
2046
	/********************************************************/
2047
2048
	this.tableMatrix = function(n) {
2049
		var mx = [];
2050
		if (n && n.nodeName == 'TABLE') {
2051
			var max = 0;
2052
			function _pos(r) {
2053
				for (var i=0; i<=max; i++) {
2054
					if (!mx[r][i]) {
2055
						return i;
2056
					}
2057
				};
2058
			}
2059
2060
			$(n).find('tr').each(function(r) {
2061
				if (!$.isArray(mx[r])) {
2062
					mx[r] = [];
2063
				}
2064
2065
				$(this).children('td,th').each(function() {
2066
					var w = parseInt($(this).attr('colspan')||1);
2067
					var h = parseInt($(this).attr('rowspan')||1);
2068
					var i = _pos(r);
2069
					for (var y=0; y<h; y++) {
2070
						for (var x=0; x<w; x++) {
2071
							var _y = r+y;
2072
							if (!$.isArray(mx[_y])) {
2073
								mx[_y] = [];
2074
							}
2075
							var d = x==0 && y==0 ? this : (y==0 ? x : "-");
2076
							mx[_y][i+x] = d;
2077
						}
2078
					};
2079
					max= Math.max(max, mx[r].length);
2080
				});
2081
			});
2082
		}
2083
		return mx;
2084
	}
2085
2086
	this.indexesOfCell = function(n, tbm) {
2087
		for (var rnum=0; rnum < tbm.length; rnum++) {
2088
			for (var cnum=0; cnum < tbm[rnum].length; cnum++) {
2089
				if (tbm[rnum][cnum] == n) {
2090
					return [rnum, cnum];
2091
				}
2092
2093
			};
2094
		};
2095
	}
2096
2097
	this.fixTable = function(n) {
2098
		if (n && n.nodeName == 'TABLE') {
2099
			var tb = $(n);
2100
			//tb.find('tr:empty').remove();
2101
			var mx = this.tableMatrix(n);
2102
			var x  = 0;
2103
			$.each(mx, function() {
2104
				x = Math.max(x, this.length);
2105
			});
2106
			if (x==0) {
2107
				return tb.remove();
2108
			}
2109
			// for (var i=0; i<mx.length; i++) {
2110
			// 	this.rte.log(mx[i]);
2111
			// }
2112
2113
			for (var r=0; r<mx.length; r++) {
2114
				var l = mx[r].length;
2115
				//this.rte.log(r+' : '+l)
2116
2117
				if (l==0) {
2118
					//this.rte.log('remove: '+tb.find('tr').eq(r))
2119
					tb.find('tr').eq(r).remove();
2120
//					tb.find('tr').eq(r).append('<td>remove</td>')
2121
				} else if (l<x) {
2122
					var cnt = x-l;
2123
					var row = tb.find('tr').eq(r);
2124
					for (i=0; i<cnt; i++) {
2125
						row.append('<td>&nbsp;</td>');
2126
					}
2127
				}
2128
			}
2129
2130
		}
2131
	}
2132
2133
	this.tableColumn = function(n, ext, fix) {
2134
		n      = this.selfOrParent(n, /^TD|TH$/);
2135
		var tb = this.selfOrParent(n, /^TABLE$/);
2136
		ret    = [];
2137
		info   = {offset : [], delta : []};
2138
		if (n && tb) {
2139
			fix && this.fixTable(tb);
2140
			var mx = this.tableMatrix(tb);
2141
			var _s = false;
2142
			var x;
2143
			for (var r=0; r<mx.length; r++) {
2144
				for (var _x=0; _x<mx[r].length; _x++) {
2145
					if (mx[r][_x] == n) {
2146
						x = _x;
2147
						_s = true;
2148
						break;
2149
					}
2150
				}
2151
				if (_s) {
2152
					break;
2153
				}
2154
			}
2155
2156
			// this.rte.log('matrix');
2157
			// for (var i=0; i<mx.length; i++) {
2158
			// 	this.rte.log(mx[i]);
2159
			// }
2160
			if (x>=0) {
2161
				for(var r=0; r<mx.length; r++) {
2162
					var tmp = mx[r][x]||null;
2163
					if (tmp) {
2164
						if (tmp.nodeName) {
2165
							ret.push(tmp);
2166
							if (ext) {
2167
								info.delta.push(0);
2168
								info.offset.push(x);
2169
							}
2170
						} else {
2171
							var d = parseInt(tmp);
2172
							if (!isNaN(d) && mx[r][x-d] && mx[r][x-d].nodeName) {
2173
								ret.push(mx[r][x-d]);
2174
								if (ext) {
2175
									info.delta.push(d);
2176
									info.offset.push(x);
2177
								}
2178
							}
2179
						}
2180
					}
2181
				}
2182
			}
2183
		}
2184
		return !ext ? ret : {column : ret, info : info};
2185
	}
2186
}
2187
2188
})(jQuery);
2189
(function($) {
2190
	/**
2191
	 * @class Filter - clean editor content
2192
	 * @param elRTE editor instance
2193
	 * @author Dmitry (dio) Levashov, dio@std42.ru
2194
	 */
2195
	elRTE.prototype.filter = function(rte) {
2196
		var self = this,
2197
			n = $('<span/>').addClass('elrtetesturl').appendTo(document.body)[0];
2198
		// media replacement image base url
2199
		this.url = (typeof(n.currentStyle )!= "undefined" ? n.currentStyle['backgroundImage'] : document.defaultView.getComputedStyle(n, null)['backgroundImage']).replace(/^url\((['"]?)([\s\S]+\/)[\s\S]+\1\)$/i, "$2");
2200
		$(n).remove();
2201
2202
		this.rte = rte;
2203
		// flag - return xhtml tags?
2204
		this.xhtml = /xhtml/i.test(rte.options.doctype);
2205
		// boolean attributes
2206
		this.boolAttrs = rte.utils.makeObject('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'.split(','));
2207
		// tag regexp
2208
		this.tagRegExp = /<(\/?)([\w:]+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*\/?>/g;
2209
		// opened tag regexp
2210
		this.openTagRegExp = /<([\w:]+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*\/?>/g;
2211
		// attributes regexp
2212
		this.attrRegExp = /(\w+)(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^\s]+))?/g;
2213
		// script tag regexp
2214
		this.scriptRegExp = /<script([^>]*)>([\s\S]*?)<\/script>/gi;
2215
		// style tag regexp
2216
		this.styleRegExp = /(<style([^>]*)>[\s\S]*?<\/style>)/gi;
2217
		// link tag regexp
2218
		this.linkRegExp = /(<link([^>]+)>)/gi;
2219
		// cdata regexp
2220
		this.cdataRegExp = /<!\[CDATA\[([\s\S]+)\]\]>/g;
2221
		// object tag regexp
2222
		this.objRegExp = /<object([^>]*)>([\s\S]*?)<\/object>/gi;
2223
		// embed tag regexp
2224
		this.embRegExp = /<(embed)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*>/gi;
2225
		// param tag regexp
2226
		this.paramRegExp = /<(param)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*>/gi;
2227
		this.vimeoRegExp = /<(iframe)\s+([^>]*src\s*=\s*"http:\/\/[^"]+vimeo\.com\/\w+[^>]*)>([\s\S]*?)<\/iframe>/gi;
2228
		// yandex maps regexp
2229
		this.yMapsRegExp = /<div\s+([^>]*id\s*=\s*('|")?YMapsID[^>]*)>/gi;
2230
		// google maps regexp
2231
		this.gMapsRegExp = /<iframe\s+([^>]*src\s*=\s*"http:\/\/maps\.google\.\w+[^>]*)>([\s\S]*?)<\/iframe>/gi;
2232
		// video hostings url regexp
2233
		this.videoHostRegExp = /^(http:\/\/[\w\.]*)?(youtube|vimeo|rutube).*/i;
2234
		// elrte services classes regexp
2235
		this.serviceClassRegExp = /<(\w+)([^>]*class\s*=\s*"[^>]*elrte-[^>]*)>\s*(<\/\1>)?/gi;
2236
		this.pagebreakRegExp = /<(\w+)([^>]*style\s*=\s*"[^>]*page-break[^>]*)>\s*(<\/\1>)?/gi;
2237
2238
		this.pbRegExp = new RegExp('<!-- pagebreak -->', 'gi');
2239
		// allowed tags
2240
		this.allowTags = rte.options.allowTags.length ? rte.utils.makeObject(rte.options.allowTags) : null;
2241
		// denied tags
2242
		this.denyTags = rte.options.denyTags.length ? rte.utils.makeObject(rte.options.denyTags) : null;
2243
		// deny attributes
2244
		this.denyAttr = rte.options.denyAttr ? rte.utils.makeObject(rte.options.denyAttr) : null;
2245
		// deny attributes for pasted html
2246
		this.pasteDenyAttr = rte.options.pasteDenyAttr ? rte.utils.makeObject(rte.options.pasteDenyAttr) : null;
2247
		// font sizes to convert size attr into css property
2248
		this.fontSize = ['medium', 'xx-small', 'small', 'medium','large','x-large','xx-large' ];
2249
		// font families regexp to detect family by font name
2250
		this.fontFamily = {
2251
			'sans-serif' : /^(arial|tahoma|verdana)$/i,
2252
			'serif'      : /^(times|times new roman)$/i,
2253
			'monospace'  : /^courier$/i
2254
		}
2255
		// scripts storage
2256
		this.scripts = {};
2257
		// cached chains of rules
2258
		this._chains = {};
2259
2260
		// cache chains
2261
		$.each(this.chains, function(n) {
2262
			self._chains[n] = [];
2263
			$.each(this, function(i, r) {
2264
				typeof(self.rules[r]) == 'function' && self._chains[n].push(self.rules[r]);
2265
			});
2266
		});
2267
2268
		/**
2269
		 * filtering through required chain
2270
		 *
2271
		 * @param  String  chain name
2272
		 * @param  String  html-code
2273
		 * @return String
2274
		 **/
2275
		this.proccess = function(chain, html) {
2276
			// remove whitespace at the begin and end
2277
			html = $.trim(html).replace(/^\s*(&nbsp;)+/gi, '').replace(/(&nbsp;|<br[^>]*>)+\s*$/gi, '');
2278
			// pass html through chain
2279
			$.each(this._chains[chain]||[], function() {
2280
				html = this.call(self, html);
2281
			});
2282
			return html.replace(/\t/g, '  ').replace(/\r/g, '').replace(/\s*\n\s*\n+/g, "\n")+'  ';
2283
		}
2284
2285
		/**
2286
		 * wrapper for "wysiwyg" chain filtering
2287
		 *
2288
		 * @param  String
2289
		 * @return String
2290
		 **/
2291
		this.wysiwyg = function(html) {
2292
			return this.proccess('wysiwyg', html);
2293
		}
2294
2295
		/**
2296
		 * wrapper for "source" chain filtering
2297
		 *
2298
		 * @param  String
2299
		 * @return String
2300
		 **/
2301
		this.source = function(html) {
2302
			return this.proccess('source', html);
2303
		}
2304
2305
		/**
2306
		 * wrapper for "source2source" chain filtering
2307
		 *
2308
		 * @param  String
2309
		 * @return String
2310
		 **/
2311
		this.source2source = function(html) {
2312
			return this.proccess('source2source', html);
2313
		}
2314
2315
		/**
2316
		 * wrapper for "wysiwyg2wysiwyg" chain filtering
2317
		 *
2318
		 * @param  String
2319
		 * @return String
2320
		 **/
2321
		this.wysiwyg2wysiwyg = function(html) {
2322
			return this.proccess('wysiwyg2wysiwyg', html);
2323
		}
2324
2325
		/**
2326
		 * Parse attributes from string into object
2327
		 *
2328
		 * @param  String  string of attributes
2329
		 * @return Object
2330
		 **/
2331
		this.parseAttrs = function(s) {
2332
			var a = {},
2333
				b = this.boolAttrs,
2334
				m = s.match(this.attrRegExp),
2335
				t, n, v;
2336
2337
			m && $.each(m, function(i, s) {
2338
				t = s.split('=');
2339
				n = $.trim(t[0]).toLowerCase();
2340
2341
				if (t.length>2) {
2342
					t.shift();
2343
					v = t.join('=');
2344
				} else {
2345
					v = b[n] ||t[1]||'';
2346
				}
2347
				a[n] = $.trim(v).replace(/^('|")(.*)(\1)$/, "$2");
2348
			});
2349
2350
			a.style = this.rte.utils.parseStyle(a.style);
2351
			a['class'] = this.rte.utils.parseClass(a['class']||'')
2352
			return a;
2353
		}
2354
2355
		/**
2356
		 * Restore attributes string from hash
2357
		 *
2358
		 * @param  Object  attributes hash
2359
		 * @return String
2360
		 **/
2361
		this.serializeAttrs = function(a, c) {
2362
			var s = [], self = this;
2363
2364
			$.each(a, function(n, v) {
2365
				if (n=='style') {
2366
					v = self.rte.utils.serializeStyle(v, c);
2367
				} else if (n=='class') {
2368
					v = self.rte.utils.serializeClass(v);
2369
				}
2370
				v && s.push(n+'="'+v+'"');
2371
			});
2372
			return s.join(' ');
2373
		}
2374
2375
		/**
2376
		 * Remove/replace denied attributes/style properties
2377
		 *
2378
		 * @param  Object  attributes hash
2379
		 * @param  String  tag name to wich attrs belongs
2380
		 * @return Object
2381
		 **/
2382
		this.cleanAttrs = function(a, t) {
2383
			var self = this, ra = this.replaceAttrs;
2384
2385
			// remove safari and mso classes
2386
			$.each(a['class'], function(n) {
2387
				/^(Apple-style-span|mso\w+)$/i.test(n) && delete a['class'][n];
2388
			});
2389
2390
			function value(v) {
2391
				return v+(/\d$/.test(v) ? 'px' : '');
2392
			}
2393
2394
			$.each(a, function(n, v) {
2395
				// replace required attrs with css
2396
				ra[n] && ra[n].call(self, a, t);
2397
				// remove/fix mso styles
2398
				if (n == 'style') {
2399
					$.each(v, function(sn, sv) {
2400
						switch (sn) {
2401
							case "mso-padding-alt":
2402
							case "mso-padding-top-alt":
2403
							case "mso-padding-right-alt":
2404
							case "mso-padding-bottom-alt":
2405
							case "mso-padding-left-alt":
2406
							case "mso-margin-alt":
2407
							case "mso-margin-top-alt":
2408
							case "mso-margin-right-alt":
2409
							case "mso-margin-bottom-alt":
2410
							case "mso-margin-left-alt":
2411
							case "mso-table-layout-alt":
2412
							case "mso-height":
2413
							case "mso-width":
2414
							case "mso-vertical-align-alt":
2415
								a.style[sn.replace(/^mso-|-alt$/g, '')] = value(sv);
2416
								delete a.style[sn];
2417
								break;
2418
2419
							case "horiz-align":
2420
								a.style['text-align'] = sv;
2421
								delete a.style[sn];
2422
								break;
2423
2424
							case "vert-align":
2425
								a.style['vertical-align'] = sv;
2426
								delete a.style[sn];
2427
								break;
2428
2429
							case "font-color":
2430
							case "mso-foreground":
2431
								a.style.color = sv;
2432
								delete a.style[sn];
2433
							break;
2434
2435
							case "mso-background":
2436
							case "mso-highlight":
2437
								a.style.background = sv;
2438
								delete a.style[sn];
2439
								break;
2440
2441
							case "mso-default-height":
2442
								a.style['min-height'] = value(sv);
2443
								delete a.style[sn];
2444
								break;
2445
2446
							case "mso-default-width":
2447
								a.style['min-width'] = value(sv);
2448
								delete a.style[sn];
2449
								break;
2450
2451
							case "mso-padding-between-alt":
2452
								a.style['border-collapse'] = 'separate';
2453
								a.style['border-spacing'] = value(sv);
2454
								delete a.style[sn];
2455
								break;
2456
2457
							case "text-line-through":
2458
								if (sv.match(/(single|double)/i)) {
2459
									a.style['text-decoration'] = 'line-through';
2460
								}
2461
								delete a.style[sn];
2462
								break;
2463
2464
							case "mso-zero-height":
2465
								if (sv == 'yes') {
2466
									a.style.display = 'none';
2467
								}
2468
								delete a.style[sn];
2469
								break;
2470
2471
							case 'font-weight':
2472
								if (sv == 700) {
2473
									a.style['font-weight'] = 'bold';
2474
								}
2475
								break;
2476
2477
							default:
2478
								if (sn.match(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/)) {
2479
									delete a.style[sn]
2480
								}
2481
						}
2482
					});
2483
				}
2484
			});
2485
			return a;
2486
		}
2487
2488
	}
2489
2490
	// rules to replace tags
2491
	elRTE.prototype.filter.prototype.replaceTags = {
2492
		b         : { tag : 'strong' },
2493
		big       : { tag : 'span', style : {'font-size' : 'large'} },
2494
		center    : { tag : 'div',  style : {'text-align' : 'center'} },
2495
		i         : { tag : 'em' },
2496
		font      : { tag : 'span' },
2497
		nobr      : { tag : 'span', style : {'white-space' : 'nowrap'} },
2498
		menu      : { tag : 'ul' },
2499
		plaintext : { tag : 'pre' },
2500
		s         : { tag : 'strike' },
2501
		small     : { tag : 'span', style : {'font-size' : 'small'}},
2502
		u         : { tag : 'span', style : {'text-decoration' : 'underline'} },
2503
		xmp       : { tag : 'pre' }
2504
	}
2505
2506
	// rules to replace attributes
2507
	elRTE.prototype.filter.prototype.replaceAttrs = {
2508
		align : function(a, n) {
2509
			switch (n) {
2510
				case 'img':
2511
					a.style[a.align.match(/(left|right)/) ? 'float' : 'vertical-align'] = a.align;
2512
					break;
2513
2514
				case 'table':
2515
					if (a.align == 'center') {
2516
						a.style['margin-left'] = a.style['margin-right'] = 'auto';
2517
					} else {
2518
						a.style['float'] = a.align;
2519
					}
2520
					break;
2521
2522
				default:
2523
					a.style['text-align'] = a.align;
2524
			}
2525
			delete a.align;
2526
		},
2527
		border : function(a) {
2528
			!a.style['border-width'] && (a.style['border-width'] = (parseInt(a.border)||1)+'px');
2529
			!a.style['border-style'] && (a.style['border-style'] = 'solid');
2530
			delete a.border;
2531
		},
2532
		bordercolor : function(a) {
2533
			!a.style['border-color'] && (a.style['border-color'] = a.bordercolor);
2534
			delete a.bordercolor;
2535
		},
2536
		background : function(a) {
2537
			!a.style['background-image'] && (a.style['background-image'] = 'url('+a.background+')');
2538
			delete a.background;
2539
		},
2540
		bgcolor : function(a) {
2541
			!a.style['background-color'] && (a.style['background-color'] = a.bgcolor);
2542
			delete a.bgcolor;
2543
		},
2544
		clear : function(a) {
2545
			a.style.clear = a.clear == 'all' ? 'both' : a.clear;
2546
			delete a.clear;
2547
		},
2548
		color : function(a) {
2549
			!a.style.color && (a.style.color = a.color);
2550
			delete a.color;
2551
		},
2552
		face : function(a) {
2553
			var f = a.face.toLowerCase();
2554
			$.each(this.fontFamily, function(n, r) {
2555
				if (f.match(r)) {
2556
					a.style['font-family'] = f+','+n;
2557
				}
2558
			});
2559
			delete a.face;
2560
		},
2561
		hspace : function(a, n) {
2562
			if (n == 'img') {
2563
				var v = parseInt(a.hspace)||0;
2564
				!a.style['margin-left'] && (a.style['margin-left'] = v+'px');
2565
				!a.style['margin-right'] && (a.style['margin-right'] = v+'px')
2566
				delete a.hspace;
2567
			}
2568
		},
2569
		size : function(a, n) {
2570
			if (n != 'input') {
2571
				a.style['font-size'] = this.fontSize[parseInt(a.size)||0]||'medium';
2572
				delete a.size;
2573
			}
2574
		},
2575
		valign : function(a) {
2576
			if (!a.style['vertical-align']) {
2577
				a.style['vertical-align'] = a.valign;
2578
			}
2579
			delete a.valign;
2580
		},
2581
		vspace : function(a, n) {
2582
			if (n == 'img') {
2583
				var v = parseInt(a.vspace)||0;
2584
				!a.style['margin-top'] && (a.style['margin-top'] = v+'px');
2585
				!a.style['margin-bottom'] && (a.style['margin-bottom'] = v+'px')
2586
				delete a.hspace;
2587
			}
2588
		}
2589
	}
2590
2591
	// rules collection
2592
	elRTE.prototype.filter.prototype.rules = {
2593
		/**
2594
		 * If this.rte.options.allowTags is set - remove all except this ones
2595
		 *
2596
		 * @param String  html code
2597
		 * @return String
2598
		 **/
2599
		allowedTags : function(html) {
2600
			var a = this.allowTags;
2601
			return a ? html.replace(this.tagRegExp, function(t, c, n) { return a[n.toLowerCase()] ? t : ''; }) : html;
2602
		},
2603
		/**
2604
		 * If this.rte.options.denyTags is set - remove all deny tags
2605
		 *
2606
		 * @param String  html code
2607
		 * @return String
2608
		 **/
2609
		deniedTags : function(html) {
2610
			var d = this.denyTags;
2611
			return d ? html.replace(this.tagRegExp, function(t, c, n) { return d[n.toLowerCase()] ? '' : t }) : html;
2612
		},
2613
2614
		/**
2615
		 * Replace not allowed tags/attributes
2616
		 *
2617
		 * @param String  html code
2618
		 * @return String
2619
		 **/
2620
		clean : function(html) {
2621
			var self = this,
2622
				rt   = this.replaceTags,
2623
				ra   = this.replaceAttrs,
2624
				da   = this.denyAttr,
2625
				n;
2626
2627
			return html.replace(/<!DOCTYPE([\s\S]*)>/gi, '')
2628
				.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>")
2629
				.replace(/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s&nbsp;]*)<\/span>/gi, "$1")
2630
				.replace(/(<p[^>]*>\s*<\/p>|<p[^>]*\/>)/gi, '<br>')
2631
				.replace(this.tagRegExp, function(t, c, n, a) {
2632
					n = n.toLowerCase();
2633
2634
					if (c) {
2635
						return '</'+(rt[n] ? rt[n].tag : n)+'>';
2636
					}
2637
2638
					// create attributes hash and clean it
2639
					a = self.cleanAttrs(self.parseAttrs(a||''), n);
2640
2641
					if (rt[n]) {
2642
						rt[n].style && $.extend(a.style, rt[n].style);
2643
						n = rt[n].tag;
2644
					}
2645
2646
					da && $.each(a, function(na) {
2647
						if (da[na]) {
2648
							delete a[na];
2649
						}
2650
					});
2651
					a = self.serializeAttrs(a);
2652
					return '<'+n+(a?' ':'')+a+'>';
2653
				});
2654
		},
2655
2656
		/**
2657
		 * Clean pasted html
2658
		 *
2659
		 * @param String  html code
2660
		 * @return String
2661
		 **/
2662
		cleanPaste : function(html) {
2663
			var self = this, d = this.pasteDenyAttr;
2664
2665
			html = html
2666
				.replace(this.scriptRegExp, '')
2667
				.replace(this.styleRegExp, '')
2668
				.replace(this.linkRegExp, '')
2669
				.replace(this.cdataRegExp, '')
2670
				.replace(/\<\!--[\s\S]*?--\>/g, '');
2671
2672
			if (this.rte.options.pasteOnlyText) {
2673
				html = html.replace(this.tagRegExp, function(t, c, n) {
2674
					return /br/i.test(n) || (c && /h[1-6]|p|ol|ul|li|div|blockquote|tr/i) ? '<br>' : '';
2675
				}).replace(/(&nbsp;|<br[^>]*>)+\s*$/gi, '');
2676
			} else if (d) {
2677
				html = html.replace(this.openTagRegExp, function(t, n, a) {
2678
					a = self.parseAttrs(a);
2679
					$.each(a, function(an) {
2680
						if (d[an]) {
2681
							delete a[an];
2682
						}
2683
					});
2684
					a = self.serializeAttrs(a, true);
2685
					return '<'+n+(a?' ':'')+a+'>';
2686
				});
2687
			}
2688
			return html;
2689
		},
2690
2691
		/**
2692
		 * Replace script/style/media etc with placeholders
2693
		 *
2694
		 * @param String  html code
2695
		 * @return String
2696
		 **/
2697
		replace : function(html) {
2698
			var self = this, r = this.rte.options.replace||[], n;
2699
2700
			// custom replaces if set
2701
			if (r.length) {
2702
				$.each(r, function(i, f) {
2703
					if (typeof(f) == 'function') {
2704
						html = f.call(self, html);
2705
					}
2706
				});
2707
			}
2708
2709
			/**
2710
			 * Return media replacement - img html code
2711
			 *
2712
			 * @param Object  object to store in rel attr
2713
			 * @param String  media mime-type
2714
			 * @return String
2715
			 **/
2716
			function img(o, t) {
2717
				var s = src(),
2718
					c = s && self.videoHostRegExp.test(s) ? s.replace(self.videoHostRegExp, "$2") : t.replace(/^\w+\/(.+)/, "$1"),
2719
					w = parseInt((o.obj ? o.obj.width || o.obj.style.width : 0)||(o.embed ? o.embed.width || o.embed.style.width : 0))||150,
2720
					h = parseInt((o.obj ? o.obj.height || o.obj.style.height : 0)||(o.embed ? o.embed.height || o.embed.style.height : 0))||100,
2721
					id = 'media'+Math.random().toString().substring(2),
2722
					style ='',
2723
					l;
2724
2725
				// find media src
2726
				function src() {
2727
					if (o.embed && o.embed.src) {
2728
						return o.embed.src;
2729
					}
2730
					if (o.params && o.params.length) {
2731
						l = o.params.length;
2732
						while (l--) {
2733
							if (o.params[l].name == 'src' || o.params[l].name == 'movie') {
2734
								return o.params[l].value;
2735
							}
2736
						}
2737
					}
2738
				}
2739
				if (o.obj && o.obj.style && o.obj.style['float']) {
2740
					style = ' style="float:'+o.obj.style['float']+'"';
2741
				}
2742
				self.scripts[id] = o;
2743
				return '<img src="'+self.url+'pixel.gif" class="elrte-media elrte-media-'+c+' elrte-protected" title="'+(s ? self.rte.utils.encode(s) : '')+'" rel="'+id+'" width="'+w+'" height="'+h+'"'+style+'>';
2744
			}
2745
2746
			html = html
2747
				.replace(this.styleRegExp, "<!-- ELRTE_COMMENT$1 -->")
2748
				.replace(this.linkRegExp,  "<!-- ELRTE_COMMENT$1-->")
2749
				.replace(this.cdataRegExp, "<!--[CDATA[$1]]-->")
2750
				.replace(this.scriptRegExp, function(t, a, s) {
2751
					var id;
2752
					if (self.denyTags.script) {
2753
						return '';
2754
					}
2755
					id = 'script'+Math.random().toString().substring(2);
2756
					a = self.parseAttrs(a);
2757
					!a.type && (a.type = 'text/javascript');
2758
					self.scripts[id] = '<script '+self.serializeAttrs(a)+">"+s+"</script>";
2759
					return '<!-- ELRTE_SCRIPT:'+(id)+' -->';
2760
				})
2761
				.replace(this.yMapsRegExp, function(t, a) {
2762
					a = self.parseAttrs(a);
2763
					a['class']['elrte-yandex-maps'] = 'elrte-yandex-maps';
2764
					a['class']['elrte-protected'] = 'elrte-protected';
2765
					return '<div '+self.serializeAttrs(a)+'>';
2766
				})
2767
				.replace(this.gMapsRegExp, function(t, a) {
2768
					var id = 'gmaps'+Math.random().toString().substring(2), w, h;
2769
					a = self.parseAttrs(a);
2770
					w = parseInt(a.width||a.style.width||100);
2771
					h = parseInt(a.height||a.style.height||100);
2772
					self.scripts[id] = t;
2773
					return '<img src="'+self.url+'pixel.gif" class="elrte-google-maps elrte-protected" id="'+id+'" style="width:'+w+'px;height:'+h+'px">';
2774
				})
2775
				.replace(this.objRegExp, function(t, a, c) {
2776
					var m = c.match(self.embRegExp),
2777
						o = { obj : self.parseAttrs(a), embed : m && m.length ? self.parseAttrs(m[0].substring(7)) : null, params : [] },
2778
						i = self.rte.utils.mediaInfo(o.embed ? o.embed.type||'' : '', o.obj.classid||'');
2779
2780
					if (i) {
2781
						if ((m = c.match(self.paramRegExp))) {
2782
							$.each(m, function(i, p) {
2783
								o.params.push(self.parseAttrs(p.substring(6)));
2784
							});
2785
						}
2786
						!o.obj.classid  && (o.obj.classid  = i.classid[0]);
2787
						!o.obj.codebase && (o.obj.codebase = i.codebase);
2788
						o.embed && !o.embed.type && (o.embed.type = i.type);
2789
						// ie bug with empty attrs
2790
						o.obj.width == '1' && delete o.obj.width;
2791
						o.obj.height == '1' && delete o.obj.height;
2792
						if (o.embed) {
2793
							o.embed.width == '1' && delete o.embed.width;
2794
							o.embed.height == '1' && delete o.embed.height;
2795
						}
2796
						return img(o, i.type);
2797
					}
2798
					return t;
2799
				})
2800
				.replace(this.embRegExp, function(t, n, a) {
2801
					var a = self.parseAttrs(a),
2802
						i = self.rte.utils.mediaInfo(a.type||'');
2803
					// ie bug with empty attrs
2804
					a.width == '1' && delete a.width;
2805
					a.height == '1' && delete a.height;
2806
					return i ? img({ embed : a }, i.type) : t;
2807
				})
2808
				.replace(this.vimeoRegExp, function(t, n, a) {
2809
					a = self.parseAttrs(a);
2810
					delete a.frameborder;
2811
					a.width == '1' && delete a.width;
2812
					a.height == '1' && delete a.height;
2813
					a.type = 'application/x-shockwave-flash';
2814
					return img({ embed : a }, 'application/x-shockwave-flash');
2815
				})
2816
				.replace(/<\/(embed|param)>/gi, '')
2817
				.replace(this.pbRegExp, function() {
2818
					return '<img src="'+self.url+'pixel.gif" class="elrte-protected elrte-pagebreak">';
2819
				});
2820
2821
2822
			n = $('<div>'+html+'</div>');
2823
			// remove empty spans and merge nested spans
2824
			n.find('span:not([id]):not([class])').each(function() {
2825
				var t = $(this);
2826
2827
				if (!t.attr('style')) {
2828
					t.children().length ? self.rte.dom.unwrap(this) : t.remove();
2829
				}
2830
			}).end().find('span span:only-child').each(function() {
2831
				var t   = $(this),
2832
					p   = t.parent().eq(0),
2833
					tid = t.attr('id'),
2834
					pid = p.attr('id'), id, s, c;
2835
2836
				if (self.rte.dom.is(this, 'onlyChild') && (!tid || !pid)) {
2837
					c = $.trim(p.attr('class')+' '+t.attr('class'))
2838
					c && p.attr('class', c);
2839
					s = self.rte.utils.serializeStyle($.extend(self.rte.utils.parseStyle($(this).attr('style')||''), self.rte.utils.parseStyle($(p).attr('style')||'')));
2840
					s && p.attr('style', s);
2841
					id = tid||pid;
2842
					id && p.attr('id', id);
2843
					this.firstChild ? $(this.firstChild).unwrap() : t.remove();
2844
				}
2845
			});
2846
2847
2848
2849
			if (!this.rte.options.allowTextNodes) {
2850
				// wrap inline nodes with p
2851
				var dom = this.rte.dom,
2852
					nodes = [],
2853
					w = [];
2854
2855
				if ($.browser.msie) {
2856
					for (var i = 0; i<n[0].childNodes.length; i++) {
2857
						nodes.push(n[0].childNodes[i])
2858
					}
2859
				} else {
2860
					nodes = Array.prototype.slice.call(n[0].childNodes);
2861
				}
2862
2863
2864
				function wrap() {
2865
					if (w.length && dom.filter(w, 'notEmpty').length) {
2866
						dom.wrap(w, document.createElement('p'));
2867
					}
2868
					w = [];
2869
				}
2870
				$.each(nodes, function(i, n) {
2871
					if (dom.is(n, 'block')) {
2872
						wrap();
2873
					} else {
2874
						if (w.length && n.previousSibling != w[w.length-1]) {
2875
							wrap();
2876
						}
2877
						w.push(n);
2878
					}
2879
				});
2880
				wrap();
2881
			}
2882
2883
			return n.html();
2884
		},
2885
		/**
2886
		 * Restore script/style/media etc from placeholders
2887
		 *
2888
		 * @param String  html code
2889
		 * @return String
2890
		 **/
2891
		restore : function(html) {
2892
			var self =this, r = this.rte.options.restore|[];
2893
2894
			// custom restore if set
2895
			if (r.length) {
2896
				$.each(r, function(i, f) {
2897
					if (typeof(f) == 'function') {
2898
						html = f.call(self, html);
2899
					}
2900
				});
2901
			}
2902
2903
			html = html
2904
				.replace(/\<\!--\[CDATA\[([\s\S]*?)\]\]--\>/gi, "<![CDATA[$1]]>")
2905
				.replace(/\<\!--\s*ELRTE_SCRIPT\:\s*(script\d+)\s*--\>/gi, function(t, n) {
2906
					if (self.scripts[n]) {
2907
						t = self.scripts[n];
2908
						delete self.scripts[n];
2909
					}
2910
					return t||'';
2911
				})
2912
				.replace(/\<\!-- ELRTE_COMMENT([\s\S]*?) --\>/gi, "$1")
2913
				.replace(this.serviceClassRegExp, function(t, n, a, e) {
2914
					var a = self.parseAttrs(a), j, o = '';
2915
					// alert(t)
2916
					if (a['class']['elrte-media']) {
2917
						// alert(a.rel)
2918
						// return ''
2919
						// j = a.rel ? JSON.parse(self.rte.utils.decode(a.rel)) : {};
2920
						j = self.scripts[a.rel]||{};
2921
						// alert(j)
2922
						// j = a.rel ? $.parseJSON(self.rte.utils.decode(a.rel)) : {};
2923
						j.params && $.each(j.params, function(i, p) {
2924
							o += '<param '+self.serializeAttrs(p)+">\n";
2925
						});
2926
						j.embed && (o+='<embed '+self.serializeAttrs(j.embed)+">");
2927
						j.obj && (o = '<object '+self.serializeAttrs(j.obj)+">\n"+o+"\n</object>\n");
2928
						return o||t;
2929
					} else if (a['class']['elrte-google-maps']) {
2930
						var t = '';
2931
						if (self.scripts[a.id]) {
2932
							t = self.scripts[a.id];
2933
							delete self.scripts[a.id]
2934
						}
2935
						return t;
2936
					} else if (a['class']['elrte-pagebreak']) {
2937
						return '<!-- pagebreak -->';
2938
					}
2939
					$.each(a['class'], function(n) {
2940
						/^elrte-\w+/i.test(n) && delete(a['class'][n]);
2941
					});
2942
					return '<'+n+' '+self.serializeAttrs(a)+'>'+(e||'');
2943
2944
				});
2945
2946
			return html;
2947
		},
2948
		/**
2949
		 * compact styles and move tags and attributes names in lower case(for ie&opera)
2950
		 *
2951
		 * @param String  html code
2952
		 * return String
2953
		 **/
2954
		compactStyles : function(html) {
2955
			var self = this;
2956
2957
			return html.replace(this.tagRegExp, function(t, c, n, a) {
2958
				a = !c && a ? self.serializeAttrs(self.parseAttrs(a), true) : '';
2959
				return '<'+c+n.toLowerCase()+(a?' ':'')+a+'>';
2960
			});
2961
		},
2962
		/**
2963
		 * return xhtml tags
2964
		 *
2965
		 * @param String  html code
2966
		 * return String
2967
		 **/
2968
		xhtmlTags : function(html) {
2969
			return this.xhtml ? html.replace(/<(img|hr|br|embed|param|link)([^>]*\/*)>/gi, "<$1$2 />") : html;
2970
		}
2971
	}
2972
2973
	/**
2974
	 * Chains configuration
2975
	 * Default chains
2976
	 * wysiwyg - proccess html from source for wysiwyg editor mode
2977
	 * source  - proccess html from wysiwyg for source editor mode
2978
	 * paste   - clean pasted html
2979
	 * wysiwyg2wysiwyg - ciclyc rule to clean html from wysiwyg for wysiwyg paste
2980
	 * source2source - ciclyc rule to clean html from source for source paste
2981
	 * deniedTags is in the end of chain to protect google maps iframe from removed
2982
	 **/
2983
	elRTE.prototype.filter.prototype.chains = {
2984
		wysiwyg         : ['clean','allowedTags', 'replace', 'deniedTags', 'compactStyles'],
2985
		source          : ['clean','allowedTags', 'restore', 'compactStyles', 'xhtmlTags'],
2986
		paste           : ['clean','allowedTags', 'cleanPaste', 'replace', 'deniedTags', 'compactStyles'],
2987
		wysiwyg2wysiwyg : ['clean','allowedTags', 'restore', 'replace', 'deniedTags', 'compactStyles'],
2988
		source2source   : ['clean','allowedTags', 'replace', 'deniedTags', 'restore', 'compactStyles', 'xhtmlTags']
2989
	}
2990
2991
2992
2993
})(jQuery);
2994
(function($) {
2995
elRTE.prototype.history = function(rte) {
2996
	this.rte = rte;
2997
	this._prev = []
2998
	this._next = [];
2999
3000
3001
	this.add = function() {
3002
		if (this.rte.options.historyLength>0 && this._prev.length>= this.rte.options.historyLength) {
3003
			this._prev.slice(this.rte.options.historyLength);
3004
		}
3005
		var b = this.rte.selection.getBookmark();
3006
		this._prev.push([$(this.rte.doc.body).html(), b]);
3007
		this.rte.selection.moveToBookmark(b);
3008
		// this._prev.push($(this.rte.doc.body).html());
3009
		this._next = [];
3010
	}
3011
3012
	this.back = function() {
3013
3014
		if (this._prev.length) {
3015
			var b = this.rte.selection.getBookmark(),
3016
				data = this._prev.pop();
3017
			this._next.push([$(this.rte.doc.body).html(), b]);
3018
3019
			$(this.rte.doc.body).html(data[0]);
3020
			this.rte.selection.moveToBookmark(data[1]);
3021
		}
3022
	}
3023
3024
	this.fwd = function() {
3025
		if (this._next.length) {
3026
			var b = this.rte.selection.getBookmark(),
3027
				data = this._next.pop();
3028
			this._prev.push([$(this.rte.doc.body).html(), b]);
3029
3030
			$(this.rte.doc.body).html(data[0]);
3031
			this.rte.selection.moveToBookmark(data[1]);
3032
		}
3033
	}
3034
3035
	this.canBack = function() {
3036
		return this._prev.length;
3037
	}
3038
3039
	this.canFwd = function() {
3040
		return this._next.length;
3041
	}
3042
3043
}
3044
})(jQuery);/*
3045
 * elRTE configuration
3046
 *
3047
 * @param doctype         - doctype for editor iframe
3048
 * @param cssClass        - css class for editor
3049
 * @param cssFiles        - array of css files, witch will inlude in iframe
3050
 * @param height          - not used now (may be deleted in future)
3051
 * @param lang            - interface language (requires file in i18n dir)
3052
 * @param toolbar         - name of toolbar to load
3053
 * @param absoluteURLs    - convert files and images urls to absolute or not
3054
 * @param allowSource     - is source editing allowing
3055
 * @param stripWhiteSpace - strip лишние whitespaces/tabs or not
3056
 * @param styleWithCSS    - use style=... instead of strong etc.
3057
 * @param fmAllow         - allow using file manger (elFinder)
3058
 * @param fmOpen          - callback for open file manager
3059
 * @param buttons         - object with pairs of buttons classes names and titles (when create new button, you have to add iys name here)
3060
 * @param panels          - named groups of buttons
3061
 * @param panelNames      - title of panels (required for one planned feature)
3062
 * @param toolbars        - named redy to use toolbals (you may combine your own toolbar)
3063
 *
3064
 * @author:    Dmitry Levashov (dio) dio@std42.ru
3065
 * Copyright: Studio 42, http://www.std42.ru
3066
 */
3067
(function($) {
3068
elRTE.prototype.options   = {
3069
	doctype         : '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',
3070
	cssClass        : 'el-rte',
3071
	cssfiles        : [],
3072
	height          : null,
3073
	resizable       : true,
3074
	lang            : 'en',
3075
	toolbar         : 'normal',
3076
	absoluteURLs    : true,
3077
	allowSource     : true,
3078
	stripWhiteSpace : true,
3079
	styleWithCSS    : false,
3080
	fmAllow         : true,
3081
	fmOpen          : null,
3082
	/* if set all other tag will be removed */
3083
	allowTags : [],
3084
	/* if set this tags will be removed */
3085
	denyTags : ['applet', 'base', 'basefont', 'bgsound', 'blink', 'body', 'col', 'colgroup', 'iframe', 'isindex', 'frameset', 'html', 'head', 'meta', 'marquee', 'noframes', 'noembed', 'o:p', 'title', 'xml'],
3086
	denyAttr : [],
3087
	/* on paste event this attributes will removed from pasted html */
3088
	pasteDenyAttr : ['id', 'name', 'class', 'style', 'language', 'onclick', 'ondblclick', 'onhover', 'onkeup', 'onkeydown', 'onkeypress'],
3089
	/* If false - all text nodes will be wrapped by paragraph tag */
3090
	allowTextNodes : false,
3091
	/* allow browser specific styles like -moz|-webkit|-o */
3092
	allowBrowsersSpecStyles : false,
3093
	/* allow paste content into editor */
3094
	allowPaste : true,
3095
	/* if true - only text will be pasted (not in ie) */
3096
	pasteOnlyText : false,
3097
	/* user replacement rules */
3098
	replace : [],
3099
	/* user restore rules */
3100
	restore : [],
3101
	pagebreak : '<div style="page-break-after: always;"></div>', //'<!-- pagebreak -->',
3102
	buttons         : {
3103
		'save'                : 'Save',
3104
		'copy'                : 'Copy',
3105
		'cut'                 : 'Cut',
3106
		'css'                 : 'Css style and class',
3107
		'paste'               : 'Paste',
3108
		'pastetext'           : 'Paste only text',
3109
		'pasteformattext'     : 'Paste formatted text',
3110
		'removeformat'        : 'Clean format',
3111
		'undo'                : 'Undo last action',
3112
		'redo'                : 'Redo previous action',
3113
		'bold'                : 'Bold',
3114
		'italic'              : 'Italic',
3115
		'underline'           : 'Underline',
3116
		'strikethrough'       : 'Strikethrough',
3117
		'superscript'         : 'Superscript',
3118
		'subscript'           : 'Subscript',
3119
		'justifyleft'         : 'Align left',
3120
		'justifyright'        : 'Ailgn right',
3121
		'justifycenter'       : 'Align center',
3122
		'justifyfull'         : 'Align full',
3123
		'indent'              : 'Indent',
3124
		'outdent'             : 'Outdent',
3125
		'rtl' : 'Right to left',
3126
		'ltr' : 'Left to right',
3127
		'forecolor'           : 'Font color',
3128
		'hilitecolor'         : 'Background color',
3129
		'formatblock'         : 'Format',
3130
		'fontsize'            : 'Font size',
3131
		'fontname'            : 'Font',
3132
		'insertorderedlist'   : 'Ordered list',
3133
		'insertunorderedlist' : 'Unordered list',
3134
		'horizontalrule'      : 'Horizontal rule',
3135
		'blockquote'          : 'Blockquote',
3136
		'div'                 : 'Block element (DIV)',
3137
		'link'                : 'Link',
3138
		'unlink'              : 'Delete link',
3139
		'anchor'              : 'Bookmark',
3140
		'image'               : 'Image',
3141
		'pagebreak'           : 'Page break',
3142
		'smiley'              : 'Smiley',
3143
		'flash'               : 'Flash',
3144
		'table'               : 'Table',
3145
		'tablerm'             : 'Delete table',
3146
		'tableprops'          : 'Table properties',
3147
		'tbcellprops'         : 'Table cell properties',
3148
		'tbrowbefore'         : 'Insert row before',
3149
		'tbrowafter'          : 'Insert row after',
3150
		'tbrowrm'             : 'Delete row',
3151
		'tbcolbefore'         : 'Insert column before',
3152
		'tbcolafter'          : 'Insert column after',
3153
		'tbcolrm'             : 'Delete column',
3154
		'tbcellsmerge'        : 'Merge table cells',
3155
		'tbcellsplit'         : 'Split table cell',
3156
		'docstructure'        : 'Toggle display document structure',
3157
		'elfinder'            : 'Open file manager',
3158
		'fullscreen'          : 'Toggle full screen mode',
3159
		'nbsp'                : 'Non breakable space',
3160
		'stopfloat'           : 'Stop element floating',
3161
		'about'               : 'About this software'
3162
	},
3163
	panels      : {
3164
		save       : ['save'],
3165
		copypaste  : ['copy', 'cut', 'paste', 'pastetext', 'pasteformattext', 'removeformat', 'docstructure'],
3166
		undoredo   : ['undo', 'redo'],
3167
		style      : ['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript'],
3168
		colors     : ['forecolor', 'hilitecolor'],
3169
		alignment  : ['justifyleft', 'justifycenter', 'justifyright', 'justifyfull'],
3170
		indent     : ['outdent', 'indent'],
3171
		format     : ['formatblock', 'fontsize', 'fontname'],
3172
		lists      : ['insertorderedlist', 'insertunorderedlist'],
3173
		elements   : ['horizontalrule', 'blockquote', 'div', 'stopfloat', 'css', 'nbsp', 'smiley', 'pagebreak'],
3174
		direction  : ['ltr', 'rtl'],
3175
		links      : ['link', 'unlink', 'anchor'],
3176
		images     : ['image'],
3177
		media      : ['image', 'flash'],
3178
		tables     : ['table', 'tableprops', 'tablerm',  'tbrowbefore', 'tbrowafter', 'tbrowrm', 'tbcolbefore', 'tbcolafter', 'tbcolrm', 'tbcellprops', 'tbcellsmerge', 'tbcellsplit'],
3179
		elfinder   : ['elfinder'],
3180
		fullscreen : ['fullscreen', 'about']
3181
	},
3182
	toolbars    : {
3183
		tiny     : ['style'],
3184
		compact  : ['save', 'undoredo', 'style', 'alignment', 'lists', 'links', 'fullscreen'],
3185
		normal   : ['save', 'copypaste', 'undoredo', 'style', 'alignment', 'colors', 'indent', 'lists', 'links', 'elements', 'images', 'fullscreen'],
3186
		complete : ['save', 'copypaste', 'undoredo', 'style', 'alignment', 'colors', 'format', 'indent', 'lists', 'links', 'elements', 'media', 'fullscreen'],
3187
		maxi     : ['save', 'copypaste', 'undoredo', 'elfinder', 'style', 'alignment', 'direction', 'colors', 'format', 'indent', 'lists', 'links', 'elements', 'media', 'tables', 'fullscreen'],
3188
		eldorado : ['save', 'copypaste', 'elfinder', 'undoredo', 'style', 'alignment', 'colors', 'format', 'indent', 'lists', 'links', 'elements', 'media', 'tables', 'fullscreen']
3189
3190
	},
3191
	panelNames : {
3192
		save      : 'Save',
3193
		copypaste : 'Copy/Pase',
3194
		undoredo  : 'Undo/Redo',
3195
		style     : 'Text styles',
3196
		colors    : 'Colors',
3197
		alignment : 'Alignment',
3198
		indent    : 'Indent/Outdent',
3199
		format    : 'Text format',
3200
		lists     : 'Lists',
3201
		elements  : 'Misc elements',
3202
		direction : 'Script direction',
3203
		links     : 'Links',
3204
		images    : 'Images',
3205
		media     : 'Media',
3206
		tables    : 'Tables',
3207
		elfinder  : 'File manager (elFinder)'
3208
	}
3209
};
3210
})(jQuery);
3211
/**
3212
 * @class selection  - elRTE utils for working with text selection
3213
 *
3214
 * @param  elRTE  rte  объект-редактор
3215
 *
3216
 * @author:    Dmitry Levashov (dio) dio@std42.ru
3217
 **/
3218
(function($) {
3219
elRTE.prototype.selection = function(rte) {
3220
	this.rte      = rte;
3221
	var self      = this;
3222
	this.w3cRange = null;
3223
	var start, end, node, bm;
3224
3225
	$(this.rte.doc)
3226
		.keyup(function(e) {
3227
			if (e.ctrlKey || e.metaKey || (e.keyCode >= 8 && e.keyCode <= 13) || (e.keyCode>=32 && e.keyCode<= 40) || e.keyCode == 46 || (e.keyCode >=96 && e.keyCode <= 111)) {
3228
				self.cleanCache();
3229
			}
3230
		})
3231
		.mousedown(function(e) {
3232
			// self.rte.log(e)
3233
			if (e.target.nodeName == 'HTML') {
3234
				start = self.rte.doc.body;
3235
			} else {
3236
				start = e.target;
3237
			}
3238
			end   = node = null;
3239
		})
3240
		.mouseup(function(e) {
3241
			if (e.target.nodeName == 'HTML') {
3242
				end = self.rte.doc.body;
3243
			} else {
3244
				end = e.target;
3245
			}
3246
			end  = e.target;
3247
			node = null;
3248
		}).click();
3249
3250
	/**
3251
	 * возвращает selection
3252
	 *
3253
	 * @return  Selection
3254
	 **/
3255
	function selection() {
3256
		return self.rte.window.getSelection ? self.rte.window.getSelection() : self.rte.window.document.selection;
3257
	}
3258
3259
	/**
3260
	 * Вспомогательная функция
3261
	 * Возвращает самого верхнего родителя, отвечающего условию - текущая нода - его единственная непустая дочерняя нода
3262
	 *
3263
	 * @param   DOMElement  n нода, для которой ищем родителя
3264
	 * @param   DOMElement  p если задана - нода, выше которой не поднимаемся
3265
	 * @param   String      s строна поиска (left||right||null)
3266
	 * @return  DOMElement
3267
	 **/
3268
	function realSelected(n, p, s) {
3269
		while (n.nodeName != 'BODY' && n.parentNode && n.parentNode.nodeName != 'BODY' && (p ? n!== p && n.parentNode != p : 1) && ((s=='left' && self.rte.dom.isFirstNotEmpty(n)) || (s=='right' && self.rte.dom.isLastNotEmpty(n)) || (self.rte.dom.isFirstNotEmpty(n) && self.rte.dom.isLastNotEmpty(n))) ) {
3270
			n = n.parentNode;
3271
		}
3272
		return n;
3273
	}
3274
3275
	/**
3276
	 * Возвращает TRUE, если выделение "схлопнуто"
3277
	 *
3278
	 * @return  bool
3279
	 **/
3280
	this.collapsed = function() {
3281
		return this.getRangeAt().isCollapsed();
3282
	}
3283
3284
	/**
3285
	 * "Схлопывает" выделение
3286
	 *
3287
	 * @param   bool  toStart  схлопнуть к начальной точке
3288
	 * @return  void
3289
	 **/
3290
	this.collapse = function(st) {
3291
		var s = selection(),
3292
			r = this.getRangeAt();
3293
		r.collapse(st?true:false);
3294
		if (!$.browser.msie) {
3295
			s.removeAllRanges();
3296
			s.addRange(r);
3297
3298
		}
3299
		return this;
3300
	}
3301
3302
	/**
3303
	 * Возвращает TextRange
3304
	 * Для нормальных браузеров - нативный range
3305
	 * для "самизнаетечего" - эмуляцию w3c range
3306
	 *
3307
	 * @return  range|w3cRange
3308
	 **/
3309
	this.getRangeAt = function(updateW3cRange) {
3310
		if (this.rte.browser.msie) {
3311
			if (!this.w3cRange) {
3312
				this.w3cRange = new this.rte.w3cRange(this.rte);
3313
			}
3314
			updateW3cRange && this.w3cRange.update();
3315
			return this.w3cRange;
3316
		}
3317
3318
		var s = selection();
3319
		var r = s.rangeCount > 0 ? s.getRangeAt(0) : this.rte.doc.createRange();
3320
		r.getStart = function() {
3321
			return this.startContainer.nodeType==1
3322
				? this.startContainer.childNodes[Math.min(this.startOffset, this.startContainer.childNodes.length-1)]
3323
				: this.startContainer;
3324
		}
3325
3326
		r.getEnd = function() {
3327
			return this.endContainer.nodeType==1
3328
				? this.endContainer.childNodes[ Math.min(this.startOffset == this.endOffset ? this.endOffset : this.endOffset-1, this.endContainer.childNodes.length-1)]
3329
				: this.endContainer;
3330
		}
3331
		r.isCollapsed = function() {
3332
			return this.collapsed;
3333
		}
3334
		return r;
3335
	}
3336
3337
	this.saveIERange = function() {
3338
		if ($.browser.msie) {
3339
			bm = this.getRangeAt().getBookmark();
3340
		}
3341
	}
3342
3343
	this.restoreIERange = function() {
3344
		$.browser.msie && bm && this.getRangeAt().moveToBookmark(bm);
3345
	}
3346
3347
	this.cloneContents = function() {
3348
		var n = this.rte.dom.create('div'), r, c, i;
3349
		if ($.browser.msie) {
3350
			try {
3351
				r = this.rte.window.document.selection.createRange();
3352
			} catch(e) {
3353
				r = this.rte.doc.body.createTextRange();
3354
			}
3355
			$(n).html(r.htmlText);
3356
		} else {
3357
			c = this.getRangeAt().cloneContents();
3358
			for (i=0; i<c.childNodes.length; i++) {
3359
				n.appendChild(c.childNodes[i].cloneNode(true));
3360
			}
3361
		}
3362
		return n;
3363
	}
3364
3365
	/**
3366
	 * Выделяет ноды
3367
	 *
3368
	 * @param   DOMNode  s  нода начала выделения
3369
	 * @param   DOMNode  e  нода конца выделения
3370
	 * @return  selection
3371
	 **/
3372
	this.select = function(s, e) {
3373
		e = e||s;
3374
3375
		if (this.rte.browser.msie) {
3376
			var r  = this.rte.doc.body.createTextRange(),
3377
				r1 = r.duplicate(),
3378
				r2 = r.duplicate();
3379
3380
			r1.moveToElementText(s);
3381
			r2.moveToElementText(e);
3382
			r.setEndPoint('StartToStart', r1);
3383
			r.setEndPoint('EndToEnd',     r2);
3384
			r.select();
3385
		} else {
3386
3387
			var sel = selection(),
3388
				r = this.getRangeAt();
3389
			r.setStartBefore(s);
3390
			r.setEndAfter(e);
3391
			sel.removeAllRanges();
3392
			sel.addRange(r);
3393
		}
3394
		return this.cleanCache();
3395
	}
3396
3397
	/**
3398
	 * Выделяет содержимое ноды
3399
	 *
3400
	 * @param   Element  n  нода
3401
	 * @return  selection
3402
	 **/
3403
	this.selectContents = function(n) {
3404
		var r = this.getRangeAt();
3405
		if (n && n.nodeType == 1) {
3406
			if (this.rte.browser.msie) {
3407
				r.range();
3408
				r.r.moveToElementText(n.parentNode);
3409
				r.r.select();
3410
			} else {
3411
				try {
3412
					r.selectNodeContents(n);
3413
				} catch (e) {
3414
					return this.rte.log('unable select node contents '+n);
3415
				}
3416
				var s = selection();
3417
				s.removeAllRanges();
3418
				s.addRange(r);
3419
			}
3420
		}
3421
		return this;
3422
	}
3423
3424
	this.deleteContents = function() {
3425
		if (!$.browser.msie) {
3426
			this.getRangeAt().deleteContents();
3427
		}
3428
		return this;
3429
	}
3430
3431
	/**
3432
	 * Вставляет ноду в текущее выделение
3433
	 *
3434
	 * @param   Element  n  нода
3435
	 * @return  selection
3436
	 **/
3437
	this.insertNode = function(n, collapse) {
3438
		if (collapse && !this.collapsed()) {
3439
			this.collapse();
3440
		}
3441
3442
		if (this.rte.browser.msie) {
3443
			var html = n.nodeType == 3 ? n.nodeValue : $(this.rte.dom.create('span')).append($(n)).html();
3444
			 var r = this.getRangeAt();
3445
			r.insertNode(html);
3446
		} else {
3447
			var r = this.getRangeAt();
3448
			r.insertNode(n);
3449
			r.setStartAfter(n);
3450
			r.setEndAfter(n);
3451
			var s = selection();
3452
			s.removeAllRanges();
3453
			s.addRange(r);
3454
		}
3455
		return this.cleanCache();
3456
	}
3457
3458
	/**
3459
	 * Вставляет html в текущее выделение
3460
	 *
3461
	 * @param   Element  n  нода
3462
	 * @return  selection
3463
	 **/
3464
	this.insertHtml = function(html, collapse) {
3465
		if (collapse && !this.collapsed()) {
3466
			this.collapse();
3467
		}
3468
3469
		if (this.rte.browser.msie) {
3470
			this.getRangeAt().range().pasteHTML(html);
3471
		} else {
3472
			var n = $(this.rte.dom.create('span')).html(html||'').get(0);
3473
			this.insertNode(n);
3474
			$(n).replaceWith($(n).html());
3475
		}
3476
		return this.cleanCache();
3477
	}
3478
3479
	/**
3480
	 * Вставляет ноду в текущее выделение
3481
	 *
3482
	 * @param   Element  n  нода
3483
	 * @return  selection
3484
	 **/
3485
	this.insertText = function(text, collapse) {
3486
		var n = this.rte.doc.createTextNode(text);
3487
		return this.insertHtml(n.nodeValue);
3488
	}
3489
3490
	this.getBookmark = function() {
3491
		this.rte.window.focus();
3492
		var r, r1, r2, _s, _e,
3493
			s = this.rte.dom.createBookmark(),
3494
			e = this.rte.dom.createBookmark();
3495
3496
3497
3498
		if ($.browser.msie) {
3499
			try {
3500
				r = this.rte.window.document.selection.createRange();
3501
			} catch(e) {
3502
				r = this.rte.doc.body.createTextRange();
3503
			}
3504
3505
			if (r.item) {
3506
				var n = r.item(0);
3507
				r = this.rte.doc.body.createTextRange();
3508
				r.moveToElementText(n);
3509
			}
3510
3511
			r1 = r.duplicate();
3512
			r2 = r.duplicate();
3513
			_s = this.rte.dom.create('span');
3514
			_e = this.rte.dom.create('span');
3515
3516
			_s.appendChild(s);
3517
			_e.appendChild(e);
3518
3519
			r1.collapse(true);
3520
			r1.pasteHTML(_s.innerHTML);
3521
			r2.collapse(false);
3522
			r2.pasteHTML(_e.innerHTML);
3523
		} else {
3524
				var sel = selection();
3525
				var r = sel.rangeCount > 0 ? sel.getRangeAt(0) : this.rte.doc.createRange();
3526
3527
			// r  = this.getRangeAt();
3528
			r1 = r.cloneRange();
3529
			r2 = r.cloneRange();
3530
3531
			// this.insertNode(this.rte.dom.create('hr'))
3532
			// return
3533
			r2.collapse(false);
3534
			r2.insertNode(e);
3535
			r1.collapse(true);
3536
			r1.insertNode(s);
3537
			this.select(s, e);
3538
		}
3539
3540
		return [s.id, e.id];
3541
	}
3542
3543
	this.moveToBookmark = function(b) {
3544
		this.rte.window.focus();
3545
3546
		if (b && b.length==2) {
3547
			var s = this.rte.doc.getElementById(b[0]),
3548
				e = this.rte.doc.getElementById(b[1]),
3549
				sel, r;
3550
			if (s && e) {
3551
				this.select(s, e);
3552
				if (this.rte.dom.next(s) == e) {
3553
					this.collapse(true);
3554
				}
3555
				if (!$.browser.msie) {
3556
					sel = selection();
3557
					r = sel.rangeCount > 0 ? sel.getRangeAt(0) : this.rte.doc.createRange();
3558
					sel.removeAllRanges();
3559
					sel.addRange(r);
3560
				}
3561
3562
				s.parentNode.removeChild(s);
3563
				e.parentNode.removeChild(e);
3564
			}
3565
		}
3566
		return this;
3567
	}
3568
3569
	this.removeBookmark = function(b) {
3570
		this.rte.window.focus();
3571
		if (b.length==2) {
3572
			var s = this.rte.doc.getElementById(b[0]),
3573
				e = this.rte.doc.getElementById(b[1]);
3574
			if (s && e) {
3575
				s.parentNode.removeChild(s);
3576
				e.parentNode.removeChild(e);
3577
			}
3578
		}
3579
	}
3580
3581
	/**
3582
	 * Очищает кэш
3583
	 *
3584
	 * @return  selection
3585
	 **/
3586
	this.cleanCache = function() {
3587
		start = end = node = null;
3588
		return this;
3589
	}
3590
3591
3592
	/**
3593
	 * Возвращает ноду начала выделения
3594
	 *
3595
	 * @return  DOMElement
3596
	 **/
3597
	this.getStart = function() {
3598
		if (!start) {
3599
			var r = this.getRangeAt();
3600
			start = r.getStart();
3601
		}
3602
		return start;
3603
	}
3604
3605
	/**
3606
	 * Возвращает ноду конца выделения
3607
	 *
3608
	 * @return  DOMElement
3609
	 **/
3610
	this.getEnd = function() {
3611
		if (!end) {
3612
			var r = this.getRangeAt();
3613
			end = r.getEnd();
3614
		}
3615
		return end;
3616
	}
3617
3618
	/**
3619
	 * Возвращает выбраную ноду (общий контейнер всех выбранных нод)
3620
	 *
3621
	 * @return  Element
3622
	 **/
3623
	this.getNode = function() {
3624
		if (!node) {
3625
			node = this.rte.dom.findCommonAncestor(this.getStart(), this.getEnd());
3626
		}
3627
		return node;
3628
	}
3629
3630
3631
	/**
3632
	 * Возвращает массив выбранных нод
3633
	 *
3634
	 * @param   Object  o  параметры получения и обработки выбраных нод
3635
	 * @return  Array
3636
	 **/
3637
	this.selected = function(o) {
3638
		var opts = {
3639
			collapsed : false,  // вернуть выделение, даже если оно схлопнуто
3640
			blocks    : false,  // блочное выделение
3641
			filter    : false,  // фильтр результатов
3642
			wrap      : 'text', // что оборачиваем
3643
			tag       : 'span'  // во что оборачиваем
3644
		}
3645
		opts = $.extend({}, opts, o);
3646
3647
		// блочное выделение - ищем блочную ноду, но не таблицу
3648
		if (opts.blocks) {
3649
			var n  = this.getNode(), _n = null;
3650
			if (_n = this.rte.dom.selfOrParent(n, 'selectionBlock') ) {
3651
				return [_n];
3652
			}
3653
		}
3654
3655
		var sel    = this.selectedRaw(opts.collapsed, opts.blocks);
3656
		var ret    = [];
3657
		var buffer = [];
3658
		var ndx    = null;
3659
3660
		// оборачиваем ноды в буффере
3661
		function wrap() {
3662
3663
			function allowParagraph() {
3664
				for (var i=0; i < buffer.length; i++) {
3665
					if (buffer[i].nodeType == 1 && (self.rte.dom.selfOrParent(buffer[i], /^P$/) || $(buffer[i]).find('p').length>0)) {
3666
						return false;
3667
					}
3668
				};
3669
				return true;
3670
			}
3671
3672
			if (buffer.length>0) {
3673
				var tag  = opts.tag == 'p' && !allowParagraph() ? 'div' : opts.tag;
3674
				var n    = self.rte.dom.wrap(buffer, tag);
3675
				ret[ndx] = n;
3676
				ndx      = null;
3677
				buffer   = [];
3678
			}
3679
		}
3680
3681
		// добавляем ноды в буффер
3682
		function addToBuffer(n) {
3683
			if (n.nodeType == 1) {
3684
				if (/^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(n.nodeName)) {
3685
					$(n).find('td,th').each(function() {
3686
						var tag = opts.tag == 'p' && $(this).find('p').length>0 ? 'div' : opts.tag;
3687
						var n = self.rte.dom.wrapContents(this, tag);
3688
						return ret.push(n);
3689
					})
3690
				} else if (/^(CAPTION|TD|TH|LI|DT|DD)$/.test(n.nodeName)) {
3691
					var tag = opts.tag == 'p' && $(n).find('p').length>0 ? 'div' : opts.tag;
3692
					var n = self.rte.dom.wrapContents(n, tag);
3693
					return ret.push(n);
3694
				}
3695
			}
3696
			var prev = buffer.length>0 ? buffer[buffer.length-1] : null;
3697
			if (prev && prev != self.rte.dom.prev(n)) {
3698
				wrap();
3699
			}
3700
			buffer.push(n);
3701
			if (ndx === null) {
3702
				ndx = ret.length;
3703
				ret.push('dummy'); // заглушка для оборачиваемых элементов
3704
			}
3705
		}
3706
3707
		if (sel.nodes.length>0) {
3708
3709
			for (var i=0; i < sel.nodes.length; i++) {
3710
				var n = sel.nodes[i];
3711
					// первую и посл текстовые ноды разрезаем, если необходимо
3712
					 if (n.nodeType == 3 && (i==0 || i == sel.nodes.length-1) && $.trim(n.nodeValue).length>0) {
3713
						if (i==0 && sel.so>0) {
3714
							n = n.splitText(sel.so);
3715
						}
3716
						if (i == sel.nodes.length-1 && sel.eo>0) {
3717
							n.splitText(i==0 && sel.so>0 ? sel.eo - sel.so : sel.eo);
3718
						}
3719
					}
3720
3721
					switch (opts.wrap) {
3722
						// оборачиваем только текстовые ноды с br
3723
						case 'text':
3724
							if ((n.nodeType == 1 && n.nodeName == 'BR') || (n.nodeType == 3 && $.trim(n.nodeValue).length>0)) {
3725
								addToBuffer(n);
3726
							} else if (n.nodeType == 1) {
3727
								ret.push(n);
3728
							}
3729
							break;
3730
						// оборачиваем все инлайн элементы
3731
						case 'inline':
3732
							if (this.rte.dom.isInline(n)) {
3733
								addToBuffer(n);
3734
							} else if (n.nodeType == 1) {
3735
3736
								ret.push(n);
3737
							}
3738
							break;
3739
						// оборачиваем все
3740
						case 'all':
3741
							if (n.nodeType == 1 || !this.rte.dom.isEmpty(n)) {
3742
								addToBuffer(n);
3743
							}
3744
							break;
3745
						// ничего не оборачиваем
3746
						default:
3747
							if (n.nodeType == 1 || !this.rte.dom.isEmpty(n)) {
3748
								ret.push(n);
3749
							}
3750
					}
3751
			};
3752
			wrap();
3753
		}
3754
3755
		if (ret.length) {
3756
			this.rte.window.focus();
3757
3758
			this.select(ret[0], ret[ret.length-1]);
3759
		}
3760
		return opts.filter ? this.rte.dom.filter(ret, opts.filter) : ret;
3761
	}
3762
3763
	this.dump = function(ca, s, e, so, eo) {
3764
		var r = this.getRangeAt();
3765
		this.rte.log('commonAncestorContainer');
3766
		this.rte.log(ca || r.commonAncestorContainer);
3767
		// this.rte.log('commonAncestorContainer childs num')
3768
		// this/rte.log((ca||r.commonAncestorContainer).childNodes.length)
3769
		this.rte.log('startContainer');
3770
		this.rte.log(s || r.startContainer);
3771
		this.rte.log('startOffset: '+(so>=0 ? so : r.startOffset));
3772
		this.rte.log('endContainer');
3773
		this.rte.log(e||r.endContainer);
3774
		this.rte.log('endOffset: '+(eo>=0 ? eo : r.endOffset));
3775
	}
3776
3777
	/**
3778
	 * Возвращает массив выбранных нод, как есть
3779
	 *
3780
	 * @param   bool           возвращать если выделение схлопнуто
3781
	 * @param   bool           "блочное" выделение (текстовые ноды включаются полностью, не зависимо от offset)
3782
	 * @return  Array
3783
	 **/
3784
	this.selectedRaw = function(collapsed, blocks) {
3785
		var res = {so : null, eo : null, nodes : []};
3786
		var r   = this.getRangeAt(true);
3787
		var ca  = r.commonAncestorContainer;
3788
		var s, e;  // start & end nodes
3789
		var sf  = false; // start node fully selected
3790
		var ef  = false; // end node fully selected
3791
3792
		// возвращает true, если нода не текстовая или выделена полностью
3793
		function isFullySelected(n, s, e) {
3794
			if (n.nodeType == 3) {
3795
				e = e>=0 ? e : n.nodeValue.length;
3796
				return (s==0 && e==n.nodeValue.length) || $.trim(n.nodeValue).length == $.trim(n.nodeValue.substring(s, e)).length;
3797
			}
3798
			return true;
3799
		}
3800
3801
		// возвращает true, если нода пустая или в ней не выделено ни одного непробельного символа
3802
		function isEmptySelected(n, s, e) {
3803
			if (n.nodeType == 1) {
3804
				return self.rte.dom.isEmpty(n);
3805
			} else if (n.nodeType == 3) {
3806
				return $.trim(n.nodeValue.substring(s||0, e>=0 ? e : n.nodeValue.length)).length == 0;
3807
			}
3808
			return true;
3809
		}
3810
3811
3812
		//this.dump()
3813
		// начальная нода
3814
		if (r.startContainer.nodeType == 1) {
3815
			if (r.startOffset<r.startContainer.childNodes.length) {
3816
				s = r.startContainer.childNodes[r.startOffset];
3817
				res.so = s.nodeType == 1 ? null : 0;
3818
			} else {
3819
				s = r.startContainer.childNodes[r.startOffset-1];
3820
				res.so = s.nodeType == 1 ? null : s.nodeValue.length;
3821
			}
3822
		} else {
3823
			s = r.startContainer;
3824
			res.so = r.startOffset;
3825
		}
3826
3827
		// выделение схлопнуто
3828
		if (r.collapsed) {
3829
			if (collapsed) {
3830
				//  блочное выделение
3831
				if (blocks) {
3832
					s = realSelected(s);
3833
					if (!this.rte.dom.isEmpty(s) || (s = this.rte.dom.next(s))) {
3834
						res.nodes = [s];
3835
					}
3836
3837
					// добавляем инлайн соседей
3838
					if (this.rte.dom.isInline(s)) {
3839
						res.nodes = this.rte.dom.toLineStart(s).concat(res.nodes, this.rte.dom.toLineEnd(s));
3840
					}
3841
3842
					// offset для текстовых нод
3843
					if (res.nodes.length>0) {
3844
						res.so = res.nodes[0].nodeType == 1 ? null : 0;
3845
						res.eo = res.nodes[res.nodes.length-1].nodeType == 1 ? null : res.nodes[res.nodes.length-1].nodeValue.length;
3846
					}
3847
3848
				} else if (!this.rte.dom.isEmpty(s)) {
3849
					res.nodes = [s];
3850
				}
3851
3852
			}
3853
			return res;
3854
		}
3855
3856
		// конечная нода
3857
		if (r.endContainer.nodeType == 1) {
3858
			e = r.endContainer.childNodes[r.endOffset-1];
3859
			res.eo = e.nodeType == 1 ? null : e.nodeValue.length;
3860
		} else {
3861
			e = r.endContainer;
3862
			res.eo = r.endOffset;
3863
		}
3864
		// this.rte.log('select 1')
3865
		//this.dump(ca, s, e, res.so, res.eo)
3866
3867
		// начальная нода выделена полностью - поднимаемся наверх по левой стороне
3868
		if (s.nodeType == 1 || blocks || isFullySelected(s, res.so, s.nodeValue.length)) {
3869
//			this.rte.log('start text node is fully selected')
3870
			s = realSelected(s, ca, 'left');
3871
			sf = true;
3872
			res.so = s.nodeType == 1 ? null : 0;
3873
		}
3874
		// конечная нода выделена полностью - поднимаемся наверх по правой стороне
3875
		if (e.nodeType == 1 || blocks || isFullySelected(e, 0,  res.eo)) {
3876
//			this.rte.log('end text node is fully selected')
3877
			e = realSelected(e, ca, 'right');
3878
			ef = true;
3879
			res.eo = e.nodeType == 1 ? null : e.nodeValue.length;
3880
		}
3881
3882
		// блочное выделение - если ноды не элементы - поднимаемся к родителю, но ниже контейнера
3883
		if (blocks) {
3884
			if (s.nodeType != 1 && s.parentNode != ca && s.parentNode.nodeName != 'BODY') {
3885
				s = s.parentNode;
3886
				res.so = null;
3887
			}
3888
			if (e.nodeType != 1 && e.parentNode != ca && e.parentNode.nodeName != 'BODY') {
3889
				e = e.parentNode;
3890
				res.eo = null;
3891
			}
3892
		}
3893
3894
		// если контенер выделен полностью, поднимаемся наверх насколько можно
3895
		if (s.parentNode == e.parentNode && s.parentNode.nodeName != 'BODY' && (sf && this.rte.dom.isFirstNotEmpty(s)) && (ef && this.rte.dom.isLastNotEmpty(e))) {
3896
//			this.rte.log('common parent')
3897
			s = e = s.parentNode;
3898
			res.so = s.nodeType == 1 ? null : 0;
3899
			res.eo = e.nodeType == 1 ? null : e.nodeValue.length;
3900
		}
3901
		// начальная нода == конечной ноде
3902
		if (s == e) {
3903
//			this.rte.log('start is end')
3904
			if (!this.rte.dom.isEmpty(s)) {
3905
				res.nodes.push(s);
3906
			}
3907
			return res;
3908
		}
3909
		 // this.rte.log('start 2')
3910
		  //this.dump(ca, s, e, res.so, res.eo)
3911
3912
		// находим начальную и конечную точки - ноды из иерархии родителей начальной и конечно ноды, у которых родитель - контейнер
3913
		var sp = s;
3914
		while (sp.nodeName != 'BODY' && sp.parentNode !== ca && sp.parentNode.nodeName != 'BODY') {
3915
			sp = sp.parentNode;
3916
		}
3917
		//this.rte.log(s.nodeName)
3918
		// this.rte.log('start point')
3919
		// this.rte.log(sp)
3920
3921
		var ep = e;
3922
//		this.rte.log(ep)
3923
		while (ep.nodeName != 'BODY' && ep.parentNode !== ca && ep.parentNode.nodeName != 'BODY') {
3924
			// this.rte.log(ep)
3925
			ep = ep.parentNode;
3926
		}
3927
		// this.rte.log('end point')
3928
		// this.rte.log(ep)
3929
3930
3931
		//  если начальная нода не пустая - добавляем ее
3932
		if (!isEmptySelected(s, res.so, s.nodeType==3 ? s.nodeValue.length : null)) {
3933
			res.nodes.push(s);
3934
		}
3935
		// поднимаемся от начальной ноды до начальной точки
3936
		var n = s;
3937
		while (n !== sp) {
3938
			var _n = n;
3939
			while ((_n = this.rte.dom.next(_n))) {
3940
					res.nodes.push(_n);
3941
			}
3942
			n = n.parentNode;
3943
		}
3944
		// от начальной точки до конечной точки
3945
		n = sp;
3946
		while ((n = this.rte.dom.next(n)) && n!= ep ) {
3947
//			this.rte.log(n)
3948
			res.nodes.push(n);
3949
		}
3950
		// поднимаемся от конечной ноды до конечной точки, результат переворачиваем
3951
		var tmp = [];
3952
		n = e;
3953
		while (n !== ep) {
3954
			var _n = n;
3955
			while ((_n = this.rte.dom.prev(_n))) {
3956
				tmp.push(_n);
3957
			}
3958
			n = n.parentNode;
3959
		}
3960
		if (tmp.length) {
3961
			res.nodes = res.nodes.concat(tmp.reverse());
3962
		}
3963
		//  если конечная нода не пустая и != начальной - добавляем ее
3964
		if (!isEmptySelected(e, 0, e.nodeType==3 ? res.eo : null)) {
3965
			res.nodes.push(e);
3966
		}
3967
3968
		if (blocks) {
3969
			// добавляем инлайн соседей слева
3970
			if (this.rte.dom.isInline(s)) {
3971
				res.nodes = this.rte.dom.toLineStart(s).concat(res.nodes);
3972
				res.so    = res.nodes[0].nodeType == 1 ? null : 0;
3973
			}
3974
			// добавляем инлайн соседей справа
3975
			if (this.rte.dom.isInline(e)) {
3976
				res.nodes = res.nodes.concat(this.rte.dom.toLineEnd(e));
3977
				res.eo    = res.nodes[res.nodes.length-1].nodeType == 1 ? null : res.nodes[res.nodes.length-1].nodeValue.length;
3978
			}
3979
		}
3980
3981
		// все радуются! :)
3982
		return res;
3983
	}
3984
3985
}
3986
3987
})(jQuery);/**
3988
 * @class elRTE User interface controller
3989
 *
3990
 * @param  elRTE  rte объект-редактор
3991
 *
3992
 * @author:    Dmitry Levashov (dio) dio@std42.ru
3993
 * @todo: this.domElem.removeClass('disabled') - move to ui.update;
3994
 * @todo: add dom and selection as button members
3995
 * Copyright: Studio 42, http://www.std42.ru
3996
 **/
3997
(function($) {
3998
elRTE.prototype.ui = function(rte) {
3999
	this.rte      = rte;
4000
	this._buttons = [];
4001
	var self      = this,
4002
		tb        = this.rte.options.toolbars[rte.options.toolbar && rte.options.toolbars[rte.options.toolbar] ? rte.options.toolbar : 'normal'],
4003
		tbl       = tb.length,
4004
		p, pname, pl, n, c, b, i;
4005
4006
	// add prototype to all buttons
4007
	for (i in this.buttons) {
4008
		if (this.buttons.hasOwnProperty(i) && i != 'button') {
4009
			this.buttons[i].prototype = this.buttons.button.prototype;
4010
		}
4011
	}
4012
4013
	// create buttons and put on toolbar
4014
	while (tbl--) {
4015
		pname = tb[tbl];
4016
		p = $('<ul class="panel-'+pname+(tbl == 0 ? ' first' : '')+'" />').prependTo(this.rte.toolbar);
4017
		p.bind('mousedown', function(e) {
4018
			e.preventDefault();
4019
		})
4020
		pl = this.rte.options.panels[pname].length;
4021
		while (pl--) {
4022
			n = this.rte.options.panels[pname][pl];
4023
			c = this.buttons[n] || this.buttons.button;
4024
			this._buttons.push((b = new c(this.rte, n)));
4025
			p.prepend(b.domElem);
4026
		}
4027
	}
4028
4029
	this.update();
4030
4031
	this.disable = function() {
4032
		$.each(self._buttons, function() {
4033
			!this.active && this.domElem.addClass('disabled');
4034
		});
4035
	}
4036
4037
}
4038
4039
/**
4040
 * Обновляет кнопки - вызывает метод update() для каждой кнопки
4041
 *
4042
 * @return void
4043
 **/
4044
elRTE.prototype.ui.prototype.update = function(cleanCache) {
4045
	cleanCache && this.rte.selection.cleanCache();
4046
	var n    = this.rte.selection.getNode(),
4047
		p    = this.rte.dom.parents(n, '*'),
4048
		rtl = this.rte.rtl,
4049
		sep  = rtl ? ' &laquo; ' : ' &raquo; ',
4050
		path = '', name, i;
4051
4052
	function _name(n) {
4053
		var name = n.nodeName.toLowerCase();
4054
		n = $(n)
4055
		if (name == 'img') {
4056
			if (n.hasClass('elrte-media')) {
4057
				name = 'media';
4058
			} else if (n.hasClass('elrte-google-maps')) {
4059
				name = 'google map';
4060
			} else if (n.hasClass('elrte-yandex-maps')) {
4061
				name = 'yandex map';
4062
			} else if (n.hasClass('elrte-pagebreak')) {
4063
				name = 'pagebreak';
4064
			}
4065
		}
4066
		return name;
4067
	}
4068
4069
	if (n && n.nodeType == 1 && n.nodeName != 'BODY') {
4070
		p.unshift(n);
4071
	}
4072
4073
	if (!rtl) {
4074
		p = p.reverse();
4075
	}
4076
4077
	for (i=0; i < p.length; i++) {
4078
		path += (i>0 ? sep : '')+_name(p[i]);
4079
	}
4080
4081
	this.rte.statusbar.html(path);
4082
	$.each(this._buttons, function() {
4083
		this.update();
4084
	});
4085
	this.rte.window.focus();
4086
}
4087
4088
4089
4090
elRTE.prototype.ui.prototype.buttons = {
4091
4092
	/**
4093
	 * @class кнопка на toolbar редактора
4094
	 * реализует поведение по умолчанию и является родителем для других кнопок
4095
	 *
4096
	 * @param  elRTE  rte   объект-редактор
4097
	 * @param  String name  название кнопки (команда исполняемая document.execCommand())
4098
	 **/
4099
	button : function(rte, name) {
4100
		var self     = this;
4101
		this.rte     = rte;
4102
		this.active = false;
4103
		this.name    = name;
4104
		this.val     = null;
4105
		this.domElem = $('<li style="-moz-user-select:-moz-none" class="'+name+' rounded-3" name="'+name+'" title="'+this.rte.i18n(this.rte.options.buttons[name] || name)+'" unselectable="on" />')
4106
			.hover(
4107
				function() { $(this).addClass('hover'); },
4108
				function() { $(this).removeClass('hover'); }
4109
			)
4110
			.click( function(e) {
4111
				e.stopPropagation();
4112
				e.preventDefault();
4113
				if (!$(this).hasClass('disabled')) {
4114
					self.command();
4115
				}
4116
				self.rte.window.focus();
4117
			});
4118
	}
4119
}
4120
4121
/**
4122
 * Обработчик нажатия на кнопку на тулбаре. Выполнение команды или открытие окна|меню и тд
4123
 *
4124
 * @return void
4125
 **/
4126
elRTE.prototype.ui.prototype.buttons.button.prototype.command = function() {
4127
	this.rte.history.add();
4128
	try {
4129
		this.rte.doc.execCommand(this.name, false, this.val);
4130
	} catch(e) {
4131
		return this.rte.log('commands failed: '+this.name);
4132
	}
4133
4134
	this.rte.ui.update(true);
4135
}
4136
4137
/**
4138
 * Обновляет состояние кнопки
4139
 *
4140
 * @return void
4141
 **/
4142
elRTE.prototype.ui.prototype.buttons.button.prototype.update = function() {
4143
	try {
4144
		if (!this.rte.doc.queryCommandEnabled(this.name)) {
4145
			return this.domElem.addClass('disabled');
4146
		} else {
4147
			this.domElem.removeClass('disabled');
4148
		}
4149
	} catch (e) {
4150
		return;
4151
	}
4152
	try {
4153
		if (this.rte.doc.queryCommandState(this.name)) {
4154
			this.domElem.addClass('active');
4155
		} else {
4156
			this.domElem.removeClass('active');
4157
		}
4158
	} catch (e) { }
4159
}
4160
4161
})(jQuery);/*
4162
 * Misc utils for elRTE
4163
 *
4164
 * @param Object rte - editor
4165
 * @todo Подумать, что из этого реально нужно и навести порядок. Возможно часть перенести в ellib
4166
 *
4167
 * @author:    Dmitry Levashov (dio) dio@std42.ru
4168
 * Copyright: Studio 42, http://www.std42.ru
4169
 */
4170
(function($) {
4171
elRTE.prototype.utils = function(rte) {
4172
	this.rte     = rte;
4173
	this.url     = null;
4174
	// domo arigato, Steave, http://blog.stevenlevithan.com/archives/parseuri
4175
	this.reg     = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
4176
	this.baseURL = '';
4177
	this.path    = '';
4178
	/**
4179
	 * entities map
4180
	 **/
4181
	this.entities = {'&' : '&amp;', '"' : '&quot;', '<' : '&lt;', '>' : '&gt;'};
4182
	/**
4183
	 * entities regexp
4184
	 **/
4185
	this.entitiesRegExp = /[<>&\"]/g;
4186
	/**
4187
	 * media info
4188
	 **/
4189
	this.media = [{
4190
			type     : 'application/x-shockwave-flash',
4191
			classid  : ['clsid:d27cdb6e-ae6d-11cf-96b8-444553540000'],
4192
			codebase : 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'
4193
		}, {
4194
			type     : 'application/x-director',
4195
			classid  : ['clsid:166b1bca-3f9c-11cf-8075-444553540000'],
4196
			codebase : 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0'
4197
		}, {
4198
			type     : 'application/x-mplayer2',
4199
			classid  : ['clsid:6bf52a52-394a-11d3-b153-00c04f79faa6', 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95', 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a'],
4200
			codebase : 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'
4201
		}, {
4202
			type     : 'video/quicktime',
4203
			classid  : ['clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b'],
4204
			codebase : 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0'
4205
		}, {
4206
			type     : 'audio/x-pn-realaudio-plugin',
4207
			classid  : ['clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa'],
4208
			codebase : 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'
4209
		}];
4210
4211
	// rgb color regexp
4212
	this.rgbRegExp = /\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*/i;
4213
	// regexp to detect color in border/background properties
4214
	this.colorsRegExp = /aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|rgb\s*\([^\)]+\)/i;
4215
	// web safe colors
4216
	this.colors = {
4217
		aqua    : '#00ffff',
4218
		black   : '#000000',
4219
		blue    : '#0000ff',
4220
		fuchsia : '#ff00ff',
4221
		gray    : '#808080',
4222
		green   : '#008000',
4223
		lime    : '#00ff00',
4224
		maroon  : '#800000',
4225
		navy    : '#000080',
4226
		olive   : '#808000',
4227
		orange  : '#ffa500',
4228
		purple  : '#800080',
4229
		red     : '#ff0000',
4230
		silver  : '#c0c0c0',
4231
		teal    : '#008080',
4232
		white   : '#fffffff',
4233
		yellow  : '#ffff00'
4234
	}
4235
4236
	var self     = this;
4237
4238
	this.rgb2hex = function(str) {
4239
		return this.color2Hex(''+str)
4240
	}
4241
4242
	this.toPixels = function(num) {
4243
		var m = num.match(/([0-9]+\.?[0-9]*)\s*(px|pt|em|%)/);
4244
		if (m) {
4245
			num  = m[1];
4246
			unit = m[2];
4247
		}
4248
		if (num[0] == '.') {
4249
			num = '0'+num;
4250
		}
4251
		num = parseFloat(num);
4252
4253
		if (isNaN(num)) {
4254
			return '';
4255
		}
4256
		var base = parseInt($(document.body).css('font-size')) || 16;
4257
		switch (unit) {
4258
			case 'em': return parseInt(num*base);
4259
			case 'pt': return parseInt(num*base/12);
4260
			case '%' : return parseInt(num*base/100);
4261
		}
4262
		return num;
4263
	}
4264
4265
	// TODO: add parse rel path ../../etc
4266
	this.absoluteURL = function(url) {
4267
		!this.url && this._url();
4268
		url = $.trim(url);
4269
		if (!url) {
4270
			return '';
4271
		}
4272
		// ссылки на якоря не переводим в абс
4273
		if (url[0] == '#') {
4274
			return url;
4275
		}
4276
		var u = this.parseURL(url);
4277
4278
		if (!u.host && !u.path && !u.anchor) {
4279
			//this.rte.log('Invalid URL: '+url)
4280
			return '';
4281
		}
4282
		if (!this.rte.options.absoluteURLs) {
4283
			return url;
4284
		}
4285
		if (u.protocol) {
4286
			//this.rte.log('url already absolute: '+url);
4287
			return url;
4288
		}
4289
		if (u.host && (u.host.indexOf('.')!=-1 || u.host == 'localhost')) {
4290
			//this.rte.log('no protocol');
4291
			return this.url.protocol+'://'+url;
4292
		}
4293
		if (url[0] == '/') {
4294
			url = this.baseURL+url;
4295
		} else {
4296
			if (url.indexOf('./') == 0) {
4297
				url = url.substring(2);
4298
			}
4299
			url = this.baseURL+this.path+url;
4300
		}
4301
		return url;
4302
	}
4303
4304
	this.parseURL = function(url) {
4305
		var u   = url.match(this.reg);
4306
		var ret = {};
4307
		$.each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(i) {
4308
			ret[this] = u[i];
4309
		});
4310
		if (!ret.host.match(/[a-z0-9]/i)) {
4311
			ret.host = '';
4312
		}
4313
		return ret;
4314
	}
4315
4316
	this.trimEventCallback = function(c) {
4317
		c = c ? c.toString() : '';
4318
		return $.trim(c.replace(/\r*\n/mg, '').replace(/^function\s*on[a-z]+\s*\(\s*event\s*\)\s*\{(.+)\}$/igm, '$1'));
4319
	}
4320
4321
	this._url = function() {
4322
		this.url     = this.parseURL(window.location.href);
4323
		this.baseURL = this.url.protocol+'://'+(this.url.userInfo ?  parts.userInfo+'@' : '')+this.url.host+(this.url.port ? ':'+this.url.port : '');
4324
		this.path    = !this.url.file ? this.url.path : this.url.path.substring(0, this.url.path.length - this.url.file.length);
4325
	}
4326
4327
4328
	/**
4329
	 * Create object (map) from array
4330
	 *
4331
	 * @param   Array
4332
	 * @return  Object
4333
	 **/
4334
	this.makeObject = function(o) {
4335
		var m = {};
4336
		$.each(o, function(i, e) {
4337
			m[e] = e;
4338
		});
4339
		return m;
4340
	}
4341
4342
	/**
4343
	 * Encode entities in string
4344
	 *
4345
	 * @param   String
4346
	 * @return  String
4347
	 **/
4348
	this.encode = function(s) {
4349
		var e = this.entities;
4350
		return (''+s).replace(this.entitiesRegExp, function(c) {
4351
			return e[c];
4352
		});
4353
	}
4354
4355
	/**
4356
	 * Decode entities in string
4357
	 *
4358
	 * @param   String
4359
	 * @return  String
4360
	 **/
4361
	this.decode = function(s) {
4362
		return $('<div/>').html(s||'').text();
4363
	}
4364
4365
	/**
4366
	 * Parse style string into object
4367
	 *
4368
	 * @param   String
4369
	 * @return  Object
4370
	 **/
4371
	this.parseStyle = function(s) {
4372
		var st = {}, a = this.rte.options.allowBrowsersSpecStyles, t, n, v;
4373
4374
		if (typeof(s) == 'string' && s.length) {
4375
			$.each(s.replace(/&quot;/gi, "'").split(';'), function() {
4376
				t = this.toString().split(':');
4377
				if (t[0] && t[1]) {
4378
					n = $.trim(t[0]).toLowerCase();
4379
					v = $.trim(t[1]);
4380
					if (n == 'color' || n == 'background-color') {
4381
						v = v.toLowerCase();
4382
					}
4383
					if (n && v && (a || n.substring(0, 1) != '-')) {
4384
						st[n] = v;
4385
					}
4386
				}
4387
			});
4388
		}
4389
		return st;
4390
	}
4391
4392
4393
	/**
4394
	 * Compact some style properties and convert colors in hex
4395
	 *
4396
	 * @param   Object
4397
	 * @return  Object
4398
	 **/
4399
	this.compactStyle = function(s) {
4400
		var self = this;
4401
4402
		if (s.border == 'medium none') {
4403
			delete s.border;
4404
		}
4405
4406
		$.each(s, function(n, v) {
4407
			if (/color$/i.test(n)) {
4408
				s[n] = self.color2Hex(v);
4409
			} else if (/^(border|background)$/i.test(n)) {
4410
				s[n] = v.replace(self.colorsRegExp, function(m) {
4411
					return self.color2Hex(m);
4412
				});
4413
			}
4414
		});
4415
4416
		if (s['border-width']) {
4417
			s.border = s['border-width']+' '+(s['border-style']||'solid')+' '+(s['border-color']||'#000');
4418
			delete s['border-width'];
4419
			delete s['border-style'];
4420
			delete s['border-color'];
4421
		}
4422
4423
		if (s['background-image']) {
4424
			s.background = (s['background-color']+' ')||''+s['background-image']+' '+s['background-position']||'0 0'+' '+s['background-repeat']||'repeat';
4425
			delete s['background-image'];
4426
			delete['background-image'];
4427
			delete['background-position'];
4428
			delete['background-repeat'];
4429
		}
4430
4431
		if (s['margin-top'] && s['margin-right'] && s['margin-bottom'] && s['margin-left']) {
4432
			s.margin = s['margin-top']+' '+s['margin-right']+' '+s['margin-bottom']+' '+s['margin-left'];
4433
			delete s['margin-top'];
4434
			delete s['margin-right'];
4435
			delete s['margin-bottom'];
4436
			delete s['margin-left'];
4437
		}
4438
4439
		if (s['padding-top'] && s['padding-right'] && s['padding-bottom'] && s['padding-left']) {
4440
			s.padding = s['padding-top']+' '+s['padding-right']+' '+s['padding-bottom']+' '+s['padding-left'];
4441
			delete s['padding-top'];
4442
			delete s['padding-right'];
4443
			delete s['padding-bottom'];
4444
			delete s['padding-left'];
4445
		}
4446
4447
		if (s['list-style-type'] || s['list-style-position'] || s['list-style-image']) {
4448
			s['list-style'] = $.trim(s['list-style-type']||' '+s['list-style-position']||''+s['list-style-image']||'');
4449
			delete s['list-style-type'];
4450
			delete s['list-style-position'];
4451
			delete s['list-style-image'];
4452
		}
4453
4454
		return s;
4455
	}
4456
4457
	/**
4458
	 * Serialize style object into string
4459
	 *
4460
	 * @param   Object  style map
4461
	 * @param   Boolean flag - compact style?
4462
	 * @return  String
4463
	 **/
4464
	this.serializeStyle = function(o, c) {
4465
		var s = [];
4466
		// c=true
4467
		$.each(c ? this.compactStyle(o) : o, function(n, v) {
4468
			v && s.push(n+':'+v);
4469
		});
4470
		return s.join(';');
4471
	}
4472
4473
	/**
4474
	 * Parse class string into object
4475
	 *
4476
	 * @param   String
4477
	 * @return  Object
4478
	 **/
4479
	this.parseClass = function(c) {
4480
		c = $.trim(c);
4481
		// this.rte.log(c)
4482
		return c.length ? this.makeObject(c.split(/\s+/)) : {};
4483
		return c.length ? c.split(/\s+/) : [];
4484
	}
4485
4486
	/**
4487
	 * Serialize class object into string
4488
	 *
4489
	 * @param   Object
4490
	 * @return  String
4491
	 **/
4492
	this.serializeClass = function(c) {
4493
		// return c.join(' ')
4494
		var s = [];
4495
		$.each(c, function(n) {
4496
			s.push(n);
4497
		});
4498
		return s.join(' ');
4499
	}
4500
4501
	/**
4502
	 * Return required media type info
4503
	 *
4504
	 * @param   String  mimetype
4505
	 * @param   String  classid
4506
	 * @return  Object
4507
	 **/
4508
	this.mediaInfo = function(t, c) {
4509
		var l = this.media.length;
4510
4511
		while (l--) {
4512
			if (t === this.media[l].type || (c && $.inArray(c, this.media[l].classid) != -1)) {
4513
				return this.media[l];
4514
			}
4515
		}
4516
	}
4517
4518
	/**
4519
	 * Return color hex value
4520
	 *
4521
	 * @param   String   color name or rgb
4522
	 * @return  String
4523
	 **/
4524
	this.color2Hex = function(c) {
4525
		var m;
4526
4527
		if (c.indexOf('#') === 0) {
4528
			return c;
4529
		}
4530
4531
		c = c||'';
4532
		function hex(s) {
4533
			s = parseInt(s).toString(16);
4534
			return s.length > 1 ? s : '0' + s;
4535
		};
4536
4537
		if (this.colors[c]) {
4538
			return this.colors[c];
4539
		}
4540
		if ((m = c.match(this.rgbRegExp))) {
4541
			return '#'+hex(m[1])+hex(m[2])+hex(m[3]);
4542
		}
4543
		return '';
4544
	}
4545
4546
4547
4548
4549
}
4550
4551
})(jQuery);/**
4552
 * @class w3cRange  - w3c text range emulation for "strange" browsers
4553
 *
4554
 * @param  elRTE  rte  объект-редактор
4555
 *
4556
 * @author:    Dmitry Levashov (dio) dio@std42.ru
4557
 * Copyright: Studio 42, http://www.std42.ru
4558
 **/
4559
(function($) {
4560
elRTE.prototype.w3cRange = function(rte) {
4561
	var self                     = this;
4562
	this.rte                     = rte;
4563
	this.r                       = null;
4564
	this.collapsed               = true;
4565
	this.startContainer          = null;
4566
	this.endContainer            = null;
4567
	this.startOffset             = 0;
4568
	this.endOffset               = 0;
4569
	this.commonAncestorContainer = null;
4570
4571
	this.range = function() {
4572
		try {
4573
			this.r = this.rte.window.document.selection.createRange();
4574
		} catch(e) {
4575
			this.r = this.rte.doc.body.createTextRange();
4576
		}
4577
		return this.r;
4578
	}
4579
4580
	this.insertNode = function(html) {
4581
		this.range();
4582
		self.r.collapse(false)
4583
		var r = self.r.duplicate();
4584
		r.pasteHTML(html);
4585
	}
4586
4587
	this.getBookmark = function() {
4588
		this.range();
4589
		if (this.r.item) {
4590
			var n = this.r.item(0);
4591
			this.r = this.rte.doc.body.createTextRange();
4592
			this.r.moveToElementText(n);
4593
		}
4594
		return this.r.getBookmark();
4595
	}
4596
4597
	this.moveToBookmark = function(bm) {
4598
		this.rte.window.focus();
4599
		this.range().moveToBookmark(bm);
4600
		this.r.select();
4601
	}
4602
4603
	/**
4604
	 * Обновляет данные о выделенных нодах
4605
	 *
4606
	 * @return void
4607
	 **/
4608
	this.update = function() {
4609
4610
		function _findPos(start) {
4611
			var marker = '\uFEFF';
4612
			var ndx = offset = 0;
4613
			var r = self.r.duplicate();
4614
			r.collapse(start);
4615
			var p = r.parentElement();
4616
			if (!p || p.nodeName == 'HTML') {
4617
				return {parent : self.rte.doc.body, ndx : ndx, offset : offset};
4618
			}
4619
4620
			r.pasteHTML(marker);
4621
4622
			childs = p.childNodes;
4623
			for (var i=0; i < childs.length; i++) {
4624
				var n = childs[i];
4625
				if (i>0 && (n.nodeType!==3 || childs[i-1].nodeType !==3)) {
4626
					ndx++;
4627
				}
4628
				if (n.nodeType !== 3) {
4629
					offset = 0;
4630
				} else {
4631
					var pos = n.nodeValue.indexOf(marker);
4632
					if (pos !== -1) {
4633
						offset += pos;
4634
						break;
4635
					}
4636
					offset += n.nodeValue.length;
4637
				}
4638
			};
4639
			r.moveStart('character', -1);
4640
			r.text = '';
4641
			return {parent : p, ndx : Math.min(ndx, p.childNodes.length-1), offset : offset};
4642
		}
4643
4644
		this.range();
4645
		this.startContainer = this.endContainer = null;
4646
4647
		if (this.r.item) {
4648
			this.collapsed = false;
4649
			var i = this.r.item(0);
4650
			this.setStart(i.parentNode, this.rte.dom.indexOf(i));
4651
			this.setEnd(i.parentNode, this.startOffset+1);
4652
		} else {
4653
			this.collapsed = this.r.boundingWidth == 0;
4654
			var start = _findPos(true);
4655
			var end   = _findPos(false);
4656
4657
			start.parent.normalize();
4658
			end.parent.normalize();
4659
			start.ndx = Math.min(start.ndx, start.parent.childNodes.length-1);
4660
			end.ndx = Math.min(end.ndx, end.parent.childNodes.length-1);
4661
			if (start.parent.childNodes[start.ndx].nodeType && start.parent.childNodes[start.ndx].nodeType == 1) {
4662
				this.setStart(start.parent, start.ndx);
4663
			} else {
4664
				this.setStart(start.parent.childNodes[start.ndx], start.offset);
4665
			}
4666
			if (end.parent.childNodes[end.ndx].nodeType && end.parent.childNodes[end.ndx].nodeType == 1) {
4667
				this.setEnd(end.parent, end.ndx);
4668
			} else {
4669
				this.setEnd(end.parent.childNodes[end.ndx], end.offset);
4670
			}
4671
			// this.dump();
4672
			this.select();
4673
		}
4674
		return this;
4675
	}
4676
4677
	this.isCollapsed = function() {
4678
		this.range();
4679
		this.collapsed = this.r.item ? false : this.r.boundingWidth == 0;
4680
		return this.collapsed;
4681
	}
4682
4683
	/**
4684
	 * "Схлопывает" выделение
4685
	 *
4686
	 * @param  bool  toStart - схлопывать выделение к началу или к концу
4687
	 * @return void
4688
	 **/
4689
	this.collapse = function(toStart) {
4690
		this.range();
4691
		if (this.r.item) {
4692
			var n = this.r.item(0);
4693
			this.r = this.rte.doc.body.createTextRange();
4694
			this.r.moveToElementText(n);
4695
		}
4696
		this.r.collapse(toStart);
4697
		this.r.select();
4698
		this.collapsed = true;
4699
	}
4700
4701
	this.getStart = function() {
4702
		this.range();
4703
		if (this.r.item) {
4704
			return this.r.item(0);
4705
		}
4706
		var r = this.r.duplicate();
4707
		r.collapse(true);
4708
		var s = r.parentElement();
4709
		return s && s.nodeName == 'BODY' ? s.firstChild : s;
4710
	}
4711
4712
4713
	this.getEnd = function() {
4714
		this.range();
4715
		if (this.r.item) {
4716
			return this.r.item(0);
4717
		}
4718
		var r = this.r.duplicate();
4719
		r.collapse(false);
4720
		var e = r.parentElement();
4721
		return e && e.nodeName == 'BODY' ? e.lastChild : e;
4722
	}
4723
4724
4725
	/**
4726
	 * Устанавливает начaло выделения на указаную ноду
4727
	 *
4728
	 * @param  Element  node    нода
4729
	 * @param  Number   offset  отступ от начала ноды
4730
	 * @return void
4731
	 **/
4732
	this.setStart = function(node, offset) {
4733
		this.startContainer = node;
4734
		this.startOffset    = offset;
4735
		if (this.endContainer) {
4736
			this.commonAncestorContainer = this.rte.dom.findCommonAncestor(this.startContainer, this.endContainer);
4737
		}
4738
	}
4739
4740
	/**
4741
	 * Устанавливает конец выделения на указаную ноду
4742
	 *
4743
	 * @param  Element  node    нода
4744
	 * @param  Number   offset  отступ от конца ноды
4745
	 * @return void
4746
	 **/
4747
	this.setEnd = function(node, offset) {
4748
		this.endContainer = node;
4749
		this.endOffset    = offset;
4750
		if (this.startContainer) {
4751
			this.commonAncestorContainer = this.rte.dom.findCommonAncestor(this.startContainer, this.endContainer);
4752
		}
4753
	}
4754
4755
	/**
4756
	 * Устанавливает начaло выделения перед указаной нодой
4757
	 *
4758
	 * @param  Element  node    нода
4759
	 * @return void
4760
	 **/
4761
	this.setStartBefore = function(n) {
4762
		if (n.parentNode) {
4763
			this.setStart(n.parentNode, this.rte.dom.indexOf(n));
4764
		}
4765
	}
4766
4767
	/**
4768
	 * Устанавливает начaло выделения после указаной ноды
4769
	 *
4770
	 * @param  Element  node    нода
4771
	 * @return void
4772
	 **/
4773
	this.setStartAfter = function(n) {
4774
		if (n.parentNode) {
4775
			this.setStart(n.parentNode, this.rte.dom.indexOf(n)+1);
4776
		}
4777
	}
4778
4779
	/**
4780
	 * Устанавливает конец выделения перед указаной нодой
4781
	 *
4782
	 * @param  Element  node    нода
4783
	 * @return void
4784
	 **/
4785
	this.setEndBefore = function(n) {
4786
		if (n.parentNode) {
4787
			this.setEnd(n.parentNode, this.rte.dom.indexOf(n));
4788
		}
4789
	}
4790
4791
	/**
4792
	 * Устанавливает конец выделения после указаной ноды
4793
	 *
4794
	 * @param  Element  node    нода
4795
	 * @return void
4796
	 **/
4797
	this.setEndAfter = function(n) {
4798
		if (n.parentNode) {
4799
			this.setEnd(n.parentNode, this.rte.dom.indexOf(n)+1);
4800
		}
4801
	}
4802
4803
	/**
4804
	 * Устанавливает новое выделение после изменений
4805
	 *
4806
	 * @return void
4807
	 **/
4808
	this.select = function() {
4809
		// thanks tinymice authors
4810
		function getPos(n, o) {
4811
			if (n.nodeType != 3) {
4812
				return -1;
4813
			}
4814
			var c   ='\uFEFF';
4815
			var val = n.nodeValue;
4816
			var r   = self.rte.doc.body.createTextRange();
4817
			n.nodeValue = val.substring(0, o) + c + val.substring(o);
4818
			r.moveToElementText(n.parentNode);
4819
			r.findText(c);
4820
			var p = Math.abs(r.moveStart('character', -0xFFFFF));
4821
			n.nodeValue = val;
4822
			return p;
4823
		};
4824
4825
		this.r = this.rte.doc.body.createTextRange();
4826
		var so = this.startOffset;
4827
		var eo = this.endOffset;
4828
		var s = this.startContainer.nodeType == 1
4829
			? this.startContainer.childNodes[Math.min(so, this.startContainer.childNodes.length - 1)]
4830
			: this.startContainer;
4831
		var e = this.endContainer.nodeType == 1
4832
			? this.endContainer.childNodes[Math.min(so == eo ? eo : eo - 1, this.endContainer.childNodes.length - 1)]
4833
			: this.endContainer;
4834
4835
		if (this.collapsed) {
4836
			if (s.nodeType == 3) {
4837
				var p = getPos(s, so);
4838
				this.r.move('character', p);
4839
			} else {
4840
				this.r.moveToElementText(s);
4841
				this.r.collapse(true);
4842
			}
4843
		} else {
4844
			var r  = this.rte.doc.body.createTextRange();
4845
			var sp = getPos(s, so);
4846
			var ep = getPos(e, eo);
4847
			if (s.nodeType == 3) {
4848
				this.r.move('character', sp);
4849
			} else {
4850
				this.r.moveToElementText(s);
4851
			}
4852
			if (e.nodeType == 3) {
4853
				r.move('character', ep);
4854
			} else {
4855
				r.moveToElementText(e);
4856
			}
4857
			this.r.setEndPoint('EndToEnd', r);
4858
		}
4859
4860
		try {
4861
			this.r.select();
4862
		} catch(e) {
4863
4864
		}
4865
		if (r) {
4866
			r = null;
4867
		}
4868
	}
4869
4870
	this.dump = function() {
4871
		this.rte.log('collapsed: '+this.collapsed);
4872
		//this.rte.log('commonAncestorContainer: '+this.commonAncestorContainer.nodeName||'#text')
4873
		this.rte.log('startContainer: '+(this.startContainer ? this.startContainer.nodeName : 'non'));
4874
		this.rte.log('startOffset: '+this.startOffset);
4875
		this.rte.log('endContainer: '+(this.endContainer ? this.endContainer.nodeName : 'none'));
4876
		this.rte.log('endOffset: '+this.endOffset);
4877
	}
4878
4879
}
4880
})(jQuery);
4881
(function($) {
4882
	elRTE.prototype.ui.prototype.buttons.about = function(rte, name)  {
4883
4884
		this.constructor.prototype.constructor.call(this, rte, name);
4885
		this.active  = true;
4886
		this.command = function() {
4887
			var opts, d, txt;
4888
4889
			opts = {
4890
				rtl : rte.rtl,
4891
				submit : function(e, d) {  d.close(); },
4892
				dialog : {
4893
					width : 560,
4894
					title : this.rte.i18n('About this software'),
4895
					buttons     : {
4896
						Ok : function() { $(this).dialog('destroy'); }
4897
					}
4898
				}
4899
			}
4900
4901
			txt = '<div class="elrte-logo"></div><h3>'+this.rte.i18n('About elRTE')+'</h3><br clear="all"/>'
4902
				+'<div class="elrte-ver">'+this.rte.i18n('Version')+': '+this.rte.version+' ('+this.rte.build+')</div>'
4903
				+'<div class="elrte-ver">jQuery: '+$('<div/>').jquery+'</div>'
4904
				+'<div class="elrte-ver">jQueryUI: '+$.ui.version+'</div>'
4905
				+'<div class="elrte-ver">'+this.rte.i18n('Licence')+': BSD Licence</div>'
4906
				+'<p>'
4907
				+this.rte.i18n('elRTE is an open-source JavaScript based WYSIWYG HTML-editor.')+'<br/>'
4908
				+this.rte.i18n('Main goal of the editor - simplify work with text and formating (HTML) on sites, blogs, forums and other online services.')+'<br/>'
4909
				+this.rte.i18n('You can use it in any commercial or non-commercial projects.')
4910
				+'</p>'
4911
				+'<h4>'+this.rte.i18n('Authors')+'</h4>'
4912
				+'<table class="elrte-authors">'
4913
				+'<tr><td>Dmitry (dio) Levashov &lt;dio@std42.ru&gt;</td><td>'+this.rte.i18n('Chief developer')+'</td></tr>'
4914
				+'<tr><td>Troex Nevelin &lt;troex@fury.scancode.ru&gt;</td><td>'+this.rte.i18n('Developer, tech support')+'</td></tr>'
4915
				+'<tr><td>Valentin Razumnyh &lt;content@std42.ru&gt;</td><td>'+this.rte.i18n('Interface designer')+'</td></tr>'
4916
				+'<tr><td>Evgeny eSabbath &lt;sabbath.codemg@gmail.com&gt;</td><td>'+this.rte.i18n('Developer')+'</td></tr>'
4917
				+'<tr><td>Andrzej Borowicz &lt;eltre@borowicz.info&gt;</td><td>'+this.rte.i18n('Polish localization')+'</td></tr>'
4918
				+'<tr><td>Artem Vasiliev</td><td>'+this.rte.i18n('Ukranian localization')+'</td></tr>'
4919
				+'<tr><td>Francois Mazerolle &lt;fmaz008@gmail.com&gt;</td><td>'+this.rte.i18n('French localization')+'</td></tr>'
4920
				+'<tr><td>Kurt Aerts</td><td>'+this.rte.i18n('Dutch localization')+'</td></tr>'
4921
				+'<tr><td>Michal Marek &lt;fmich.marek@gmail.com&gt;</td><td>'+this.rte.i18n('Czech localization')+'</td></tr>'
4922
				+'<tr><td>Ricardo Obregón &lt;robregonm@gmail.com&gt;</td><td>'+this.rte.i18n('Spanish localization')+'</td></tr>'
4923
				+'<tr><td>Saleh Souzanchi &lt;saleh.souzanchi@gmail.com&gt;</td><td>'+this.rte.i18n('Persian (farsi) localization')+'</td></tr>'
4924
				+'<tr><td>Tawfek Daghistani &lt;tawfekov@gmail.com&gt;</td><td>'+this.rte.i18n('Arabic localization')+', '+this.rte.i18n('RTL support')+'</td></tr>'
4925
				+'<tr><td>Tad &lt;tad0616@gmail.com&gt;</td><td>'+this.rte.i18n('Traditional Chinese localization')+'</td></tr>'
4926
				+'<tr><td>Tomoaki Yoshida &lt;info@yoshida-studio.jp&gt;</td><td>'+this.rte.i18n('Japanese localization')+'</td></tr>'
4927
				+'<tr><td>Uldis Plotiņš &lt;uldis.plotins@gmail.com&gt;</td><td>'+this.rte.i18n('Latvian localization')+'</td></tr>'
4928
				+'<tr><td>Vasiliy Razumnyh &lt;rvn@std42.ru&gt;</td><td>'+this.rte.i18n('German localization')+'</td></tr>'
4929
				+'<tr><td>Viktor Tamas &lt;tamas.viktor@totalstudio.hu&gt;</td><td>'+this.rte.i18n('Hungarian localization')+'</td></tr>'
4930
				+'<tr><td>Ugo Punzolo, &lt;sadraczerouno@gmail.com&gt;</td><td>'+this.rte.i18n('Italian localization')+'</td></tr>'
4931
				+'</table>'
4932
				+'<div class="elrte-copy">Copyright &copy; 2009-2010, <a href="http://www.std42.ru">Studio 42 LTD</a></div>'
4933
				+'<div class="elrte-copy">'+this.rte.i18n('For more information about this software visit the')+' <a href="http://elrte.org">'+this.rte.i18n('elRTE website')+'.</a></div>'
4934
				+'<div class="elrte-copy">Twitter: <a href="http://twitter.com/elrte_elfinder">elrte_elfinder</a></div>';
4935
4936
			d = new elDialogForm(opts);
4937
			d.append(txt);
4938
			d.open();
4939
		}
4940
4941
		this.update = function() {
4942
			this.domElem.removeClass('disabled');
4943
		}
4944
4945
	}
4946
4947
})(jQuery);
4948
/**
4949
 * @class кнопка - Закладка (открывает диалоговое окно)
4950
 *
4951
 * @param  elRTE  rte   объект-редактор
4952
 * @param  String name  название кнопки
4953
 *
4954
 * @author:    Dmitry Levashov (dio) dio@std42.ru
4955
 **/
4956
(function($) {
4957
elRTE.prototype.ui.prototype.buttons.anchor = function(rte, name) {
4958
	this.constructor.prototype.constructor.call(this, rte, name);
4959
	this.input = $('<input type="text" />').attr('name', 'anchor').attr('size', '16')
4960
	var self = this;
4961
4962
	this.command = function() {
4963
		var opts = {
4964
			rtl : this.rte.rtl,
4965
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); d.close(); self.set();  },
4966
			dialog : {
4967
				title : this.rte.i18n('Bookmark')
4968
			}
4969
		}
4970
4971
4972
		this.anchor = this.rte.dom.selfOrParentAnchor(this.rte.selection.getEnd()) || rte.dom.create('a');
4973
		!this.rte.selection.collapsed() && this.rte.selection.collapse(false);
4974
		this.input.val($(this.anchor).addClass('el-rte-anchor').attr('name'));
4975
		this.rte.selection.saveIERange();
4976
		var d = new elDialogForm(opts);
4977
		d.append([this.rte.i18n('Bookmark name'), this.input], null, true).open();
4978
		setTimeout(function() { self.input.focus()}, 20);
4979
	}
4980
4981
	this.update = function() {
4982
		var n = this.rte.selection.getNode();
4983
		if (this.rte.dom.selfOrParentLink(n)) {
4984
			this.domElem.addClass('disabled');
4985
		} else if (this.rte.dom.selfOrParentAnchor(n)) {
4986
			this.domElem.removeClass('disabled').addClass('active');
4987
		} else {
4988
			this.domElem.removeClass('disabled').removeClass('active');
4989
		}
4990
	}
4991
4992
	this.set = function() {
4993
		var n = $.trim(this.input.val());
4994
4995
		if (n) {
4996
			this.rte.history.add();
4997
			if (!this.anchor.parentNode) {
4998
				this.rte.selection.insertHtml('<a name="'+n+'" title="'+this.rte.i18n('Bookmark')+': '+n+'" class="el-rte-anchor"></a>');
4999
			} else {
5000
				this.anchor.name = n;
5001
				this.anchor.title = this.rte.i18n('Bookmark')+': '+n;
5002
			}
5003
		} else if (this.anchor.parentNode) {
5004
			this.rte.history.add();
5005
			this.anchor.parentNode.removeChild(this.anchor);
5006
		}
5007
	}
5008
}
5009
})(jQuery);
5010
/**
5011
 * @class кнопка - Цитата
5012
 * Если выделение схлопнуто и находится внутри цитаты - она удаляется
5013
 * Новые цитаты создаются только из несхлопнутого выделения
5014
 *
5015
 * @param  elRTE  rte   объект-редактор
5016
 * @param  String name  название кнопки
5017
 *
5018
 * @author:    Dmitry Levashov (dio) dio@std42.ru
5019
 * @copyright: Studio 42, http://www.std42.ru
5020
 **/
5021
(function($) {
5022
elRTE.prototype.ui.prototype.buttons.blockquote = function(rte, name) {
5023
	this.constructor.prototype.constructor.call(this, rte, name);
5024
5025
	this.command = function() {
5026
		var n, nodes;
5027
		this.rte.history.add();
5028
		if (this.rte.selection.collapsed() && (n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^BLOCKQUOTE$/))) {
5029
			$(n).replaceWith($(n).html());
5030
		} else {
5031
			nodes = this.rte.selection.selected({wrap : 'all', tag : 'blockquote'});
5032
			nodes.length && this.rte.selection.select(nodes[0], nodes[nodes.length-1]);
5033
		}
5034
		this.rte.ui.update(true);
5035
	}
5036
5037
	this.update = function() {
5038
		if (this.rte.selection.collapsed()) {
5039
			if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^BLOCKQUOTE$/)) {
5040
				this.domElem.removeClass('disabled').addClass('active');
5041
			} else {
5042
				this.domElem.addClass('disabled').removeClass('active');
5043
			}
5044
		} else {
5045
			this.domElem.removeClass('disabled active');
5046
		}
5047
	}
5048
}
5049
})(jQuery);
5050
/**
5051
 * @class кнопки "копировать/вырезать/вставить"
5052
 * в firefox показывает предложение нажать Ctl+c, в остальных - копирует
5053
 *
5054
 * @param  elRTE  rte   объект-редактор
5055
 * @param  String name  название кнопки
5056
 *
5057
 * @author:    Dmitry Levashov (dio) dio@std42.ru
5058
 * @copyright: Studio 42, http://www.std42.ru
5059
 **/
5060
(function($) {
5061
elRTE.prototype.ui.prototype.buttons.copy = function(rte, name) {
5062
	this.constructor.prototype.constructor.call(this, rte, name);
5063
5064
	this.command = function() {
5065
5066
		if (this.rte.browser.mozilla) {
5067
			try {
5068
				this.rte.doc.execCommand(this.name, false, null);
5069
			} catch (e) {
5070
				var s = ' Ctl + C';
5071
				if (this.name == 'cut') {
5072
					s = ' Ctl + X';
5073
				} else if (this.name == 'paste') {
5074
					s = ' Ctl + V';
5075
				}
5076
				var opts = {
5077
					dialog : {
5078
						title   : this.rte.i18n('Warning'),
5079
						buttons : { Ok : function() { $(this).dialog('close'); } }
5080
					}
5081
				}
5082
5083
				var d = new elDialogForm(opts);
5084
				d.append(this.rte.i18n('This operation is disabled in your browser on security reason. Use shortcut instead.')+': '+s).open();
5085
			}
5086
		} else {
5087
			this.constructor.prototype.command.call(this);
5088
		}
5089
	}
5090
}
5091
5092
elRTE.prototype.ui.prototype.buttons.cut   = elRTE.prototype.ui.prototype.buttons.copy;
5093
elRTE.prototype.ui.prototype.buttons.paste = elRTE.prototype.ui.prototype.buttons.copy;
5094
5095
})(jQuery);(function($) {
5096
5097
	elRTE.prototype.ui.prototype.buttons.css = function(rte, name) {
5098
		var self = this;
5099
		this.constructor.prototype.constructor.call(this, rte, name);
5100
		this.cssStyle = $('<input type="text" size="42" name="style" />');
5101
		this.cssClass = $('<input type="text" size="42" name="class" />');
5102
5103
5104
		this.command = function() {
5105
			var n = this.node(), opts;
5106
			this.rte.selection.saveIERange();
5107
			if (n) {
5108
				var opts = {
5109
5110
					submit : function(e, d) { e.stopPropagation(); e.preventDefault(); d.close(); self.set();  },
5111
					dialog : {
5112
						title : this.rte.i18n('Style'),
5113
						width : 450,
5114
						resizable : true,
5115
						modal : true
5116
					}
5117
				}
5118
				this.cssStyle.val($(n).attr('style'));
5119
				this.cssClass.val($(n).attr('class'));
5120
				var d = new elDialogForm(opts);
5121
				d.append([this.rte.i18n('Css style'), this.cssStyle], null, true)
5122
				d.append([this.rte.i18n('Css class'), this.cssClass], null, true).open();
5123
				setTimeout(function() { self.cssStyle.focus() }, 20)
5124
			}
5125
		}
5126
5127
		this.set = function() {
5128
			var n = this.node();
5129
			this.rte.selection.restoreIERange();
5130
			if (n) {
5131
				$(n).attr('style', this.cssStyle.val());
5132
				$(n).attr('class', this.cssClass.val());
5133
				this.rte.ui.update();
5134
			}
5135
		}
5136
5137
		this.node = function() {
5138
			var n = this.rte.selection.getNode();
5139
			if (n.nodeType == 3) {
5140
				n = n.parentNode;
5141
			}
5142
			return n.nodeType == 1 && n.nodeName != 'BODY' ? n : null;
5143
		}
5144
5145
		this.update = function() {
5146
			this.domElem.toggleClass('disabled', this.node()?false:true);
5147
		}
5148
5149
	}
5150
5151
})(jQuery);
5152
(function($) {
5153
	/**
5154
	 * @class button - right to left direction (not work yet with text nodes in body)
5155
	 *
5156
	 * @param  elRTE  rte   объект-редактор
5157
	 * @param  String name  название кнопки
5158
	 *
5159
	 * @author:    Dmitry Levashov (dio) dio@std42.ru
5160
	 * Copyright: Studio 42, http://www.std42.ru
5161
	 **/
5162
	elRTE.prototype.ui.prototype.buttons.rtl = function(rte, name)  {
5163
		this.constructor.prototype.constructor.call(this, rte, name);
5164
		var self = this;
5165
5166
		this.command = function() {
5167
			var n = this.rte.selection.getNode(), self = this;
5168
			if ($(n).attr('dir') == 'rtl' || $(n).parents('[dir="rtl"]').length || $(n).find('[dir="rtl"]').length) {
5169
				$(n).removeAttr('dir');
5170
				$(n).parents('[dir="rtl"]').removeAttr('dir');
5171
				$(n).find('[dir="rtl"]').removeAttr('dir');
5172
			} else {
5173
				if (this.rte.dom.is(n, 'textNodes') && this.rte.dom.is(n, 'block')) {
5174
					$(n).attr('dir', 'rtl');
5175
				} else {
5176
					$.each(this.rte.dom.parents(n, 'textNodes'), function(i, n) {
5177
						if (self.rte.dom.is(n, 'block')) {
5178
							$(n).attr('dir', 'rtl');
5179
							return false;
5180
						}
5181
					});
5182
				}
5183
			}
5184
			this.rte.ui.update();
5185
		}
5186
5187
		this.update = function() {
5188
			var n = this.rte.selection.getNode();
5189
			this.domElem.removeClass('disabled');
5190
			if ($(n).attr('dir') == 'rtl' || $(n).parents('[dir="rtl"]').length || $(n).find('[dir="rtl"]').length) {
5191
				this.domElem.addClass('active');
5192
			} else {
5193
				this.domElem.removeClass('active');
5194
			}
5195
		}
5196
	}
5197
5198
	/**
5199
	 * @class button - left to right direction (not work yet with text nodes in body)
5200
	 *
5201
	 * @param  elRTE  rte   объект-редактор
5202
	 * @param  String name  название кнопки
5203
	 *
5204
	 * @author:    Dmitry Levashov (dio) dio@std42.ru
5205
	 * Copyright: Studio 42, http://www.std42.ru
5206
	 **/
5207
	elRTE.prototype.ui.prototype.buttons.ltr = function(rte, name)  {
5208
		this.constructor.prototype.constructor.call(this, rte, name);
5209
		var self = this;
5210
5211
		this.command = function() {
5212
			var n = this.rte.selection.getNode(), self = this;
5213
			if ($(n).attr('dir') == 'ltr' || $(n).parents('[dir="ltr"]').length || $(n).find('[dir="ltr"]').length) {
5214
				$(n).removeAttr('dir');
5215
				$(n).parents('[dir="ltr"]').removeAttr('dir');
5216
				$(n).find('[dir="ltr"]').removeAttr('dir');
5217
			} else {
5218
				if (this.rte.dom.is(n, 'textNodes') && this.rte.dom.is(n, 'block')) {
5219
					$(n).attr('dir', 'ltr');
5220
				} else {
5221
					$.each(this.rte.dom.parents(n, 'textNodes'), function(i, n) {
5222
						if (self.rte.dom.is(n, 'block')) {
5223
							$(n).attr('dir', 'ltr');
5224
							return false;
5225
						}
5226
					});
5227
				}
5228
			}
5229
			this.rte.ui.update();
5230
		}
5231
5232
		this.update = function() {
5233
			var n = this.rte.selection.getNode();
5234
			this.domElem.removeClass('disabled');
5235
			if ($(n).attr('dir') == 'ltr' || $(n).parents('[dir="ltr"]').length || $(n).find('[dir="ltr"]').length) {
5236
				this.domElem.addClass('active');
5237
			} else {
5238
				this.domElem.removeClass('active');
5239
			}
5240
		}
5241
	}
5242
5243
})(jQuery);/**
5244
 * @class кнопка - DIV
5245
 * Если выделение схлопнуто и находится внутри div'a - он удаляется
5246
 * Новые div'ы создаются только из несхлопнутого выделения
5247
 *
5248
 * @param  elRTE  rte   объект-редактор
5249
 * @param  String name  название кнопки
5250
 *
5251
 * @author:    Dmitry Levashov (dio) dio@std42.ru
5252
 * copyright: Studio 42, http://www.std42.ru
5253
 **/
5254
(function($) {
5255
elRTE.prototype.ui.prototype.buttons.div = function(rte, name) {
5256
	this.constructor.prototype.constructor.call(this, rte, name);
5257
5258
	this.command = function() {
5259
		var n, nodes;
5260
		this.rte.history.add();
5261
5262
		if (this.rte.selection.collapsed()) {
5263
			n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^DIV$/);
5264
			if (n) {
5265
				$(n).replaceWith($(n).html());
5266
			}
5267
		} else {
5268
			nodes = this.rte.selection.selected({wrap : 'all', tag : 'div'});
5269
			nodes.length && this.rte.selection.select(nodes[0], nodes[nodes.length-1]);
5270
		}
5271
		this.rte.ui.update(true);
5272
	}
5273
5274
	this.update = function() {
5275
		if (this.rte.selection.collapsed()) {
5276
			if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^DIV$/)) {
5277
				this.domElem.removeClass('disabled').addClass('active');
5278
			} else {
5279
				this.domElem.addClass('disabled active');
5280
			}
5281
		} else {
5282
			this.domElem.removeClass('disabled active');
5283
		}
5284
	}
5285
}
5286
})(jQuery);
5287
/**
5288
 * @class кнопка - Включение/выключение показа структуры документа
5289
 *
5290
 * @param  elRTE  rte   объект-редактор
5291
 * @param  String name  название кнопки
5292
 *
5293
 * @author:    Dmitry Levashov (dio) dio@std42.ru
5294
 * @copyright: Studio 42, http://www.std42.ru
5295
 **/
5296
(function($) {
5297
elRTE.prototype.ui.prototype.buttons.docstructure = function(rte, name) {
5298
	this.constructor.prototype.constructor.call(this, rte, name);
5299
5300
	this.command = function() {
5301
		this.domElem.toggleClass('active');
5302
		$(this.rte.doc.body).toggleClass('el-rte-structure');
5303
	}
5304
	this.command();
5305
5306
	this.update = function() {
5307
		this.domElem.removeClass('disabled');
5308
	}
5309
}
5310
})(jQuery);
5311
/**
5312
 * @class button - open elfinder window (not needed for image or link buttons).Used in ELDORADO.CMS for easy file manipulations.
5313
 *
5314
 * @param  elRTE  rte   объект-редактор
5315
 * @param  String name  название кнопки
5316
 *
5317
 * @author:    Dmitry Levashov (dio) dio@std42.ru
5318
 * @copyright: Studio 42, http://www.std42.ru
5319
 **/
5320
(function($) {
5321
elRTE.prototype.ui.prototype.buttons.elfinder = function(rte, name) {
5322
	this.constructor.prototype.constructor.call(this, rte, name);
5323
	var self = this;
5324
	this.command = function() {
5325
		if (self.rte.options.fmAllow && typeof(self.rte.options.fmOpen) == 'function') {
5326
			self.rte.options.fmOpen( function(url) { self.rte.log(url) } );
5327
		}
5328
	}
5329
5330
	this.update = function() {
5331
		if (self.rte.options.fmAllow && typeof(self.rte.options.fmOpen) == 'function') {
5332
			this.domElem.removeClass('disabled');
5333
		} else {
5334
			this.domElem.addClass('disabled');
5335
		}
5336
	}
5337
}
5338
5339
})(jQuery);(function($) {
5340
5341
	elRTE.prototype.ui.prototype.buttons.flash = function(rte, name) {
5342
		this.constructor.prototype.constructor.call(this, rte, name);
5343
		var self = this;
5344
		this.swf = null;
5345
		this.placeholder = null;
5346
		this.src = {
5347
			url    : $('<input type="text" name="url" />').css('width', '99%'),
5348
			type   : $('<select name="type"/>')
5349
						.append('<option value="application/x-shockwave-flash">Flash</option>')
5350
						.append('<option value="video/quicktime">Quicktime movie</option>')
5351
						.append('<option value="application/x-mplayer2">Windows media</option>'),
5352
			width  : $('<input type="text" />').attr('size', 5).css('text-align', 'right'),
5353
			height : $('<input type="text" />').attr('size', 5).css('text-align', 'right'),
5354
			wmode  : $('<select />')
5355
						.append($('<option />').val('').text(this.rte.i18n('Not set', 'dialogs')))
5356
						.append($('<option />').val('transparent').text(this.rte.i18n('Transparent'))),
5357
			align  : $('<select />')
5358
						.append($('<option />').val('').text(this.rte.i18n('Not set', 'dialogs')))
5359
						.append($('<option />').val('left'       ).text(this.rte.i18n('Left')))
5360
						.append($('<option />').val('right'      ).text(this.rte.i18n('Right')))
5361
						.append($('<option />').val('top'        ).text(this.rte.i18n('Top')))
5362
						.append($('<option />').val('text-top'   ).text(this.rte.i18n('Text top')))
5363
						.append($('<option />').val('middle'     ).text(this.rte.i18n('middle')))
5364
						.append($('<option />').val('baseline'   ).text(this.rte.i18n('Baseline')))
5365
						.append($('<option />').val('bottom'     ).text(this.rte.i18n('Bottom')))
5366
						.append($('<option />').val('text-bottom').text(this.rte.i18n('Text bottom'))),
5367
			margin : $('<div />')
5368
		}
5369
5370
		this.command = function() {
5371
5372
			var n = this.rte.selection.getEnd(), opts, url='', w='', h='', f, a, d, mid, o, wm;
5373
			this.rte.selection.saveIERange();
5374
			this.src.margin.elPaddingInput({ type : 'margin' });
5375
			this.placeholder = null;
5376
			this.swf = null;
5377
			if ($(n).hasClass('elrte-media') && (mid = $(n).attr('rel')) &&  this.rte.filter.scripts[mid]) {
5378
				this.placeholder = $(n);
5379
				o = this.rte.filter.scripts[mid];
5380
				url = '';
5381
				if (o.embed && o.embed.src) {
5382
					url = o.embed.src;
5383
				}
5384
				if (o.params && o.params.length) {
5385
					l = o.params.length;
5386
					while (l--) {
5387
						if (o.params[l].name == 'src' || o.params[l].name == 'movie') {
5388
							url =  o.params[l].value;
5389
						}
5390
					}
5391
				}
5392
5393
				if (o.embed) {
5394
					w = o.embed.width||parseInt(o.embed.style.width)||'';
5395
					h = o.embed.height||parseInt(o.embed.style.height)||'';
5396
					wm = o.embed.wmode||'';
5397
				} else if (o.obj) {
5398
					w = o.obj.width||parseInt(o.obj.style.width)||'';
5399
					h = o.obj.height||parseInt(o.obj.style.height)||'';
5400
					wm = o.obj.wmode||'';
5401
				}
5402
5403
				if (o.obj) {
5404
					f = o.obj.style['float']||'';
5405
					a = o.obj.style['vertical-align']||'';
5406
				} else if (o.embed) {
5407
					f = o.embed.style['float']||'';
5408
					a = o.embed.style['vertical-align']||'';
5409
				}
5410
				this.src.margin.val(n);
5411
				this.src.type.val(o.embed ? o.embed.type : '');
5412
			}
5413
			if ($(n).hasClass('elrte-swf-placeholder')) {
5414
				this.placeholder = $(n);
5415
				url = $(n).attr('rel');
5416
				w = parseInt($(n).css('width'))||'';
5417
				h = parseInt($(n).css('height'))||'';
5418
				f = $(n).css('float');
5419
				a = $(n).css('vertical-align');
5420
				this.src.margin.val(n);
5421
				this.src.wmode.val($(n).attr('wmode'));
5422
			}
5423
			this.src.url.val(url);
5424
			this.src.width.val(w);
5425
			this.src.height.val(h);
5426
			this.src.align.val(f||a);
5427
			this.src.wmode.val(wm);
5428
5429
5430
5431
5432
			var opts = {
5433
				rtl : this.rte.rtl,
5434
				submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
5435
				dialog : {
5436
					width    : 580,
5437
					position : 'top',
5438
					title    : this.rte.i18n('Flash')
5439
				}
5440
			}
5441
			var d = new elDialogForm(opts);
5442
5443
			if (this.rte.options.fmAllow && this.rte.options.fmOpen) {
5444
				var src = $('<span />').append(this.src.url.css('width', '85%'))
5445
						.append(
5446
							$('<span />').addClass('ui-state-default ui-corner-all')
5447
								.css({'float' : 'right', 'margin-right' : '3px'})
5448
								.attr('title', self.rte.i18n('Open file manger'))
5449
								.append($('<span />').addClass('ui-icon ui-icon-folder-open'))
5450
									.click( function() {
5451
										self.rte.options.fmOpen( function(url) { self.src.url.val(url).change(); } );
5452
									})
5453
									.hover(function() {$(this).addClass('ui-state-hover')}, function() { $(this).removeClass('ui-state-hover')})
5454
							);
5455
			} else {
5456
				var src = this.src.url;
5457
			}
5458
5459
			d.append([this.rte.i18n('URL'), src], null, true);
5460
			d.append([this.rte.i18n('Type'), this.src.type], null, true);
5461
			d.append([this.rte.i18n('Size'), $('<span />').append(this.src.width).append(' x ').append(this.src.height).append(' px')], null, true)
5462
			d.append([this.rte.i18n('Wmode'), this.src.wmode], null, true);
5463
			d.append([this.rte.i18n('Alignment'), this.src.align], null, true);
5464
			d.append([this.rte.i18n('Margins'), this.src.margin], null, true);
5465
5466
5467
5468
			d.open();
5469
			setTimeout( function() {self.src.url.focus()}, 100)
5470
5471
5472
			var fs = $('<fieldset />').append($('<legend />').text(this.rte.i18n('Preview')))
5473
			d.append(fs, 'main');
5474
			var frame = document.createElement('iframe');
5475
			$(frame).attr('src', '#').addClass('el-rte-preview').appendTo(fs);
5476
			html = this.rte.options.doctype+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style="padding:0;margin:0;font-size:9px"> Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin</body></html>';
5477
			frame.contentWindow.document.open();
5478
			frame.contentWindow.document.write(html);
5479
			frame.contentWindow.document.close();
5480
			this.frame = frame.contentWindow.document;
5481
			this.preview = $(frame.contentWindow.document.body);
5482
5483
			this.src.type.change(function() {
5484
				self.src.url.change();
5485
			});
5486
5487
			this.src.width.change(function() {
5488
				if (self.swf) {
5489
					var w = parseInt($(this).val())||'';
5490
					$(this).val(w);
5491
					self.swf.css('width', w);
5492
					self.swf.children('embed').css('width', w);
5493
				} else {
5494
					$(this).val('');
5495
				}
5496
			});
5497
5498
			this.src.height.change(function() {
5499
				if (self.swf) {
5500
					var h = parseInt($(this).val())||'';
5501
					$(this).val(h);
5502
					self.swf.css('height', h);
5503
					self.swf.children('embed').css('height', h);
5504
				} else {
5505
					$(this).val('');
5506
				}
5507
			});
5508
5509
			this.src.wmode.change(function() {
5510
				if (self.swf) {
5511
					var wm = $(this).val();
5512
					if (wm) {
5513
						self.swf.attr('wmode', wm);
5514
						self.swf.children('embed').attr('wmode', wm);
5515
					} else {
5516
						self.swf.removeAttr('wmode');
5517
						self.swf.children('embed').removeAttr('wmode');
5518
					}
5519
				}
5520
			});
5521
5522
			this.src.align.change(function() {
5523
				var v = $(this).val(), f = v=='left' || v=='right';
5524
				if (self.swf) {
5525
					self.swf.css({
5526
						'float' : f ? v : '',
5527
						'vertical-align' : f ? '' : v
5528
					});
5529
				} else {
5530
					$(this).val('');
5531
				}
5532
			});
5533
5534
			this.src.margin.change(function() {
5535
				if (self.swf) {
5536
					var m = self.src.margin.val();
5537
					if (m.css) {
5538
						self.swf.css('margin', m.css);
5539
					} else {
5540
						self.swf.css('margin-top', m.top);
5541
						self.swf.css('margin-right', m.right);
5542
						self.swf.css('margin-bottom', m.bottom);
5543
						self.swf.css('margin-left', m.left);
5544
					}
5545
				}
5546
			});
5547
5548
			this.src.url.change(function() {
5549
				var url = self.rte.utils.absoluteURL($(this).val()), i, swf;
5550
				if (url) {
5551
					i = self.rte.utils.mediaInfo(self.src.type.val());
5552
					if (!i) {
5553
						i = self.rte.util.mediaInfo('application/x-shockwave-flash');
5554
					}
5555
					swf = '<object classid="'+i.classid+'" codebase="'+i.codebase+'"><param name="src" value="'+url+'" /><embed quality="high" src="'+url+'" type="'+i.type+'"></object>';
5556
					self.preview.children('object').remove().end().prepend(swf);
5557
					self.swf = self.preview.children('object').eq(0);
5558
				} else if (self.swf){
5559
					self.swf.remove();
5560
					self.swf = null;
5561
				}
5562
				self.src.width.trigger('change');
5563
				self.src.height.trigger('change');
5564
				self.src.align.trigger('change');
5565
5566
			}).trigger('change');
5567
		};
5568
5569
		this.set = function() {
5570
			self.swf = null
5571
			var url = this.rte.utils.absoluteURL(this.src.url.val()),
5572
				w = parseInt(this.src.width.val()) || '',
5573
				h = parseInt(this.src.height.val()) || '',
5574
				wm = this.src.wmode.val(),
5575
				a = this.src.align.val(),
5576
				f = a == 'left' || a == 'right' ? a : '',
5577
				mid = this.placeholder ? this.placeholder.attr('rel') : '', o, _o, c,
5578
				m = this.src.margin.val(), margin;
5579
5580
5581
5582
			if (!url) {
5583
				if (this.placeholder) {
5584
					this.placeholder.remove();
5585
					delete this.rte.filter.scripts[mid];
5586
				}
5587
			} else {
5588
				i = self.rte.utils.mediaInfo(self.src.type.val());
5589
				if (!i) {
5590
					i = self.rte.util.mediaInfo('application/x-shockwave-flash');
5591
				}
5592
				c = this.rte.filter.videoHostRegExp.test(url) ? url.replace(this.rte.filter.videoHostRegExp, "$2") : i.type.replace(/^\w+\/(.+)/, "$1");
5593
5594
				o = {
5595
					obj : {
5596
						classid : i.classid[0],
5597
						codebase : i.codebase,
5598
						style : {}
5599
					},
5600
					params :[ { name : 'src', value : url } ],
5601
					embed :{
5602
						src : url,
5603
						type : i.type,
5604
						quality : 'high',
5605
						wmode : wm,
5606
						style : {}
5607
					}
5608
				};
5609
5610
				if (w) {
5611
					o.obj.width = w;
5612
					o.embed.width = w;
5613
				}
5614
				if (h) {
5615
					o.obj.height = h;
5616
					o.embed.height = h;
5617
				}
5618
				if (f) {
5619
					o.obj.style['float'] = f;
5620
				} else if (a) {
5621
					o.obj.style['vertical-align'] = a;
5622
				}
5623
5624
				if (m.css) {
5625
					margin = { margin : m.css };
5626
				} else {
5627
					margin = {
5628
						'margin-top' : m.top,
5629
						'margin-right' : m.right,
5630
						'margin-bottom' : m.bottom,
5631
						'margin-left' : m.left
5632
					};
5633
				}
5634
5635
				o.obj.style = $.extend({}, o.obj.style, margin);
5636
5637
				if (this.placeholder && mid) {
5638
					_o = this.rte.filter.scripts[mid]||{};
5639
5640
					o = $.extend(true, _o, o);
5641
					delete o.obj.style.width;
5642
					delete o.obj.style.height;
5643
					delete o.embed.style.width;
5644
					delete o.embed.style.height;
5645
					this.rte.filter.scripts[mid] = o;
5646
					this.placeholder.removeAttr('class');
5647
				} else {
5648
					var id = 'media'+Math.random().toString().substring(2);
5649
					this.rte.filter.scripts[id] = o;
5650
					this.placeholder = $(this.rte.dom.create('img')).attr('rel', id).attr('src', this.rte.filter.url+'pixel.gif');
5651
					var ins = true;
5652
				}
5653
				this.placeholder.attr('title', this.rte.utils.encode(url)).attr('width', w||150).attr('height', h||100).addClass('elrte-protected elrte-media elrte-media-'+c).css(o.obj.style);
5654
				if (f) {
5655
					this.placeholder.css('float', f).css('vertical-align', '');
5656
				} else if (a) {
5657
					this.placeholder.css('float', '').css('vertical-align', a);
5658
				} else {
5659
					this.placeholder.css('float', '').css('vertical-align', '');
5660
				}
5661
5662
				if (ins) {
5663
					this.rte.window.focus();
5664
					this.rte.selection.restoreIERange();
5665
					this.rte.selection.insertNode(this.placeholder.get(0));
5666
				}
5667
			}
5668
		}
5669
5670
		this.update = function() {
5671
			this.domElem.removeClass('disabled');
5672
			var n = this.rte.selection.getNode();
5673
			this.domElem.toggleClass('active', n && n.nodeName == 'IMG' && $(n).hasClass('elrte-media'))
5674
5675
		}
5676
5677
5678
	}
5679
})(jQuery);/**
5680
 * @class drop-down menu - font-family for selected text
5681
 *
5682
 * @param  elRTE  rte   объект-редактор
5683
 * @param  String name  название кнопки
5684
 *
5685
 * @author:    Dmitry Levashov (dio) dio@std42.ru
5686
 * @copyright: Studio 42, http://www.std42.ru
5687
 **/
5688
(function($) {
5689
elRTE.prototype.ui.prototype.buttons.fontname = function(rte, name) {
5690
	this.constructor.prototype.constructor.call(this, rte, name);
5691
	var self = this;
5692
	var opts = {
5693
		tpl      : '<span style="font-family:%val">%label</span>',
5694
		select   : function(v) { self.set(v); },
5695
		src      : {
5696
			''                                              : this.rte.i18n('Font'),
5697
			'andale mono,sans-serif'                        : 'Andale Mono',
5698
			'arial,helvetica,sans-serif'                    : 'Arial',
5699
			'arial black,gadget,sans-serif'                 : 'Arial Black',
5700
			'book antiqua,palatino,sans-serif'              : 'Book Antiqua',
5701
			'comic sans ms,cursive'                         : 'Comic Sans MS',
5702
			'courier new,courier,monospace'                 : 'Courier New',
5703
			'georgia,palatino,serif'                        : 'Georgia',
5704
			'helvetica,sans-serif'                          : 'Helvetica',
5705
			'impact,sans-serif'                             : 'Impact',
5706
			'lucida console,monaco,monospace'               : 'Lucida console',
5707
			'lucida sans unicode,lucida grande,sans-serif'  : 'Lucida grande',
5708
			'tahoma,sans-serif'                             : 'Tahoma',
5709
			'times new roman,times,serif'                   : 'Times New Roman',
5710
			'trebuchet ms,lucida grande,verdana,sans-serif' : 'Trebuchet MS',
5711
			'verdana,geneva,sans-serif'                     : 'Verdana'
5712
		}
5713
	}
5714
5715
	this.select = this.domElem.elSelect(opts);
5716
5717
	this.command = function() {
5718
	}
5719
5720
	this.set = function(size) {
5721
		this.rte.history.add();
5722
		var nodes = this.rte.selection.selected({filter : 'textContainsNodes'});
5723
		$.each(nodes, function() {
5724
			$this = /^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(this.nodeName) ? $(this).find('td,th') : $(this);
5725
			$(this).css('font-family', size).find('[style]').css('font-family', '');
5726
		});
5727
		this.rte.ui.update();
5728
	}
5729
5730
	this.update = function() {
5731
		this.domElem.removeClass('disabled');
5732
		var n = this.rte.selection.getNode();
5733
		if (n.nodeType != 1) {
5734
			n = n.parentNode;
5735
		}
5736
		var v = $(n).css('font-family');
5737
		v = v ? v.toString().toLowerCase().replace(/,\s+/g, ',').replace(/'|"/g, '') : '';
5738
		this.select.val(opts.src[v] ? v : '');
5739
	}
5740
}
5741
5742
})(jQuery);/**
5743
 * @class drop-down menu - font size for selected text
5744
 *
5745
 * @param  elRTE  rte   объект-редактор
5746
 * @param  String name  название кнопки
5747
 *
5748
 * @author:    Dmitry Levashov (dio) dio@std42.ru
5749
 * @copyright: Studio 42, http://www.std42.ru
5750
 **/
5751
(function($) {
5752
elRTE.prototype.ui.prototype.buttons.fontsize = function(rte, name) {
5753
	this.constructor.prototype.constructor.call(this, rte, name);
5754
	var self = this;
5755
	var opts = {
5756
		labelTpl : '%label',
5757
		tpl      : '<span style="font-size:%val;line-height:1.2em">%label</span>',
5758
		select   : function(v) { self.set(v); },
5759
		src      : {
5760
			''         : this.rte.i18n('Font size'),
5761
			'xx-small' : this.rte.i18n('Small (8pt)'),
5762
			'x-small'  : this.rte.i18n('Small (10px)'),
5763
			'small'    : this.rte.i18n('Small (12pt)'),
5764
			'medium'   : this.rte.i18n('Normal (14pt)'),
5765
			'large'    : this.rte.i18n('Large (18pt)'),
5766
			'x-large'  : this.rte.i18n('Large (24pt)'),
5767
			'xx-large' : this.rte.i18n('Large (36pt)')
5768
		}
5769
	}
5770
5771
	this.select = this.domElem.elSelect(opts);
5772
5773
	this.command = function() {
5774
	}
5775
5776
	this.set = function(size) {
5777
		this.rte.history.add();
5778
		var nodes = this.rte.selection.selected({filter : 'textContainsNodes'});
5779
		$.each(nodes, function() {
5780
			$this = /^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(this.nodeName) ? $(this).find('td,th') : $(this);
5781
			$this.css('font-size', size).find("[style]").css('font-size', '');
5782
		});
5783
		this.rte.ui.update();
5784
	}
5785
5786
	this.update = function() {
5787
		this.domElem.removeClass('disabled');
5788
		var n = this.rte.selection.getNode();
5789
		this.select.val((m = this.rte.dom.attr(n, 'style').match(/font-size:\s*([^;]+)/i)) ? m[1] : '');
5790
	}
5791
}
5792
5793
})(jQuery);/**
5794
 * @class color pallete for text color and background
5795
 *
5796
 * @param  elRTE  rte   объект-редактор
5797
 * @param  String name  название кнопки
5798
 *
5799
 * @author:    Dmitry Levashov (dio) dio@std42.ru
5800
 * @copyright: Studio 42, http://www.std42.ru
5801
 **/
5802
(function($) {
5803
elRTE.prototype.ui.prototype.buttons.forecolor = function(rte, name) {
5804
	var self = this;
5805
	this.constructor.prototype.constructor.call(this, rte, name);
5806
	var opts = {
5807
		'class' : '',
5808
		color   : this.defaultColor,
5809
		update  : function(c) { self.indicator.css('background-color', c); },
5810
		change  : function(c) { self.set(c) }
5811
	}
5812
5813
	this.defaultColor = this.name == 'forecolor' ? '#000000' : '#ffffff';
5814
	this.picker       = this.domElem.elColorPicker(opts);
5815
	this.indicator    = $('<div />').addClass('color-indicator').prependTo(this.domElem);
5816
5817
	this.command = function() {
5818
	}
5819
5820
	this.set = function(c) {
5821
		if (!this.rte.selection.collapsed()) {
5822
			this.rte.history.add();
5823
			var nodes = this.rte.selection.selected({collapse : false, wrap : 'text'}),
5824
				css   = this.name == 'forecolor' ? 'color' : 'background-color';
5825
			$.each(nodes, function() {
5826
				if (/^(THEAD|TBODY|TFOOT|TR)$/.test(this.nodeName)) {
5827
					$(this).find('td,th').each(function() {
5828
						$(this).css(css, c).find('*').css(css, '');
5829
					})
5830
				} else {
5831
					$(this).css(css, c).find('*').css(css, '');
5832
				}
5833
			});
5834
			this.rte.ui.update(true);
5835
		}
5836
	}
5837
5838
	this.update = function() {
5839
		this.domElem.removeClass('disabled');
5840
		var n = this.rte.selection.getNode();
5841
		this.picker.val(this.rte.utils.rgb2hex($(n.nodeType != 1 ? n.parentNode : n).css(this.name == 'forecolor' ? 'color' : 'background-color'))||this.defaultColor)
5842
	}
5843
}
5844
5845
elRTE.prototype.ui.prototype.buttons.hilitecolor = elRTE.prototype.ui.prototype.buttons.forecolor;
5846
5847
})(jQuery);/**
5848
 * @class drop-down menu - formatting text block
5849
 *
5850
 * @param  elRTE  rte   объект-редактор
5851
 * @param  String name  название кнопки
5852
 *
5853
 * @author:    Dmitry Levashov (dio) dio@std42.ru
5854
 * @copyright: Studio 42, http://www.std42.ru
5855
 **/
5856
(function($) {
5857
elRTE.prototype.ui.prototype.buttons.formatblock = function(rte, name) {
5858
	this.constructor.prototype.constructor.call(this, rte, name);
5859
5860
	var cmd = this.rte.browser.msie
5861
		? function(v) { self.val = v; self.constructor.prototype.command.call(self); }
5862
		: function(v) { self.ieCommand(v); }
5863
	var self = this;
5864
	var opts = {
5865
		labelTpl : '%label',
5866
		tpls     : {'' : '%label'},
5867
		select   : function(v) { self.formatBlock(v); },
5868
		src      : {
5869
			'span'    : this.rte.i18n('Format'),
5870
			'h1'      : this.rte.i18n('Heading 1'),
5871
			'h2'      : this.rte.i18n('Heading 2'),
5872
			'h3'      : this.rte.i18n('Heading 3'),
5873
			'h4'      : this.rte.i18n('Heading 4'),
5874
			'h5'      : this.rte.i18n('Heading 5'),
5875
			'h6'      : this.rte.i18n('Heading 6'),
5876
			'p'       : this.rte.i18n('Paragraph'),
5877
			'address' : this.rte.i18n('Address'),
5878
			'pre'     : this.rte.i18n('Preformatted'),
5879
			'div'     : this.rte.i18n('Normal (DIV)')
5880
		}
5881
	}
5882
5883
	this.select = this.domElem.elSelect(opts);
5884
5885
	this.command = function() {
5886
5887
	}
5888
5889
	this.formatBlock = function(v) {
5890
5891
		function format(n, tag) {
5892
5893
			function replaceChilds(p) {
5894
				$(p).find('h1,h2,h3,h4,h5,h6,p,address,pre').each(function() {
5895
					$(this).replaceWith($(this).html());
5896
				});
5897
				return p;
5898
			}
5899
5900
			if (/^(LI|DT|DD|TD|TH|CAPTION)$/.test(n.nodeName)) {
5901
				!self.rte.dom.isEmpty(n) && self.rte.dom.wrapContents(replaceChilds(n), tag);
5902
			} else if (/^(UL|OL|DL|TABLE)$/.test(n.nodeName)) {
5903
				self.rte.dom.wrap(n, tag);
5904
			} else {
5905
				!self.rte.dom.isEmpty(n) && $(replaceChilds(n)).replaceWith( $(self.rte.dom.create(tag)).html($(n).html()));
5906
			}
5907
5908
		}
5909
		this.rte.history.add();
5910
5911
		var tag = v.toUpperCase(),
5912
			i, n, $n,
5913
			c = this.rte.selection.collapsed(),
5914
			bm = this.rte.selection.getBookmark(),
5915
			nodes = this.rte.selection.selected({
5916
				collapsed : true,
5917
				blocks    : true,
5918
				filter    : 'textContainsNodes',
5919
				wrap      : 'inline',
5920
				tag       : 'span'
5921
			})
5922
			l = nodes.length,
5923
			s = $(nodes[0]).prev(),
5924
			e = $(nodes[nodes.length-1]).next();
5925
5926
		while (l--) {
5927
			n = nodes[l];
5928
			$n = $(n);
5929
			if (tag == 'DIV' || tag == 'SPAN') {
5930
				if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)) {
5931
					$n.replaceWith($(this.rte.dom.create('div')).html($n.html()||''));
5932
				}
5933
			} else {
5934
				if (/^(THEAD|TBODY|TFOOT|TR)$/.test(n.nodeName)) {
5935
					$n.find('td,th').each(function() { format(this, tag); });
5936
				} else if (n.nodeName != tag) {
5937
					format(n, tag);
5938
				}
5939
			}
5940
		}
5941
5942
		this.rte.selection.moveToBookmark(bm);
5943
5944
		this.rte.ui.update(true);
5945
	}
5946
5947
	this.update = function() {
5948
		this.domElem.removeClass('disabled');
5949
		var n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(H[1-6]|P|ADDRESS|PRE)$/);
5950
		this.select.val(n ? n.nodeName.toLowerCase() : 'span');
5951
	}
5952
}
5953
})(jQuery);
5954
/**
5955
 * @class button - switch to fullscreen mode and back
5956
 *
5957
 * @param  elRTE  rte   объект-редактор
5958
 * @param  String name  название кнопки
5959
 *
5960
 * @author:    Dmitry Levashov (dio) dio@std42.ru
5961
 * @copyright: Studio 42, http://www.std42.ru
5962
 **/
5963
(function($) {
5964
elRTE.prototype.ui.prototype.buttons.fullscreen = function(rte, name) {
5965
	var self     = this;
5966
	this.constructor.prototype.constructor.call(this, rte, name);
5967
	this.active  = true;
5968
	this.editor = rte.editor;
5969
	this.wz = rte.workzone;
5970
	this.height  = 0;
5971
	this.delta = 0;
5972
	this._class = 'el-fullscreen';
5973
5974
	setTimeout(function() {
5975
		self.height  = self.wz.height();
5976
		self.delta   = self.editor.outerHeight()-self.height;
5977
	}, 50);
5978
5979
5980
	/**
5981
	 * Update editor height on window resize in fullscreen view
5982
	 *
5983
	 **/
5984
	function resize() {
5985
		self.wz.height($(window).height()-self.delta);
5986
		self.rte.updateHeight();
5987
	}
5988
5989
	this.command = function() {
5990
		var w = $(window),
5991
			e = this.editor,
5992
			p = e.parents().filter(function(i, n) { return  !/^(html|body)$/i.test(n.nodeName) && $(n).css('position') == 'relative'; }),
5993
			wz = this.wz,
5994
			c = this._class,
5995
			f = e.hasClass(c),
5996
			rte = this.rte,
5997
			s = this.rte.selection,
5998
			m = $.browser.mozilla,
5999
			b, h;
6000
6001
		function save() {
6002
			if (m) {
6003
				b = s.getBookmark();
6004
			}
6005
		}
6006
6007
		function restore() {
6008
			if (m) {
6009
				self.wz.children().toggle();
6010
				self.rte.source.focus();
6011
				self.wz.children().toggle();
6012
				s.moveToBookmark(b);
6013
			}
6014
		}
6015
6016
		save();
6017
		p.css('position', f ? 'relative' : 'static');
6018
6019
		if (f) {
6020
			e.removeClass(c);
6021
			wz.height(this.height);
6022
			w.unbind('resize', resize);
6023
			this.domElem.removeClass('active');
6024
		} else {
6025
			e.addClass(c).removeAttr('style');
6026
			wz.height(w.height() - this.delta).css('width', '100%');
6027
			w.bind('resize', resize);
6028
			this.domElem.addClass('active');
6029
		}
6030
		rte.updateHeight();
6031
		rte.resizable(f);
6032
		restore();
6033
6034
	}
6035
6036
	this.update = function() {
6037
		this.domElem.removeClass('disabled');
6038
	}
6039
}
6040
})(jQuery);
6041
/**
6042
 * @class button - horizontal rule (open dialog window)
6043
 *
6044
 * @param  elRTE  rte   объект-редактор
6045
 * @param  String name  название кнопки
6046
 *
6047
 * @author:    Dmitry Levashov (dio) dio@std42.ru
6048
 * @copyright: Studio 42, http://www.std42.ru
6049
 **/
6050
(function($) {
6051
elRTE.prototype.ui.prototype.buttons.horizontalrule = function(rte, name) {
6052
	this.constructor.prototype.constructor.call(this, rte, name);
6053
	var self = this;
6054
	this.src = {
6055
		width   : $('<input type="text" />').attr({'name' : 'width', 'size' : 4}).css('text-align', 'right'),
6056
		wunit   : $('<select />').attr('name', 'wunit')
6057
					.append($('<option />').val('%').text('%'))
6058
					.append($('<option />').val('px').text('px'))
6059
					.val('%'),
6060
		height  : $('<input type="text" />').attr({'name' : 'height', 'size' : 4}).css('text-align', 'right'),
6061
		bg      : $('<div />'),
6062
		border  : $('<div />'),
6063
		'class' : $('<input type="text" />').css('width', '100%'),
6064
		style   : $('<input type="text" />').css('width', '100%')
6065
	}
6066
6067
	this.command = function() {
6068
		this.src.bg.elColorPicker({palettePosition : 'outer', 'class' : 'el-colorpicker ui-icon ui-icon-pencil'});
6069
6070
		var n   = this.rte.selection.getEnd();
6071
		this.hr = n.nodeName == 'HR' ? $(n) : $(rte.doc.createElement('hr')).css({width : '100%', height : '1px'});
6072
		this.src.border.elBorderSelect({styleHeight : 73, value : this.hr});
6073
6074
		var _w  = this.hr.css('width') || this.hr.attr('width');
6075
		this.src.width.val(parseInt(_w) || 100);
6076
		this.src.wunit.val(_w.indexOf('px') != -1 ? 'px' : '%');
6077
6078
		this.src.height.val( this.rte.utils.toPixels(this.hr.css('height') || this.hr.attr('height')) || 1) ;
6079
6080
		this.src.bg.val(this.rte.utils.color2Hex(this.hr.css('background-color')));
6081
		this.src['class'].val(this.rte.dom.attr(this.hr, 'class'));
6082
		this.src.style.val(this.rte.dom.attr(this.hr, 'style'));
6083
6084
		var opts = {
6085
			rtl : this.rte.rtl,
6086
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
6087
			dialog : {
6088
				title : this.rte.i18n('Horizontal rule')
6089
			}
6090
		}
6091
6092
		var d = new elDialogForm(opts);
6093
		d.append([this.rte.i18n('Width'),          $('<span />').append(this.src.width).append(this.src.wunit) ], null, true)
6094
			.append([this.rte.i18n('Height'),      $('<span />').append(this.src.height).append(' px')], null, true)
6095
			.append([this.rte.i18n('Border'),      this.src.border], null, true)
6096
			.append([this.rte.i18n('Background'),  this.src.bg], null, true)
6097
			.append([this.rte.i18n('Css class'),   this.src['class']], null, true)
6098
			.append([this.rte.i18n('Css style'),   this.src.style], null, true)
6099
			.open();
6100
	}
6101
6102
	this.update = function() {
6103
		this.domElem.removeClass('disabled');
6104
		if (this.rte.selection.getEnd().nodeName == 'HR') {
6105
			this.domElem.addClass('active');
6106
		} else {
6107
			this.domElem.removeClass('active');
6108
		}
6109
	}
6110
6111
	this.set = function() {
6112
		this.rte.history.add();
6113
		!this.hr.parentNode && this.rte.selection.insertNode(this.hr.get(0));
6114
		var attr = {
6115
			noshade : true,
6116
			style   : this.src.style.val()
6117
		}
6118
		var b = this.src.border.val();
6119
		var css = {
6120
			width  : (parseInt(this.src.width.val()) || 100)+this.src.wunit.val(),
6121
			height : parseInt(this.src.height.val()) || 1,
6122
			'background-color' : this.src.bg.val(),
6123
			border : b.width && b.style ? b.width+' '+b.style+' '+b.color : ''
6124
		}
6125
6126
		this.hr.removeAttr('class')
6127
			.removeAttr('style')
6128
			.removeAttr('width')
6129
			.removeAttr('height')
6130
			.removeAttr('align')
6131
			.attr(attr)
6132
			.css(css);
6133
6134
		if (this.src['class'].val()) {
6135
			this.hr.attr('class', this.src['class'].val());
6136
		}
6137
		this.rte.ui.update()
6138
	}
6139
6140
}
6141
})(jQuery);
6142
/**
6143
 * @class button - insert/edit image (open dialog window)
6144
 *
6145
 * @param  elRTE  rte   объект-редактор
6146
 * @param  String name  название кнопки
6147
 *
6148
 * @author:    Dmitry Levashov (dio) dio@std42.ru
6149
 * Copyright: Studio 42, http://www.std42.ru
6150
 **/
6151
(function($) {
6152
elRTE.prototype.ui.prototype.buttons.image = function(rte, name) {
6153
	this.constructor.prototype.constructor.call(this, rte, name);
6154
	var self = this;
6155
	this.img = null
6156
	this.init = function() {
6157
6158
		this.labels = {
6159
			main   : 'Properies',
6160
			link   : 'Link',
6161
			adv    : 'Advanced',
6162
			events : 'Events',
6163
			id       : 'ID',
6164
			'class'  : 'Css class',
6165
			style    : 'Css style',
6166
			longdesc : 'Detail description URL',
6167
			href    : 'URL',
6168
			target  : 'Open in',
6169
			title   : 'Title'
6170
		}
6171
6172
		this.src = {
6173
			main : {
6174
				src    : $('<input type="text" />').css('width', '100%'),
6175
				title  : $('<input type="text" />').css('width', '100%'),
6176
				alt    : $('<input type="text" />').css('width', '100%'),
6177
				width  : $('<input type="text" />').attr('size', 5).css('text-align', 'right'),
6178
				height : $('<input type="text" />').attr('size', 5).css('text-align', 'right'),
6179
				margin : $('<div />'),
6180
				align  : $('<select />').css('width', '100%')
6181
							.append($('<option />').val('').text(this.rte.i18n('Not set', 'dialogs')))
6182
							.append($('<option />').val('left'       ).text(this.rte.i18n('Left')))
6183
							.append($('<option />').val('right'      ).text(this.rte.i18n('Right')))
6184
							.append($('<option />').val('top'        ).text(this.rte.i18n('Top')))
6185
							.append($('<option />').val('text-top'   ).text(this.rte.i18n('Text top')))
6186
							.append($('<option />').val('middle'     ).text(this.rte.i18n('middle')))
6187
							.append($('<option />').val('baseline'   ).text(this.rte.i18n('Baseline')))
6188
							.append($('<option />').val('bottom'     ).text(this.rte.i18n('Bottom')))
6189
							.append($('<option />').val('text-bottom').text(this.rte.i18n('Text bottom'))),
6190
				border : $('<div />')
6191
			},
6192
6193
			adv : {
6194
				id       : $('<input type="text" />').css('width', '100%'),
6195
				'class'  : $('<input type="text" />').css('width', '100%'),
6196
				style    : $('<input type="text" />').css('width', '100%'),
6197
				longdesc : $('<input type="text" />').css('width', '100%')
6198
			},
6199
			events : {}
6200
		}
6201
6202
		$.each(
6203
			['onblur', 'onfocus', 'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmouseout', 'onmouseleave', 'onkeydown', 'onkeypress', 'onkeyup'],
6204
			function() {
6205
				self.src.events[this] = $('<input type="text" />').css('width', '100%');
6206
		});
6207
6208
		$.each(self.src, function() {
6209
			for (var n in this) {
6210
				this[n].attr('name', n);
6211
			}
6212
		});
6213
6214
	}
6215
6216
	this.command = function() {
6217
		!this.src && this.init();
6218
		this.rte.selection.saveIERange();
6219
		this.src.main.border.elBorderSelect({ change : function() { self.updateImg(); }, name : 'border' });
6220
		this.src.main.margin.elPaddingInput({ type : 'margin' });
6221
6222
		this.cleanValues();
6223
		this.src.main.src.val('');
6224
6225
		var n = this.rte.selection.getEnd(),
6226
			$n = $(n);
6227
		this.preview = null;
6228
		this.prevImg = null;
6229
		this.link    = null;
6230
		if (n.nodeName == 'IMG' && !$n.hasClass('elrte-protected')) {
6231
			this.img     = $(n);
6232
		} else {
6233
			this.img = $(this.rte.doc.createElement('img'));
6234
6235
		}
6236
6237
		var opts = {
6238
			rtl : this.rte.rtl,
6239
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
6240
			dialog : {
6241
				width    : 570,
6242
				position : 'top',
6243
				title    : this.rte.i18n('Image')
6244
			}
6245
		}
6246
		var d = new elDialogForm(opts);
6247
6248
		if (this.rte.options.fmAllow && this.rte.options.fmOpen) {
6249
			var src = $('<span />').append(this.src.main.src.css('width', '88%'))
6250
					.append(
6251
						$('<span />').addClass('ui-state-default ui-corner-all')
6252
							.css({'float' : 'right', 'margin-right' : '3px'})
6253
							.attr('title', self.rte.i18n('Open file manger'))
6254
							.append($('<span />').addClass('ui-icon ui-icon-folder-open'))
6255
								.click( function() {
6256
									self.rte.options.fmOpen( function(url) { self.src.main.src.val(url).change() } );
6257
								})
6258
								.hover(function() {$(this).addClass('ui-state-hover')}, function() { $(this).removeClass('ui-state-hover')})
6259
						);
6260
		} else {
6261
			var src = this.src.main.src;
6262
		}
6263
6264
		d.tab('main', this.rte.i18n('Properies'))
6265
			.append([this.rte.i18n('Image URL'), src],                 'main', true)
6266
			.append([this.rte.i18n('Title'),     this.src.main.title], 'main', true)
6267
			.append([this.rte.i18n('Alt text'),  this.src.main.alt],   'main', true)
6268
			.append([this.rte.i18n('Size'), $('<span />').append(this.src.main.width).append(' x ').append(this.src.main.height).append(' px')], 'main', true)
6269
			.append([this.rte.i18n('Alignment'), this.src.main.align],  'main', true)
6270
			.append([this.rte.i18n('Margins'),   this.src.main.margin], 'main', true)
6271
			.append([this.rte.i18n('Border'),    this.src.main.border], 'main', true)
6272
6273
		for (var tab in this.src) {
6274
			if (tab != 'main') {
6275
				d.tab(tab, this.rte.i18n(this.labels[tab]));
6276
				for (var name in this.src[tab]) {
6277
					var l = this.rte.i18n(this.labels[name] ? this.labels[name] : name);
6278
					if (tab == 'events') {
6279
						this.src[tab][name].val(this.rte.utils.trimEventCallback(this.img.attr(name)));
6280
					} else if (tab == 'link') {
6281
						if (this.link) {
6282
							this.src[tab][name].val(name == 'href' ? this.rte.utils.absoluteURL(this.link.attr(name)) : this.link.attr(name));
6283
						}
6284
					} else {
6285
						this.src[tab][name].val(this.img.attr(name)||'');
6286
					}
6287
					d.append([l, this.src[tab][name]], tab, true);
6288
				}
6289
			}
6290
		};
6291
6292
		d.open();
6293
6294
		var fs = $('<fieldset />').append($('<legend />').text(this.rte.i18n('Preview')))
6295
		d.append(fs, 'main');
6296
		var frame = document.createElement('iframe');
6297
		$(frame).attr('src', '#').addClass('el-rte-preview').appendTo(fs);
6298
6299
		html = this.rte.options.doctype+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style="padding:0;margin:0;font-size:9px"> </body></html>';
6300
		frame.contentWindow.document.open();
6301
		frame.contentWindow.document.write(html);
6302
		frame.contentWindow.document.close();
6303
		this.frame = frame.contentWindow.document
6304
		this.preview = $(frame.contentWindow.document.body)
6305
						.text('Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin');
6306
6307
		if (this.img.attr('src')) {
6308
6309
			this.prevImg = $(this.frame.createElement('img'))
6310
				.attr('src',  this.rte.utils.absoluteURL(this.img.attr('src')))
6311
6312
			this.prevImg.attr('width', this.img.attr('width'))
6313
				.attr('height', this.img.attr('height'))
6314
				.attr('title', this.img.attr('title')||'')
6315
				.attr('alt', this.img.attr('alt')||'')
6316
				.attr('style', this.img.attr('style')||'')
6317
			for (var n in this.src.adv) {
6318
				var a = this.img.attr(n);
6319
				if (a) {
6320
					this.prevImg.attr(n, a)
6321
				}
6322
			}
6323
6324
			this.preview.prepend(this.prevImg);
6325
			this.updateValues();
6326
		}
6327
6328
		$.each(this.src, function() {
6329
			$.each(this, function() {
6330
				if (this === self.src.main.src) {
6331
					this.bind('change', function() { self.updatePreview(); });
6332
				} else if (this == self.src.main.width || this == self.src.main.height) {
6333
					this.bind('change', function(e) {self.updateDimesions(e);});
6334
				} else {
6335
					this.bind('change', function() { self.updateImg(); });
6336
				}
6337
			});
6338
		});
6339
6340
		// this.src.link.href.change(function() {
6341
		// 	var $this = $(this);
6342
		// 	$this.val(self.rte.utils.absoluteURL($this.val()));
6343
		// });
6344
6345
	}
6346
6347
6348
6349
	/**
6350
	 * Устанавливает значения полей формы из аттрибутов prevImg
6351
	 * Вызывается после загрузки prevImg
6352
	 *
6353
	 **/
6354
	this.updateValues = function() {
6355
6356
		var i = this.prevImg.get(0);
6357
6358
		this.origW = this.prevImg.attr('width');
6359
		this.origH = this.prevImg.attr('height');
6360
6361
		this.src.main.src.val(this.rte.dom.attr(i, 'src'));
6362
		this.src.main.title.val(this.rte.dom.attr(i, 'title'));
6363
		this.src.main.alt.val(this.rte.dom.attr(i, 'alt'));
6364
		this.src.main.width.val(this.origW);
6365
		this.src.main.height.val(this.origH);
6366
		this.src.adv['class'].val(this.rte.dom.attr(i, 'class'));
6367
		this.src.main.margin.val(this.prevImg)
6368
		var f = this.prevImg.css('float');
6369
		this.src.main.align.val(f == 'left' || f == 'right' ? f : (this.prevImg.css('vertical-align')||''));
6370
		this.src.main.border.val(this.prevImg)
6371
		this.src.adv.style.val(this.rte.dom.attr(i, 'style'));
6372
	}
6373
6374
	/**
6375
	 * Очищает поля формы
6376
	 *
6377
	 **/
6378
	this.cleanValues = function() {
6379
		$.each(this.src, function() {
6380
			$.each(this, function() {
6381
				var $this = $(this);
6382
				if ($this.attr('name') != 'src') {
6383
					$this.val('');
6384
				}
6385
			});
6386
		});
6387
	}
6388
6389
	/**
6390
	 * Устанавливает аттрибуты prevImg из полей формы
6391
	 *
6392
	 **/
6393
	this.updateImg = function() {
6394
		this.prevImg.attr({
6395
				style  : $.trim(this.src.adv.style.val()),
6396
				title  : $.trim(this.src.main.title.val()),
6397
				alt    : $.trim(this.src.main.alt.val()),
6398
				width  : parseInt(this.src.main.width.val()),
6399
				height : parseInt(this.src.main.height.val())
6400
			});
6401
6402
		var a = this.src.main.align.val();
6403
		var f = a == 'left' || a == 'right' ? a : '';
6404
6405
		var b = this.src.main.border.val();
6406
		var m = this.src.main.margin.val();
6407
		this.prevImg.css('float', f);
6408
		this.prevImg.css('vertical-align', f ? '' : a);
6409
		this.prevImg.css('border', $.trim(b.width+' '+b.style+' '+b.color));
6410
		if (m.css) {
6411
			this.prevImg.css('margin', m.css);
6412
		} else {
6413
			this.prevImg.css('margin-top', m.top);
6414
			this.prevImg.css('margin-right', m.right);
6415
			this.prevImg.css('margin-bottom', m.bottom);
6416
			this.prevImg.css('margin-left', m.left);
6417
		}
6418
6419
		$.each([this.src.events, this.src.adv], function() {
6420
			$.each(this, function() {
6421
				var $this = $(this);
6422
				var n = $this.attr('name');
6423
				if (n != 'style') {
6424
					var v = $.trim($this.val());
6425
					if (v) {
6426
						self.prevImg.attr(n, v);
6427
					} else {
6428
						self.prevImg.removeAttr(n);
6429
					}
6430
				}
6431
			});
6432
		});
6433
6434
	}
6435
6436
	/**
6437
	 * Обновляет форму выбора изображения
6438
	 *
6439
	 **/
6440
	this.updatePreview = function() {
6441
6442
		var imgsrc = this.prevImg ? this.prevImg.attr('src') : '';
6443
		var src    = $.trim(this.src.main.src.val());
6444
		if (!src || src !=imgsrc) { // new image or empty src
6445
			if (this.prevImg) {
6446
				this.prevImg.remove();
6447
				this.prevImg = null;
6448
			}
6449
			this.cleanValues();
6450
			if (src) {  // new image
6451
6452
				this.prevImg = $(this.frame.createElement('img'))
6453
					.attr('src',  this.rte.utils.absoluteURL(src))
6454
					.bind('load', function() {
6455
						self.updateValues();
6456
					})
6457
				this.preview.prepend(this.prevImg);
6458
				self.updateValues();
6459
			}
6460
		} else { // update existsed image
6461
			this.updateImg();
6462
		}
6463
	}
6464
6465
	this.updateDimesions = function(e) {
6466
6467
		var w = parseInt(this.src.main.width.val())  || 0;
6468
		var h = parseInt(this.src.main.height.val()) || 0;
6469
		if (w > 0 && h > 0) {
6470
			if (e.currentTarget == this.src.main.width.get(0)) {
6471
6472
				this.src.main.height.val(parseInt(w*this.origH/this.origW));
6473
			} else {
6474
				this.src.main.width.val(parseInt(h*this.origW/this.origH));
6475
			}
6476
		} else {
6477
			this.src.main.width.val(this.origW);
6478
			this.src.main.height.val(this.origH);
6479
		}
6480
6481
		this.updateImg();
6482
6483
	}
6484
6485
	this.set = function() {
6486
		this.rte.history.add();
6487
		this.rte.selection.restoreIERange();
6488
		if (!this.prevImg || !this.prevImg.attr('width')) {
6489
			this.img  && this.img.remove();
6490
			this.link && this.rte.doc.execCommand('unlink', false, null);
6491
		} else {
6492
			if (!this.img[0].parentNode) {
6493
				this.img = $(this.rte.doc.createElement('img'));
6494
			}
6495
6496
			this.img.attr({
6497
					src    : this.rte.utils.absoluteURL($.trim(this.src.main.src.val())),
6498
					style  : $.trim(this.rte.dom.attr(this.prevImg.get(0), 'style')),
6499
					title  : $.trim(this.src.main.title.val()),
6500
					alt    : $.trim(this.src.main.alt.val()),
6501
					width  : parseInt(this.src.main.width.val()),
6502
					height : parseInt(this.src.main.height.val())
6503
				});
6504
6505
			for (var _n in this.src.adv) {
6506
				if (_n != 'style') {
6507
					var val = this.src.adv[_n].val();
6508
					if (val) {
6509
						this.img.attr(_n, val);
6510
					} else {
6511
						this.img.removeAttr(_n)
6512
					}
6513
6514
				}
6515
			}
6516
			for (var _n in this.src.events) {
6517
				var val = this.src.events[_n].val();
6518
				if (val) {
6519
					this.img.attr(_n, val);
6520
				} else {
6521
					this.img.removeAttr(_n)
6522
				}
6523
			}
6524
6525
			if (!this.img[0].parentNode) {
6526
				this.rte.selection.insertNode(this.img.get(0))
6527
			}
6528
		}
6529
		this.rte.ui.update();
6530
	}
6531
6532
	this.update = function() {
6533
		this.domElem.removeClass('disabled');
6534
		var n = this.rte.selection.getEnd(),
6535
			$n = $(n);
6536
		if (n.nodeName == 'IMG' && !$n.hasClass('elrte-protected')) {
6537
			this.domElem.addClass('active');
6538
		} else {
6539
			this.domElem.removeClass('active');
6540
		}
6541
	}
6542
6543
}
6544
})(jQuery);
6545
/**
6546
 * @class Увеличение отступа
6547
 * списки - если выделен один элемент - увеличивается вложенность списка, в остальных случаях - padding у родительского ul|ol
6548
 * Если таблица выделена полностью - ей добавляется margin, если частично - увеличивается padding для ячеек
6549
 *
6550
 * @param  elRTE  rte   объект-редактор
6551
 * @param  String name  название кнопки
6552
 *
6553
 *
6554
 * @author:    Dmitry Levashov (dio) dio@std42.ru
6555
 * @copyright: Studio 42, http://www.std42.ru
6556
 **/
6557
(function($) {
6558
elRTE.prototype.ui.prototype.buttons.indent = function(rte, name) {
6559
	this.constructor.prototype.constructor.call(this, rte, name);
6560
	var self = this;
6561
6562
	this.command = function() {
6563
		this.rte.history.add();
6564
		var nodes = this.rte.selection.selected({collapsed : true, blocks : true, wrap : 'inline', tag : 'p'});
6565
6566
		function indent(n) {
6567
			var css = /(IMG|HR|TABLE|EMBED|OBJECT)/.test(n.nodeName) ? 'margin-left' : 'padding-left';
6568
			var val = self.rte.dom.attr(n, 'style').indexOf(css) != -1 ? parseInt($(n).css(css))||0 : 0;
6569
			$(n).css(css, val+40+'px');
6570
		}
6571
6572
		for (var i=0; i < nodes.length; i++) {
6573
			if (/^(TABLE|THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(nodes[i].nodeName)) {
6574
				$(nodes[i]).find('td,th').each(function() {
6575
					indent(this);
6576
				});
6577
			} else if (/^LI$/.test(nodes[i].nodeName)) {
6578
				var n = $(nodes[i]);
6579
				$(this.rte.dom.create(nodes[i].parentNode.nodeName))
6580
					.append($(this.rte.dom.create('li')).html(n.html()||'')).appendTo(n.html('&nbsp;'));
6581
			} else {
6582
				indent(nodes[i]);
6583
			}
6584
		};
6585
		this.rte.ui.update();
6586
	}
6587
6588
	this.update = function() {
6589
		this.domElem.removeClass('disabled');
6590
	}
6591
6592
}
6593
})(jQuery);
6594
/**
6595
 * @class button - justify text
6596
 *
6597
 * @param  elRTE  rte   объект-редактор
6598
 * @param  String name  название кнопки
6599
 *
6600
 *
6601
 * @author:    Dmitry Levashov (dio) dio@std42.ru
6602
 * @copyright: Studio 42, http://www.std42.ru
6603
 **/
6604
(function($) {
6605
elRTE.prototype.ui.prototype.buttons.justifyleft = function(rte, name) {
6606
	this.constructor.prototype.constructor.call(this, rte, name);
6607
	this.align = this.name == 'justifyfull' ? 'justify' : this.name.replace('justify', '');
6608
6609
	this.command = function() {
6610
		var s = this.rte.selection.selected({collapsed:true, blocks : true, tag : 'div'}),
6611
			l = s.length;
6612
		l && this.rte.history.add();
6613
		while (l--) {
6614
			this.rte.dom.filter(s[l], 'textNodes') && $(s[l]).css('text-align', this.align);
6615
		}
6616
		this.rte.ui.update();
6617
	}
6618
6619
	this.update = function() {
6620
		var s = this.rte.selection.getNode(),
6621
			n = s.nodeName == 'BODY' ? s : this.rte.dom.selfOrParent(s, 'textNodes')||(s.parentNode && s.parentNode.nodeName == 'BODY' ? s.parentNode : null);
6622
		if (n) {
6623
			this.domElem.removeClass('disabled').toggleClass('active', $(n).css('text-align') == this.align);
6624
		} else {
6625
			this.domElem.addClass('disabled');
6626
		}
6627
	}
6628
6629
}
6630
6631
elRTE.prototype.ui.prototype.buttons.justifycenter = elRTE.prototype.ui.prototype.buttons.justifyleft;
6632
elRTE.prototype.ui.prototype.buttons.justifyright  = elRTE.prototype.ui.prototype.buttons.justifyleft;
6633
elRTE.prototype.ui.prototype.buttons.justifyfull   = elRTE.prototype.ui.prototype.buttons.justifyleft;
6634
6635
})(jQuery);
6636
/**
6637
 * @class button - insert/edit link (open dialog window)
6638
 *
6639
 * @param  elRTE  rte   объект-редактор
6640
 * @param  String name  название кнопки
6641
 *
6642
 * @author:    Dmitry Levashov (dio) dio@std42.ru
6643
 * Copyright: Studio 42, http://www.std42.ru
6644
 **/
6645
(function($) {
6646
elRTE.prototype.ui.prototype.buttons.link = function(rte, name) {
6647
	this.constructor.prototype.constructor.call(this, rte, name);
6648
	var self = this;
6649
	this.img = false;
6650
6651
	function init() {
6652
		self.labels = {
6653
			id        : 'ID',
6654
			'class'   : 'Css class',
6655
			style     : 'Css style',
6656
			dir       : 'Script direction',
6657
			lang      : 'Language',
6658
			charset   : 'Charset',
6659
			type      : 'Target MIME type',
6660
			rel       : 'Relationship page to target (rel)',
6661
			rev       : 'Relationship target to page (rev)',
6662
			tabindex  : 'Tab index',
6663
			accesskey : 'Access key'
6664
		}
6665
		self.src = {
6666
			main : {
6667
				href   : $('<input type="text" />'),
6668
				title  : $('<input type="text" />'),
6669
				anchor : $('<select />').attr('name', 'anchor'),
6670
				target : $('<select />')
6671
					.append($('<option />').text(self.rte.i18n('In this window')).val(''))
6672
					.append($('<option />').text(self.rte.i18n('In new window (_blank)')).val('_blank'))
6673
				// 	.append($('<option />').text(self.rte.i18n('In new parent window (_parent)')).val('_parent'))
6674
				// 	.append($('<option />').text(self.rte.i18n('In top frame (_top)')).val('_top'))
6675
			},
6676
6677
			popup : {
6678
				use        : $('<input type="checkbox />"'),
6679
				url        : $('<input type="text" />'    ).val('http://'),
6680
				name       : $('<input type="text" />'    ),
6681
				width      : $('<input type="text" />'    ).attr({size : 6, title : self.rte.i18n('Width')} ).css('text-align', 'right'),
6682
				height     : $('<input type="text" />'    ).attr({size : 6, title : self.rte.i18n('Height')}).css('text-align', 'right'),
6683
				left       : $('<input type="text" />'    ).attr({size : 6, title : self.rte.i18n('Left')}  ).css('text-align', 'right'),
6684
				top        : $('<input type="text" />'    ).attr({size : 6, title : self.rte.i18n('Top')}   ).css('text-align', 'right'),
6685
				location   : $('<input type="checkbox" />'),
6686
				menubar    : $('<input type="checkbox" />'),
6687
				toolbar    : $('<input type="checkbox" />'),
6688
				scrollbars : $('<input type="checkbox" />'),
6689
				status     : $('<input type="checkbox" />'),
6690
				resizable  : $('<input type="checkbox" />'),
6691
				dependent  : $('<input type="checkbox" />'),
6692
				retfalse   : $('<input type="checkbox" />').attr('checked', true)
6693
			},
6694
6695
			adv : {
6696
				id        : $('<input type="text" />'),
6697
				'class'   : $('<input type="text" />'),
6698
				style     : $('<input type="text" />'),
6699
				dir       : $('<select />')
6700
							.append($('<option />').text(self.rte.i18n('Not set')).val(''))
6701
							.append($('<option />').text(self.rte.i18n('Left to right')).val('ltr'))
6702
							.append($('<option />').text(self.rte.i18n('Right to left')).val('rtl')),
6703
				lang      : $('<input type="text" />'),
6704
				charset   : $('<input type="text" />'),
6705
				type      : $('<input type="text" />'),
6706
				rel       : $('<input type="text" />'),
6707
				rev       : $('<input type="text" />'),
6708
				tabindex  : $('<input type="text" />'),
6709
				accesskey : $('<input type="text" />')
6710
			},
6711
			events : {}
6712
		}
6713
6714
		$.each(
6715
			['onblur', 'onfocus', 'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmouseout', 'onmouseleave', 'onkeydown', 'onkeypress', 'onkeyup'],
6716
			function() {
6717
				self.src.events[this] = $('<input type="text" />');
6718
		});
6719
6720
		$.each(self.src, function() {
6721
			for (var n in this) {
6722
				this[n].attr('name', n);
6723
				var t = this[n].attr('type');
6724
				if (!t || (t == 'text'  && !this[n].attr('size')) ) {
6725
					this[n].css('width', '100%');
6726
				}
6727
			}
6728
		});
6729
6730
	}
6731
6732
	this.command = function() {
6733
		var n = this.rte.selection.getNode(),
6734
			sel, i, v, opts, l, r, link, href, s;
6735
6736
		!this.src && init();
6737
		this.rte.selection.saveIERange();
6738
6739
		function isLink(n) { return n.nodeName == 'A' && n.href; }
6740
6741
		this.link = this.rte.dom.selfOrParentLink(n);
6742
6743
		if (!this.link) {
6744
			sel = $.browser.msie ? this.rte.selection.selected() : this.rte.selection.selected({wrap : false});
6745
			if (sel.length) {
6746
				for (i=0; i < sel.length; i++) {
6747
					if (isLink(sel[i])) {
6748
						this.link = sel[i];
6749
						break;
6750
					}
6751
				};
6752
				if (!this.link) {
6753
					this.link = this.rte.dom.parent(sel[0], isLink) || this.rte.dom.parent(sel[sel.length-1], isLink);
6754
				}
6755
			}
6756
		}
6757
6758
		this.link = this.link ? $(this.link) : $(this.rte.doc.createElement('a'));
6759
		this.img = n.nodeName == 'IMG' ? n : null;
6760
		this.updatePopup();
6761
6762
		this.src.main.anchor.empty();
6763
		$('a[href!=""][name]', this.rte.doc).each(function() {
6764
			var n = $(this).attr('name');
6765
			self.src.main.anchor.append($('<option />').val(n).text(n));
6766
		});
6767
		if (this.src.main.anchor.children().length) {
6768
			this.src.main.anchor.prepend($('<option />').val('').text(this.rte.i18n('Select bookmark')) )
6769
				.change(function() {
6770
					var v = $(this).val();
6771
					if (v) {
6772
						self.src.main.href.val('#'+v);
6773
					}
6774
				});
6775
		}
6776
6777
		opts = {
6778
			rtl : this.rte.rtl,
6779
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
6780
			tabs : { show : function(e, ui) { if (ui.index==3) { self.updateOnclick(); } } },
6781
			close : function() {self.rte.browser.msie && self.rte.selection.restoreIERange(); },
6782
			dialog : {
6783
				width : 'auto',
6784
				width : 430,
6785
				title : this.rte.i18n('Link')
6786
6787
			}
6788
		}
6789
		d = new elDialogForm(opts);
6790
6791
		l = $('<div />')
6792
			.append( $('<label />').append(this.src.popup.location).append(this.rte.i18n('Location bar')))
6793
			.append( $('<label />').append(this.src.popup.menubar).append(this.rte.i18n('Menu bar')))
6794
			.append( $('<label />').append(this.src.popup.toolbar).append(this.rte.i18n('Toolbar')))
6795
			.append( $('<label />').append(this.src.popup.scrollbars).append(this.rte.i18n('Scrollbars')));
6796
		r = $('<div />')
6797
			.append( $('<label />').append(this.src.popup.status).append(this.rte.i18n('Status bar')))
6798
			.append( $('<label />').append(this.src.popup.resizable).append(this.rte.i18n('Resizable')))
6799
			.append( $('<label />').append(this.src.popup.dependent).append(this.rte.i18n('Depedent')))
6800
			.append( $('<label />').append(this.src.popup.retfalse).append(this.rte.i18n('Add return false')));
6801
6802
		d.tab('main', this.rte.i18n('Properies'))
6803
			.tab('popup',  this.rte.i18n('Popup'))
6804
			.tab('adv',    this.rte.i18n('Advanced'))
6805
			.tab('events', this.rte.i18n('Events'))
6806
			.append($('<label />').append(this.src.popup.use).append(this.rte.i18n('Open link in popup window')), 'popup')
6807
			.separator('popup')
6808
			.append([this.rte.i18n('URL'),  this.src.popup.url],  'popup', true)
6809
			.append([this.rte.i18n('Window name'), this.src.popup.name], 'popup', true)
6810
			.append([this.rte.i18n('Window size'), $('<span />').append(this.src.popup.width).append(' x ').append(this.src.popup.height).append(' px')], 'popup', true)
6811
			.append([this.rte.i18n('Window position'), $('<span />').append(this.src.popup.left).append(' x ').append(this.src.popup.top).append(' px')], 'popup', true)
6812
			.separator('popup')
6813
			.append([l, r], 'popup', true);
6814
6815
		link = this.link.get(0);
6816
		href = this.rte.dom.attr(link, 'href');
6817
		this.src.main.href.val(href).change(function() {
6818
			$(this).val(self.rte.utils.absoluteURL($(this).val()));
6819
		});
6820
6821
		if (this.rte.options.fmAllow && this.rte.options.fmOpen) {
6822
			var s = $('<span />').append(this.src.main.href.css('width', '87%'))
6823
				.append(
6824
					$('<span />').addClass('ui-state-default ui-corner-all')
6825
						.css({'float' : 'right', 'margin-right' : '3px'})
6826
						.attr('title', self.rte.i18n('Open file manger'))
6827
						.append($('<span />').addClass('ui-icon ui-icon-folder-open'))
6828
							.click( function() {
6829
								self.rte.options.fmOpen( function(url) { self.src.main.href.val(url).change(); } );
6830
							})
6831
							.hover(function() {$(this).addClass('ui-state-hover')}, function() { $(this).removeClass('ui-state-hover')})
6832
				);
6833
			d.append([this.rte.i18n('Link URL'), s], 'main', true);
6834
		} else {
6835
			d.append([this.rte.i18n('Link URL'), this.src.main.href], 'main', true);
6836
		}
6837
		this.src.main.href.change();
6838
6839
		d.append([this.rte.i18n('Title'), this.src.main.title.val(this.rte.dom.attr(link, 'title'))], 'main', true);
6840
		if (this.src.main.anchor.children().length) {
6841
			d.append([this.rte.i18n('Bookmark'), this.src.main.anchor.val(href)], 'main', true)
6842
		}
6843
		if (!this.rte.options.doctype.match(/xhtml/)) {
6844
			d.append([this.rte.i18n('Target'), this.src.main.target.val(this.link.attr('target')||'')], 'main', true);
6845
		}
6846
6847
6848
6849
		for (var n in this.src.adv) {
6850
			this.src.adv[n].val(this.rte.dom.attr(link, n));
6851
			d.append([this.rte.i18n(this.labels[n] ? this.labels[n] : n), this.src.adv[n]], 'adv', true);
6852
		}
6853
		for (var n in this.src.events) {
6854
			var v = this.rte.utils.trimEventCallback(this.rte.dom.attr(link, n));
6855
			this.src.events[n].val(v);
6856
			d.append([this.rte.i18n(this.labels[n] ? this.labels[n] : n), this.src.events[n]], 'events', true);
6857
		}
6858
6859
		this.src.popup.use.change(function() {
6860
			var c = $(this).attr('checked');
6861
			$.each(self.src.popup, function() {
6862
				if ($(this).attr('name') != 'use') {
6863
					if (c) {
6864
						$(this).removeAttr('disabled');
6865
					} else {
6866
						$(this).attr('disabled', true);
6867
					}
6868
				}
6869
			})
6870
		});
6871
		this.src.popup.use.change();
6872
		d.open();
6873
	}
6874
6875
	this.update = function() {
6876
		var n = this.rte.selection.getNode();
6877
6878
		// var t = this.rte.dom.selectionHas(function(n) { return n.nodeName == 'A' && n.href; });
6879
		// this.rte.log(t)
6880
6881
		if (this.rte.dom.selfOrParentLink(n)) {
6882
			this.domElem.removeClass('disabled').addClass('active');
6883
		} else if (this.rte.dom.selectionHas(function(n) { return n.nodeName == 'A' && n.href; })) {
6884
			this.domElem.removeClass('disabled').addClass('active');
6885
		} else if (!this.rte.selection.collapsed() || n.nodeName == 'IMG') {
6886
			this.domElem.removeClass('disabled active');
6887
		} else {
6888
			this.domElem.addClass('disabled').removeClass('active');
6889
		}
6890
	}
6891
6892
	this.updatePopup = function() {
6893
		var onclick = this.rte.dom.attr(this.link.get(0), 'onclick');
6894
		onclick = onclick ? $.trim(onclick.toString()) : ''
6895
		if ( onclick.length>0 && (m = onclick.match(/window.open\("([^"]+)",\s*"([^"]*)",\s*"([^"]*)"\s*.*\);\s*(return\s+false)?/))) {
6896
			this.src.popup.use.attr('checked', 'on')
6897
			this.src.popup.url.val(m[1]);
6898
			this.src.popup.name.val(m[2]);
6899
6900
			if ( /location=yes/.test(m[3]) ) {
6901
				this.src.popup.location.attr('checked', true);
6902
			}
6903
			if ( /menubar=yes/.test(m[3]) ) {
6904
				this.src.popup.menubar.attr('checked', true);
6905
			}
6906
			if ( /toolbar=yes/.test(m[3]) ) {
6907
				this.src.popup.toolbar.attr('checked', true);
6908
			}
6909
			if ( /scrollbars=yes/.test(m[3]) ) {
6910
				this.src.popup.scrollbars.attr('checked', true);
6911
			}
6912
			if ( /status=yes/.test(m[3]) ) {
6913
				this.src.popup.status.attr('checked', true);
6914
			}
6915
			if ( /resizable=yes/.test(m[3]) ) {
6916
				this.src.popup.resizable.attr('checked', true);
6917
			}
6918
			if ( /dependent=yes/.test(m[3]) ) {
6919
				this.src.popup.dependent.attr('checked', true);
6920
			}
6921
			if ((_m = m[3].match(/width=([^,]+)/))) {
6922
				this.src.popup.width.val(_m[1]);
6923
			}
6924
			if ((_m = m[3].match(/height=([^,]+)/))) {
6925
				this.src.popup.height.val(_m[1]);
6926
			}
6927
			if ((_m = m[3].match(/left=([^,]+)/))) {
6928
				this.src.popup.left.val(_m[1]);
6929
			}
6930
			if ((_m = m[3].match(/top=([^,]+)/))) {
6931
				this.src.popup.top.val(_m[1]);
6932
			}
6933
			if (m[4]) {
6934
				this.src.popup.retfalse.attr('checked', true);
6935
			}
6936
		} else {
6937
			$.each(this.src.popup, function() {
6938
				var $this = $(this);
6939
				if ($this.attr('type') == 'text') {
6940
					$this.val($this.attr('name') == 'url' ? 'http://' : '');
6941
				} else {
6942
					if ($this.attr('name') == 'retfalse') {
6943
						this.attr('checked', true);
6944
					} else {
6945
						$this.removeAttr('checked');
6946
					}
6947
				}
6948
			});
6949
		}
6950
6951
	}
6952
6953
	this.updateOnclick = function () {
6954
		var url = this.src.popup.url.val();
6955
		if (this.src.popup.use.attr('checked') && url) {
6956
			var params = '';
6957
			if (this.src.popup.location.attr('checked')) {
6958
				params += 'location=yes,';
6959
			}
6960
			if (this.src.popup.menubar.attr('checked')) {
6961
				params += 'menubar=yes,';
6962
			}
6963
			if (this.src.popup.toolbar.attr('checked')) {
6964
				params += 'toolbar=yes,';
6965
			}
6966
			if (this.src.popup.scrollbars.attr('checked')) {
6967
				params += 'scrollbars=yes,';
6968
			}
6969
			if (this.src.popup.status.attr('checked')) {
6970
				params += 'status=yes,';
6971
			}
6972
			if (this.src.popup.resizable.attr('checked')) {
6973
				params += 'resizable=yes,';
6974
			}
6975
			if (this.src.popup.dependent.attr('checked')) {
6976
				params += 'dependent=yes,';
6977
			}
6978
			if (this.src.popup.width.val()) {
6979
				params += 'width='+this.src.popup.width.val()+',';
6980
			}
6981
			if (this.src.popup.height.val()) {
6982
				params += 'height='+this.src.popup.height.val()+',';
6983
			}
6984
			if (this.src.popup.left.val()) {
6985
				params += 'left='+this.src.popup.left.val()+',';
6986
			}
6987
			if (this.src.popup.top.val()) {
6988
				params += 'top='+this.src.popup.top.val()+',';
6989
			}
6990
			if (params.length>0) {
6991
				params = params.substring(0, params.length-1)
6992
			}
6993
			var retfalse = this.src.popup.retfalse.attr('checked') ? 'return false;' : '';
6994
			var onclick = 'window.open("'+url+'", "'+$.trim(this.src.popup.name.val())+'", "'+params+'");'+retfalse;
6995
			this.src.events.onclick.val(onclick);
6996
			if (!this.src.main.href.val()) {
6997
				this.src.main.href.val('#');
6998
			}
6999
		} else {
7000
			var v = this.src.events.onclick.val();
7001
			v = v.replace(/window\.open\([^\)]+\)\s*;?\s*return\s*false\s*;?/i, '');
7002
			this.src.events.onclick.val(v);
7003
		}
7004
	}
7005
7006
	this.set = function() {
7007
		var href, fakeURL;
7008
		this.updateOnclick();
7009
		this.rte.selection.restoreIERange();
7010
		this.rte.history.add();
7011
		href = this.rte.utils.absoluteURL(this.src.main.href.val());
7012
		if (!href) {
7013
			// this.link.parentNode && this.rte.doc.execCommand('unlink', false, null);
7014
			var bm = this.rte.selection.getBookmark();
7015
			this.rte.dom.unwrap(this.link[0]);
7016
			this.rte.selection.moveToBookmark(bm)
7017
		} else {
7018
			if (!this.link[0].parentNode) {
7019
				if (this.img && this.img.parentNode) {
7020
					this.link = $(this.rte.dom.create('a')).attr('href', href);
7021
					this.rte.dom.wrap(this.img, this.link[0]);
7022
				} else {
7023
					fakeURL = '#--el-editor---'+Math.random();
7024
					this.rte.doc.execCommand('createLink', false, fakeURL);
7025
					this.link = $('a[href="'+fakeURL+'"]', this.rte.doc);
7026
					this.link.each(function() {
7027
						var $this = $(this);
7028
						// удаляем ссылки вокруг пустых элементов
7029
						if (!$.trim($this.html()) && !$.trim($this.text())) {
7030
							$this.replaceWith($this.text()); //  сохраняем пробелы :)
7031
						}
7032
					});
7033
				}
7034
			}
7035
7036
			this.src.main.href.val(href);
7037
			for (var tab in this.src) {
7038
				if (tab != 'popup') {
7039
					for (var n in this.src[tab]) {
7040
						if (n != 'anchors') {
7041
							var v = $.trim(this.src[tab][n].val());
7042
							if (v) {
7043
								this.link.attr(n, v);
7044
							} else {
7045
								this.link.removeAttr(n);
7046
							}
7047
						}
7048
					}
7049
				}
7050
			};
7051
			this.img && this.rte.selection.select(this.img);
7052
		}
7053
		this.rte.ui.update(true);
7054
	}
7055
7056
}
7057
7058
})(jQuery);
7059
/**
7060
 * @class button - insert non breakable space
7061
 * Если выделение схлопнуто и находится внутри div'a - он удаляется
7062
 * Новые div'ы создаются только из несхлопнутого выделения
7063
 *
7064
 * @param  elRTE  rte   объект-редактор
7065
 * @param  String name  название кнопки
7066
 *
7067
 * @author:    Dmitry Levashov (dio) dio@std42.ru
7068
 * @copyright: Studio 42, http://www.std42.ru
7069
 **/
7070
(function($) {
7071
elRTE.prototype.ui.prototype.buttons.nbsp = function(rte, name) {
7072
	this.constructor.prototype.constructor.call(this, rte, name);
7073
7074
	this.command = function() {
7075
		this.rte.history.add();
7076
		this.rte.selection.insertHtml('&nbsp;', true);
7077
		this.rte.window.focus();
7078
		this.rte.ui.update();
7079
	}
7080
7081
	this.update = function() {
7082
		this.domElem.removeClass('disabled');
7083
	}
7084
}
7085
})(jQuery);
7086
7087
/**
7088
 * @class button - outdent text
7089
 * уменьшает padding/margin/самомнение ;)
7090
 *
7091
 * @param  elRTE  rte   объект-редактор
7092
 * @param  String name  название кнопки
7093
 * @todo decrease lists nesting level!
7094
 *
7095
 * @author:    Dmitry Levashov (dio) dio@std42.ru
7096
 * @copyright: Studio 42, http://www.std42.ru
7097
 **/
7098
(function($) {
7099
elRTE.prototype.ui.prototype.buttons.outdent = function(rte, name) {
7100
	this.constructor.prototype.constructor.call(this, rte, name);
7101
	var self = this;
7102
7103
	this.command = function() {
7104
		var v = this.find();
7105
		if (v.node) {
7106
			this.rte.history.add();
7107
			$(v.node).css(v.type, (v.val>40 ? v.val-40 : 0)+'px');
7108
			this.rte.ui.update();
7109
		}
7110
	}
7111
7112
	this.find = function(n) {
7113
		function checkNode(n) {
7114
			var ret = {type : '', val : 0};
7115
			var s;
7116
			if ((s = self.rte.dom.attr(n, 'style'))) {
7117
				ret.type = s.indexOf('padding-left') != -1
7118
					? 'padding-left'
7119
					: (s.indexOf('margin-left') != -1 ? 'margin-left' : '');
7120
				ret.val = ret.type ? parseInt($(n).css(ret.type))||0 : 0;
7121
			}
7122
			return ret;
7123
		}
7124
7125
		var n = this.rte.selection.getNode();
7126
		var ret = checkNode(n);
7127
		if (ret.val) {
7128
			ret.node = n;
7129
		} else {
7130
			$.each(this.rte.dom.parents(n, '*'), function() {
7131
				ret = checkNode(this);
7132
				if (ret.val) {
7133
					ret.node = this;
7134
					return ret;
7135
				}
7136
			})
7137
		}
7138
		return ret;
7139
	}
7140
7141
	this.update = function() {
7142
		var v = this.find();
7143
		if (v.node) {
7144
			this.domElem.removeClass('disabled');
7145
		} else {
7146
			this.domElem.addClass('disabled');
7147
		}
7148
	}
7149
7150
7151
}
7152
7153
})(jQuery);
7154
(function($) {
7155
	elRTE.prototype.ui.prototype.buttons.pagebreak = function(rte, name) {
7156
		this.constructor.prototype.constructor.call(this, rte, name);
7157
7158
		// prevent resize
7159
		$(this.rte.doc.body).bind('mousedown', function(e) {
7160
			if ($(e.target).hasClass('elrte-pagebreak')) {
7161
				e.preventDefault();
7162
			}
7163
		})
7164
7165
		this.command = function() {
7166
			this.rte.selection.insertHtml('<img src="'+this.rte.filter.url+'pixel.gif" class="elrte-protected elrte-pagebreak"/>', false);
7167
		}
7168
7169
		this.update = function() {
7170
			this.domElem.removeClass('disabled');
7171
		}
7172
	}
7173
7174
})(jQuery);/**
7175
 * @class button - insert formatted text (open dialog window)
7176
 *
7177
 * @param  elRTE  rte   объект-редактор
7178
 * @param  String name  название кнопки
7179
 *
7180
 * @author:    Dmitry Levashov (dio) dio@std42.ru
7181
 * @copyright: Studio 42, http://www.std42.ru
7182
 **/
7183
(function($) {
7184
elRTE.prototype.ui.prototype.buttons.pasteformattext = function(rte, name) {
7185
	this.constructor.prototype.constructor.call(this, rte, name);
7186
	this.iframe = $(document.createElement('iframe')).addClass('el-rte-paste-input');
7187
	this.doc    = null;
7188
	var self    = this;
7189
7190
	this.command = function() {
7191
		this.rte.selection.saveIERange();
7192
		var self = this,
7193
			opts = {
7194
			submit : function(e, d) {
7195
				e.stopPropagation();
7196
				e.preventDefault();
7197
				self.paste();
7198
				d.close();
7199
			},
7200
			dialog : {
7201
				width : 500,
7202
				title : this.rte.i18n('Paste formatted text')
7203
			}
7204
		},
7205
		d = new elDialogForm(opts);
7206
		d.append(this.iframe).open();
7207
		this.doc = this.iframe.get(0).contentWindow.document;
7208
		html = this.rte.options.doctype
7209
			+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
7210
		html += '</head><body> <br /> </body></html>';
7211
7212
		this.doc.open();
7213
		this.doc.write(html);
7214
		this.doc.close();
7215
7216
		if (!this.rte.browser.msie) {
7217
			try { this.doc.designMode = "on"; }
7218
			catch(e) { }
7219
		} else {
7220
			this.doc.body.contentEditable = true;
7221
		}
7222
		setTimeout(function() { self.iframe[0].contentWindow.focus(); }, 50);
7223
	}
7224
7225
	this.paste = function() {
7226
		$(this.doc.body).find('[class]').removeAttr('class');
7227
		var html = $.trim($(this.doc.body).html());
7228
		if (html) {
7229
			this.rte.history.add();
7230
			this.rte.selection.restoreIERange();
7231
			this.rte.selection.insertHtml(this.rte.filter.wysiwyg2wysiwyg(this.rte.filter.proccess('paste', html)));
7232
			this.rte.ui.update(true);
7233
		}
7234
	}
7235
7236
	this.update = function() {
7237
		this.domElem.removeClass('disabled');
7238
	}
7239
}
7240
})(jQuery);
7241
7242
/**
7243
 * @class кнопка "вставить только текст"
7244
 *
7245
 * @param  elRTE  rte   объект-редактор
7246
 * @param  String name  название кнопки
7247
 *
7248
 * @author:    Dmitry Levashov (dio) dio@std42.ru
7249
 * @copyright: Studio 42, http://www.std42.ru
7250
 **/
7251
(function($) {
7252
elRTE.prototype.ui.prototype.buttons.pastetext = function(rte, name) {
7253
	this.constructor.prototype.constructor.call(this, rte, name);
7254
	this.input = $('<textarea />').addClass('el-rte-paste-input');
7255
	var self   = this;
7256
7257
	this.command = function() {
7258
		this.rte.browser.msie && this.rte.selection.saveIERange();
7259
		var opts = {
7260
			submit : function(e, d) {
7261
				e.stopPropagation();
7262
				e.preventDefault();
7263
				self.paste();
7264
				d.close();
7265
			},
7266
			dialog : {
7267
				width : 500,
7268
				title : this.rte.i18n('Paste only text')
7269
			}
7270
		}
7271
		var d = new elDialogForm(opts);
7272
		d.append(this.input).open();
7273
	}
7274
7275
	this.paste = function() {
7276
		var txt = $.trim(this.input.val());
7277
		if (txt) {
7278
			this.rte.history.add();
7279
			this.rte.browser.msie && this.rte.selection.restoreIERange();
7280
			this.rte.selection.insertText(txt.replace(/\r?\n/g, '<br />'), true);
7281
			this.rte.ui.update(true);
7282
		}
7283
		this.input.val('');
7284
	}
7285
7286
	this.update = function() {
7287
		this.domElem.removeClass('disabled');
7288
	}
7289
7290
}
7291
})(jQuery);
7292
/**
7293
 * @class button - save editor content (submit form)
7294
 *
7295
 * @param  elRTE  rte   объект-редактор
7296
 * @param  String name  название кнопки
7297
 *
7298
 * @author:    Dmitry Levashov (dio) dio@std42.ru
7299
 * @copyright: Studio 42, http://www.std42.ru
7300
 **/
7301
(function($) {
7302
elRTE.prototype.ui.prototype.buttons.save = function(rte, name) {
7303
	this.constructor.prototype.constructor.call(this, rte, name);
7304
	this.active = true;
7305
7306
	this.command = function() {
7307
		this.rte.save();
7308
	}
7309
7310
	this.update = function() { }
7311
}
7312
})(jQuery);
7313
/**
7314
 * @class button - insert smiley (open dialog window)
7315
 *
7316
 * @param  elRTE  rte   объект-редактор
7317
 * @param  String name  название кнопки
7318
 *
7319
 * @author:    eSabbath
7320
 *
7321
 **/
7322
(function($) {
7323
elRTE.prototype.ui.prototype.buttons.smiley = function(rte, name) {
7324
	this.constructor.prototype.constructor.call(this, rte, name);
7325
	var self = this;
7326
	this.img = null;
7327
	this.url = this.rte.filter.url+'smileys/';
7328
	this.smileys = {
7329
		'smile' : 'smile.png',
7330
		'happy' : 'happy.png',
7331
		'tongue' : 'tongue.png',
7332
		'surprised' : 'surprised.png',
7333
		'waii' : 'waii.png',
7334
		'wink' : 'wink.png',
7335
		'evilgrin' : 'evilgrin.png',
7336
		'grin' : 'grin.png',
7337
7338
7339
		'unhappy' : 'unhappy.png'
7340
	};
7341
	this.width = 120;
7342
7343
	this.command = function() {
7344
		var self = this, url = this.url, d, opts, img;
7345
7346
		this.rte.browser.msie && this.rte.selection.saveIERange();
7347
7348
		opts = {
7349
			dialog : {
7350
				height  : 120,
7351
				width   : this.width,
7352
				title   : this.rte.i18n('Smiley'),
7353
				buttons : {}
7354
			}
7355
		}
7356
		d = new elDialogForm(opts);
7357
		$.each(this.smileys, function(name, img) {
7358
			d.append($('<img src="'+url+img+'" title="'+name+'" id="'+name+'" class="el-rte-smiley"/>').click(function() { self.set(this.id, d);	}));
7359
		});
7360
		d.open();
7361
	}
7362
7363
	this.update = function() {
7364
		this.domElem.removeClass('disabled');
7365
		this.domElem.removeClass('active');
7366
	}
7367
7368
	this.set = function(s, d) {
7369
		this.rte.browser.msie && this.rte.selection.restoreIERange();
7370
		if (this.smileys[s]) {
7371
			this.img = $(this.rte.doc.createElement('img'));
7372
			this.img.attr({
7373
				src    : this.url + this.smileys[s],
7374
				title  : s,
7375
				alt    : s
7376
			});
7377
			this.rte.selection.insertNode(this.img.get(0));
7378
			this.rte.ui.update();
7379
		}
7380
		d.close();
7381
	}
7382
}
7383
})(jQuery);
7384
/**
7385
 * @class button - stops elements floating. Insert div with style="clear:all"
7386
 * Если выделение схлопнуто и находится внутри div'a с аттрибутом или css clear - он удаляется
7387
 *
7388
 * @param  elRTE  rte   объект-редактор
7389
 * @param  String name  название кнопки
7390
 *
7391
 * @author:    Dmitry Levashov (dio) dio@std42.ru
7392
 * @copyright: Studio 42, http://www.std42.ru
7393
 **/
7394
(function($) {
7395
elRTE.prototype.ui.prototype.buttons.stopfloat = function(rte, name) {
7396
	this.constructor.prototype.constructor.call(this, rte, name);
7397
7398
	this.find = function() {
7399
		if (this.rte.selection.collapsed()) {
7400
			var n = this.rte.dom.selfOrParent(this.rte.selection.getEnd(), /^DIV$/);
7401
			if (n && (this.rte.dom.attr(n, 'clear') || $(n).css('clear') != 'none')) {
7402
				return n;
7403
			}
7404
		}
7405
	}
7406
7407
	this.command = function() {
7408
		var n;
7409
		if ((n = this.find())) {
7410
			var n = $(n);
7411
			this.rte.history.add();
7412
			if (!n.children().length && !$.trim(n.text()).length) {
7413
				n.remove();
7414
			} else {
7415
				n.removeAttr('clear').css('clear', '');
7416
			}
7417
		} else {
7418
			this.rte.history.add();
7419
			this.rte.selection.insertNode($(this.rte.dom.create('div')).css('clear', 'both').get(0), true);
7420
		}
7421
		this.rte.ui.update(true);
7422
	}
7423
7424
	this.update = function() {
7425
		this.domElem.removeClass('disabled');
7426
		if (this.find()) {
7427
			this.domElem.addClass('active');
7428
		} else {
7429
			this.domElem.removeClass('active');
7430
		}
7431
	}
7432
}
7433
7434
})(jQuery);/**
7435
 * @class button - create/edit table (open dialog window)
7436
 *
7437
 * @param  elRTE  rte   объект-редактор
7438
 * @param  String name  название кнопки
7439
 *
7440
 * @author:    Dmitry Levashov (dio) dio@std42.ru
7441
 * Copyright: Studio 42, http://www.std42.ru
7442
 **/
7443
(function($) {
7444
elRTE.prototype.ui.prototype.buttons.table = function(rte, name) {
7445
	this.constructor.prototype.constructor.call(this, rte, name);
7446
	var self    = this;
7447
	this.src    = null;
7448
	this.labels = null;
7449
7450
	function init() {
7451
		self.labels = {
7452
			main      : 'Properies',
7453
			adv       : 'Advanced',
7454
			events    : 'Events',
7455
			id        : 'ID',
7456
			'class'   : 'Css class',
7457
			style     : 'Css style',
7458
			dir       : 'Script direction',
7459
			summary   : 'Summary',
7460
			lang      : 'Language',
7461
			href      : 'URL'
7462
		}
7463
7464
		self.src = {
7465
			main : {
7466
				caption : $('<input type="text" />'),
7467
				rows    : $('<input type="text" />').attr('size', 5).val(2),
7468
				cols    : $('<input type="text" />').attr('size', 5).val(2),
7469
				width   : $('<input type="text" />').attr('size', 5),
7470
				wunit   : $('<select />')
7471
							.append($('<option />').val('%').text('%'))
7472
							.append($('<option />').val('px').text('px')),
7473
				height  : $('<input type="text" />').attr('size', 5),
7474
				hunit   : $('<select />')
7475
							.append($('<option />').val('%').text('%'))
7476
							.append($('<option />').val('px').text('px')),
7477
				align   : $('<select />')
7478
							.append($('<option />').val('').text(self.rte.i18n('Not set')))
7479
							.append($('<option />').val('left').text(self.rte.i18n('Left')))
7480
							.append($('<option />').val('center').text(self.rte.i18n('Center')))
7481
							.append($('<option />').val('right').text(self.rte.i18n('Right'))),
7482
				spacing : $('<input type="text" />').attr('size', 5),
7483
				padding : $('<input type="text" />').attr('size', 5),
7484
				border  : $('<div />'),
7485
				// frame   : $('<select />')
7486
				// 			.append($('<option />').val('void').text(self.rte.i18n('No')))
7487
				// 			.append($('<option />').val('border').text(self.rte.i18n('Yes'))),
7488
				rules   : $('<select />')
7489
							.append($('<option />').val('none').text(self.rte.i18n('No')))
7490
							.append($('<option />').val('all').text(self.rte.i18n('Cells')))
7491
							.append($('<option />').val('groups').text(self.rte.i18n('Groups')))
7492
							.append($('<option />').val('rows').text(self.rte.i18n('Rows')))
7493
							.append($('<option />').val('cols').text(self.rte.i18n('Columns'))),
7494
				margin  : $('<div />'),
7495
				bg      : $('<div />'),
7496
				bgimg   : $('<input type="text" />').css('width', '90%')
7497
			},
7498
7499
			adv : {
7500
				id        : $('<input type="text" />'),
7501
				summary   : $('<input type="text" />'),
7502
				'class'   : $('<input type="text" />'),
7503
				style     : $('<input type="text" />'),
7504
				dir       : $('<select />')
7505
								.append($('<option />').text(self.rte.i18n('Not set')).val(''))
7506
								.append($('<option />').text(self.rte.i18n('Left to right')).val('ltr'))
7507
								.append($('<option />').text(self.rte.i18n('Right to left')).val('rtl')),
7508
				lang      : $('<input type="text" />')
7509
			},
7510
7511
			events : {}
7512
		}
7513
7514
		$.each(self.src, function() {
7515
			for (var n in this) {
7516
				this[n].attr('name', n);
7517
				var t = this[n].get(0).nodeName;
7518
				if (t == 'INPUT' && n != 'bgimg') {
7519
					this[n].css(this[n].attr('size') ? {'text-align' : 'right'} : {width : '100%'});
7520
				} else if (t == 'SELECT' && n!='wunit' && n!='hunit') {
7521
					this[n].css('width', '100%');
7522
				}
7523
			}
7524
		});
7525
7526
		$.each(
7527
			['onblur', 'onfocus', 'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmouseout', 'onmouseleave', 'onkeydown', 'onkeypress', 'onkeyup'],
7528
			function() {
7529
				self.src.events[this] = $('<input type="text" />').attr('name', this).css('width', '100%');
7530
		});
7531
7532
		self.src.main.align.change(function() {
7533
			var v = $(this).val();
7534
			if (v == 'center') {
7535
				self.src.main.margin.val({left : 'auto', right : 'auto'});
7536
			} else {
7537
				var m = self.src.main.margin.val();
7538
				if (m.left == 'auto' && m.right == 'auto') {
7539
					self.src.main.margin.val({left : '', right : ''});
7540
				}
7541
			}
7542
		});
7543
7544
		self.src.main.bgimg.change(function() {
7545
			var t = $(this);
7546
			t.val(self.rte.utils.absoluteURL(t.val()));
7547
		})
7548
7549
	}
7550
7551
	this.command = function() {
7552
		var n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^TABLE$/);
7553
7554
		if (this.name == 'table') {
7555
			this.table = $(this.rte.doc.createElement('table'));
7556
		} else {
7557
			this.table = n ? $(n) : $(this.rte.doc.createElement('table'));
7558
		}
7559
7560
		!this.src && init();
7561
		this.src.main.border.elBorderSelect({styleHeight : 117});
7562
		this.src.main.bg.elColorPicker({palettePosition : 'outer', 'class' : 'el-colorpicker ui-icon ui-icon-pencil'});
7563
		this.src.main.margin.elPaddingInput({ type : 'margin', value : this.table});
7564
7565
		if (this.table.parents().length) {
7566
			this.src.main.rows.val('').attr('disabled', true);
7567
			this.src.main.cols.val('').attr('disabled', true);
7568
		} else {
7569
			this.src.main.rows.val(2).removeAttr('disabled');
7570
			this.src.main.cols.val(2).removeAttr('disabled');
7571
		}
7572
7573
		var w = this.table.css('width') || this.table.attr('width');
7574
		this.src.main.width.val(parseInt(w)||'');
7575
		this.src.main.wunit.val(w.indexOf('px') != -1 ? 'px' : '%');
7576
7577
		var h = this.table.css('height') || this.table.attr('height');
7578
		this.src.main.height.val(parseInt(h)||'');
7579
		this.src.main.hunit.val(h && h.indexOf('px') != -1 ? 'px' : '%');
7580
7581
		var f = this.table.css('float');
7582
		this.src.main.align.val('');
7583
		if (f == 'left' || f == 'right') {
7584
			this.src.main.align.val(f);
7585
		} else {
7586
			var ml = this.table.css('margin-left');
7587
			var mr = this.table.css('margin-right');
7588
			if (ml == 'auto' && mr == 'auto') {
7589
				this.src.main.align.val('center');
7590
			}
7591
		}
7592
7593
		this.src.main.border.val(this.table);
7594
		//this.src.main.frame.val(this.table.attr('frame'));
7595
		this.src.main.rules.val(this.rte.dom.attr(this.table.get(0), 'rules'));
7596
7597
		this.src.main.bg.val(this.table.css('background-color'));
7598
		var bgimg = (this.table.css('background-image')||'').replace(/url\(([^\)]+)\)/i, "$1");
7599
		this.src.main.bgimg.val(bgimg!='none' ? bgimg : '');
7600
7601
		var opts = {
7602
			rtl : this.rte.rtl,
7603
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
7604
			dialog : {
7605
				width : 530,
7606
				title : this.rte.i18n('Table')
7607
			}
7608
		}
7609
		var d = new elDialogForm(opts);
7610
7611
		for (var tab in this.src) {
7612
			d.tab(tab, this.rte.i18n(this.labels[tab]));
7613
			if (tab == 'main') {
7614
				var t1 = $('<table />')
7615
					.append($('<tr />').append('<td>'+this.rte.i18n('Rows')+'</td>').append($('<td />').append(this.src.main.rows)))
7616
					.append($('<tr />').append('<td>'+this.rte.i18n('Columns')+'</td>').append($('<td />').append(this.src.main.cols)));
7617
				var t2 = $('<table />')
7618
					.append($('<tr />').append('<td>'+this.rte.i18n('Width')+'</td>').append($('<td />').append(this.src.main.width).append(this.src.main.wunit)))
7619
					.append($('<tr />').append('<td>'+this.rte.i18n('Height')+'</td>').append($('<td />').append(this.src.main.height).append(this.src.main.hunit)));
7620
				var t3 = $('<table />')
7621
					.append($('<tr />').append('<td>'+this.rte.i18n('Spacing')+'</td>').append($('<td />').append(this.src.main.spacing.val(this.table.attr('cellspacing')||''))))
7622
					.append($('<tr />').append('<td>'+this.rte.i18n('Padding')+'</td>').append($('<td />').append(this.src.main.padding.val(this.table.attr('cellpadding')||''))));
7623
7624
				d.append([this.rte.i18n('Caption'), this.src.main.caption.val(this.table.find('caption').eq(0).text() || '')], 'main', true)
7625
					.separator('main')
7626
					.append([t1, t2, t3], 'main', true)
7627
					.separator('main')
7628
					.append([this.rte.i18n('Border'),        this.src.main.border], 'main', true)
7629
					//.append([this.rte.i18n('Frame'),       this.src.main.frame], 'main', true)
7630
					.append([this.rte.i18n('Inner borders'), this.src.main.rules], 'main', true)
7631
					.append([this.rte.i18n('Alignment'),     this.src.main.align], 'main', true)
7632
					.append([this.rte.i18n('Margins'),       this.src.main.margin], 'main', true)
7633
					.append([this.rte.i18n('Background'),    $('<span />').append($('<span />').css({'float' : 'left', 'margin-right' : '3px'}).append(this.src.main.bg)).append(this.src.main.bgimg)], 'main', true)
7634
			} else {
7635
				for (var name in this.src[tab]) {
7636
					var v = this.rte.dom.attr(this.table, name);
7637
					if (tab == 'events') {
7638
						v = this.rte.utils.trimEventCallback(v);
7639
					}
7640
					d.append([this.rte.i18n(this.labels[name] ? this.labels[name] : name), this.src[tab][name].val(v)], tab, true);
7641
				}
7642
			}
7643
		}
7644
7645
		d.open();
7646
	}
7647
7648
	this.set = function() {
7649
7650
		if (!this.table.parents().length) {
7651
			var r = parseInt(this.src.main.rows.val()) || 0;
7652
			var c = parseInt(this.src.main.cols.val()) || 0;
7653
			if (r<=0 || c<=0) {
7654
				return;
7655
			}
7656
			this.rte.history.add();
7657
			var b = $(this.rte.doc.createElement('tbody')).appendTo(this.table);
7658
7659
			for (var i=0; i < r; i++) {
7660
				var tr = '<tr>';
7661
				for (var j=0; j < c; j++) {
7662
					tr += '<td>&nbsp;</td>';
7663
				}
7664
				b.append(tr+'</tr>');
7665
			};
7666
7667
			// var tr = $(this.rte.doc.createElement('tr'));
7668
			//
7669
			// for (var i=0; i < c; i++) {
7670
			// 	tr.append($(this.rte.doc.createElement('td')).html('&nbsp;'));
7671
			// };
7672
			//
7673
			// for (var i=0; i<r; i++) {
7674
			// 	b.append(tr.clone(true));
7675
			// };
7676
7677
			// this.rte.selection.insertNode(this.table.get(0), true);
7678
		} else {
7679
			this.table
7680
				.removeAttr('width')
7681
				.removeAttr('height')
7682
				.removeAttr('border')
7683
				.removeAttr('align')
7684
				.removeAttr('bordercolor')
7685
				.removeAttr('bgcolor')
7686
				.removeAttr('cellspacing')
7687
				.removeAttr('cellpadding')
7688
				.removeAttr('frame')
7689
				.removeAttr('rules')
7690
				.removeAttr('style');
7691
		}
7692
7693
		var cap = $.trim(this.src.main.caption.val());
7694
		if (cap) {
7695
			if (!this.table.children('caption').length) {
7696
				this.table.prepend('<caption />' );
7697
			}
7698
			this.table.children('caption').text(cap);
7699
		} else {
7700
			this.table.children('caption').remove();
7701
		}
7702
7703
7704
		for (var tab in this.src) {
7705
			if (tab != 'main') {
7706
				for (var n in this.src[tab]) {
7707
					var v = $.trim(this.src[tab][n].val());
7708
					if (v) {
7709
						this.table.attr(n, v);
7710
					} else {
7711
						this.table.removeAttr(n);
7712
					}
7713
				}
7714
			}
7715
		}
7716
		var spacing, padding, rules;
7717
7718
		if ((spacing = parseInt(this.src.main.spacing.val())) && spacing>=0) {
7719
			this.table.attr('cellspacing', spacing);
7720
		}
7721
7722
		if ((padding = parseInt(this.src.main.padding.val())) && padding>=0) {
7723
			this.table.attr('cellpadding', padding);
7724
		}
7725
7726
		if ((rules = this.src.main.rules.val())) {
7727
			this.table.attr('rules', rules);
7728
		}
7729
7730
		var
7731
			w = parseInt(this.src.main.width.val()) || '',
7732
			h = parseInt(this.src.main.height.val()) || '',
7733
			i = $.trim(this.src.main.bgimg.val()),
7734
			b = this.src.main.border.val(),
7735
			m = this.src.main.margin.val(),
7736
			f = this.src.main.align.val();
7737
		this.table.css({
7738
			width              : w ? w+this.src.main.wunit.val() : '',
7739
			height             : h ? h+this.src.main.hunit.val() : '',
7740
			border             : $.trim(b.width+' '+b.style+' '+b.color),
7741
			'background-color' : this.src.main.bg.val(),
7742
			'background-image' : i ? 'url('+i+')' : ''
7743
		});
7744
		if (m.css) {
7745
			this.table.css('margin', m.css);
7746
		} else {
7747
			this.table.css({
7748
				'margin-top'    : m.top,
7749
				'margin-right'  : m.right,
7750
				'margin-bottom' : m.bottom,
7751
				'margin-left'   : m.left
7752
			});
7753
		}
7754
		if ((f=='left' || f=='right') && this.table.css('margin-left')!='auto'  && this.table.css('margin-right')!='auto') {
7755
			this.table.css('float', f);
7756
		}
7757
		if (!this.table.attr('style')) {
7758
			this.table.removeAttr('style');
7759
		}
7760
		if (!this.table.parents().length) {
7761
			this.rte.selection.insertNode(this.table.get(0), true);
7762
		}
7763
		this.rte.ui.update();
7764
	}
7765
7766
	this.update = function() {
7767
		this.domElem.removeClass('disabled');
7768
		if (this.name == 'tableprops' && !this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^TABLE$/)) {
7769
			this.domElem.addClass('disabled').removeClass('active');
7770
		}
7771
	}
7772
7773
}
7774
7775
elRTE.prototype.ui.prototype.buttons.tableprops = elRTE.prototype.ui.prototype.buttons.table;
7776
7777
})(jQuery);
7778
7779
/**
7780
 * @class button - remove table
7781
 *
7782
 * @param  elRTE  rte   объект-редактор
7783
 * @param  String name  название кнопки
7784
 *
7785
 * @author:    Dmitry Levashov (dio) dio@std42.ru
7786
 * @copyright: Studio 42, http://www.std42.ru
7787
 **/
7788
(function($) {
7789
elRTE.prototype.ui.prototype.buttons.tablerm = function(rte, name) {
7790
	this.constructor.prototype.constructor.call(this, rte, name);
7791
7792
	this.command = function() {
7793
		var t = this.rte.dom.parent(this.rte.selection.getNode(), /^TABLE$/);
7794
		// t && $(t).remove();
7795
		if (t) {
7796
			this.rte.history.add();
7797
			$(t).remove();
7798
		}
7799
		this.rte.ui.update(true);
7800
	}
7801
7802
	this.update = function() {
7803
		if (this.rte.dom.parent(this.rte.selection.getNode(), /^TABLE$/)) {
7804
			this.domElem.removeClass('disabled');
7805
		} else {
7806
			this.domElem.addClass('disabled');
7807
		}
7808
	}
7809
}
7810
})(jQuery);
7811
/**
7812
 * @class button - table cell properties
7813
 *
7814
 * @param  elRTE  rte   объект-редактор
7815
 * @param  String name  название кнопки
7816
 *
7817
 *
7818
 * @author:    Dmitry Levashov (dio) dio@std42.ru
7819
 * @copyright: Studio 42, http://www.std42.ru
7820
 **/
7821
(function($) {
7822
elRTE.prototype.ui.prototype.buttons.tbcellprops = function(rte, name) {
7823
	this.constructor.prototype.constructor.call(this, rte, name);
7824
	var self = this;
7825
	this.src = null;
7826
	this.labels = null;
7827
7828
	function init() {
7829
		self.labels = {
7830
			main    : 'Properies',
7831
			adv     : 'Advanced',
7832
			events  : 'Events',
7833
			id      : 'ID',
7834
			'class' : 'Css class',
7835
			style   : 'Css style',
7836
			dir     : 'Script direction',
7837
			lang    : 'Language'
7838
		}
7839
7840
		self.src = {
7841
			main : {
7842
				type    : $('<select />').css('width', '100%')
7843
							.append($('<option />').val('td').text(self.rte.i18n('Data')))
7844
							.append($('<option />').val('th').text(self.rte.i18n('Header'))),
7845
				width   : $('<input type="text" />').attr('size', 4),
7846
				wunit   : $('<select />')
7847
							.append($('<option />').val('%').text('%'))
7848
							.append($('<option />').val('px').text('px')),
7849
				height  : $('<input type="text" />').attr('size', 4),
7850
				hunit   : $('<select />')
7851
							.append($('<option />').val('%').text('%'))
7852
							.append($('<option />').val('px').text('px')),
7853
				align   : $('<select />').css('width', '100%')
7854
							.append($('<option />').val('').text(self.rte.i18n('Not set')))
7855
							.append($('<option />').val('left').text(self.rte.i18n('Left')))
7856
							.append($('<option />').val('center').text(self.rte.i18n('Center')))
7857
							.append($('<option />').val('right').text(self.rte.i18n('Right')))
7858
							.append($('<option />').val('justify').text(self.rte.i18n('Justify'))),
7859
				border  : $('<div />'),
7860
				padding  : $('<div />'),
7861
				bg      : $('<div />'),
7862
				bgimg   : $('<input type="text" />').css('width', '90%'),
7863
				apply   : $('<select />').css('width', '100%')
7864
							.append($('<option />').val('').text(self.rte.i18n('Current cell')))
7865
							.append($('<option />').val('row').text(self.rte.i18n('All cells in row')))
7866
							.append($('<option />').val('column').text(self.rte.i18n('All cells in column')))
7867
							.append($('<option />').val('table').text(self.rte.i18n('All cells in table')))
7868
			},
7869
7870
			adv : {
7871
				id        : $('<input type="text" />'),
7872
				'class'   : $('<input type="text" />'),
7873
				style     : $('<input type="text" />'),
7874
				dir       : $('<select />').css('width', '100%')
7875
								.append($('<option />').text(self.rte.i18n('Not set')).val(''))
7876
								.append($('<option />').text(self.rte.i18n('Left to right')).val('ltr'))
7877
								.append($('<option />').text(self.rte.i18n('Right to left')).val('rtl')),
7878
				lang      : $('<input type="text" />')
7879
			},
7880
7881
			events : {}
7882
		}
7883
7884
		$.each(self.src, function() {
7885
			for (var n in this) {
7886
				this[n].attr('name', n);
7887
				if (this[n].attr('type') == 'text' && !this[n].attr('size') && n!='bgimg') {
7888
					this[n].css('width', '100%')
7889
				}
7890
			}
7891
		});
7892
7893
		$.each(
7894
			['onblur', 'onfocus', 'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmouseout', 'onmouseleave', 'onkeydown', 'onkeypress', 'onkeyup'],
7895
			function() {
7896
				self.src.events[this] = $('<input type="text" />').attr('name', this).css('width', '100%');
7897
		});
7898
7899
	}
7900
7901
	this.command = function() {
7902
		!this.src && init();
7903
		this.cell = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(TD|TH)$/);
7904
		if (!this.cell) {
7905
			return;
7906
		}
7907
		this.src.main.type.val(this.cell.nodeName.toLowerCase());
7908
		this.cell = $(this.cell);
7909
		this.src.main.border.elBorderSelect({styleHeight : 117, value : this.cell});
7910
		this.src.main.bg.elColorPicker({palettePosition : 'outer', 'class' : 'el-colorpicker ui-icon ui-icon-pencil'});
7911
		this.src.main.padding.elPaddingInput({ value : this.cell});
7912
7913
		var w = this.cell.css('width') || this.cell.attr('width');
7914
		this.src.main.width.val(parseInt(w)||'');
7915
		this.src.main.wunit.val(w.indexOf('px') != -1 ? 'px' : '%');
7916
7917
		var h = this.cell.css('height') || this.cell.attr('height');
7918
		this.src.main.height.val(parseInt(h)||'');
7919
		this.src.main.hunit.val(h.indexOf('px') != -1 ? 'px' : '%');
7920
7921
		this.src.main.align.val(this.cell.attr('align') || this.cell.css('text-align'));
7922
		this.src.main.bg.val(this.cell.css('background-color'));
7923
		var bgimg = this.cell.css('background-image');
7924
		this.src.main.bgimg.val(bgimg && bgimg!='none' ? bgimg.replace(/url\(([^\)]+)\)/i, "$1") : '');
7925
		this.src.main.apply.val('');
7926
7927
		var opts = {
7928
			rtl : this.rte.rtl,
7929
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
7930
			dialog : {
7931
				width : 520,
7932
				title : this.rte.i18n('Table cell properties')
7933
			}
7934
		}
7935
		var d = new elDialogForm(opts);
7936
		for (var tab in this.src) {
7937
			d.tab(tab, this.rte.i18n(this.labels[tab]));
7938
7939
			if (tab == 'main') {
7940
				d.append([this.rte.i18n('Width'),              $('<span />').append(this.src.main.width).append(this.src.main.wunit)],  'main', true)
7941
					.append([this.rte.i18n('Height'),          $('<span />').append(this.src.main.height).append(this.src.main.hunit)], 'main', true)
7942
					.append([this.rte.i18n('Table cell type'), this.src.main.type],    'main', true)
7943
					.append([this.rte.i18n('Border'),          this.src.main.border],  'main', true)
7944
					.append([this.rte.i18n('Alignment'),       this.src.main.align],   'main', true)
7945
					.append([this.rte.i18n('Paddings'),        this.src.main.padding], 'main', true)
7946
					.append([this.rte.i18n('Background'),      $('<span />').append($('<span />').css({'float' : 'left', 'margin-right' : '3px'}).append(this.src.main.bg)).append(this.src.main.bgimg)],  'main', true)
7947
					.append([this.rte.i18n('Apply to'),        this.src.main.apply],   'main', true);
7948
			} else {
7949
				for (var name in this.src[tab]) {
7950
					var v = this.cell.attr(name) || '';
7951
					if (tab == 'events') {
7952
						v = this.rte.utils.trimEventCallback(v);
7953
					}
7954
					d.append([this.rte.i18n(this.labels[name] ? this.labels[name] : name), this.src[tab][name].val(v)], tab, true);
7955
				}
7956
			}
7957
		}
7958
		d.open()
7959
	}
7960
7961
	this.set = function() {
7962
		// $(t).remove();
7963
		var target = this.cell,
7964
			apply  = this.src.main.apply.val();
7965
		switch (this.src.main.apply.val()) {
7966
			case 'row':
7967
				target = this.cell.parent('tr').children('td,th');
7968
				break;
7969
7970
			case 'column':
7971
				target = $(this.rte.dom.tableColumn(this.cell.get(0)));
7972
				break;
7973
7974
			case 'table':
7975
				target = this.cell.parents('table').find('td,th');
7976
				break;
7977
		}
7978
7979
		for (var tab in this.src) {
7980
			if (tab != 'main') {
7981
				for (var n in this.src[tab]) {
7982
					var v = $.trim(this.src[tab][n].val());
7983
					if (v) {
7984
						target.attr(n, v);
7985
					} else {
7986
						target.removeAttr(n);
7987
					}
7988
				}
7989
			}
7990
		}
7991
7992
		target.removeAttr('width')
7993
			.removeAttr('height')
7994
			.removeAttr('border')
7995
			.removeAttr('align')
7996
			.removeAttr('bordercolor')
7997
			.removeAttr('bgcolor');
7998
7999
		var t = this.src.main.type.val();
8000
		var w = parseInt(this.src.main.width.val()) || '';
8001
		var h = parseInt(this.src.main.height.val()) || '';
8002
		var i = $.trim(this.src.main.bgimg.val());
8003
		var b = this.src.main.border.val();
8004
		var css = {
8005
			'width'            : w ? w+this.src.main.wunit.val() : '',
8006
			'height'           : h ? h+this.src.main.hunit.val() : '',
8007
			'background-color' : this.src.main.bg.val(),
8008
			'background-image' : i ? 'url('+i+')' : '',
8009
			'border'           : $.trim(b.width+' '+b.style+' '+b.color),
8010
			'text-align'       : this.src.main.align.val() || ''
8011
		};
8012
		var p = this.src.main.padding.val();
8013
		if (p.css) {
8014
			css.padding = p.css;
8015
		} else {
8016
			css['padding-top']    = p.top;
8017
			css['padding-right']  = p.right;
8018
			css['padding-bottom'] = p.bottom;
8019
			css['padding-left']   = p.left;
8020
		}
8021
8022
		target = target.get();
8023
8024
		$.each(target, function() {
8025
			var type = this.nodeName.toLowerCase();
8026
			var $this = $(this);
8027
			if (type != t) {
8028
8029
				var attr = {}
8030
				for (var i in self.src.adv) {
8031
					var v = $this.attr(i)
8032
					if (v) {
8033
						attr[i] = v.toString();
8034
					}
8035
				}
8036
				for (var i in self.src.events) {
8037
					var v = $this.attr(i)
8038
					if (v) {
8039
						attr[i] = v.toString();
8040
					}
8041
				}
8042
				var colspan = $this.attr('colspan')||1;
8043
				var rowspan = $this.attr('rowspan')||1;
8044
				if (colspan>1) {
8045
					attr.colspan = colspan;
8046
				}
8047
				if (rowspan>1) {
8048
					attr.rowspan = rowspan;
8049
				}
8050
8051
				$this.replaceWith($('<'+t+' />').html($this.html()).attr(attr).css(css) );
8052
8053
			} else {
8054
				$this.css(css);
8055
			}
8056
		});
8057
8058
		this.rte.ui.update();
8059
	}
8060
8061
	this.update = function() {
8062
		if (this.rte.dom.parent(this.rte.selection.getNode(), /^TABLE$/)) {
8063
			this.domElem.removeClass('disabled');
8064
		} else {
8065
			this.domElem.addClass('disabled');
8066
		}
8067
	}
8068
8069
}
8070
8071
})(jQuery);/**
8072
 * @class button - table cells merge
8073
 *
8074
 * @param  elRTE  rte   объект-редактор
8075
 * @param  String name  название кнопки
8076
 *
8077
 * @author:    Dmitry Levashov (dio) dio@std42.ru
8078
 * @copyright: Studio 42, http://www.std42.ru
8079
 **/
8080
(function($) {
8081
elRTE.prototype.ui.prototype.buttons.tbcellsmerge = function(rte, name) {
8082
	this.constructor.prototype.constructor.call(this, rte, name);
8083
	var self = this;
8084
8085
	function selectedCells() {
8086
		var c1 = self.rte.dom.selfOrParent(self.rte.selection.getStart(), /^(TD|TH)$/);
8087
		var c2 = self.rte.dom.selfOrParent(self.rte.selection.getEnd(), /^(TD|TH)$/);
8088
		if (c1 && c2 && c1!=c2 && $(c1).parents('table').get(0) == $(c2).parents('table').get(0)) {
8089
			return [c1, c2];
8090
		}
8091
		return null;
8092
	}
8093
8094
	this.command = function() {
8095
		var cells = selectedCells();
8096
8097
		if (cells) {
8098
8099
			var _s  = this.rte.dom.indexOf($(cells[0]).parent('tr').get(0));
8100
			var _e  = this.rte.dom.indexOf($(cells[1]).parent('tr').get(0));
8101
			var ro  = Math.min(_s, _e); // row offset
8102
			var rl  = Math.max(_s, _e) - ro + 1; // row length
8103
			var _c1 = this.rte.dom.tableColumn(cells[0], true, true);
8104
			var _c2 = this.rte.dom.tableColumn(cells[1], true);
8105
			var _i1 = $.inArray(cells[0], _c1.column);
8106
			var _i2 = $.inArray(cells[1], _c2.column);
8107
8108
			var colBegin = _c1.info.offset[_i1] < _c2.info.offset[_i2]  ? _c1 : _c2;
8109
			var colEnd   = _c1.info.offset[_i1] >= _c2.info.offset[_i2] ? _c1 : _c2;
8110
			var length   = 0;
8111
			var target   = null;
8112
			var html     = '';
8113
			this.rte.history.add();
8114
			var rows = $($(cells[0]).parents('table').eq(0).find('tr').get().slice(ro, ro+rl))
8115
				.each( function(i) {
8116
					var _l = html.length;
8117
					var accept = false;
8118
					$(this).children('td,th').each(function() {
8119
						var $this   = $(this);
8120
						var inBegin = $.inArray(this, colBegin.column);
8121
						var inEnd   = $.inArray(this, colEnd.column);
8122
8123
						if (inBegin!=-1 || inEnd!=-1) {
8124
							accept = inBegin!=-1 && inEnd==-1;
8125
							var len = parseInt($this.attr('colspan')||1)
8126
							if (i == 0) {
8127
								length += len;
8128
							}
8129
8130
							if (inBegin!=-1 && i>0) {
8131
								var delta = colBegin.info.delta[inBegin];
8132
								if (delta>0) {
8133
									if ($this.css('text-align') == 'left') {
8134
										var cell = $this.clone(true);
8135
										$this.html('&nbsp;');
8136
									} else {
8137
										var cell = $this.clone().html('&nbsp;');
8138
									}
8139
									cell.removeAttr('colspan').removeAttr('id').insertBefore(this);
8140
									if (delta>1) {
8141
										cell.attr('colspan', delta);
8142
									}
8143
								}
8144
							}
8145
8146
							if (inEnd!=-1) {
8147
								var delta = colEnd.info.delta[inEnd];
8148
								if (len-delta>1) {
8149
									var cp = len-delta-1;
8150
									if ($this.css('text-align') == 'right') {
8151
										var cell = $this.clone(true);
8152
										$this.html('&nbsp;');
8153
									} else {
8154
										var cell = $this.clone().html('&nbsp;');
8155
									}
8156
									cell.removeAttr('colspan').removeAttr('id').insertAfter(this);
8157
									if (cp>1) {
8158
										cell.attr('colspan', cp);
8159
									}
8160
								}
8161
							}
8162
							if (!target) {
8163
								target = $this;
8164
							} else {
8165
								html += $this.html();
8166
								$this.remove();
8167
							}
8168
						} else if (accept) {
8169
							if (i == 0) {
8170
								length += parseInt($this.attr('colspan')||1);
8171
							}
8172
							html += $this.html();
8173
							$this.remove();
8174
8175
8176
						}
8177
					})
8178
					html += _l!=html.length ? '<br />' : '';
8179
				});
8180
8181
			target.removeAttr('colspan').removeAttr('rowspan').html(target.html()+html)
8182
			if (length>1) {
8183
				target.attr('colspan', length);
8184
			}
8185
			if (rl>1) {
8186
				target.attr('rowspan', rl);
8187
			}
8188
			// sometimes when merge cells with different rowspans we get "lost" cells in rows
8189
			// this add cells if needed
8190
			this.rte.dom.fixTable($(cells[0]).parents('table').get(0));
8191
		}
8192
	}
8193
8194
	this.update = function() {
8195
		if (selectedCells()) {
8196
			this.domElem.removeClass('disabled');
8197
		} else {
8198
			this.domElem.addClass('disabled');
8199
		}
8200
	}
8201
}
8202
})(jQuery);
8203
/**
8204
 * @class button - split merged cell
8205
 *
8206
 * @param  elRTE  rte   объект-редактор
8207
 * @param  String name  название кнопки
8208
 * @todo split not merged cell
8209
 *
8210
 * @author:    Dmitry Levashov (dio) dio@std42.ru
8211
 * @copyright: Studio 42, http://www.std42.ru
8212
 **/
8213
(function($) {
8214
elRTE.prototype.ui.prototype.buttons.tbcellsplit = function(rte, name) {
8215
	this.constructor.prototype.constructor.call(this, rte, name);
8216
8217
	this.command = function() {
8218
		var n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(TD|TH)$/);
8219
		if (n) {
8220
			this.rte.history.add();
8221
			var colspan = parseInt(this.rte.dom.attr(n, 'colspan'));
8222
			var rowspan = parseInt(this.rte.dom.attr(n, 'rowspan'));
8223
			if (colspan>1 || rowspan>1) {
8224
				var cnum = colspan-1;
8225
				var rnum = rowspan-1;
8226
				var tb   = this.rte.dom.parent(n, /^TABLE$/);
8227
				var tbm  = this.rte.dom.tableMatrix(tb);
8228
8229
				// ячейки в текущем ряду
8230
				if (cnum) {
8231
					for (var i=0; i<cnum; i++) {
8232
						$(this.rte.dom.create(n.nodeName)).html('&nbsp;').insertAfter(n);
8233
					}
8234
				}
8235
				if (rnum) {
8236
					var ndx  = this.rte.dom.indexesOfCell(n, tbm)
8237
					var rndx = ndx[0];
8238
					var cndx = ndx[1];
8239
					// ячейки в следущих рядах
8240
					for (var r=rndx+1; r < rndx+rnum+1; r++) {
8241
						var cell;
8242
8243
						if (!tbm[r][cndx].nodeName) {
8244
							if (tbm[r][cndx-1].nodeName) {
8245
								cell = tbm[r][cndx-1];
8246
							} else {
8247
								for (var i=cndx-1; i>=0; i--) {
8248
									if (tbm[r][i].nodeName) {
8249
										cell =tbm[r][i];
8250
										break;
8251
									}
8252
								}
8253
							}
8254
							if (cell) {
8255
								for (var i=0; i<= cnum; i++) {
8256
									$(this.rte.dom.create(cell.nodeName)).html('&nbsp;').insertAfter(cell);
8257
								}
8258
							}
8259
						}
8260
					};
8261
				}
8262
				$(n).removeAttr('colspan').removeAttr('rowspan');
8263
				this.rte.dom.fixTable(tb);
8264
			}
8265
		}
8266
		this.rte.ui.update(true);
8267
	}
8268
8269
	this.update = function() {
8270
		var n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(TD|TH)$/);
8271
		if (n && (parseInt(this.rte.dom.attr(n, 'colspan'))>1 || parseInt(this.rte.dom.attr(n, 'rowspan'))>1)) {
8272
			this.domElem.removeClass('disabled');
8273
		} else {
8274
			this.domElem.addClass('disabled');
8275
		}
8276
	}
8277
}
8278
8279
})(jQuery);
8280
/**
8281
 * @class button - Insert new column in table(before or after current)
8282
 *
8283
 * @param  elRTE  rte   объект-редактор
8284
 * @param  String name  название кнопки
8285
 *
8286
 * @author:    Dmitry Levashov (dio) dio@std42.ru
8287
 * @copyright: Studio 42, http://www.std42.ru
8288
 **/
8289
(function($) {
8290
elRTE.prototype.ui.prototype.buttons.tbcolbefore = function(rte, name) {
8291
	this.constructor.prototype.constructor.call(this, rte, name);
8292
	var self = this;
8293
8294
	this.command = function() {
8295
		var cells = this.rte.dom.tableColumn(this.rte.selection.getNode(), false, true);
8296
		if (cells.length) {
8297
			this.rte.history.add();
8298
			$.each(cells, function() {
8299
				var $this = $(this);
8300
				var cp = parseInt($this.attr('colspan')||1)
8301
				if (cp >1) {
8302
					$this.attr('colspan', cp+1);
8303
				} else {
8304
					var c = $this.clone().html('&nbsp;').removeAttr('colspan').removeAttr('width').removeAttr('id');
8305
					if (self.name == 'tbcolbefore') {
8306
						c.insertBefore(this);
8307
					} else {
8308
						c.insertAfter(this);
8309
					}
8310
				}
8311
			});
8312
			this.rte.ui.update();
8313
		}
8314
	}
8315
8316
	this.update = function() {
8317
		if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(TD|TH)$/)) {
8318
			this.domElem.removeClass('disabled');
8319
		} else {
8320
			this.domElem.addClass('disabled');
8321
		}
8322
	}
8323
}
8324
8325
elRTE.prototype.ui.prototype.buttons.tbcolafter = elRTE.prototype.ui.prototype.buttons.tbcolbefore;
8326
8327
})(jQuery);
8328
/**
8329
 * @class button - remove table colunm
8330
 *
8331
 * @param  elRTE  rte   объект-редактор
8332
 * @param  String name  название кнопки
8333
 *
8334
 * @author:    Dmitry Levashov (dio) dio@std42.ru
8335
 * @copyright: Studio 42, http://www.std42.ru
8336
 **/
8337
(function($) {
8338
elRTE.prototype.ui.prototype.buttons.tbcolrm = function(rte, name) {
8339
	this.constructor.prototype.constructor.call(this, rte, name);
8340
	var self = this;
8341
8342
	this.command = function() {
8343
		var n     = this.rte.selection.getNode();
8344
		var c     = this.rte.dom.selfOrParent(n, /^(TD|TH)$/);
8345
		var prev  = $(c).prev('td,th').get(0);
8346
		var next  = $(c).next('td,th').get(0);
8347
		var tb    = this.rte.dom.parent(n, /^TABLE$/);
8348
		var cells = this.rte.dom.tableColumn(n, false, true);
8349
8350
		if (cells.length) {
8351
			this.rte.history.add();
8352
			$.each(cells, function() {
8353
				var $this = $(this);
8354
				var cp    = parseInt($this.attr('colspan')||1);
8355
				if ( cp>1 ) {
8356
					$this.attr('colspan', cp-1);
8357
				} else {
8358
					$this.remove();
8359
				}
8360
			});
8361
			this.rte.dom.fixTable(tb);
8362
			if (prev || next) {
8363
				this.rte.selection.selectContents(prev ? prev : next).collapse(true);
8364
			}
8365
			this.rte.ui.update(true);
8366
		}
8367
	}
8368
8369
	this.update = function() {
8370
		if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(TD|TH)$/)) {
8371
			this.domElem.removeClass('disabled');
8372
		} else {
8373
			this.domElem.addClass('disabled');
8374
		}
8375
	}
8376
}
8377
8378
})(jQuery);
8379
/**
8380
 * @class меню - Новый ряд в таблице
8381
 *
8382
 * @param  elRTE  rte   объект-редактор
8383
 * @param  String name  название кнопки
8384
 **/
8385
elRTE.prototype.ui.prototype.buttons.tbrowbefore = function(rte, name) {
8386
	this.constructor.prototype.constructor.call(this, rte, name);
8387
8388
	this.command = function() {
8389
		var n  = this.rte.selection.getNode();
8390
		var c  = this.rte.dom.selfOrParent(n, /^(TD|TH)$/);
8391
		var r  = this.rte.dom.selfOrParent(c, /^TR$/);
8392
		var mx = this.rte.dom.tableMatrix(this.rte.dom.selfOrParent(c, /^TABLE$/));
8393
		if (c && r && mx) {
8394
			this.rte.history.add();
8395
			var before = this.name == 'tbrowbefore';
8396
			var ro     = $(r).prevAll('tr').length;
8397
			var cnt    = 0;
8398
			var mdf    = [];
8399
8400
			function _find(x, y) {
8401
				while (y>0) {
8402
					y--;
8403
					if (mx[y] && mx[y][x] && mx[y][x].nodeName) {
8404
						return mx[y][x];
8405
					}
8406
				}
8407
			}
8408
8409
			for (var i=0; i<mx[ro].length; i++) {
8410
				if (mx[ro][i] && mx[ro][i].nodeName) {
8411
					var cell    = $(mx[ro][i]);
8412
					var colspan = parseInt(cell.attr('colspan')||1);
8413
					if (parseInt(cell.attr('rowspan')||1) > 1) {
8414
						if (before) {
8415
							cnt += colspan;
8416
						} else {
8417
							mdf.push(cell);
8418
						}
8419
					} else {
8420
						cnt += colspan;
8421
					}
8422
				} else if (mx[ro][i] == '-') {
8423
					cell = _find(i, ro);
8424
					cell && mdf.push($(cell));
8425
				}
8426
			}
8427
			var row = $('<tr />');
8428
			for (var i=0; i<cnt; i++) {
8429
				row.append('<td>&nbsp;</td>');
8430
			}
8431
			if (before) {
8432
				row.insertBefore(r);
8433
			} else {
8434
				row.insertAfter(r);
8435
			}
8436
			$.each(mdf, function() {
8437
				$(this).attr('rowspan', parseInt($(this).attr('rowspan')||1)+1);
8438
			});
8439
			this.rte.ui.update();
8440
		}
8441
	}
8442
8443
	this.update = function() {
8444
		if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^TR$/)) {
8445
			this.domElem.removeClass('disabled');
8446
		} else {
8447
			this.domElem.addClass('disabled');
8448
		}
8449
	}
8450
}
8451
8452
elRTE.prototype.ui.prototype.buttons.tbrowafter = elRTE.prototype.ui.prototype.buttons.tbrowbefore;
8453
/**
8454
 * @class button - remove table row
8455
 *
8456
 * @param  elRTE  rte   объект-редактор
8457
 * @param  String name  название кнопки
8458
 *
8459
 * @author:    Dmitry Levashov (dio) dio@std42.ru
8460
 * @copyright: Studio 42, http://www.std42.ru
8461
 **/
8462
(function($) {
8463
elRTE.prototype.ui.prototype.buttons.tbrowrm = function(rte, name) {
8464
	this.constructor.prototype.constructor.call(this, rte, name);
8465
	var self = this;
8466
	this.command = function() {
8467
8468
		var n  = this.rte.selection.getNode(),
8469
			c  = this.rte.dom.selfOrParent(n, /^(TD|TH)$/),
8470
			r  = this.rte.dom.selfOrParent(c, /^TR$/),
8471
			tb = this.rte.dom.selfOrParent(c, /^TABLE$/),
8472
			mx = this.rte.dom.tableMatrix(tb);
8473
8474
		if (c && r && mx.length) {
8475
			this.rte.history.add();
8476
			if (mx.length==1) {
8477
				$(tb).remove();
8478
				return this.rte.ui.update();
8479
			}
8480
			var mdf = [];
8481
			var ro  = $(r).prevAll('tr').length;
8482
8483
			function _find(x, y) {
8484
				while (y>0) {
8485
					y--;
8486
					if (mx[y] && mx[y][x] && mx[y][x].nodeName) {
8487
						return mx[y][x];
8488
					}
8489
				}
8490
			}
8491
8492
			// move cell with rowspan>1 to next row
8493
			function _move(cell, x) {
8494
				y = ro+1;
8495
				var sibling= null;
8496
				if (mx[y]) {
8497
					for (var _x=0; _x<x; _x++) {
8498
						if (mx[y][_x] && mx[y][_x].nodeName) {
8499
							sibling = mx[y][_x];
8500
						}
8501
					};
8502
8503
					cell = cell.remove();
8504
					if (sibling) {
8505
						cell.insertAfter(sibling);
8506
					} else {
8507
						cell.prependTo($(r).next('tr').eq(0));
8508
					}
8509
				}
8510
			}
8511
8512
			function _cursorPos(column) {
8513
				for (var i = 0; i<column.length; i++) {
8514
					if (column[i] == c) {
8515
						return i<column.length-1 ? column[i+1] : column[i-1];
8516
					}
8517
				}
8518
			}
8519
8520
			for (var i=0; i<mx[ro].length; i++) {
8521
				var cell = null;
8522
				var move = false;
8523
				if (mx[ro][i] && mx[ro][i].nodeName) {
8524
					cell = mx[ro][i];
8525
					move = true;
8526
				} else if (mx[ro][i] == '-' && (cell = _find(i, ro))) {
8527
					move = false;
8528
				}
8529
				if (cell) {
8530
					cell = $(cell);
8531
					var rowspan = parseInt(cell.attr('rowspan')||1);
8532
					if (rowspan>1) {
8533
						cell.attr('rowspan', rowspan-1);
8534
						move && _move(cell, i, ro);
8535
					}
8536
				}
8537
			};
8538
8539
			var _c = _cursorPos(this.rte.dom.tableColumn(c));
8540
			if (_c) {
8541
				this.rte.selection.selectContents(_c).collapse(true);
8542
			}
8543
8544
			$(r).remove();
8545
		}
8546
		this.rte.ui.update();
8547
	}
8548
8549
	this.update = function() {
8550
		if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^TR$/)) {
8551
			this.domElem.removeClass('disabled');
8552
		} else {
8553
			this.domElem.addClass('disabled');
8554
		}
8555
	}
8556
}
8557
8558
})(jQuery);/**
8559
 * @class кнопка - отмена повтор действий
8560
 *
8561
 * @param  elRTE  rte   объект-редактор
8562
 * @param  String name  название кнопки
8563
 *
8564
 * @author:    Dmitry Levashov (dio) dio@std42.ru
8565
 * @copyright: Studio 42, http://www.std42.ru
8566
 **/
8567
(function($) {
8568
	elRTE.prototype.ui.prototype.buttons.undo = function(rte, name) {
8569
		this.constructor.prototype.constructor.call(this, rte, name);
8570
8571
		this.command = function() {
8572
			if (this.name == 'undo' && this.rte.history.canBack()) {
8573
				this.rte.history.back();
8574
				this.rte.ui.update();
8575
			} else if (this.name == 'redo' && this.rte.history.canFwd()) {
8576
				this.rte.history.fwd();
8577
				this.rte.ui.update();
8578
			}
8579
		}
8580
8581
		this.update = function() {
8582
			this.domElem.toggleClass('disabled', this.name == 'undo' ? !this.rte.history.canBack() : !this.rte.history.canFwd());
8583
		}
8584
	}
8585
8586
	elRTE.prototype.ui.prototype.buttons.redo = elRTE.prototype.ui.prototype.buttons.undo;
8587
8588
})(jQuery);/**
8589
 * @class button - remove link
8590
 *
8591
 * @param  elRTE  rte   объект-редактор
8592
 * @param  String name  название кнопки
8593
 *
8594
 * @author:    Dmitry Levashov (dio) dio@std42.ru
8595
 * @copyright: Studio 42, http://www.std42.ru
8596
 **/
8597
(function($) {
8598
8599
	elRTE.prototype.ui.prototype.buttons.unlink = function(rte, name) {
8600
		this.constructor.prototype.constructor.call(this, rte, name);
8601
8602
		this.command = function() {
8603
8604
			var n = this.rte.selection.getNode(),
8605
				l = this.rte.dom.selfOrParentLink(n);
8606
8607
			function isLink(n) { return n.nodeName == 'A' && n.href; }
8608
8609
			if (!l) {
8610
8611
				var sel = $.browser.msie ? this.rte.selection.selected() : this.rte.selection.selected({wrap : false});
8612
				if (sel.length) {
8613
					for (var i=0; i < sel.length; i++) {
8614
						if (isLink(sel[i])) {
8615
							l = sel[i];
8616
							break;
8617
						}
8618
					};
8619
					if (!l) {
8620
						l = this.rte.dom.parent(sel[0], isLink) || this.rte.dom.parent(sel[sel.length-1], isLink);
8621
					}
8622
				}
8623
			}
8624
8625
			if (l) {
8626
				this.rte.history.add();
8627
				this.rte.selection.select(l);
8628
				this.rte.doc.execCommand('unlink', false, null);
8629
				this.rte.ui.update(true);
8630
			}
8631
8632
		}
8633
8634
		this.update = function() {
8635
			var n = this.rte.selection.getNode();
8636
			if (this.rte.dom.selfOrParentLink(n)) {
8637
				this.domElem.removeClass('disabled').addClass('active');
8638
			} else if (this.rte.dom.selectionHas(function(n) { return n.nodeName == 'A' && n.href; })) {
8639
				this.domElem.removeClass('disabled').addClass('active');
8640
			} else {
8641
				this.domElem.addClass('disabled').removeClass('active');
8642
			}
8643
		}
8644
	}
8645
8646
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/elrte.min.js (+9 lines)
Line 0 Link Here
1
/*
2
 * elRTE WYSIWYG HTML-editor
3
 * Version 1.1 (2010-09-20)
4
 * http://elrte.org
5
 *
6
 * Copyright 2010, Studio 42 Ltd.
7
 * Licensed under a 3 clauses BSD license
8
 */
9
function eli18n(a){this.textdomain=function(b){return this.messages[b]?this._domain=b:this._domain};a&&a.messages&&this.load(a.messages);a&&a.textdomain&&this.textdomain(a.textdomain)}eli18n.prototype=new function(){this.messages={};this._domain="";this.load=function(c){if(typeof(c)=="object"){for(var f in c){var b=c[f];if(typeof(b)=="object"){if(!this.messages[f]){this.messages[f]={}}for(var a in b){if(typeof(b[a])=="string"){this.messages[f][a]=b[a]}}}}}return this};this.translate=function(b,a){var a=a&&this.messages[a]?a:this._domain;return this.messages[a]&&this.messages[a][b]?this.messages[a][b]:b};this.format=function(f,b,c){f=this.translate(f,c);if(typeof(b)=="object"){for(var a in b){f=f.replace("%"+a,this.translate(b[a],c))}}return f}};function elDialogForm(c){var a=this;var b={"class":"el-dialogform",submit:function(f,g){window.console&&window.console.log&&window.console.log("submit called");g.close()},form:{action:window.location.href,method:"post"},ajaxForm:null,validate:null,spinner:"Loading",tabs:{active:0},tabPrefix:"el-df-tab-",dialog:{title:"dialog",autoOpen:false,modal:true,resizable:false,buttons:{Cancel:function(){a.close()},Ok:function(){a.form.trigger("submit")}}}};this.opts=jQuery.extend(true,b,c,{dialog:{autoOpen:false,close:function(){a.close()}}});if(this.opts.rtl){this.opts["class"]+=" el-dialogform-rtl"}if(c&&c.dialog&&c.dialog.buttons&&typeof(c.dialog.buttons)=="object"){this.opts.dialog.buttons=c.dialog.buttons}this.ul=null;this.tabs={};this._table=null;this.dialog=jQuery("<div />").addClass(this.opts["class"]).dialog(this.opts.dialog);this.message=jQuery('<div class="el-dialogform-message rounded-5" />').hide().appendTo(this.dialog);this.error=jQuery('<div class="el-dialogform-error rounded-5" />').hide().appendTo(this.dialog);this.spinner=jQuery('<div class="spinner" />').hide().appendTo(this.dialog);this.content=jQuery('<div class="el-dialogform-content" />').appendTo(this.dialog);this.form=jQuery("<form />").attr(this.opts.form).appendTo(this.content);if(this.opts.submit){this.form.bind("submit",function(f){a.opts.submit(f,a)})}if(this.opts.ajaxForm&&jQuery.fn.ajaxForm){this.form.ajaxForm(this.opts.ajaxForm)}if(this.opts.validate){this.form.validate(this.opts.validate)}this.option=function(f,g){return this.dialog.dialog("option",f,g)};this.showError=function(f,g){this.hideMessage();this.hideSpinner();this.error.html(f).show();g&&this.content.hide();return this};this.hideError=function(){this.error.text("").hide();this.content.show();return this};this.showSpinner=function(f){this.error.hide();this.message.hide();this.content.hide();this.spinner.text(f||this.opts.spinner).show();this.option("buttons",{});return this};this.hideSpinner=function(){this.content.show();this.spinner.hide();return this};this.showMessage=function(f,g){this.hideError();this.hideSpinner();this.message.html(f||"").show();g&&this.content.hide();return this};this.hideMessage=function(){this.message.hide();this.content.show();return this};this.tab=function(g,f){g=this.opts.tabPrefix+g;if(!this.ul){this.ul=jQuery("<ul />").prependTo(this.form)}jQuery("<li />").append(jQuery("<a />").attr("href","#"+g).html(f)).appendTo(this.ul);this.tabs[g]={tab:jQuery("<div />").attr("id",g).addClass("tab").appendTo(this.form),table:null};return this};this.table=function(f){f=f&&f.indexOf(this.opts.tabPrefix)==-1?this.opts.tabPrefix+f:f;if(f&&this.tabs&&this.tabs[f]){this.tabs[f].table=jQuery("<table />").appendTo(this.tabs[f].tab)}else{this._table=jQuery("<table />").appendTo(this.form)}return this};this.append=function(j,k,g){k=k?"el-df-tab-"+k:"";if(!j){return this}if(k&&this.tabs[k]){if(g){!this.tabs[k].table&&this.table(k);var h=jQuery("<tr />").appendTo(this.tabs[k].table);if(!jQuery.isArray(j)){h.append(jQuery("<td />").append(j))}else{for(var f=0;f<j.length;f++){h.append(jQuery("<td />").append(j[f]))}}}else{if(!jQuery.isArray(j)){this.tabs[k].tab.append(j)}else{for(var f=0;f<j.length;f++){this.tabs[k].tab.append(j[f])}}}}else{if(!g){if(!jQuery.isArray(j)){this.form.append(j)}else{for(var f=0;f<j.length;f++){this.form.append(j[f])}}}else{if(!this._table){this.table()}var h=jQuery("<tr />").appendTo(this._table);if(!jQuery.isArray(j)){h.append(jQuery("<td />").append(j))}else{for(var f=0;f<j.length;f++){h.append(jQuery("<td />").append(j[f]))}}}}return this};this.separator=function(f){f="el-df-tab-"+f;if(this.tabs&&this.tabs[f]){this.tabs[f].tab.append(jQuery("<div />").addClass("separator"));this.tabs[f].table&&this.table(f)}else{this.form.append(jQuery("<div />").addClass("separator"))}return this};this.open=function(){this.ul&&this.form.tabs(this.opts.tabs);this.form.find(":text").keyup(function(g){if(g.keyCode==13){f.form.submit()}});this.dialog.attr("unselectable","on").dialog("open");var f=this;if(this.form&&this.form.find(":text").length){setTimeout(function(){f.form.find(":text")[0].focus()},20)}return this};this.close=function(){if(typeof(this.opts.close)=="function"){this.opts.close()}this.dialog.dialog("destroy").remove()}}(function(a){a.fn.elColorPicker=function(h){var b=this;var f=a.extend({},a.fn.elColorPicker.defaults,h);this.hidden=a('<input type="hidden" />').attr("name",f.name).val(f.color||"").appendTo(this);this.palette=null;this.preview=null;this.input=null;function c(j){b.val(j);f.change&&f.change(b.val());b.palette.slideUp()}function g(){b.palette=a("<div />").addClass(f.paletteClass+" rounded-3");for(var j=0;j<f.colors.length;j++){a("<div />").addClass("color").css("background-color",f.colors[j]).attr({title:f.colors[j],unselectable:"on"}).appendTo(b.palette).mouseenter(function(){var k=a(this).attr("title");b.input.val(k);b.preview.css("background-color",k)}).click(function(k){k.stopPropagation();c(a(this).attr("title"))})}b.input=a('<input type="text" />').addClass("rounded-3").attr("size",8).click(function(k){k.stopPropagation()}).keydown(function(p){if(p.ctrlKey||p.metaKey){return true}var o=p.keyCode;if(o==27){return b.mouseleave()}if(o!=8&&o!=13&&o!=46&&o!=37&&o!=39&&(o<48||o>57)&&(o<65||o>70)){return false}var q=a(this).val();if(q.length==7||q.length==0){if(o==13){p.stopPropagation();p.preventDefault();c(q);b.palette.slideUp()}if(p.keyCode!=8&&p.keyCode!=46&&o!=37&&o!=39){return false}}}).keyup(function(k){var o=a(this).val();o.length==7&&/^#[0-9abcdef]{6}$/i.test(o)&&b.val(o)});b.preview=a("<div />").addClass("preview rounded-3").click(function(k){k.stopPropagation();c(b.input.val())});b.palette.append(a("<div />").addClass("clearfix")).append(a("<div />").addClass("panel").append(b.input).append(b.preview));if(f.palettePosition=="outer"){b.palette.hide().appendTo(b.parents("body").eq(0)).mouseleave(function(){a(this).slideUp();b.val(b.val())});b.mouseleave(function(k){if(k.relatedTarget!=b.palette.get(0)){b.palette.slideUp();b.val(b.val())}})}else{b.append(b.palette.hide()).mouseleave(function(k){b.palette.slideUp();b.val(b.val())})}b.val(b.val())}this.empty().addClass(f["class"]+" rounded-3").css({position:"relative","background-color":f.color||""}).click(function(p){if(!b.hasClass("disabled")){!b.palette&&g();if(f.palettePosition=="outer"&&b.palette.css("display")=="none"){var q=a(this).offset();var k=b.palette.width();var j=b.parents("body").width()-q.left>=k?q.left:q.left+a(this).outerWidth()-k;b.palette.css({left:j+"px",top:q.top+a(this).height()+1+"px"})}b.palette.slideToggle()}});this.val=function(j){if(!j&&j!==""){return this.hidden.val()}else{this.hidden.val(j);if(f.update){f.update(this.hidden.val())}else{this.css("background-color",j)}if(b.palette){b.preview.css("background-color",j);b.input.val(j)}}return this};return this};a.fn.elColorPicker.defaults={"class":"el-colorpicker",paletteClass:"el-palette",palettePosition:"inner",name:"color",color:"",update:null,change:function(b){},colors:["#ffffff","#cccccc","#999999","#666666","#333333","#000000","#ffcccc","#cc9999","#996666","#663333","#330000","#ff9999","#cc6666","#cc3333","#993333","#660000","#ff6666","#ff3333","#ff0000","#cc0000","#990000","#ff9966","#ff6633","#ff3300","#cc3300","#993300","#ffcc99","#cc9966","#cc6633","#996633","#663300","#ff9933","#ff6600","#ff9900","#cc6600","#cc9933","#ffcc66","#ffcc33","#ffcc00","#cc9900","#996600","#ffffcc","#cccc99","#999966","#666633","#333300","#ffff99","#cccc66","#cccc33","#999933","#666600","#ffff66","#ffff33","#ffff00","#cccc00","#999900","#ccff66","#ccff33","#ccff00","#99cc00","#669900","#ccff99","#99cc66","#99cc33","#669933","#336600","#99ff33","#99ff00","#66ff00","#66cc00","#66cc33","#99ff66","#66ff33","#33ff00","#33cc00","#339900","#ccffcc","#99cc99","#669966","#336633","#003300","#99ff99","#66cc66","#33cc33","#339933","#006600","#66ff66","#33ff33","#00ff00","#00cc00","#009900","#66ff99","#33ff66","#00ff33","#00cc33","#009933","#99ffcc","#66cc99","#33cc66","#339966","#006633","#33ff99","#00ff66","#00ff99","#00cc66","#33cc99","#66ffcc","#33ffcc","#00ffcc","#00cc99","#009966","#ccffff","#99cccc","#669999","#336666","#003333","#99ffff","#66cccc","#33cccc","#339999","#006666","#66cccc","#33ffff","#00ffff","#00cccc","#009999","#66ccff","#33ccff","#00ccff","#0099cc","#006699","#99ccff","#6699cc","#3399cc","#336699","#003366","#3399ff","#0099ff","#0066ff","#066ccc","#3366cc","#6699ff","#3366ff","#0033ff","#0033cc","#003399","#ccccff","#9999cc","#666699","#333366","#000033","#9999ff","#6666cc","#3333cc","#333399","#000066","#6666ff","#3333ff","#0000ff","#0000cc","#009999","#9966ff","#6633ff","#3300ff","#3300cc","#330099","#cc99ff","#9966cc","#6633cc","#663399","#330066","#9933ff","#6600ff","#9900ff","#6600cc","#9933cc","#cc66ff","#cc33ff","#cc00ff","#9900cc","#660099","#ffccff","#cc99cc","#996699","#663366","#330033","#ff99ff","#cc66cc","#cc33cc","#993399","#660066","#ff66ff","#ff33ff","#ff00ff","#cc00cc","#990099","#ff66cc","#ff33cc","#ff00cc","#cc0099","#990066","#ff99cc","#cc6699","#cc3399","#993366","#660033","#ff3399","#ff0099","#ff0066","#cc0066","#cc3366","#ff6699","#ff3366","#ff0033","#cc0033","#990033"]}})(jQuery);(function(a){a.fn.elBorderSelect=function(h){var k=this;var q=this.eq(0);var b=a.extend({},a.fn.elBorderSelect.defaults,h);var f=a('<input type="text" />').attr({name:b.name+"[width]",size:3}).css("text-align","right").change(function(){k.change()});var j=a("<div />").css("position","relative").elColorPicker({"class":"el-colorpicker ui-icon ui-icon-pencil",name:b.name+"[color]",palettePosition:"outer",change:function(){k.change()}});var c=a("<div />").elSelect({tpl:'<div style="border-bottom:4px %val #000;width:100%;margin:7px 0"> </div>',tpls:{"":"%label"},maxHeight:b.styleHeight||null,select:function(){k.change()},src:{"":"none",solid:"solid",dashed:"dashed",dotted:"dotted","double":"double",groove:"groove",ridge:"ridge",inset:"inset",outset:"outset"}});q.empty().addClass(b["class"]).attr("name",b.name||"").append(a("<table />").attr("cellspacing",0).append(a("<tr />").append(a("<td />").append(f).append(" px")).append(a("<td />").append(c)).append(a("<td />").append(j))));function g(t){function r(u){hexDigits=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return !u?"00":hexDigits[(u-u%16)/16]+hexDigits[u%16]}var o=(t||"").match(/\(([0-9]{1,3}),\s*([0-9]{1,3}),\s*([0-9]{1,3})\)/);return o?"#"+r(o[1])+r(o[2])+r(o[3]):""}function p(r){if(!r){return r}var o=r.match(/([0-9]+\.?[0-9]*)\s*(px|pt|em|%)/);if(o){r=o[1];unit=o[2]}if(r[0]=="."){r="0"+r}r=parseFloat(r);if(isNaN(r)){return""}var t=parseInt(a(document.body).css("font-size"))||16;switch(unit){case"em":return parseInt(r*t);case"pt":return parseInt(r*t/12);case"%":return parseInt(r*t/100)}return r}this.change=function(){b.change&&b.change(this.val())};this.val=function(u){if(!u&&u!==""){var t=parseInt(f.val());return{width:!isNaN(t)?t+"px":"",style:c.val(),color:j.val()}}else{var r,t,x,z,o="";if(u.nodeName||u.css){if(!u.css){u=a(u)}var o=u.css("border");if((o=u.css("border"))){t=x=z=o}else{t=u.css("border-width");x=u.css("border-style");z=u.css("border-color")}}else{t=u.width||"";x=u.style||"";z=u.color||""}f.val(p(t));var r=x?x.match(/(solid|dashed|dotted|double|groove|ridge|inset|outset)/i):"";c.val(r?r[1]:"");j.val(g(z));return this}};this.val(b.value);return this};a.fn.elBorderSelect.defaults={name:"el-borderselect","class":"el-borderselect",value:{},change:null}})(jQuery);(function(a){a.fn.elPaddingInput=function(g){var c=this;var f=a.extend({},a.fn.elPaddingInput.defaults,{name:this.attr("name")},g);this.regexps={main:new RegExp(f.type=="padding"?'paddings*:s*([^;"]+)':'margins*:s*([^;"]+)',"im"),left:new RegExp(f.type=="padding"?'padding-lefts*:s*([^;"]+)':'margin-lefts*:s*([^;"]+)',"im"),top:new RegExp(f.type=="padding"?'padding-tops*:s*([^;"]+)':'margin-tops*:s*([^;"]+)',"im"),right:new RegExp(f.type=="padding"?'padding-rights*:s*([^;"]+)':'margin-rights*:s*([^;"]+)',"im"),bottom:new RegExp(f.type=="padding"?'padding-bottoms*:s*([^;"]+)':'margin-bottoms*:s*([^;"]+)',"im")};a.each(["left","top","right","bottom"],function(){c[this]=a('<input type="text" />').attr("size",3).css("text-align","right").css("border-"+this,"2px solid red").bind("change",function(){a(this).val(b(a(this).val()));h()}).attr("name",f.name+"["+this+"]")});a.each(["uleft","utop","uright","ubottom"],function(){c[this]=a("<select />").append('<option value="px">px</option>').append('<option value="em">em</option>').append('<option value="pt">pt</option>').bind("change",function(){h()}).attr("name",f.name+"["+this+"]");if(f.percents){c[this].append('<option value="%">%</option>')}});this.empty().addClass(f["class"]).append(this.left).append(this.uleft).append(" x ").append(this.top).append(this.utop).append(" x ").append(this.right).append(this.uright).append(" x ").append(this.bottom).append(this.ubottom);this.val=function(z){if(!z&&z!==""){var q=b(this.left.val());var A=b(this.top.val());var j=b(this.right.val());var x=b(this.bottom.val());var w={left:q=="auto"||q==0?q:(q!==""?q+this.uleft.val():""),top:A=="auto"||A==0?A:(A!==""?A+this.utop.val():""),right:j=="auto"||j==0?j:(j!==""?j+this.uright.val():""),bottom:x=="auto"||x==0?x:(x!==""?x+this.ubottom.val():""),css:""};if(w.left!==""&&w.right!==""&&w.top!==""&&w.bottom!==""){if(w.left==w.right&&w.top==w.bottom){w.css=w.top+" "+w.left}else{w.css=w.top+" "+w.right+" "+w.bottom+" "+w.left}}return w}else{if(z.nodeName||z.css){if(!z.css){z=a(z)}var o={left:"",top:"",right:"",bottom:""};var k=(z.attr("style")||"").toLowerCase();if(k){k=a.trim(k);var p=k.match(this.regexps.main);if(p){var u=a.trim(p[1]).replace(/\s+/g," ").split(" ",4);o.top=u[0];o.right=u[1]&&u[1]!==""?u[1]:o.top;o.bottom=u[2]&&u[2]!==""?u[2]:o.top;o.left=u[3]&&u[3]!==""?u[3]:o.right}else{a.each(["left","top","right","bottom"],function(){var r=this.toString();p=k.match(c.regexps[r]);if(p){o[r]=p[1]}})}}var z=o}a.each(["left","top","right","bottom"],function(){var t=this.toString();if(typeof(z[t])!="undefined"&&z[t]!==null){z[t]=z[t].toString();var v=b(z[t]);c[t].val(v);var r=z[t].match(/(px|em|pt|%)/i);c["u"+t].val(r?r[1]:"px")}});return this}};function b(j){j=a.trim(j.toString());if(j[0]=="."){j="0"+j}n=parseFloat(j);return !isNaN(n)?n:(j=="auto"?j:"")}function h(){f.change&&f.change(c)}this.val(f.value);return this};a.fn.elPaddingInput.defaults={name:"el-paddinginput","class":"el-paddinginput",type:"padding",value:{},percents:true,change:null}})(jQuery);(function(a){a.fn.elSelect=function(c){var q=this;var u=this.eq(0);var b=a.extend({},a.fn.elSelect.defaults,c);var g=a('<input type="hidden" />').attr("name",b.name);var p=a("<label />").attr({unselectable:"on"}).addClass("rounded-left-3");var h=null;var k=null;if(u.get(0).nodeName=="SELECT"){b.src={};u.children("option").each(function(){b.src[a(this).val()]=a(this).text()});b.value=u.val();b.name=u.attr("name");u.replaceWith((u=a("<div />")))}if(!b.value||!b.src[b.val]){b.value=null;var f=0;for(var r in b.src){if(f++==0){b.value=r}}}this.val=function(o){if(!o&&o!==""){return g.val()}else{if(b.src[o]){g.val(o);j(o);if(h){h.children().each(function(){if(a(this).attr("name")==o){a(this).addClass("active")}else{a(this).removeClass("active")}})}}return this}};function j(o){var w=b.labelTpl||b.tpls[o]||b.tpl;p.html(w.replace(/%val/g,o).replace(/%label/,b.src[o])).children().attr({unselectable:"on"})}u.empty().addClass(b["class"]+" rounded-3").attr({unselectable:"on"}).append(g).append(p).hover(function(){a(this).addClass("hover")},function(){a(this).removeClass("hover")}).click(function(o){!h&&t();h.slideToggle();if(a.browser.msie&&!k){h.children().each(function(){k=Math.max(k,a(this).width())});if(k>h.width()){h.width(k+40)}}});this.val(b.value);function t(){h=a("<div />").addClass(b.listClass+" rounded-3").hide().appendTo(u.mouseleave(function(v){h.slideUp()}));for(var x in b.src){var z=b.tpls[x]||b.tpl;a("<div />").attr("name",x).append(a(z.replace(/%val/g,x).replace(/%label/g,b.src[x])).attr({unselectable:"on"})).appendTo(h).hover(function(){a(this).addClass("hover")},function(){a(this).removeClass("hover")}).click(function(B){B.stopPropagation();B.preventDefault();var w=a(this).attr("name");q.val(w);b.select(w);h.slideUp()})}var o=u.outerWidth();if(h.width()<o){h.width(o)}var A=h.height();if(b.maxHeight>0&&A>b.maxHeight){h.height(b.maxHeight)}q.val(g.val())}return this};a.fn.elSelect.defaults={name:"el-select","class":"el-select",listClass:"list",labelTpl:null,tpl:"<%val>%label</%val>",tpls:{},value:null,src:{},select:function(b){window.console&&window.console.log&&window.console.log("selected: "+b)},maxHeight:410}})(jQuery);(function(a){elRTE=function(o,j){if(!o||!o.nodeName){return alert('elRTE: argument "target" is not DOM Element')}var c=this,f;this.version="1.1";this.build="2010-09-20";this.options=a.extend(true,{},this.options,j);this.browser=a.browser;this.target=a(o);this.lang=(""+this.options.lang).toLowerCase();this._i18n=new eli18n({textdomain:"rte",messages:{rte:this.i18Messages[this.lang]||{}}});this.rtl=!!(/^(ar|fa|he)$/.test(this.lang)&&this.i18Messages[this.lang]);if(this.rtl){this.options.cssClass+=" el-rte-rtl"}this.toolbar=a('<div class="toolbar"/>');this.iframe=document.createElement("iframe");this.workzone=a('<div class="workzone"/>').append(this.iframe).append(this.source);this.statusbar=a('<div class="statusbar"/>');this.tabsbar=a('<div class="tabsbar"/>');this.editor=a('<div class="'+this.options.cssClass+'" />').append(this.toolbar).append(this.workzone).append(this.statusbar).append(this.tabsbar);this.doc=null;this.$doc=null;this.window=null;this.utils=new this.utils(this);this.dom=new this.dom(this);this.filter=new this.filter(this);this.updateHeight=function(){c.workzone.add(c.iframe).add(c.source).height(c.workzone.height())};this.resizable=function(q){var p=this;if(this.options.resizable&&a.fn.resizable){if(q){this.editor.resizable({handles:"se",alsoResize:this.workzone,minWidth:300,minHeight:200}).bind("resize",p.updateHeight)}else{this.editor.resizable("destroy").unbind("resize",p.updateHeight)}}};this.editor.insertAfter(o);var h="";if(o.nodeName=="TEXTAREA"){this.source=this.target;this.source.insertAfter(this.iframe).hide();h=this.target.val()}else{this.source=a("<textarea />").insertAfter(this.iframe).hide();h=this.target.hide().html()}this.source.attr("name",this.target.attr("name")||this.target.attr("id"));h=a.trim(h);if(!h){h=" "}if(this.options.allowSource){this.tabsbar.append('<div class="tab editor rounded-bottom-7 active">'+c.i18n("Editor")+'</div><div class="tab source rounded-bottom-7">'+c.i18n("Source")+'</div><div class="clearfix" style="clear:both"/>').children(".tab").click(function(p){if(!a(this).hasClass("active")){c.tabsbar.children(".tab").toggleClass("active");c.workzone.children().toggle();if(a(this).hasClass("editor")){c.updateEditor();c.window.focus();c.ui.update(true)}else{c.updateSource();c.source.focus();if(a.browser.msie){}else{c.source[0].setSelectionRange(0,0)}c.ui.disable();c.statusbar.empty()}}})}this.window=this.iframe.contentWindow;this.doc=this.iframe.contentWindow.document;this.$doc=a(this.doc);f='<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';a.each(c.options.cssfiles,function(){f+='<link rel="stylesheet" type="text/css" href="'+this+'" />'});this.doc.open();var g=this.filter.wysiwyg(h),b=this.rtl?' class="el-rte-rtl"':"";this.doc.write(c.options.doctype+f+"</head><body"+b+">"+(g)+"</body></html>");this.doc.close();if(a.browser.msie){this.doc.body.contentEditable=true}else{try{this.doc.designMode="on"}catch(k){}this.doc.execCommand("styleWithCSS",false,this.options.styleWithCSS)}if(this.options.height>0){this.workzone.height(this.options.height)}this.updateHeight();this.resizable(true);this.window.focus();this.history=new this.history(this);this.selection=new this.selection(this);this.ui=new this.ui(this);this.target.parents("form").bind("submit",function(p){c.source.parents("form").find('[name="el-select"]').remove();c.beforeSave()});this.source.bind("keydown",function(t){if(t.keyCode==9){t.preventDefault();if(a.browser.msie){var p=document.selection.createRange();p.text="\t"+p.text;this.focus()}else{var q=this.value.substr(0,this.selectionStart),u=this.value.substr(this.selectionEnd);this.value=q+"\t"+u;this.setSelectionRange(q.length+1,q.length+1)}}});this.$doc.bind("mouseup",function(){c.ui.update()}).bind("dragstart",function(p){p.preventDefault();p.stopPropagation()}).bind("keyup",function(p){if((p.keyCode>=8&&p.keyCode<=13)||(p.keyCode>=32&&p.keyCode<=40)||p.keyCode==46||(p.keyCode>=96&&p.keyCode<=111)){c.ui.update()}}).bind("keydown",function(p){if((p.metaKey||p.ctrlKey)&&p.keyCode==65){c.ui.update()}else{if(p.keyCode==13){var q=c.selection.getNode();if(c.dom.selfOrParent(q,/^PRE$/)){c.selection.insertNode(c.doc.createTextNode("\r\n"));return false}else{if(a.browser.safari&&p.shiftKey){c.selection.insertNode(c.doc.createElement("br"));return false}}}}});this.typing=false;this.lastKey=null;this.$doc.bind("keydown",function(p){if((p.keyCode>=48&&p.keyCode<=57)||p.keyCode==61||p.keyCode==109||(p.keyCode>=65&&p.keyCode<=90)||p.keyCode==188||p.keyCode==190||p.keyCode==191||(p.keyCode>=219&&p.keyCode<=222)){if(!c.typing){c.history.add(true)}c.typing=true;c.lastKey=null}else{if(p.keyCode==8||p.keyCode==46||p.keyCode==32||p.keyCode==13){if(p.keyCode!=c.lastKey){c.history.add(true)}c.lastKey=p.keyCode;c.typing=false}}}).bind("mouseup",function(){c.typing=false;c.lastKey=null}).bind("paste",function(q){if(!c.options.allowPaste){q.stopPropagation();q.preventDefault()}else{var t=a(c.dom.create("div"))[0],p=c.doc.createTextNode("_");c.history.add(true);c.typing=true;c.lastKey=null;t.appendChild(p);c.selection.deleteContents().insertNode(t);c.selection.select(p);setTimeout(function(){if(t.parentNode){a(t).html(c.filter.proccess("paste",a(t).html()));p=t.lastChild;c.dom.unwrap(t);if(p){c.selection.select(p);c.selection.collapse(false)}}else{t.parentNode&&t.parentNode.removeChild(t);c.val(c.filter.proccess("paste",c.filter.wysiwyg2wysiwyg(a(c.doc.body).html())));c.selection.select(c.doc.body.firstChild);c.selection.collapse(true)}a(c.doc.body).mouseup()},15)}});if(a.browser.msie){this.$doc.bind("keyup",function(p){if(p.keyCode==86&&(p.metaKey||p.ctrlKey)){c.history.add(true);c.typing=true;c.lastKey=null;c.selection.saveIERange();c.val(c.filter.proccess("paste",c.filter.wysiwyg2wysiwyg(a(c.doc.body).html())));c.selection.restoreIERange();a(c.doc.body).mouseup();this.ui.update()}})}if(a.browser.safari){this.$doc.bind("click",function(p){a(c.doc.body).find(".elrte-webkit-hl").removeClass("elrte-webkit-hl");if(p.target.nodeName=="IMG"){a(p.target).addClass("elrte-webkit-hl")}}).bind("keyup",function(p){a(c.doc.body).find(".elrte-webkit-hl").removeClass("elrte-webkit-hl")})}this.window.focus()};elRTE.prototype.i18n=function(b){return this._i18n.translate(b)};elRTE.prototype.open=function(){this.editor.show()};elRTE.prototype.close=function(){this.editor.hide()};elRTE.prototype.updateEditor=function(){this.val(this.source.val())};elRTE.prototype.updateSource=function(){this.source.val(this.filter.source(a(this.doc.body).html()))};elRTE.prototype.val=function(b){if(typeof(b)=="string"){b=""+b;if(this.source.is(":visible")){this.source.val(this.filter.source2source(b))}else{if(a.browser.msie){this.doc.body.innerHTML="<br />"+this.filter.wysiwyg(b);this.doc.body.removeChild(this.doc.body.firstChild)}else{this.doc.body.innerHTML=this.filter.wysiwyg(b)}}}else{if(this.source.is(":visible")){return this.filter.source2source(this.source.val())}else{return this.filter.source(a(this.doc.body).html())}}};elRTE.prototype.beforeSave=function(){this.source.val(this.val()||"")};elRTE.prototype.save=function(){this.beforeSave();this.editor.parents("form").submit()};elRTE.prototype.log=function(b){if(window.console&&window.console.log){window.console.log(b)}};elRTE.prototype.i18Messages={};a.fn.elrte=function(g,b){var f=typeof(g)=="string"?g:"",c;this.each(function(){if(!this.elrte){this.elrte=new elRTE(this,typeof(g)=="object"?g:{})}switch(f){case"open":case"show":this.elrte.open();break;case"close":case"hide":this.elrte.close();break;case"updateSource":this.elrte.updateSource();break}});if(f=="val"){if(!this.length){return""}else{if(this.length==1){return b?this[0].elrte.val(b):this[0].elrte.val()}else{c={};this.each(function(){c[this.elrte.source.attr("name")]=this.elrte.val()});return c}}}return this}})(jQuery);(function(a){elRTE.prototype.dom=function(c){this.rte=c;var b=this;this.regExp={textNodes:/^(A|ABBR|ACRONYM|ADDRESS|B|BDO|BIG|BLOCKQUOTE|CAPTION|CENTER|CITE|CODE|DD|DEL|DFN|DIV|DT|EM|FIELDSET|FONT|H[1-6]|I|INS|KBD|LABEL|LEGEND|LI|MARQUEE|NOBR|NOEMBED|P|PRE|Q|SAMP|SMALL|SPAN|STRIKE|STRONG|SUB|SUP|TD|TH|TT|VAR)$/,textContainsNodes:/^(A|ABBR|ACRONYM|ADDRESS|B|BDO|BIG|BLOCKQUOTE|CAPTION|CENTER|CITE|CODE|DD|DEL|DFN|DIV|DL|DT|EM|FIELDSET|FONT|H[1-6]|I|INS|KBD|LABEL|LEGEND|LI|MARQUEE|NOBR|NOEMBED|OL|P|PRE|Q|SAMP|SMALL|SPAN|STRIKE|STRONG|SUB|SUP|TABLE|THEAD|TBODY|TFOOT|TD|TH|TR|TT|UL|VAR)$/,block:/^(APPLET|BLOCKQUOTE|BR|CAPTION|CENTER|COL|COLGROUP|DD|DIV|DL|DT|H[1-6]|EMBED|FIELDSET|LI|MARQUEE|NOBR|OBJECT|OL|P|PRE|TABLE|THEAD|TBODY|TFOOT|TD|TH|TR|UL)$/,selectionBlock:/^(APPLET|BLOCKQUOTE|BR|CAPTION|CENTER|COL|COLGROUP|DD|DIV|DL|DT|H[1-6]|EMBED|FIELDSET|LI|MARQUEE|NOBR|OBJECT|OL|P|PRE|TD|TH|TR|UL)$/,header:/^H[1-6]$/,formElement:/^(FORM|INPUT|HIDDEN|TEXTAREA|SELECT|BUTTON)$/};this.root=function(){return this.rte.body};this.create=function(f){return this.rte.doc.createElement(f)};this.createBookmark=function(){var f=this.rte.doc.createElement("span");f.id="elrte-bm-"+Math.random().toString().substr(2);a(f).addClass("elrtebm");return f};this.indexOf=function(g){var f=0;g=a(g);while((g=g.prev())&&g.length){f++}return f};this.attr=function(h,f){var g="";if(h.nodeType==1){g=a(h).attr(f);if(g&&f!="src"&&f!="href"){g=g.toString().toLowerCase()}}return g||""};this.findCommonAncestor=function(j,h){if(!j||!h){return this.rte.log("dom.findCommonAncestor invalid arguments")}if(j==h){return j}else{if(j.nodeName=="BODY"||h.nodeName=="BODY"){return this.rte.doc.body}}var o=a(j).parents(),k=a(h).parents(),f=k.length-1,p=k[f];for(var g=o.length-1;g>=0;g--,f--){if(o[g]==k[f]){p=o[g]}else{break}}return p};this.isEmpty=function(f){if(f.nodeType==1){return this.regExp.textNodes.test(f.nodeName)?a.trim(a(f).text()).length==0:false}else{if(f.nodeType==3){return/^(TABLE|THEAD|TFOOT|TBODY|TR|UL|OL|DL)$/.test(f.parentNode.nodeName)||f.nodeValue==""||(a.trim(f.nodeValue).length==0&&!(f.nextSibling&&f.previousSibling&&f.nextSibling.nodeType==1&&f.previousSibling.nodeType==1&&!this.regExp.block.test(f.nextSibling.nodeName)&&!this.regExp.block.test(f.previousSibling.nodeName)))}}return true};this.next=function(f){while(f.nextSibling&&(f=f.nextSibling)){if(f.nodeType==1||(f.nodeType==3&&!this.isEmpty(f))){return f}}return null};this.prev=function(f){while(f.previousSibling&&(f=f.previousSibling)){if(f.nodeType==1||(f.nodeType==3&&!this.isEmpty(f))){return f}}return null};this.isPrev=function(g,f){while((g=this.prev(g))){if(g==f){return true}}return false};this.nextAll=function(g){var f=[];while((g=this.next(g))){f.push(g)}return f};this.prevAll=function(g){var f=[];while((g=this.prev(g))){f.push(g)}return f};this.toLineEnd=function(g){var f=[];while((g=this.next(g))&&g.nodeName!="BR"&&g.nodeName!="HR"&&this.isInline(g)){f.push(g)}return f};this.toLineStart=function(g){var f=[];while((g=this.prev(g))&&g.nodeName!="BR"&&g.nodeName!="HR"&&this.isInline(g)){f.unshift(g)}return f};this.isFirstNotEmpty=function(f){while((f=this.prev(f))){if(f.nodeType==1||(f.nodeType==3&&a.trim(f.nodeValue)!="")){return false}}return true};this.isLastNotEmpty=function(f){while((f=this.next(f))){if(!this.isEmpty(f)){return false}}return true};this.isOnlyNotEmpty=function(f){return this.isFirstNotEmpty(f)&&this.isLastNotEmpty(f)};this.findLastNotEmpty=function(f){this.rte.log("findLastNotEmpty Who is here 0_o");if(f.nodeType==1&&(l=f.lastChild)){if(!this.isEmpty(l)){return l}while(l.previousSibling&&(l=l.previousSibling)){if(!this.isEmpty(l)){return l}}}return false};this.isInline=function(j){if(j.nodeType==3){return true}else{if(j.nodeType==1){j=a(j);var h=j.css("display");var g=j.css("float");return h=="inline"||h=="inline-block"||g=="left"||g=="right"}}return true};this.is=function(h,g){if(h&&h.nodeName){if(typeof(g)=="string"){g=this.regExp[g]||/.?/}if(g instanceof RegExp&&h.nodeName){return g.test(h.nodeName)}else{if(typeof(g)=="function"){return g(h)}}}return false};this.filter=function(j,h){var f=[],g;if(!j.push){return this.is(j,h)?j:null}for(g=0;g<j.length;g++){if(this.is(j[g],h)){f.push(j[g])}}return f};this.parents=function(h,g){var f=[];while(h&&(h=h.parentNode)&&h.nodeName!="BODY"&&h.nodeName!="HTML"){if(this.is(h,g)){f.push(h)}}return f};this.parent=function(h,g){return this.parents(h,g)[0]||null};this.selfOrParent=function(h,g,f){return this.is(h,g)?h:this.parent(h,f||g)};this.selfOrParentLink=function(f){f=this.selfOrParent(f,/^A$/);return f&&f.href?f:null};this.selfOrParentAnchor=function(f){f=this.selfOrParent(f,/^A$/);return f&&!f.href&&f.name?f:null};this.childLinks=function(g){var f=[];a("a[href]",g).each(function(){f.push(this)});return f};this.selectionHas=function(h){var j=this.rte.selection.cloneContents(),g;if(j&&j.childNodes&&j.childNodes.length){for(g=0;g<j.childNodes.length;g++){if(typeof(h)=="function"){if(h(j.childNodes[g])){return true}}else{if(j instanceof RegExp){if(h.test(j.childNodes[g].nodeName)){return true}}}}}return false};this.wrap=function(g,f){g=a.isArray(g)?g:[g];f=f.nodeName?f:this.create(f);if(g[0]&&g[0].nodeType&&g[0].parentNode){f=g[0].parentNode.insertBefore(f,g[0]);a(g).each(function(){if(this!=f){f.appendChild(this)}})}return f};this.unwrap=function(f){while(f.firstChild){f.parentNode.insertBefore(f.firstChild,f)}f.parentNode.removeChild(f)};this.wrapContents=function(h,f){f=f.nodeName?f:this.create(f);for(var g=0;g<h.childNodes.length;g++){f.appendChild(h.childNodes[g])}h.appendChild(f);return f};this.cleanNode=function(f){if(f.nodeType!=1){return}if(/^(P|LI)$/.test(f.nodeName)&&(l=this.findLastNotEmpty(f))&&l.nodeName=="BR"){a(l).remove()}$n=a(f);$n.children().each(function(){this.cleanNode(this)});if(f.nodeName!="BODY"&&!/^(TABLE|TR|TD)$/.test(f)&&this.isEmpty(f)){return $n.remove()}if($n.attr("style")===""){$n.removeAttr("style")}if(this.rte.browser.safari&&$n.hasClass("Apple-span")){$n.removeClass("Apple-span")}if(f.nodeName=="SPAN"&&!$n.attr("style")&&!$n.attr("class")&&!$n.attr("id")){$n.replaceWith($n.html())}};this.cleanChildNodes=function(g){var f=this.cleanNode;a(g).children().each(function(){f(this)})};this.tableMatrix=function(j){var h=[];if(j&&j.nodeName=="TABLE"){var g=0;function f(o){for(var k=0;k<=g;k++){if(!h[o][k]){return k}}}a(j).find("tr").each(function(k){if(!a.isArray(h[k])){h[k]=[]}a(this).children("td,th").each(function(){var p=parseInt(a(this).attr("colspan")||1);var t=parseInt(a(this).attr("rowspan")||1);var r=f(k);for(var v=0;v<t;v++){for(var o=0;o<p;o++){var q=k+v;if(!a.isArray(h[q])){h[q]=[]}var u=o==0&&v==0?this:(v==0?o:"-");h[q][r+o]=u}}g=Math.max(g,h[k].length)})})}return h};this.indexesOfCell=function(j,h){for(var f=0;f<h.length;f++){for(var g=0;g<h[f].length;g++){if(h[f][g]==j){return[f,g]}}}};this.fixTable=function(q){if(q&&q.nodeName=="TABLE"){var h=a(q);var p=this.tableMatrix(q);var f=0;a.each(p,function(){f=Math.max(f,this.length)});if(f==0){return h.remove()}for(var k=0;k<p.length;k++){var g=p[k].length;if(g==0){h.find("tr").eq(k).remove()}else{if(g<f){var j=f-g;var o=h.find("tr").eq(k);for(i=0;i<j;i++){o.append("<td>&nbsp;</td>")}}}}}};this.tableColumn=function(h,g,o){h=this.selfOrParent(h,/^TD|TH$/);var j=this.selfOrParent(h,/^TABLE$/);ret=[];info={offset:[],delta:[]};if(h&&j){o&&this.fixTable(j);var u=this.tableMatrix(j);var v=false;var t;for(var f=0;f<u.length;f++){for(var q=0;q<u[f].length;q++){if(u[f][q]==h){t=q;v=true;break}}if(v){break}}if(t>=0){for(var f=0;f<u.length;f++){var k=u[f][t]||null;if(k){if(k.nodeName){ret.push(k);if(g){info.delta.push(0);info.offset.push(t)}}else{var p=parseInt(k);if(!isNaN(p)&&u[f][t-p]&&u[f][t-p].nodeName){ret.push(u[f][t-p]);if(g){info.delta.push(p);info.offset.push(t)}}}}}}}return !g?ret:{column:ret,info:info}}}})(jQuery);(function(a){elRTE.prototype.filter=function(c){var b=this,f=a("<span/>").addClass("elrtetesturl").appendTo(document.body)[0];this.url=(typeof(f.currentStyle)!="undefined"?f.currentStyle.backgroundImage:document.defaultView.getComputedStyle(f,null)["backgroundImage"]).replace(/^url\((['"]?)([\s\S]+\/)[\s\S]+\1\)$/i,"$2");a(f).remove();this.rte=c;this.xhtml=/xhtml/i.test(c.options.doctype);this.boolAttrs=c.utils.makeObject("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected".split(","));this.tagRegExp=/<(\/?)([\w:]+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*\/?>/g;this.openTagRegExp=/<([\w:]+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*\/?>/g;this.attrRegExp=/(\w+)(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^\s]+))?/g;this.scriptRegExp=/<script([^>]*)>([\s\S]*?)<\/script>/gi;this.styleRegExp=/(<style([^>]*)>[\s\S]*?<\/style>)/gi;this.linkRegExp=/(<link([^>]+)>)/gi;this.cdataRegExp=/<!\[CDATA\[([\s\S]+)\]\]>/g;this.objRegExp=/<object([^>]*)>([\s\S]*?)<\/object>/gi;this.embRegExp=/<(embed)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*>/gi;this.paramRegExp=/<(param)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*>/gi;this.vimeoRegExp=/<(iframe)\s+([^>]*src\s*=\s*"http:\/\/[^"]+vimeo\.com\/\w+[^>]*)>([\s\S]*?)<\/iframe>/gi;this.yMapsRegExp=/<div\s+([^>]*id\s*=\s*('|")?YMapsID[^>]*)>/gi;this.gMapsRegExp=/<iframe\s+([^>]*src\s*=\s*"http:\/\/maps\.google\.\w+[^>]*)>([\s\S]*?)<\/iframe>/gi;this.videoHostRegExp=/^(http:\/\/[\w\.]*)?(youtube|vimeo|rutube).*/i;this.serviceClassRegExp=/<(\w+)([^>]*class\s*=\s*"[^>]*elrte-[^>]*)>\s*(<\/\1>)?/gi;this.pagebreakRegExp=/<(\w+)([^>]*style\s*=\s*"[^>]*page-break[^>]*)>\s*(<\/\1>)?/gi;this.pbRegExp=new RegExp("<!-- pagebreak -->","gi");this.allowTags=c.options.allowTags.length?c.utils.makeObject(c.options.allowTags):null;this.denyTags=c.options.denyTags.length?c.utils.makeObject(c.options.denyTags):null;this.denyAttr=c.options.denyAttr?c.utils.makeObject(c.options.denyAttr):null;this.pasteDenyAttr=c.options.pasteDenyAttr?c.utils.makeObject(c.options.pasteDenyAttr):null;this.fontSize=["medium","xx-small","small","medium","large","x-large","xx-large"];this.fontFamily={"sans-serif":/^(arial|tahoma|verdana)$/i,serif:/^(times|times new roman)$/i,monospace:/^courier$/i};this.scripts={};this._chains={};a.each(this.chains,function(g){b._chains[g]=[];a.each(this,function(h,j){typeof(b.rules[j])=="function"&&b._chains[g].push(b.rules[j])})});this.proccess=function(h,g){g=a.trim(g).replace(/^\s*(&nbsp;)+/gi,"").replace(/(&nbsp;|<br[^>]*>)+\s*$/gi,"");a.each(this._chains[h]||[],function(){g=this.call(b,g)});return g.replace(/\t/g,"  ").replace(/\r/g,"").replace(/\s*\n\s*\n+/g,"\n")+"  "};this.wysiwyg=function(g){return this.proccess("wysiwyg",g)};this.source=function(g){return this.proccess("source",g)};this.source2source=function(g){return this.proccess("source2source",g)};this.wysiwyg2wysiwyg=function(g){return this.proccess("wysiwyg2wysiwyg",g)};this.parseAttrs=function(p){var j={},h=this.boolAttrs,g=p.match(this.attrRegExp),o,q,k;g&&a.each(g,function(r,t){o=t.split("=");q=a.trim(o[0]).toLowerCase();if(o.length>2){o.shift();k=o.join("=")}else{k=h[q]||o[1]||""}j[q]=a.trim(k).replace(/^('|")(.*)(\1)$/,"$2")});j.style=this.rte.utils.parseStyle(j.style);j["class"]=this.rte.utils.parseClass(j["class"]||"");return j};this.serializeAttrs=function(g,k){var j=[],h=this;a.each(g,function(p,o){if(p=="style"){o=h.rte.utils.serializeStyle(o,k)}else{if(p=="class"){o=h.rte.utils.serializeClass(o)}}o&&j.push(p+'="'+o+'"')});return j.join(" ")};this.cleanAttrs=function(g,j){var h=this,o=this.replaceAttrs;a.each(g["class"],function(p){/^(Apple-style-span|mso\w+)$/i.test(p)&&delete g["class"][p]});function k(p){return p+(/\d$/.test(p)?"px":"")}a.each(g,function(q,p){o[q]&&o[q].call(h,g,j);if(q=="style"){a.each(p,function(t,r){switch(t){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":g.style[t.replace(/^mso-|-alt$/g,"")]=k(r);delete g.style[t];break;case"horiz-align":g.style["text-align"]=r;delete g.style[t];break;case"vert-align":g.style["vertical-align"]=r;delete g.style[t];break;case"font-color":case"mso-foreground":g.style.color=r;delete g.style[t];break;case"mso-background":case"mso-highlight":g.style.background=r;delete g.style[t];break;case"mso-default-height":g.style["min-height"]=k(r);delete g.style[t];break;case"mso-default-width":g.style["min-width"]=k(r);delete g.style[t];break;case"mso-padding-between-alt":g.style["border-collapse"]="separate";g.style["border-spacing"]=k(r);delete g.style[t];break;case"text-line-through":if(r.match(/(single|double)/i)){g.style["text-decoration"]="line-through"}delete g.style[t];break;case"mso-zero-height":if(r=="yes"){g.style.display="none"}delete g.style[t];break;case"font-weight":if(r==700){g.style["font-weight"]="bold"}break;default:if(t.match(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/)){delete g.style[t]}}})}});return g}};elRTE.prototype.filter.prototype.replaceTags={b:{tag:"strong"},big:{tag:"span",style:{"font-size":"large"}},center:{tag:"div",style:{"text-align":"center"}},i:{tag:"em"},font:{tag:"span"},nobr:{tag:"span",style:{"white-space":"nowrap"}},menu:{tag:"ul"},plaintext:{tag:"pre"},s:{tag:"strike"},small:{tag:"span",style:{"font-size":"small"}},u:{tag:"span",style:{"text-decoration":"underline"}},xmp:{tag:"pre"}};elRTE.prototype.filter.prototype.replaceAttrs={align:function(b,c){switch(c){case"img":b.style[b.align.match(/(left|right)/)?"float":"vertical-align"]=b.align;break;case"table":if(b.align=="center"){b.style["margin-left"]=b.style["margin-right"]="auto"}else{b.style["float"]=b.align}break;default:b.style["text-align"]=b.align}delete b.align},border:function(b){!b.style["border-width"]&&(b.style["border-width"]=(parseInt(b.border)||1)+"px");!b.style["border-style"]&&(b.style["border-style"]="solid");delete b.border},bordercolor:function(b){!b.style["border-color"]&&(b.style["border-color"]=b.bordercolor);delete b.bordercolor},background:function(b){!b.style["background-image"]&&(b.style["background-image"]="url("+b.background+")");delete b.background},bgcolor:function(b){!b.style["background-color"]&&(b.style["background-color"]=b.bgcolor);delete b.bgcolor},clear:function(b){b.style.clear=b.clear=="all"?"both":b.clear;delete b.clear},color:function(b){!b.style.color&&(b.style.color=b.color);delete b.color},face:function(b){var c=b.face.toLowerCase();a.each(this.fontFamily,function(g,f){if(c.match(f)){b.style["font-family"]=c+","+g}});delete b.face},hspace:function(b,f){if(f=="img"){var c=parseInt(b.hspace)||0;!b.style["margin-left"]&&(b.style["margin-left"]=c+"px");!b.style["margin-right"]&&(b.style["margin-right"]=c+"px");delete b.hspace}},size:function(b,c){if(c!="input"){b.style["font-size"]=this.fontSize[parseInt(b.size)||0]||"medium";delete b.size}},valign:function(b){if(!b.style["vertical-align"]){b.style["vertical-align"]=b.valign}delete b.valign},vspace:function(b,f){if(f=="img"){var c=parseInt(b.vspace)||0;!b.style["margin-top"]&&(b.style["margin-top"]=c+"px");!b.style["margin-bottom"]&&(b.style["margin-bottom"]=c+"px");delete b.hspace}}};elRTE.prototype.filter.prototype.rules={allowedTags:function(c){var b=this.allowTags;return b?c.replace(this.tagRegExp,function(f,h,g){return b[g.toLowerCase()]?f:""}):c},deniedTags:function(b){var c=this.denyTags;return c?b.replace(this.tagRegExp,function(f,h,g){return c[g.toLowerCase()]?"":f}):b},clean:function(g){var c=this,b=this.replaceTags,h=this.replaceAttrs,f=this.denyAttr,j;return g.replace(/<!DOCTYPE([\s\S]*)>/gi,"").replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>").replace(/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s&nbsp;]*)<\/span>/gi,"$1").replace(/(<p[^>]*>\s*<\/p>|<p[^>]*\/>)/gi,"<br>").replace(this.tagRegExp,function(o,q,p,k){p=p.toLowerCase();if(q){return"</"+(b[p]?b[p].tag:p)+">"}k=c.cleanAttrs(c.parseAttrs(k||""),p);if(b[p]){b[p].style&&a.extend(k.style,b[p].style);p=b[p].tag}f&&a.each(k,function(r){if(f[r]){delete k[r]}});k=c.serializeAttrs(k);return"<"+p+(k?" ":"")+k+">"})},cleanPaste:function(c){var b=this,f=this.pasteDenyAttr;c=c.replace(this.scriptRegExp,"").replace(this.styleRegExp,"").replace(this.linkRegExp,"").replace(this.cdataRegExp,"").replace(/\<\!--[\s\S]*?--\>/g,"");if(this.rte.options.pasteOnlyText){c=c.replace(this.tagRegExp,function(g,j,h){return/br/i.test(h)||(j&&/h[1-6]|p|ol|ul|li|div|blockquote|tr/i)?"<br>":""}).replace(/(&nbsp;|<br[^>]*>)+\s*$/gi,"")}else{if(f){c=c.replace(this.openTagRegExp,function(h,j,g){g=b.parseAttrs(g);a.each(g,function(k){if(f[k]){delete g[k]}});g=b.serializeAttrs(g,true);return"<"+j+(g?" ":"")+g+">"})}}return c},replace:function(o){var q=this,b=this.rte.options.replace||[],g;if(b.length){a.each(b,function(r,t){if(typeof(t)=="function"){o=t.call(q,o)}})}function k(x,D){var E=r(),B=E&&q.videoHostRegExp.test(E)?E.replace(q.videoHostRegExp,"$2"):D.replace(/^\w+\/(.+)/,"$1"),C=parseInt((x.obj?x.obj.width||x.obj.style.width:0)||(x.embed?x.embed.width||x.embed.style.width:0))||150,A=parseInt((x.obj?x.obj.height||x.obj.style.height:0)||(x.embed?x.embed.height||x.embed.style.height:0))||100,v="media"+Math.random().toString().substring(2),u="",z;function r(){if(x.embed&&x.embed.src){return x.embed.src}if(x.params&&x.params.length){z=x.params.length;while(z--){if(x.params[z].name=="src"||x.params[z].name=="movie"){return x.params[z].value}}}}if(x.obj&&x.obj.style&&x.obj.style["float"]){u=' style="float:'+x.obj.style["float"]+'"'}q.scripts[v]=x;return'<img src="'+q.url+'pixel.gif" class="elrte-media elrte-media-'+B+' elrte-protected" title="'+(E?q.rte.utils.encode(E):"")+'" rel="'+v+'" width="'+C+'" height="'+A+'"'+u+">"}o=o.replace(this.styleRegExp,"<!-- ELRTE_COMMENT$1 -->").replace(this.linkRegExp,"<!-- ELRTE_COMMENT$1-->").replace(this.cdataRegExp,"<!--[CDATA[$1]]-->").replace(this.scriptRegExp,function(u,r,v){var w;if(q.denyTags.script){return""}w="script"+Math.random().toString().substring(2);r=q.parseAttrs(r);!r.type&&(r.type="text/javascript");q.scripts[w]="<script "+q.serializeAttrs(r)+">"+v+"<\/script>";return"<!-- ELRTE_SCRIPT:"+(w)+" -->"}).replace(this.yMapsRegExp,function(u,r){r=q.parseAttrs(r);r["class"]["elrte-yandex-maps"]="elrte-yandex-maps";r["class"]["elrte-protected"]="elrte-protected";return"<div "+q.serializeAttrs(r)+">"}).replace(this.gMapsRegExp,function(v,u){var z="gmaps"+Math.random().toString().substring(2),r,x;u=q.parseAttrs(u);r=parseInt(u.width||u.style.width||100);x=parseInt(u.height||u.style.height||100);q.scripts[z]=v;return'<img src="'+q.url+'pixel.gif" class="elrte-google-maps elrte-protected" id="'+z+'" style="width:'+r+"px;height:"+x+'px">'}).replace(this.objRegExp,function(w,u,z){var r=z.match(q.embRegExp),x={obj:q.parseAttrs(u),embed:r&&r.length?q.parseAttrs(r[0].substring(7)):null,params:[]},v=q.rte.utils.mediaInfo(x.embed?x.embed.type||"":"",x.obj.classid||"");if(v){if((r=z.match(q.paramRegExp))){a.each(r,function(t,A){x.params.push(q.parseAttrs(A.substring(6)))})}!x.obj.classid&&(x.obj.classid=v.classid[0]);!x.obj.codebase&&(x.obj.codebase=v.codebase);x.embed&&!x.embed.type&&(x.embed.type=v.type);x.obj.width=="1"&&delete x.obj.width;x.obj.height=="1"&&delete x.obj.height;if(x.embed){x.embed.width=="1"&&delete x.embed.width;x.embed.height=="1"&&delete x.embed.height}return k(x,v.type)}return w}).replace(this.embRegExp,function(v,w,r){var r=q.parseAttrs(r),u=q.rte.utils.mediaInfo(r.type||"");r.width=="1"&&delete r.width;r.height=="1"&&delete r.height;return u?k({embed:r},u.type):v}).replace(this.vimeoRegExp,function(u,v,r){r=q.parseAttrs(r);delete r.frameborder;r.width=="1"&&delete r.width;r.height=="1"&&delete r.height;r.type="application/x-shockwave-flash";return k({embed:r},"application/x-shockwave-flash")}).replace(/<\/(embed|param)>/gi,"").replace(this.pbRegExp,function(){return'<img src="'+q.url+'pixel.gif" class="elrte-protected elrte-pagebreak">'});g=a("<div>"+o+"</div>");g.find("span:not([id]):not([class])").each(function(){var r=a(this);if(!r.attr("style")){r.children().length?q.rte.dom.unwrap(this):r.remove()}}).end().find("span span:only-child").each(function(){var u=a(this),x=u.parent().eq(0),w=u.attr("id"),r=x.attr("id"),A,v,z;if(q.rte.dom.is(this,"onlyChild")&&(!w||!r)){z=a.trim(x.attr("class")+" "+u.attr("class"));z&&x.attr("class",z);v=q.rte.utils.serializeStyle(a.extend(q.rte.utils.parseStyle(a(this).attr("style")||""),q.rte.utils.parseStyle(a(x).attr("style")||"")));v&&x.attr("style",v);A=w||r;A&&x.attr("id",A);this.firstChild?a(this.firstChild).unwrap():u.remove()}});if(!this.rte.options.allowTextNodes){var h=this.rte.dom,c=[],p=[];if(a.browser.msie){for(var j=0;j<g[0].childNodes.length;j++){c.push(g[0].childNodes[j])}}else{c=Array.prototype.slice.call(g[0].childNodes)}function f(){if(p.length&&h.filter(p,"notEmpty").length){h.wrap(p,document.createElement("p"))}p=[]}a.each(c,function(r,t){if(h.is(t,"block")){f()}else{if(p.length&&t.previousSibling!=p[p.length-1]){f()}p.push(t)}});f()}return g.html()},restore:function(c){var b=this,f=this.rte.options.restore|[];if(f.length){a.each(f,function(g,h){if(typeof(h)=="function"){c=h.call(b,c)}})}c=c.replace(/\<\!--\[CDATA\[([\s\S]*?)\]\]--\>/gi,"<![CDATA[$1]]>").replace(/\<\!--\s*ELRTE_SCRIPT\:\s*(script\d+)\s*--\>/gi,function(g,h){if(b.scripts[h]){g=b.scripts[h];delete b.scripts[h]}return g||""}).replace(/\<\!-- ELRTE_COMMENT([\s\S]*?) --\>/gi,"$1").replace(this.serviceClassRegExp,function(k,r,g,p){var g=b.parseAttrs(g),h,q="";if(g["class"]["elrte-media"]){h=b.scripts[g.rel]||{};h.params&&a.each(h.params,function(j,o){q+="<param "+b.serializeAttrs(o)+">\n"});h.embed&&(q+="<embed "+b.serializeAttrs(h.embed)+">");h.obj&&(q="<object "+b.serializeAttrs(h.obj)+">\n"+q+"\n</object>\n");return q||k}else{if(g["class"]["elrte-google-maps"]){var k="";if(b.scripts[g.id]){k=b.scripts[g.id];delete b.scripts[g.id]}return k}else{if(g["class"]["elrte-pagebreak"]){return"<!-- pagebreak -->"}}}a.each(g["class"],function(j){/^elrte-\w+/i.test(j)&&delete (g["class"][j])});return"<"+r+" "+b.serializeAttrs(g)+">"+(p||"")});return c},compactStyles:function(c){var b=this;return c.replace(this.tagRegExp,function(g,j,h,f){f=!j&&f?b.serializeAttrs(b.parseAttrs(f),true):"";return"<"+j+h.toLowerCase()+(f?" ":"")+f+">"})},xhtmlTags:function(b){return this.xhtml?b.replace(/<(img|hr|br|embed|param|link)([^>]*\/*)>/gi,"<$1$2 />"):b}};elRTE.prototype.filter.prototype.chains={wysiwyg:["clean","allowedTags","replace","deniedTags","compactStyles"],source:["clean","allowedTags","restore","compactStyles","xhtmlTags"],paste:["clean","allowedTags","cleanPaste","replace","deniedTags","compactStyles"],wysiwyg2wysiwyg:["clean","allowedTags","restore","replace","deniedTags","compactStyles"],source2source:["clean","allowedTags","replace","deniedTags","restore","compactStyles","xhtmlTags"]}})(jQuery);(function(a){elRTE.prototype.history=function(b){this.rte=b;this._prev=[];this._next=[];this.add=function(){if(this.rte.options.historyLength>0&&this._prev.length>=this.rte.options.historyLength){this._prev.slice(this.rte.options.historyLength)}var c=this.rte.selection.getBookmark();this._prev.push([a(this.rte.doc.body).html(),c]);this.rte.selection.moveToBookmark(c);this._next=[]};this.back=function(){if(this._prev.length){var c=this.rte.selection.getBookmark(),f=this._prev.pop();this._next.push([a(this.rte.doc.body).html(),c]);a(this.rte.doc.body).html(f[0]);this.rte.selection.moveToBookmark(f[1])}};this.fwd=function(){if(this._next.length){var c=this.rte.selection.getBookmark(),f=this._next.pop();this._prev.push([a(this.rte.doc.body).html(),c]);a(this.rte.doc.body).html(f[0]);this.rte.selection.moveToBookmark(f[1])}};this.canBack=function(){return this._prev.length};this.canFwd=function(){return this._next.length}}})(jQuery);(function(a){elRTE.prototype.options={doctype:'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',cssClass:"el-rte",cssfiles:[],height:null,resizable:true,lang:"en",toolbar:"normal",absoluteURLs:true,allowSource:true,stripWhiteSpace:true,styleWithCSS:false,fmAllow:true,fmOpen:null,allowTags:[],denyTags:["applet","base","basefont","bgsound","blink","body","col","colgroup","iframe","isindex","frameset","html","head","meta","marquee","noframes","noembed","o:p","title","xml"],denyAttr:[],pasteDenyAttr:["id","name","class","style","language","onclick","ondblclick","onhover","onkeup","onkeydown","onkeypress"],allowTextNodes:false,allowBrowsersSpecStyles:false,allowPaste:true,pasteOnlyText:false,replace:[],restore:[],pagebreak:'<div style="page-break-after: always;"></div>',buttons:{save:"Save",copy:"Copy",cut:"Cut",css:"Css style and class",paste:"Paste",pastetext:"Paste only text",pasteformattext:"Paste formatted text",removeformat:"Clean format",undo:"Undo last action",redo:"Redo previous action",bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",superscript:"Superscript",subscript:"Subscript",justifyleft:"Align left",justifyright:"Ailgn right",justifycenter:"Align center",justifyfull:"Align full",indent:"Indent",outdent:"Outdent",rtl:"Right to left",ltr:"Left to right",forecolor:"Font color",hilitecolor:"Background color",formatblock:"Format",fontsize:"Font size",fontname:"Font",insertorderedlist:"Ordered list",insertunorderedlist:"Unordered list",horizontalrule:"Horizontal rule",blockquote:"Blockquote",div:"Block element (DIV)",link:"Link",unlink:"Delete link",anchor:"Bookmark",image:"Image",pagebreak:"Page break",smiley:"Smiley",flash:"Flash",table:"Table",tablerm:"Delete table",tableprops:"Table properties",tbcellprops:"Table cell properties",tbrowbefore:"Insert row before",tbrowafter:"Insert row after",tbrowrm:"Delete row",tbcolbefore:"Insert column before",tbcolafter:"Insert column after",tbcolrm:"Delete column",tbcellsmerge:"Merge table cells",tbcellsplit:"Split table cell",docstructure:"Toggle display document structure",elfinder:"Open file manager",fullscreen:"Toggle full screen mode",nbsp:"Non breakable space",stopfloat:"Stop element floating",about:"About this software"},panels:{save:["save"],copypaste:["copy","cut","paste","pastetext","pasteformattext","removeformat","docstructure"],undoredo:["undo","redo"],style:["bold","italic","underline","strikethrough","subscript","superscript"],colors:["forecolor","hilitecolor"],alignment:["justifyleft","justifycenter","justifyright","justifyfull"],indent:["outdent","indent"],format:["formatblock","fontsize","fontname"],lists:["insertorderedlist","insertunorderedlist"],elements:["horizontalrule","blockquote","div","stopfloat","css","nbsp","smiley","pagebreak"],direction:["ltr","rtl"],links:["link","unlink","anchor"],images:["image"],media:["image","flash"],tables:["table","tableprops","tablerm","tbrowbefore","tbrowafter","tbrowrm","tbcolbefore","tbcolafter","tbcolrm","tbcellprops","tbcellsmerge","tbcellsplit"],elfinder:["elfinder"],fullscreen:["fullscreen","about"]},toolbars:{tiny:["style"],compact:["save","undoredo","style","alignment","lists","links","fullscreen"],normal:["save","copypaste","undoredo","style","alignment","colors","indent","lists","links","elements","images","fullscreen"],complete:["save","copypaste","undoredo","style","alignment","colors","format","indent","lists","links","elements","media","fullscreen"],maxi:["save","copypaste","undoredo","elfinder","style","alignment","direction","colors","format","indent","lists","links","elements","media","tables","fullscreen"],eldorado:["save","copypaste","elfinder","undoredo","style","alignment","colors","format","indent","lists","links","elements","media","tables","fullscreen"]},panelNames:{save:"Save",copypaste:"Copy/Pase",undoredo:"Undo/Redo",style:"Text styles",colors:"Colors",alignment:"Alignment",indent:"Indent/Outdent",format:"Text format",lists:"Lists",elements:"Misc elements",direction:"Script direction",links:"Links",images:"Images",media:"Media",tables:"Tables",elfinder:"File manager (elFinder)"}}})(jQuery);(function(a){elRTE.prototype.selection=function(g){this.rte=g;var c=this;this.w3cRange=null;var o,b,j,k;a(this.rte.doc).keyup(function(p){if(p.ctrlKey||p.metaKey||(p.keyCode>=8&&p.keyCode<=13)||(p.keyCode>=32&&p.keyCode<=40)||p.keyCode==46||(p.keyCode>=96&&p.keyCode<=111)){c.cleanCache()}}).mousedown(function(p){if(p.target.nodeName=="HTML"){o=c.rte.doc.body}else{o=p.target}b=j=null}).mouseup(function(p){if(p.target.nodeName=="HTML"){b=c.rte.doc.body}else{b=p.target}b=p.target;j=null}).click();function h(){return c.rte.window.getSelection?c.rte.window.getSelection():c.rte.window.document.selection}function f(t,r,q){while(t.nodeName!="BODY"&&t.parentNode&&t.parentNode.nodeName!="BODY"&&(r?t!==r&&t.parentNode!=r:1)&&((q=="left"&&c.rte.dom.isFirstNotEmpty(t))||(q=="right"&&c.rte.dom.isLastNotEmpty(t))||(c.rte.dom.isFirstNotEmpty(t)&&c.rte.dom.isLastNotEmpty(t)))){t=t.parentNode}return t}this.collapsed=function(){return this.getRangeAt().isCollapsed()};this.collapse=function(p){var q=h(),t=this.getRangeAt();t.collapse(p?true:false);if(!a.browser.msie){q.removeAllRanges();q.addRange(t)}return this};this.getRangeAt=function(t){if(this.rte.browser.msie){if(!this.w3cRange){this.w3cRange=new this.rte.w3cRange(this.rte)}t&&this.w3cRange.update();return this.w3cRange}var p=h();var q=p.rangeCount>0?p.getRangeAt(0):this.rte.doc.createRange();q.getStart=function(){return this.startContainer.nodeType==1?this.startContainer.childNodes[Math.min(this.startOffset,this.startContainer.childNodes.length-1)]:this.startContainer};q.getEnd=function(){return this.endContainer.nodeType==1?this.endContainer.childNodes[Math.min(this.startOffset==this.endOffset?this.endOffset:this.endOffset-1,this.endContainer.childNodes.length-1)]:this.endContainer};q.isCollapsed=function(){return this.collapsed};return q};this.saveIERange=function(){if(a.browser.msie){k=this.getRangeAt().getBookmark()}};this.restoreIERange=function(){a.browser.msie&&k&&this.getRangeAt().moveToBookmark(k)};this.cloneContents=function(){var v=this.rte.dom.create("div"),q,u,p;if(a.browser.msie){try{q=this.rte.window.document.selection.createRange()}catch(t){q=this.rte.doc.body.createTextRange()}a(v).html(q.htmlText)}else{u=this.getRangeAt().cloneContents();for(p=0;p<u.childNodes.length;p++){v.appendChild(u.childNodes[p].cloneNode(true))}}return v};this.select=function(t,w){w=w||t;if(this.rte.browser.msie){var u=this.rte.doc.body.createTextRange(),q=u.duplicate(),p=u.duplicate();q.moveToElementText(t);p.moveToElementText(w);u.setEndPoint("StartToStart",q);u.setEndPoint("EndToEnd",p);u.select()}else{var v=h(),u=this.getRangeAt();u.setStartBefore(t);u.setEndAfter(w);v.removeAllRanges();v.addRange(u)}return this.cleanCache()};this.selectContents=function(u){var q=this.getRangeAt();if(u&&u.nodeType==1){if(this.rte.browser.msie){q.range();q.r.moveToElementText(u.parentNode);q.r.select()}else{try{q.selectNodeContents(u)}catch(t){return this.rte.log("unable select node contents "+u)}var p=h();p.removeAllRanges();p.addRange(q)}}return this};this.deleteContents=function(){if(!a.browser.msie){this.getRangeAt().deleteContents()}return this};this.insertNode=function(v,u){if(u&&!this.collapsed()){this.collapse()}if(this.rte.browser.msie){var p=v.nodeType==3?v.nodeValue:a(this.rte.dom.create("span")).append(a(v)).html();var t=this.getRangeAt();t.insertNode(p)}else{var t=this.getRangeAt();t.insertNode(v);t.setStartAfter(v);t.setEndAfter(v);var q=h();q.removeAllRanges();q.addRange(t)}return this.cleanCache()};this.insertHtml=function(p,q){if(q&&!this.collapsed()){this.collapse()}if(this.rte.browser.msie){this.getRangeAt().range().pasteHTML(p)}else{var r=a(this.rte.dom.create("span")).html(p||"").get(0);this.insertNode(r);a(r).replaceWith(a(r).html())}return this.cleanCache()};this.insertText=function(q,p){var r=this.rte.doc.createTextNode(q);return this.insertHtml(r.nodeValue)};this.getBookmark=function(){this.rte.window.focus();var p,v,t,z,w,A=this.rte.dom.createBookmark(),x=this.rte.dom.createBookmark();if(a.browser.msie){try{p=this.rte.window.document.selection.createRange()}catch(x){p=this.rte.doc.body.createTextRange()}if(p.item){var u=p.item(0);p=this.rte.doc.body.createTextRange();p.moveToElementText(u)}v=p.duplicate();t=p.duplicate();z=this.rte.dom.create("span");w=this.rte.dom.create("span");z.appendChild(A);w.appendChild(x);v.collapse(true);v.pasteHTML(z.innerHTML);t.collapse(false);t.pasteHTML(w.innerHTML)}else{var q=h();var p=q.rangeCount>0?q.getRangeAt(0):this.rte.doc.createRange();v=p.cloneRange();t=p.cloneRange();t.collapse(false);t.insertNode(x);v.collapse(true);v.insertNode(A);this.select(A,x)}return[A.id,x.id]};this.moveToBookmark=function(p){this.rte.window.focus();if(p&&p.length==2){var q=this.rte.doc.getElementById(p[0]),v=this.rte.doc.getElementById(p[1]),u,t;if(q&&v){this.select(q,v);if(this.rte.dom.next(q)==v){this.collapse(true)}if(!a.browser.msie){u=h();t=u.rangeCount>0?u.getRangeAt(0):this.rte.doc.createRange();u.removeAllRanges();u.addRange(t)}q.parentNode.removeChild(q);v.parentNode.removeChild(v)}}return this};this.removeBookmark=function(p){this.rte.window.focus();if(p.length==2){var q=this.rte.doc.getElementById(p[0]),r=this.rte.doc.getElementById(p[1]);if(q&&r){q.parentNode.removeChild(q);r.parentNode.removeChild(r)}}};this.cleanCache=function(){o=b=j=null;return this};this.getStart=function(){if(!o){var p=this.getRangeAt();o=p.getStart()}return o};this.getEnd=function(){if(!b){var p=this.getRangeAt();b=p.getEnd()}return b};this.getNode=function(){if(!j){j=this.rte.dom.findCommonAncestor(this.getStart(),this.getEnd())}return j};this.selected=function(r){var p={collapsed:false,blocks:false,filter:false,wrap:"text",tag:"span"};p=a.extend({},p,r);if(p.blocks){var v=this.getNode(),u=null;if(u=this.rte.dom.selfOrParent(v,"selectionBlock")){return[u]}}var t=this.selectedRaw(p.collapsed,p.blocks);var A=[];var w=[];var B=null;function q(){function D(){for(var F=0;F<w.length;F++){if(w[F].nodeType==1&&(c.rte.dom.selfOrParent(w[F],/^P$/)||a(w[F]).find("p").length>0)){return false}}return true}if(w.length>0){var C=p.tag=="p"&&!D()?"div":p.tag;var E=c.rte.dom.wrap(w,C);A[B]=E;B=null;w=[]}}function z(E){if(E.nodeType==1){if(/^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(E.nodeName)){a(E).find("td,th").each(function(){var F=p.tag=="p"&&a(this).find("p").length>0?"div":p.tag;var G=c.rte.dom.wrapContents(this,F);return A.push(G)})}else{if(/^(CAPTION|TD|TH|LI|DT|DD)$/.test(E.nodeName)){var C=p.tag=="p"&&a(E).find("p").length>0?"div":p.tag;var E=c.rte.dom.wrapContents(E,C);return A.push(E)}}}var D=w.length>0?w[w.length-1]:null;if(D&&D!=c.rte.dom.prev(E)){q()}w.push(E);if(B===null){B=A.length;A.push("dummy")}}if(t.nodes.length>0){for(var x=0;x<t.nodes.length;x++){var v=t.nodes[x];if(v.nodeType==3&&(x==0||x==t.nodes.length-1)&&a.trim(v.nodeValue).length>0){if(x==0&&t.so>0){v=v.splitText(t.so)}if(x==t.nodes.length-1&&t.eo>0){v.splitText(x==0&&t.so>0?t.eo-t.so:t.eo)}}switch(p.wrap){case"text":if((v.nodeType==1&&v.nodeName=="BR")||(v.nodeType==3&&a.trim(v.nodeValue).length>0)){z(v)}else{if(v.nodeType==1){A.push(v)}}break;case"inline":if(this.rte.dom.isInline(v)){z(v)}else{if(v.nodeType==1){A.push(v)}}break;case"all":if(v.nodeType==1||!this.rte.dom.isEmpty(v)){z(v)}break;default:if(v.nodeType==1||!this.rte.dom.isEmpty(v)){A.push(v)}}}q()}if(A.length){this.rte.window.focus();this.select(A[0],A[A.length-1])}return p.filter?this.rte.dom.filter(A,p.filter):A};this.dump=function(p,t,w,v,q){var u=this.getRangeAt();this.rte.log("commonAncestorContainer");this.rte.log(p||u.commonAncestorContainer);this.rte.log("startContainer");this.rte.log(t||u.startContainer);this.rte.log("startOffset: "+(v>=0?v:u.startOffset));this.rte.log("endContainer");this.rte.log(w||u.endContainer);this.rte.log("endOffset: "+(q>=0?q:u.endOffset))};this.selectedRaw=function(z,p){var F={so:null,eo:null,nodes:[]};var q=this.getRangeAt(true);var w=q.commonAncestorContainer;var H,E;var D=false;var B=false;function C(J,r,I){if(J.nodeType==3){I=I>=0?I:J.nodeValue.length;return(r==0&&I==J.nodeValue.length)||a.trim(J.nodeValue).length==a.trim(J.nodeValue.substring(r,I)).length}return true}function x(J,r,I){if(J.nodeType==1){return c.rte.dom.isEmpty(J)}else{if(J.nodeType==3){return a.trim(J.nodeValue.substring(r||0,I>=0?I:J.nodeValue.length)).length==0}}return true}if(q.startContainer.nodeType==1){if(q.startOffset<q.startContainer.childNodes.length){H=q.startContainer.childNodes[q.startOffset];F.so=H.nodeType==1?null:0}else{H=q.startContainer.childNodes[q.startOffset-1];F.so=H.nodeType==1?null:H.nodeValue.length}}else{H=q.startContainer;F.so=q.startOffset}if(q.collapsed){if(z){if(p){H=f(H);if(!this.rte.dom.isEmpty(H)||(H=this.rte.dom.next(H))){F.nodes=[H]}if(this.rte.dom.isInline(H)){F.nodes=this.rte.dom.toLineStart(H).concat(F.nodes,this.rte.dom.toLineEnd(H))}if(F.nodes.length>0){F.so=F.nodes[0].nodeType==1?null:0;F.eo=F.nodes[F.nodes.length-1].nodeType==1?null:F.nodes[F.nodes.length-1].nodeValue.length}}else{if(!this.rte.dom.isEmpty(H)){F.nodes=[H]}}}return F}if(q.endContainer.nodeType==1){E=q.endContainer.childNodes[q.endOffset-1];F.eo=E.nodeType==1?null:E.nodeValue.length}else{E=q.endContainer;F.eo=q.endOffset}if(H.nodeType==1||p||C(H,F.so,H.nodeValue.length)){H=f(H,w,"left");D=true;F.so=H.nodeType==1?null:0}if(E.nodeType==1||p||C(E,0,F.eo)){E=f(E,w,"right");B=true;F.eo=E.nodeType==1?null:E.nodeValue.length}if(p){if(H.nodeType!=1&&H.parentNode!=w&&H.parentNode.nodeName!="BODY"){H=H.parentNode;F.so=null}if(E.nodeType!=1&&E.parentNode!=w&&E.parentNode.nodeName!="BODY"){E=E.parentNode;F.eo=null}}if(H.parentNode==E.parentNode&&H.parentNode.nodeName!="BODY"&&(D&&this.rte.dom.isFirstNotEmpty(H))&&(B&&this.rte.dom.isLastNotEmpty(E))){H=E=H.parentNode;F.so=H.nodeType==1?null:0;F.eo=E.nodeType==1?null:E.nodeValue.length}if(H==E){if(!this.rte.dom.isEmpty(H)){F.nodes.push(H)}return F}var t=H;while(t.nodeName!="BODY"&&t.parentNode!==w&&t.parentNode.nodeName!="BODY"){t=t.parentNode}var G=E;while(G.nodeName!="BODY"&&G.parentNode!==w&&G.parentNode.nodeName!="BODY"){G=G.parentNode}if(!x(H,F.so,H.nodeType==3?H.nodeValue.length:null)){F.nodes.push(H)}var v=H;while(v!==t){var u=v;while((u=this.rte.dom.next(u))){F.nodes.push(u)}v=v.parentNode}v=t;while((v=this.rte.dom.next(v))&&v!=G){F.nodes.push(v)}var A=[];v=E;while(v!==G){var u=v;while((u=this.rte.dom.prev(u))){A.push(u)}v=v.parentNode}if(A.length){F.nodes=F.nodes.concat(A.reverse())}if(!x(E,0,E.nodeType==3?F.eo:null)){F.nodes.push(E)}if(p){if(this.rte.dom.isInline(H)){F.nodes=this.rte.dom.toLineStart(H).concat(F.nodes);F.so=F.nodes[0].nodeType==1?null:0}if(this.rte.dom.isInline(E)){F.nodes=F.nodes.concat(this.rte.dom.toLineEnd(E));F.eo=F.nodes[F.nodes.length-1].nodeType==1?null:F.nodes[F.nodes.length-1].nodeValue.length}}return F}}})(jQuery);(function(a){elRTE.prototype.ui=function(f){this.rte=f;this._buttons=[];var v=this,o=this.rte.options.toolbars[f.options.toolbar&&f.options.toolbars[f.options.toolbar]?f.options.toolbar:"normal"],r=o.length,g,k,j,h,t,u,q;for(q in this.buttons){if(this.buttons.hasOwnProperty(q)&&q!="button"){this.buttons[q].prototype=this.buttons.button.prototype}}while(r--){k=o[r];g=a('<ul class="panel-'+k+(r==0?" first":"")+'" />').prependTo(this.rte.toolbar);g.bind("mousedown",function(b){b.preventDefault()});j=this.rte.options.panels[k].length;while(j--){h=this.rte.options.panels[k][j];t=this.buttons[h]||this.buttons.button;this._buttons.push((u=new t(this.rte,h)));g.prepend(u.domElem)}}this.update();this.disable=function(){a.each(v._buttons,function(){!this.active&&this.domElem.addClass("disabled")})}};elRTE.prototype.ui.prototype.update=function(h){h&&this.rte.selection.cleanCache();var f=this.rte.selection.getNode(),c=this.rte.dom.parents(f,"*"),j=this.rte.rtl,q=j?" &laquo; ":" &raquo; ",o="",b,g;function k(r){var p=r.nodeName.toLowerCase();r=a(r);if(p=="img"){if(r.hasClass("elrte-media")){p="media"}else{if(r.hasClass("elrte-google-maps")){p="google map"}else{if(r.hasClass("elrte-yandex-maps")){p="yandex map"}else{if(r.hasClass("elrte-pagebreak")){p="pagebreak"}}}}}return p}if(f&&f.nodeType==1&&f.nodeName!="BODY"){c.unshift(f)}if(!j){c=c.reverse()}for(g=0;g<c.length;g++){o+=(g>0?q:"")+k(c[g])}this.rte.statusbar.html(o);a.each(this._buttons,function(){this.update()});this.rte.window.focus()};elRTE.prototype.ui.prototype.buttons={button:function(f,c){var b=this;this.rte=f;this.active=false;this.name=c;this.val=null;this.domElem=a('<li style="-moz-user-select:-moz-none" class="'+c+' rounded-3" name="'+c+'" title="'+this.rte.i18n(this.rte.options.buttons[c]||c)+'" unselectable="on" />').hover(function(){a(this).addClass("hover")},function(){a(this).removeClass("hover")}).click(function(g){g.stopPropagation();g.preventDefault();if(!a(this).hasClass("disabled")){b.command()}b.rte.window.focus()})}};elRTE.prototype.ui.prototype.buttons.button.prototype.command=function(){this.rte.history.add();try{this.rte.doc.execCommand(this.name,false,this.val)}catch(b){return this.rte.log("commands failed: "+this.name)}this.rte.ui.update(true)};elRTE.prototype.ui.prototype.buttons.button.prototype.update=function(){try{if(!this.rte.doc.queryCommandEnabled(this.name)){return this.domElem.addClass("disabled")}else{this.domElem.removeClass("disabled")}}catch(b){return}try{if(this.rte.doc.queryCommandState(this.name)){this.domElem.addClass("active")}else{this.domElem.removeClass("active")}}catch(b){}}})(jQuery);(function(a){elRTE.prototype.utils=function(c){this.rte=c;this.url=null;this.reg=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;this.baseURL="";this.path="";this.entities={"&":"&amp;",'"':"&quot;","<":"&lt;",">":"&gt;"};this.entitiesRegExp=/[<>&\"]/g;this.media=[{type:"application/x-shockwave-flash",classid:["clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"],codebase:"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"},{type:"application/x-director",classid:["clsid:166b1bca-3f9c-11cf-8075-444553540000"],codebase:"http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"},{type:"application/x-mplayer2",classid:["clsid:6bf52a52-394a-11d3-b153-00c04f79faa6","clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95","clsid:05589fa1-c356-11ce-bf01-00aa0055595a"],codebase:"http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"},{type:"video/quicktime",classid:["clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b"],codebase:"http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"},{type:"audio/x-pn-realaudio-plugin",classid:["clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa"],codebase:"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"}];this.rgbRegExp=/\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*/i;this.colorsRegExp=/aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|rgb\s*\([^\)]+\)/i;this.colors={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",orange:"#ffa500",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#fffffff",yellow:"#ffff00"};var b=this;this.rgb2hex=function(f){return this.color2Hex(""+f)};this.toPixels=function(g){var f=g.match(/([0-9]+\.?[0-9]*)\s*(px|pt|em|%)/);if(f){g=f[1];unit=f[2]}if(g[0]=="."){g="0"+g}g=parseFloat(g);if(isNaN(g)){return""}var h=parseInt(a(document.body).css("font-size"))||16;switch(unit){case"em":return parseInt(g*h);case"pt":return parseInt(g*h/12);case"%":return parseInt(g*h/100)}return g};this.absoluteURL=function(g){!this.url&&this._url();g=a.trim(g);if(!g){return""}if(g[0]=="#"){return g}var f=this.parseURL(g);if(!f.host&&!f.path&&!f.anchor){return""}if(!this.rte.options.absoluteURLs){return g}if(f.protocol){return g}if(f.host&&(f.host.indexOf(".")!=-1||f.host=="localhost")){return this.url.protocol+"://"+g}if(g[0]=="/"){g=this.baseURL+g}else{if(g.indexOf("./")==0){g=g.substring(2)}g=this.baseURL+this.path+g}return g};this.parseURL=function(h){var g=h.match(this.reg);var f={};a.each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(j){f[this]=g[j]});if(!f.host.match(/[a-z0-9]/i)){f.host=""}return f};this.trimEventCallback=function(f){f=f?f.toString():"";return a.trim(f.replace(/\r*\n/mg,"").replace(/^function\s*on[a-z]+\s*\(\s*event\s*\)\s*\{(.+)\}$/igm,"$1"))};this._url=function(){this.url=this.parseURL(window.location.href);this.baseURL=this.url.protocol+"://"+(this.url.userInfo?parts.userInfo+"@":"")+this.url.host+(this.url.port?":"+this.url.port:"");this.path=!this.url.file?this.url.path:this.url.path.substring(0,this.url.path.length-this.url.file.length)};this.makeObject=function(g){var f={};a.each(g,function(h,j){f[j]=j});return f};this.encode=function(f){var g=this.entities;return(""+f).replace(this.entitiesRegExp,function(h){return g[h]})};this.decode=function(f){return a("<div/>").html(f||"").text()};this.parseStyle=function(k){var h={},f=this.rte.options.allowBrowsersSpecStyles,j,o,g;if(typeof(k)=="string"&&k.length){a.each(k.replace(/&quot;/gi,"'").split(";"),function(){j=this.toString().split(":");if(j[0]&&j[1]){o=a.trim(j[0]).toLowerCase();g=a.trim(j[1]);if(o=="color"||o=="background-color"){g=g.toLowerCase()}if(o&&g&&(f||o.substring(0,1)!="-")){h[o]=g}}})}return h};this.compactStyle=function(g){var f=this;if(g.border=="medium none"){delete g.border}a.each(g,function(j,h){if(/color$/i.test(j)){g[j]=f.color2Hex(h)}else{if(/^(border|background)$/i.test(j)){g[j]=h.replace(f.colorsRegExp,function(k){return f.color2Hex(k)})}}});if(g["border-width"]){g.border=g["border-width"]+" "+(g["border-style"]||"solid")+" "+(g["border-color"]||"#000");delete g["border-width"];delete g["border-style"];delete g["border-color"]}if(g["background-image"]){g.background=(g["background-color"]+" ")||""+g["background-image"]+" "+g["background-position"]||"0 0 "+g["background-repeat"]||"repeat";delete g["background-image"];delete ["background-image"];delete ["background-position"];delete ["background-repeat"]}if(g["margin-top"]&&g["margin-right"]&&g["margin-bottom"]&&g["margin-left"]){g.margin=g["margin-top"]+" "+g["margin-right"]+" "+g["margin-bottom"]+" "+g["margin-left"];delete g["margin-top"];delete g["margin-right"];delete g["margin-bottom"];delete g["margin-left"]}if(g["padding-top"]&&g["padding-right"]&&g["padding-bottom"]&&g["padding-left"]){g.padding=g["padding-top"]+" "+g["padding-right"]+" "+g["padding-bottom"]+" "+g["padding-left"];delete g["padding-top"];delete g["padding-right"];delete g["padding-bottom"];delete g["padding-left"]}if(g["list-style-type"]||g["list-style-position"]||g["list-style-image"]){g["list-style"]=a.trim(g["list-style-type"]||" "+g["list-style-position"]||""+g["list-style-image"]||"");delete g["list-style-type"];delete g["list-style-position"];delete g["list-style-image"]}return g};this.serializeStyle=function(g,h){var f=[];a.each(h?this.compactStyle(g):g,function(k,j){j&&f.push(k+":"+j)});return f.join(";")};this.parseClass=function(f){f=a.trim(f);return f.length?this.makeObject(f.split(/\s+/)):{};return f.length?f.split(/\s+/):[]};this.serializeClass=function(g){var f=[];a.each(g,function(h){f.push(h)});return f.join(" ")};this.mediaInfo=function(g,h){var f=this.media.length;while(f--){if(g===this.media[f].type||(h&&a.inArray(h,this.media[f].classid)!=-1)){return this.media[f]}}};this.color2Hex=function(h){var f;if(h.indexOf("#")===0){return h}h=h||"";function g(j){j=parseInt(j).toString(16);return j.length>1?j:"0"+j}if(this.colors[h]){return this.colors[h]}if((f=h.match(this.rgbRegExp))){return"#"+g(f[1])+g(f[2])+g(f[3])}return""}}})(jQuery);(function(a){elRTE.prototype.w3cRange=function(c){var b=this;this.rte=c;this.r=null;this.collapsed=true;this.startContainer=null;this.endContainer=null;this.startOffset=0;this.endOffset=0;this.commonAncestorContainer=null;this.range=function(){try{this.r=this.rte.window.document.selection.createRange()}catch(f){this.r=this.rte.doc.body.createTextRange()}return this.r};this.insertNode=function(f){this.range();b.r.collapse(false);var g=b.r.duplicate();g.pasteHTML(f)};this.getBookmark=function(){this.range();if(this.r.item){var f=this.r.item(0);this.r=this.rte.doc.body.createTextRange();this.r.moveToElementText(f)}return this.r.getBookmark()};this.moveToBookmark=function(f){this.rte.window.focus();this.range().moveToBookmark(f);this.r.select()};this.update=function(){function h(x){var k="\uFEFF";var o=offset=0;var t=b.r.duplicate();t.collapse(x);var u=t.parentElement();if(!u||u.nodeName=="HTML"){return{parent:b.rte.doc.body,ndx:o,offset:offset}}t.pasteHTML(k);childs=u.childNodes;for(var q=0;q<childs.length;q++){var w=childs[q];if(q>0&&(w.nodeType!==3||childs[q-1].nodeType!==3)){o++}if(w.nodeType!==3){offset=0}else{var v=w.nodeValue.indexOf(k);if(v!==-1){offset+=v;break}offset+=w.nodeValue.length}}t.moveStart("character",-1);t.text="";return{parent:u,ndx:Math.min(o,u.childNodes.length-1),offset:offset}}this.range();this.startContainer=this.endContainer=null;if(this.r.item){this.collapsed=false;var g=this.r.item(0);this.setStart(g.parentNode,this.rte.dom.indexOf(g));this.setEnd(g.parentNode,this.startOffset+1)}else{this.collapsed=this.r.boundingWidth==0;var j=h(true);var f=h(false);j.parent.normalize();f.parent.normalize();j.ndx=Math.min(j.ndx,j.parent.childNodes.length-1);f.ndx=Math.min(f.ndx,f.parent.childNodes.length-1);if(j.parent.childNodes[j.ndx].nodeType&&j.parent.childNodes[j.ndx].nodeType==1){this.setStart(j.parent,j.ndx)}else{this.setStart(j.parent.childNodes[j.ndx],j.offset)}if(f.parent.childNodes[f.ndx].nodeType&&f.parent.childNodes[f.ndx].nodeType==1){this.setEnd(f.parent,f.ndx)}else{this.setEnd(f.parent.childNodes[f.ndx],f.offset)}this.select()}return this};this.isCollapsed=function(){this.range();this.collapsed=this.r.item?false:this.r.boundingWidth==0;return this.collapsed};this.collapse=function(f){this.range();if(this.r.item){var g=this.r.item(0);this.r=this.rte.doc.body.createTextRange();this.r.moveToElementText(g)}this.r.collapse(f);this.r.select();this.collapsed=true};this.getStart=function(){this.range();if(this.r.item){return this.r.item(0)}var g=this.r.duplicate();g.collapse(true);var f=g.parentElement();return f&&f.nodeName=="BODY"?f.firstChild:f};this.getEnd=function(){this.range();if(this.r.item){return this.r.item(0)}var f=this.r.duplicate();f.collapse(false);var g=f.parentElement();return g&&g.nodeName=="BODY"?g.lastChild:g};this.setStart=function(f,g){this.startContainer=f;this.startOffset=g;if(this.endContainer){this.commonAncestorContainer=this.rte.dom.findCommonAncestor(this.startContainer,this.endContainer)}};this.setEnd=function(f,g){this.endContainer=f;this.endOffset=g;if(this.startContainer){this.commonAncestorContainer=this.rte.dom.findCommonAncestor(this.startContainer,this.endContainer)}};this.setStartBefore=function(f){if(f.parentNode){this.setStart(f.parentNode,this.rte.dom.indexOf(f))}};this.setStartAfter=function(f){if(f.parentNode){this.setStart(f.parentNode,this.rte.dom.indexOf(f)+1)}};this.setEndBefore=function(f){if(f.parentNode){this.setEnd(f.parentNode,this.rte.dom.indexOf(f))}};this.setEndAfter=function(f){if(f.parentNode){this.setEnd(f.parentNode,this.rte.dom.indexOf(f)+1)}};this.select=function(){function o(B,z){if(B.nodeType!=3){return -1}var A="\uFEFF";var x=B.nodeValue;var v=b.rte.doc.body.createTextRange();B.nodeValue=x.substring(0,z)+A+x.substring(z);v.moveToElementText(B.parentNode);v.findText(A);var w=Math.abs(v.moveStart("character",-1048575));B.nodeValue=x;return w}this.r=this.rte.doc.body.createTextRange();var k=this.startOffset;var g=this.endOffset;var u=this.startContainer.nodeType==1?this.startContainer.childNodes[Math.min(k,this.startContainer.childNodes.length-1)]:this.startContainer;var q=this.endContainer.nodeType==1?this.endContainer.childNodes[Math.min(k==g?g:g-1,this.endContainer.childNodes.length-1)]:this.endContainer;if(this.collapsed){if(u.nodeType==3){var h=o(u,k);this.r.move("character",h)}else{this.r.moveToElementText(u);this.r.collapse(true)}}else{var f=this.rte.doc.body.createTextRange();var j=o(u,k);var t=o(q,g);if(u.nodeType==3){this.r.move("character",j)}else{this.r.moveToElementText(u)}if(q.nodeType==3){f.move("character",t)}else{f.moveToElementText(q)}this.r.setEndPoint("EndToEnd",f)}try{this.r.select()}catch(q){}if(f){f=null}};this.dump=function(){this.rte.log("collapsed: "+this.collapsed);this.rte.log("startContainer: "+(this.startContainer?this.startContainer.nodeName:"non"));this.rte.log("startOffset: "+this.startOffset);this.rte.log("endContainer: "+(this.endContainer?this.endContainer.nodeName:"none"));this.rte.log("endOffset: "+this.endOffset)}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.about=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.active=true;this.command=function(){var g,h,f;g={rtl:c.rtl,submit:function(j,k){k.close()},dialog:{width:560,title:this.rte.i18n("About this software"),buttons:{Ok:function(){a(this).dialog("destroy")}}}};f='<div class="elrte-logo"></div><h3>'+this.rte.i18n("About elRTE")+'</h3><br clear="all"/><div class="elrte-ver">'+this.rte.i18n("Version")+": "+this.rte.version+" ("+this.rte.build+')</div><div class="elrte-ver">jQuery: '+a("<div/>").jquery+'</div><div class="elrte-ver">jQueryUI: '+a.ui.version+'</div><div class="elrte-ver">'+this.rte.i18n("Licence")+": BSD Licence</div><p>"+this.rte.i18n("elRTE is an open-source JavaScript based WYSIWYG HTML-editor.")+"<br/>"+this.rte.i18n("Main goal of the editor - simplify work with text and formating (HTML) on sites, blogs, forums and other online services.")+"<br/>"+this.rte.i18n("You can use it in any commercial or non-commercial projects.")+"</p><h4>"+this.rte.i18n("Authors")+'</h4><table class="elrte-authors"><tr><td>Dmitry (dio) Levashov &lt;dio@std42.ru&gt;</td><td>'+this.rte.i18n("Chief developer")+"</td></tr><tr><td>Troex Nevelin &lt;troex@fury.scancode.ru&gt;</td><td>"+this.rte.i18n("Developer, tech support")+"</td></tr><tr><td>Valentin Razumnyh &lt;content@std42.ru&gt;</td><td>"+this.rte.i18n("Interface designer")+"</td></tr><tr><td>Evgeny eSabbath &lt;sabbath.codemg@gmail.com&gt;</td><td>"+this.rte.i18n("Developer")+"</td></tr><tr><td>Andrzej Borowicz &lt;eltre@borowicz.info&gt;</td><td>"+this.rte.i18n("Polish localization")+"</td></tr><tr><td>Artem Vasiliev</td><td>"+this.rte.i18n("Ukranian localization")+"</td></tr><tr><td>Francois Mazerolle &lt;fmaz008@gmail.com&gt;</td><td>"+this.rte.i18n("French localization")+"</td></tr><tr><td>Kurt Aerts</td><td>"+this.rte.i18n("Dutch localization")+"</td></tr><tr><td>Michal Marek &lt;fmich.marek@gmail.com&gt;</td><td>"+this.rte.i18n("Czech localization")+"</td></tr><tr><td>Ricardo Obregón &lt;robregonm@gmail.com&gt;</td><td>"+this.rte.i18n("Spanish localization")+"</td></tr><tr><td>Saleh Souzanchi &lt;saleh.souzanchi@gmail.com&gt;</td><td>"+this.rte.i18n("Persian (farsi) localization")+"</td></tr><tr><td>Tawfek Daghistani &lt;tawfekov@gmail.com&gt;</td><td>"+this.rte.i18n("Arabic localization")+", "+this.rte.i18n("RTL support")+"</td></tr><tr><td>Tad &lt;tad0616@gmail.com&gt;</td><td>"+this.rte.i18n("Traditional Chinese localization")+"</td></tr><tr><td>Tomoaki Yoshida &lt;info@yoshida-studio.jp&gt;</td><td>"+this.rte.i18n("Japanese localization")+"</td></tr><tr><td>Uldis Plotiņš &lt;uldis.plotins@gmail.com&gt;</td><td>"+this.rte.i18n("Latvian localization")+"</td></tr><tr><td>Vasiliy Razumnyh &lt;rvn@std42.ru&gt;</td><td>"+this.rte.i18n("German localization")+"</td></tr><tr><td>Viktor Tamas &lt;tamas.viktor@totalstudio.hu&gt;</td><td>"+this.rte.i18n("Hungarian localization")+"</td></tr><tr><td>Ugo Punzolo, &lt;sadraczerouno@gmail.com&gt;</td><td>"+this.rte.i18n("Italian localization")+'</td></tr></table><div class="elrte-copy">Copyright &copy; 2009-2010, <a href="http://www.std42.ru">Studio 42 LTD</a></div><div class="elrte-copy">'+this.rte.i18n("For more information about this software visit the")+' <a href="http://elrte.org">'+this.rte.i18n("elRTE website")+'.</a></div><div class="elrte-copy">Twitter: <a href="http://twitter.com/elrte_elfinder">elrte_elfinder</a></div>';h=new elDialogForm(g);h.append(f);h.open()};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.anchor=function(f,c){this.constructor.prototype.constructor.call(this,f,c);this.input=a('<input type="text" />').attr("name","anchor").attr("size","16");var b=this;this.command=function(){var g={rtl:this.rte.rtl,submit:function(j,k){j.stopPropagation();j.preventDefault();k.close();b.set()},dialog:{title:this.rte.i18n("Bookmark")}};this.anchor=this.rte.dom.selfOrParentAnchor(this.rte.selection.getEnd())||f.dom.create("a");!this.rte.selection.collapsed()&&this.rte.selection.collapse(false);this.input.val(a(this.anchor).addClass("el-rte-anchor").attr("name"));this.rte.selection.saveIERange();var h=new elDialogForm(g);h.append([this.rte.i18n("Bookmark name"),this.input],null,true).open();setTimeout(function(){b.input.focus()},20)};this.update=function(){var g=this.rte.selection.getNode();if(this.rte.dom.selfOrParentLink(g)){this.domElem.addClass("disabled")}else{if(this.rte.dom.selfOrParentAnchor(g)){this.domElem.removeClass("disabled").addClass("active")}else{this.domElem.removeClass("disabled").removeClass("active")}}};this.set=function(){var g=a.trim(this.input.val());if(g){this.rte.history.add();if(!this.anchor.parentNode){this.rte.selection.insertHtml('<a name="'+g+'" title="'+this.rte.i18n("Bookmark")+": "+g+'" class="el-rte-anchor"></a>')}else{this.anchor.name=g;this.anchor.title=this.rte.i18n("Bookmark")+": "+g}}else{if(this.anchor.parentNode){this.rte.history.add();this.anchor.parentNode.removeChild(this.anchor)}}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.blockquote=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.command=function(){var g,f;this.rte.history.add();if(this.rte.selection.collapsed()&&(g=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^BLOCKQUOTE$/))){a(g).replaceWith(a(g).html())}else{f=this.rte.selection.selected({wrap:"all",tag:"blockquote"});f.length&&this.rte.selection.select(f[0],f[f.length-1])}this.rte.ui.update(true)};this.update=function(){if(this.rte.selection.collapsed()){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^BLOCKQUOTE$/)){this.domElem.removeClass("disabled").addClass("active")}else{this.domElem.addClass("disabled").removeClass("active")}}else{this.domElem.removeClass("disabled active")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.copy=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.command=function(){if(this.rte.browser.mozilla){try{this.rte.doc.execCommand(this.name,false,null)}catch(h){var f=" Ctl + C";if(this.name=="cut"){f=" Ctl + X"}else{if(this.name=="paste"){f=" Ctl + V"}}var g={dialog:{title:this.rte.i18n("Warning"),buttons:{Ok:function(){a(this).dialog("close")}}}};var j=new elDialogForm(g);j.append(this.rte.i18n("This operation is disabled in your browser on security reason. Use shortcut instead.")+": "+f).open()}}else{this.constructor.prototype.command.call(this)}}};elRTE.prototype.ui.prototype.buttons.cut=elRTE.prototype.ui.prototype.buttons.copy;elRTE.prototype.ui.prototype.buttons.paste=elRTE.prototype.ui.prototype.buttons.copy})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.css=function(f,c){var b=this;this.constructor.prototype.constructor.call(this,f,c);this.cssStyle=a('<input type="text" size="42" name="style" />');this.cssClass=a('<input type="text" size="42" name="class" />');this.command=function(){var j=this.node(),g;this.rte.selection.saveIERange();if(j){var g={submit:function(k,o){k.stopPropagation();k.preventDefault();o.close();b.set()},dialog:{title:this.rte.i18n("Style"),width:450,resizable:true,modal:true}};this.cssStyle.val(a(j).attr("style"));this.cssClass.val(a(j).attr("class"));var h=new elDialogForm(g);h.append([this.rte.i18n("Css style"),this.cssStyle],null,true);h.append([this.rte.i18n("Css class"),this.cssClass],null,true).open();setTimeout(function(){b.cssStyle.focus()},20)}};this.set=function(){var g=this.node();this.rte.selection.restoreIERange();if(g){a(g).attr("style",this.cssStyle.val());a(g).attr("class",this.cssClass.val());this.rte.ui.update()}};this.node=function(){var g=this.rte.selection.getNode();if(g.nodeType==3){g=g.parentNode}return g.nodeType==1&&g.nodeName!="BODY"?g:null};this.update=function(){this.domElem.toggleClass("disabled",this.node()?false:true)}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.rtl=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.command=function(){var h=this.rte.selection.getNode(),g=this;if(a(h).attr("dir")=="rtl"||a(h).parents('[dir="rtl"]').length||a(h).find('[dir="rtl"]').length){a(h).removeAttr("dir");a(h).parents('[dir="rtl"]').removeAttr("dir");a(h).find('[dir="rtl"]').removeAttr("dir")}else{if(this.rte.dom.is(h,"textNodes")&&this.rte.dom.is(h,"block")){a(h).attr("dir","rtl")}else{a.each(this.rte.dom.parents(h,"textNodes"),function(j,k){if(g.rte.dom.is(k,"block")){a(k).attr("dir","rtl");return false}})}}this.rte.ui.update()};this.update=function(){var g=this.rte.selection.getNode();this.domElem.removeClass("disabled");if(a(g).attr("dir")=="rtl"||a(g).parents('[dir="rtl"]').length||a(g).find('[dir="rtl"]').length){this.domElem.addClass("active")}else{this.domElem.removeClass("active")}}};elRTE.prototype.ui.prototype.buttons.ltr=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.command=function(){var h=this.rte.selection.getNode(),g=this;if(a(h).attr("dir")=="ltr"||a(h).parents('[dir="ltr"]').length||a(h).find('[dir="ltr"]').length){a(h).removeAttr("dir");a(h).parents('[dir="ltr"]').removeAttr("dir");a(h).find('[dir="ltr"]').removeAttr("dir")}else{if(this.rte.dom.is(h,"textNodes")&&this.rte.dom.is(h,"block")){a(h).attr("dir","ltr")}else{a.each(this.rte.dom.parents(h,"textNodes"),function(j,k){if(g.rte.dom.is(k,"block")){a(k).attr("dir","ltr");return false}})}}this.rte.ui.update()};this.update=function(){var g=this.rte.selection.getNode();this.domElem.removeClass("disabled");if(a(g).attr("dir")=="ltr"||a(g).parents('[dir="ltr"]').length||a(g).find('[dir="ltr"]').length){this.domElem.addClass("active")}else{this.domElem.removeClass("active")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.div=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.command=function(){var g,f;this.rte.history.add();if(this.rte.selection.collapsed()){g=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^DIV$/);if(g){a(g).replaceWith(a(g).html())}}else{f=this.rte.selection.selected({wrap:"all",tag:"div"});f.length&&this.rte.selection.select(f[0],f[f.length-1])}this.rte.ui.update(true)};this.update=function(){if(this.rte.selection.collapsed()){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^DIV$/)){this.domElem.removeClass("disabled").addClass("active")}else{this.domElem.addClass("disabled active")}}else{this.domElem.removeClass("disabled active")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.docstructure=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.command=function(){this.domElem.toggleClass("active");a(this.rte.doc.body).toggleClass("el-rte-structure")};this.command();this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.elfinder=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.command=function(){if(b.rte.options.fmAllow&&typeof(b.rte.options.fmOpen)=="function"){b.rte.options.fmOpen(function(g){b.rte.log(g)})}};this.update=function(){if(b.rte.options.fmAllow&&typeof(b.rte.options.fmOpen)=="function"){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.flash=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.swf=null;this.placeholder=null;this.src={url:a('<input type="text" name="url" />').css("width","99%"),type:a('<select name="type"/>').append('<option value="application/x-shockwave-flash">Flash</option>').append('<option value="video/quicktime">Quicktime movie</option>').append('<option value="application/x-mplayer2">Windows media</option>'),width:a('<input type="text" />').attr("size",5).css("text-align","right"),height:a('<input type="text" />').attr("size",5).css("text-align","right"),wmode:a("<select />").append(a("<option />").val("").text(this.rte.i18n("Not set","dialogs"))).append(a("<option />").val("transparent").text(this.rte.i18n("Transparent"))),align:a("<select />").append(a("<option />").val("").text(this.rte.i18n("Not set","dialogs"))).append(a("<option />").val("left").text(this.rte.i18n("Left"))).append(a("<option />").val("right").text(this.rte.i18n("Right"))).append(a("<option />").val("top").text(this.rte.i18n("Top"))).append(a("<option />").val("text-top").text(this.rte.i18n("Text top"))).append(a("<option />").val("middle").text(this.rte.i18n("middle"))).append(a("<option />").val("baseline").text(this.rte.i18n("Baseline"))).append(a("<option />").val("bottom").text(this.rte.i18n("Bottom"))).append(a("<option />").val("text-bottom").text(this.rte.i18n("Text bottom"))),margin:a("<div />")};this.command=function(){var r=this.rte.selection.getEnd(),j,k="",B="",t="",v,z,x,A,q,C;this.rte.selection.saveIERange();this.src.margin.elPaddingInput({type:"margin"});this.placeholder=null;this.swf=null;if(a(r).hasClass("elrte-media")&&(A=a(r).attr("rel"))&&this.rte.filter.scripts[A]){this.placeholder=a(r);q=this.rte.filter.scripts[A];k="";if(q.embed&&q.embed.src){k=q.embed.src}if(q.params&&q.params.length){l=q.params.length;while(l--){if(q.params[l].name=="src"||q.params[l].name=="movie"){k=q.params[l].value}}}if(q.embed){B=q.embed.width||parseInt(q.embed.style.width)||"";t=q.embed.height||parseInt(q.embed.style.height)||"";C=q.embed.wmode||""}else{if(q.obj){B=q.obj.width||parseInt(q.obj.style.width)||"";t=q.obj.height||parseInt(q.obj.style.height)||"";C=q.obj.wmode||""}}if(q.obj){v=q.obj.style["float"]||"";z=q.obj.style["vertical-align"]||""}else{if(q.embed){v=q.embed.style["float"]||"";z=q.embed.style["vertical-align"]||""}}this.src.margin.val(r);this.src.type.val(q.embed?q.embed.type:"")}if(a(r).hasClass("elrte-swf-placeholder")){this.placeholder=a(r);k=a(r).attr("rel");B=parseInt(a(r).css("width"))||"";t=parseInt(a(r).css("height"))||"";v=a(r).css("float");z=a(r).css("vertical-align");this.src.margin.val(r);this.src.wmode.val(a(r).attr("wmode"))}this.src.url.val(k);this.src.width.val(B);this.src.height.val(t);this.src.align.val(v||z);this.src.wmode.val(C);var j={rtl:this.rte.rtl,submit:function(h,o){h.stopPropagation();h.preventDefault();b.set();o.close()},dialog:{width:580,position:"top",title:this.rte.i18n("Flash")}};var x=new elDialogForm(j);if(this.rte.options.fmAllow&&this.rte.options.fmOpen){var g=a("<span />").append(this.src.url.css("width","85%")).append(a("<span />").addClass("ui-state-default ui-corner-all").css({"float":"right","margin-right":"3px"}).attr("title",b.rte.i18n("Open file manger")).append(a("<span />").addClass("ui-icon ui-icon-folder-open")).click(function(){b.rte.options.fmOpen(function(h){b.src.url.val(h).change()})}).hover(function(){a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}))}else{var g=this.src.url}x.append([this.rte.i18n("URL"),g],null,true);x.append([this.rte.i18n("Type"),this.src.type],null,true);x.append([this.rte.i18n("Size"),a("<span />").append(this.src.width).append(" x ").append(this.src.height).append(" px")],null,true);x.append([this.rte.i18n("Wmode"),this.src.wmode],null,true);x.append([this.rte.i18n("Alignment"),this.src.align],null,true);x.append([this.rte.i18n("Margins"),this.src.margin],null,true);x.open();setTimeout(function(){b.src.url.focus()},100);var u=a("<fieldset />").append(a("<legend />").text(this.rte.i18n("Preview")));x.append(u,"main");var p=document.createElement("iframe");a(p).attr("src","#").addClass("el-rte-preview").appendTo(u);html=this.rte.options.doctype+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style="padding:0;margin:0;font-size:9px"> Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin</body></html>';p.contentWindow.document.open();p.contentWindow.document.write(html);p.contentWindow.document.close();this.frame=p.contentWindow.document;this.preview=a(p.contentWindow.document.body);this.src.type.change(function(){b.src.url.change()});this.src.width.change(function(){if(b.swf){var h=parseInt(a(this).val())||"";a(this).val(h);b.swf.css("width",h);b.swf.children("embed").css("width",h)}else{a(this).val("")}});this.src.height.change(function(){if(b.swf){var o=parseInt(a(this).val())||"";a(this).val(o);b.swf.css("height",o);b.swf.children("embed").css("height",o)}else{a(this).val("")}});this.src.wmode.change(function(){if(b.swf){var h=a(this).val();if(h){b.swf.attr("wmode",h);b.swf.children("embed").attr("wmode",h)}else{b.swf.removeAttr("wmode");b.swf.children("embed").removeAttr("wmode")}}});this.src.align.change(function(){var h=a(this).val(),o=h=="left"||h=="right";if(b.swf){b.swf.css({"float":o?h:"","vertical-align":o?"":h})}else{a(this).val("")}});this.src.margin.change(function(){if(b.swf){var h=b.src.margin.val();if(h.css){b.swf.css("margin",h.css)}else{b.swf.css("margin-top",h.top);b.swf.css("margin-right",h.right);b.swf.css("margin-bottom",h.bottom);b.swf.css("margin-left",h.left)}}});this.src.url.change(function(){var h=b.rte.utils.absoluteURL(a(this).val()),o,w;if(h){o=b.rte.utils.mediaInfo(b.src.type.val());if(!o){o=b.rte.util.mediaInfo("application/x-shockwave-flash")}w='<object classid="'+o.classid+'" codebase="'+o.codebase+'"><param name="src" value="'+h+'" /><embed quality="high" src="'+h+'" type="'+o.type+'"></object>';b.preview.children("object").remove().end().prepend(w);b.swf=b.preview.children("object").eq(0)}else{if(b.swf){b.swf.remove();b.swf=null}}b.src.width.trigger("change");b.src.height.trigger("change");b.src.align.trigger("change")}).trigger("change")};this.set=function(){b.swf=null;var g=this.rte.utils.absoluteURL(this.src.url.val()),B=parseInt(this.src.width.val())||"",t=parseInt(this.src.height.val())||"",C=this.src.wmode.val(),z=this.src.align.val(),v=z=="left"||z=="right"?z:"",A=this.placeholder?this.placeholder.attr("rel"):"",p,k,x,q=this.src.margin.val(),r;if(!g){if(this.placeholder){this.placeholder.remove();delete this.rte.filter.scripts[A]}}else{i=b.rte.utils.mediaInfo(b.src.type.val());if(!i){i=b.rte.util.mediaInfo("application/x-shockwave-flash")}x=this.rte.filter.videoHostRegExp.test(g)?g.replace(this.rte.filter.videoHostRegExp,"$2"):i.type.replace(/^\w+\/(.+)/,"$1");p={obj:{classid:i.classid[0],codebase:i.codebase,style:{}},params:[{name:"src",value:g}],embed:{src:g,type:i.type,quality:"high",wmode:C,style:{}}};if(B){p.obj.width=B;p.embed.width=B}if(t){p.obj.height=t;p.embed.height=t}if(v){p.obj.style["float"]=v}else{if(z){p.obj.style["vertical-align"]=z}}if(q.css){r={margin:q.css}}else{r={"margin-top":q.top,"margin-right":q.right,"margin-bottom":q.bottom,"margin-left":q.left}}p.obj.style=a.extend({},p.obj.style,r);if(this.placeholder&&A){k=this.rte.filter.scripts[A]||{};p=a.extend(true,k,p);delete p.obj.style.width;delete p.obj.style.height;delete p.embed.style.width;delete p.embed.style.height;this.rte.filter.scripts[A]=p;this.placeholder.removeAttr("class")}else{var j="media"+Math.random().toString().substring(2);this.rte.filter.scripts[j]=p;this.placeholder=a(this.rte.dom.create("img")).attr("rel",j).attr("src",this.rte.filter.url+"pixel.gif");var u=true}this.placeholder.attr("title",this.rte.utils.encode(g)).attr("width",B||150).attr("height",t||100).addClass("elrte-protected elrte-media elrte-media-"+x).css(p.obj.style);if(v){this.placeholder.css("float",v).css("vertical-align","")}else{if(z){this.placeholder.css("float","").css("vertical-align",z)}else{this.placeholder.css("float","").css("vertical-align","")}}if(u){this.rte.window.focus();this.rte.selection.restoreIERange();this.rte.selection.insertNode(this.placeholder.get(0))}}};this.update=function(){this.domElem.removeClass("disabled");var g=this.rte.selection.getNode();this.domElem.toggleClass("active",g&&g.nodeName=="IMG"&&a(g).hasClass("elrte-media"))}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.fontname=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;var g={tpl:'<span style="font-family:%val">%label</span>',select:function(h){b.set(h)},src:{"":this.rte.i18n("Font"),"andale mono,sans-serif":"Andale Mono","arial,helvetica,sans-serif":"Arial","arial black,gadget,sans-serif":"Arial Black","book antiqua,palatino,sans-serif":"Book Antiqua","comic sans ms,cursive":"Comic Sans MS","courier new,courier,monospace":"Courier New","georgia,palatino,serif":"Georgia","helvetica,sans-serif":"Helvetica","impact,sans-serif":"Impact","lucida console,monaco,monospace":"Lucida console","lucida sans unicode,lucida grande,sans-serif":"Lucida grande","tahoma,sans-serif":"Tahoma","times new roman,times,serif":"Times New Roman","trebuchet ms,lucida grande,verdana,sans-serif":"Trebuchet MS","verdana,geneva,sans-serif":"Verdana"}};this.select=this.domElem.elSelect(g);this.command=function(){};this.set=function(j){this.rte.history.add();var h=this.rte.selection.selected({filter:"textContainsNodes"});a.each(h,function(){$this=/^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(this.nodeName)?a(this).find("td,th"):a(this);a(this).css("font-family",j).find("[style]").css("font-family","")});this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled");var j=this.rte.selection.getNode();if(j.nodeType!=1){j=j.parentNode}var h=a(j).css("font-family");h=h?h.toString().toLowerCase().replace(/,\s+/g,",").replace(/'|"/g,""):"";this.select.val(g.src[h]?h:"")}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.fontsize=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;var g={labelTpl:"%label",tpl:'<span style="font-size:%val;line-height:1.2em">%label</span>',select:function(h){b.set(h)},src:{"":this.rte.i18n("Font size"),"xx-small":this.rte.i18n("Small (8pt)"),"x-small":this.rte.i18n("Small (10px)"),small:this.rte.i18n("Small (12pt)"),medium:this.rte.i18n("Normal (14pt)"),large:this.rte.i18n("Large (18pt)"),"x-large":this.rte.i18n("Large (24pt)"),"xx-large":this.rte.i18n("Large (36pt)")}};this.select=this.domElem.elSelect(g);this.command=function(){};this.set=function(j){this.rte.history.add();var h=this.rte.selection.selected({filter:"textContainsNodes"});a.each(h,function(){$this=/^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(this.nodeName)?a(this).find("td,th"):a(this);$this.css("font-size",j).find("[style]").css("font-size","")});this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled");var h=this.rte.selection.getNode();this.select.val((m=this.rte.dom.attr(h,"style").match(/font-size:\s*([^;]+)/i))?m[1]:"")}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.forecolor=function(f,c){var b=this;this.constructor.prototype.constructor.call(this,f,c);var g={"class":"",color:this.defaultColor,update:function(h){b.indicator.css("background-color",h)},change:function(h){b.set(h)}};this.defaultColor=this.name=="forecolor"?"#000000":"#ffffff";this.picker=this.domElem.elColorPicker(g);this.indicator=a("<div />").addClass("color-indicator").prependTo(this.domElem);this.command=function(){};this.set=function(k){if(!this.rte.selection.collapsed()){this.rte.history.add();var h=this.rte.selection.selected({collapse:false,wrap:"text"}),j=this.name=="forecolor"?"color":"background-color";a.each(h,function(){if(/^(THEAD|TBODY|TFOOT|TR)$/.test(this.nodeName)){a(this).find("td,th").each(function(){a(this).css(j,k).find("*").css(j,"")})}else{a(this).css(j,k).find("*").css(j,"")}});this.rte.ui.update(true)}};this.update=function(){this.domElem.removeClass("disabled");var h=this.rte.selection.getNode();this.picker.val(this.rte.utils.rgb2hex(a(h.nodeType!=1?h.parentNode:h).css(this.name=="forecolor"?"color":"background-color"))||this.defaultColor)}};elRTE.prototype.ui.prototype.buttons.hilitecolor=elRTE.prototype.ui.prototype.buttons.forecolor})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.formatblock=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var h=this.rte.browser.msie?function(j){b.val=j;b.constructor.prototype.command.call(b)}:function(j){b.ieCommand(j)};var b=this;var g={labelTpl:"%label",tpls:{"":"%label"},select:function(j){b.formatBlock(j)},src:{span:this.rte.i18n("Format"),h1:this.rte.i18n("Heading 1"),h2:this.rte.i18n("Heading 2"),h3:this.rte.i18n("Heading 3"),h4:this.rte.i18n("Heading 4"),h5:this.rte.i18n("Heading 5"),h6:this.rte.i18n("Heading 6"),p:this.rte.i18n("Paragraph"),address:this.rte.i18n("Address"),pre:this.rte.i18n("Preformatted"),div:this.rte.i18n("Normal (DIV)")}};this.select=this.domElem.elSelect(g);this.command=function(){};this.formatBlock=function(u){function t(z,v){function x(A){a(A).find("h1,h2,h3,h4,h5,h6,p,address,pre").each(function(){a(this).replaceWith(a(this).html())});return A}if(/^(LI|DT|DD|TD|TH|CAPTION)$/.test(z.nodeName)){!b.rte.dom.isEmpty(z)&&b.rte.dom.wrapContents(x(z),v)}else{if(/^(UL|OL|DL|TABLE)$/.test(z.nodeName)){b.rte.dom.wrap(z,v)}else{!b.rte.dom.isEmpty(z)&&a(x(z)).replaceWith(a(b.rte.dom.create(v)).html(a(z).html()))}}}this.rte.history.add();var w=u.toUpperCase(),p,o,r,q=this.rte.selection.collapsed(),k=this.rte.selection.getBookmark(),j=this.rte.selection.selected({collapsed:true,blocks:true,filter:"textContainsNodes",wrap:"inline",tag:"span"});l=j.length,s=a(j[0]).prev(),e=a(j[j.length-1]).next();while(l--){o=j[l];r=a(o);if(w=="DIV"||w=="SPAN"){if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(o.nodeName)){r.replaceWith(a(this.rte.dom.create("div")).html(r.html()||""))}}else{if(/^(THEAD|TBODY|TFOOT|TR)$/.test(o.nodeName)){r.find("td,th").each(function(){t(this,w)})}else{if(o.nodeName!=w){t(o,w)}}}}this.rte.selection.moveToBookmark(k);this.rte.ui.update(true)};this.update=function(){this.domElem.removeClass("disabled");var j=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(H[1-6]|P|ADDRESS|PRE)$/);this.select.val(j?j.nodeName.toLowerCase():"span")}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.fullscreen=function(g,f){var b=this;this.constructor.prototype.constructor.call(this,g,f);this.active=true;this.editor=g.editor;this.wz=g.workzone;this.height=0;this.delta=0;this._class="el-fullscreen";setTimeout(function(){b.height=b.wz.height();b.delta=b.editor.outerHeight()-b.height},50);function c(){b.wz.height(a(window).height()-b.delta);b.rte.updateHeight()}this.command=function(){var B=a(window),u=this.editor,k=u.parents().filter(function(h,p){return !/^(html|body)$/i.test(p.nodeName)&&a(p).css("position")=="relative"}),q=this.wz,z=this._class,t=u.hasClass(z),j=this.rte,C=this.rte.selection,o=a.browser.mozilla,A,r;function x(){if(o){A=C.getBookmark()}}function v(){if(o){b.wz.children().toggle();b.rte.source.focus();b.wz.children().toggle();C.moveToBookmark(A)}}x();k.css("position",t?"relative":"static");if(t){u.removeClass(z);q.height(this.height);B.unbind("resize",c);this.domElem.removeClass("active")}else{u.addClass(z).removeAttr("style");q.height(B.height()-this.delta).css("width","100%");B.bind("resize",c);this.domElem.addClass("active")}j.updateHeight();j.resizable(t);v()};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.horizontalrule=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.src={width:a('<input type="text" />').attr({name:"width",size:4}).css("text-align","right"),wunit:a("<select />").attr("name","wunit").append(a("<option />").val("%").text("%")).append(a("<option />").val("px").text("px")).val("%"),height:a('<input type="text" />').attr({name:"height",size:4}).css("text-align","right"),bg:a("<div />"),border:a("<div />"),"class":a('<input type="text" />').css("width","100%"),style:a('<input type="text" />').css("width","100%")};this.command=function(){this.src.bg.elColorPicker({palettePosition:"outer","class":"el-colorpicker ui-icon ui-icon-pencil"});var k=this.rte.selection.getEnd();this.hr=k.nodeName=="HR"?a(k):a(f.doc.createElement("hr")).css({width:"100%",height:"1px"});this.src.border.elBorderSelect({styleHeight:73,value:this.hr});var g=this.hr.css("width")||this.hr.attr("width");this.src.width.val(parseInt(g)||100);this.src.wunit.val(g.indexOf("px")!=-1?"px":"%");this.src.height.val(this.rte.utils.toPixels(this.hr.css("height")||this.hr.attr("height"))||1);this.src.bg.val(this.rte.utils.color2Hex(this.hr.css("background-color")));this.src["class"].val(this.rte.dom.attr(this.hr,"class"));this.src.style.val(this.rte.dom.attr(this.hr,"style"));var h={rtl:this.rte.rtl,submit:function(o,p){o.stopPropagation();o.preventDefault();b.set();p.close()},dialog:{title:this.rte.i18n("Horizontal rule")}};var j=new elDialogForm(h);j.append([this.rte.i18n("Width"),a("<span />").append(this.src.width).append(this.src.wunit)],null,true).append([this.rte.i18n("Height"),a("<span />").append(this.src.height).append(" px")],null,true).append([this.rte.i18n("Border"),this.src.border],null,true).append([this.rte.i18n("Background"),this.src.bg],null,true).append([this.rte.i18n("Css class"),this.src["class"]],null,true).append([this.rte.i18n("Css style"),this.src.style],null,true).open()};this.update=function(){this.domElem.removeClass("disabled");if(this.rte.selection.getEnd().nodeName=="HR"){this.domElem.addClass("active")}else{this.domElem.removeClass("active")}};this.set=function(){this.rte.history.add();!this.hr.parentNode&&this.rte.selection.insertNode(this.hr.get(0));var h={noshade:true,style:this.src.style.val()};var g=this.src.border.val();var j={width:(parseInt(this.src.width.val())||100)+this.src.wunit.val(),height:parseInt(this.src.height.val())||1,"background-color":this.src.bg.val(),border:g.width&&g.style?g.width+" "+g.style+" "+g.color:""};this.hr.removeAttr("class").removeAttr("style").removeAttr("width").removeAttr("height").removeAttr("align").attr(h).css(j);if(this.src["class"].val()){this.hr.attr("class",this.src["class"].val())}this.rte.ui.update()}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.image=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.img=null;this.init=function(){this.labels={main:"Properies",link:"Link",adv:"Advanced",events:"Events",id:"ID","class":"Css class",style:"Css style",longdesc:"Detail description URL",href:"URL",target:"Open in",title:"Title"};this.src={main:{src:a('<input type="text" />').css("width","100%"),title:a('<input type="text" />').css("width","100%"),alt:a('<input type="text" />').css("width","100%"),width:a('<input type="text" />').attr("size",5).css("text-align","right"),height:a('<input type="text" />').attr("size",5).css("text-align","right"),margin:a("<div />"),align:a("<select />").css("width","100%").append(a("<option />").val("").text(this.rte.i18n("Not set","dialogs"))).append(a("<option />").val("left").text(this.rte.i18n("Left"))).append(a("<option />").val("right").text(this.rte.i18n("Right"))).append(a("<option />").val("top").text(this.rte.i18n("Top"))).append(a("<option />").val("text-top").text(this.rte.i18n("Text top"))).append(a("<option />").val("middle").text(this.rte.i18n("middle"))).append(a("<option />").val("baseline").text(this.rte.i18n("Baseline"))).append(a("<option />").val("bottom").text(this.rte.i18n("Bottom"))).append(a("<option />").val("text-bottom").text(this.rte.i18n("Text bottom"))),border:a("<div />")},adv:{id:a('<input type="text" />').css("width","100%"),"class":a('<input type="text" />').css("width","100%"),style:a('<input type="text" />').css("width","100%"),longdesc:a('<input type="text" />').css("width","100%")},events:{}};a.each(["onblur","onfocus","onclick","ondblclick","onmousedown","onmouseup","onmouseover","onmouseout","onmouseleave","onkeydown","onkeypress","onkeyup"],function(){b.src.events[this]=a('<input type="text" />').css("width","100%")});a.each(b.src,function(){for(var g in this){this[g].attr("name",g)}})};this.command=function(){!this.src&&this.init();this.rte.selection.saveIERange();this.src.main.border.elBorderSelect({change:function(){b.updateImg()},name:"border"});this.src.main.margin.elPaddingInput({type:"margin"});this.cleanValues();this.src.main.src.val("");var o=this.rte.selection.getEnd(),u=a(o);this.preview=null;this.prevImg=null;this.link=null;if(o.nodeName=="IMG"&&!u.hasClass("elrte-protected")){this.img=a(o)}else{this.img=a(this.rte.doc.createElement("img"))}var h={rtl:this.rte.rtl,submit:function(w,x){w.stopPropagation();w.preventDefault();b.set();x.close()},dialog:{width:570,position:"top",title:this.rte.i18n("Image")}};var t=new elDialogForm(h);if(this.rte.options.fmAllow&&this.rte.options.fmOpen){var g=a("<span />").append(this.src.main.src.css("width","88%")).append(a("<span />").addClass("ui-state-default ui-corner-all").css({"float":"right","margin-right":"3px"}).attr("title",b.rte.i18n("Open file manger")).append(a("<span />").addClass("ui-icon ui-icon-folder-open")).click(function(){b.rte.options.fmOpen(function(w){b.src.main.src.val(w).change()})}).hover(function(){a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}))}else{var g=this.src.main.src}t.tab("main",this.rte.i18n("Properies")).append([this.rte.i18n("Image URL"),g],"main",true).append([this.rte.i18n("Title"),this.src.main.title],"main",true).append([this.rte.i18n("Alt text"),this.src.main.alt],"main",true).append([this.rte.i18n("Size"),a("<span />").append(this.src.main.width).append(" x ").append(this.src.main.height).append(" px")],"main",true).append([this.rte.i18n("Alignment"),this.src.main.align],"main",true).append([this.rte.i18n("Margins"),this.src.main.margin],"main",true).append([this.rte.i18n("Border"),this.src.main.border],"main",true);for(var p in this.src){if(p!="main"){t.tab(p,this.rte.i18n(this.labels[p]));for(var j in this.src[p]){var q=this.rte.i18n(this.labels[j]?this.labels[j]:j);if(p=="events"){this.src[p][j].val(this.rte.utils.trimEventCallback(this.img.attr(j)))}else{if(p=="link"){if(this.link){this.src[p][j].val(j=="href"?this.rte.utils.absoluteURL(this.link.attr(j)):this.link.attr(j))}}else{this.src[p][j].val(this.img.attr(j)||"")}}t.append([q,this.src[p][j]],p,true)}}}t.open();var r=a("<fieldset />").append(a("<legend />").text(this.rte.i18n("Preview")));t.append(r,"main");var k=document.createElement("iframe");a(k).attr("src","#").addClass("el-rte-preview").appendTo(r);html=this.rte.options.doctype+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style="padding:0;margin:0;font-size:9px"> </body></html>';k.contentWindow.document.open();k.contentWindow.document.write(html);k.contentWindow.document.close();this.frame=k.contentWindow.document;this.preview=a(k.contentWindow.document.body).text("Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin");if(this.img.attr("src")){this.prevImg=a(this.frame.createElement("img")).attr("src",this.rte.utils.absoluteURL(this.img.attr("src")));this.prevImg.attr("width",this.img.attr("width")).attr("height",this.img.attr("height")).attr("title",this.img.attr("title")||"").attr("alt",this.img.attr("alt")||"").attr("style",this.img.attr("style")||"");for(var o in this.src.adv){var v=this.img.attr(o);if(v){this.prevImg.attr(o,v)}}this.preview.prepend(this.prevImg);this.updateValues()}a.each(this.src,function(){a.each(this,function(){if(this===b.src.main.src){this.bind("change",function(){b.updatePreview()})}else{if(this==b.src.main.width||this==b.src.main.height){this.bind("change",function(w){b.updateDimesions(w)})}else{this.bind("change",function(){b.updateImg()})}}})})};this.updateValues=function(){var g=this.prevImg.get(0);this.origW=this.prevImg.attr("width");this.origH=this.prevImg.attr("height");this.src.main.src.val(this.rte.dom.attr(g,"src"));this.src.main.title.val(this.rte.dom.attr(g,"title"));this.src.main.alt.val(this.rte.dom.attr(g,"alt"));this.src.main.width.val(this.origW);this.src.main.height.val(this.origH);this.src.adv["class"].val(this.rte.dom.attr(g,"class"));this.src.main.margin.val(this.prevImg);var h=this.prevImg.css("float");this.src.main.align.val(h=="left"||h=="right"?h:(this.prevImg.css("vertical-align")||""));this.src.main.border.val(this.prevImg);this.src.adv.style.val(this.rte.dom.attr(g,"style"))};this.cleanValues=function(){a.each(this.src,function(){a.each(this,function(){var g=a(this);if(g.attr("name")!="src"){g.val("")}})})};this.updateImg=function(){this.prevImg.attr({style:a.trim(this.src.adv.style.val()),title:a.trim(this.src.main.title.val()),alt:a.trim(this.src.main.alt.val()),width:parseInt(this.src.main.width.val()),height:parseInt(this.src.main.height.val())});var j=this.src.main.align.val();var k=j=="left"||j=="right"?j:"";var h=this.src.main.border.val();var g=this.src.main.margin.val();this.prevImg.css("float",k);this.prevImg.css("vertical-align",k?"":j);this.prevImg.css("border",a.trim(h.width+" "+h.style+" "+h.color));if(g.css){this.prevImg.css("margin",g.css)}else{this.prevImg.css("margin-top",g.top);this.prevImg.css("margin-right",g.right);this.prevImg.css("margin-bottom",g.bottom);this.prevImg.css("margin-left",g.left)}a.each([this.src.events,this.src.adv],function(){a.each(this,function(){var p=a(this);var q=p.attr("name");if(q!="style"){var o=a.trim(p.val());if(o){b.prevImg.attr(q,o)}else{b.prevImg.removeAttr(q)}}})})};this.updatePreview=function(){var h=this.prevImg?this.prevImg.attr("src"):"";var g=a.trim(this.src.main.src.val());if(!g||g!=h){if(this.prevImg){this.prevImg.remove();this.prevImg=null}this.cleanValues();if(g){this.prevImg=a(this.frame.createElement("img")).attr("src",this.rte.utils.absoluteURL(g)).bind("load",function(){b.updateValues()});this.preview.prepend(this.prevImg);b.updateValues()}}else{this.updateImg()}};this.updateDimesions=function(k){var g=parseInt(this.src.main.width.val())||0;var j=parseInt(this.src.main.height.val())||0;if(g>0&&j>0){if(k.currentTarget==this.src.main.width.get(0)){this.src.main.height.val(parseInt(g*this.origH/this.origW))}else{this.src.main.width.val(parseInt(j*this.origW/this.origH))}}else{this.src.main.width.val(this.origW);this.src.main.height.val(this.origH)}this.updateImg()};this.set=function(){this.rte.history.add();this.rte.selection.restoreIERange();if(!this.prevImg||!this.prevImg.attr("width")){this.img&&this.img.remove();this.link&&this.rte.doc.execCommand("unlink",false,null)}else{if(!this.img[0].parentNode){this.img=a(this.rte.doc.createElement("img"))}this.img.attr({src:this.rte.utils.absoluteURL(a.trim(this.src.main.src.val())),style:a.trim(this.rte.dom.attr(this.prevImg.get(0),"style")),title:a.trim(this.src.main.title.val()),alt:a.trim(this.src.main.alt.val()),width:parseInt(this.src.main.width.val()),height:parseInt(this.src.main.height.val())});for(var g in this.src.adv){if(g!="style"){var h=this.src.adv[g].val();if(h){this.img.attr(g,h)}else{this.img.removeAttr(g)}}}for(var g in this.src.events){var h=this.src.events[g].val();if(h){this.img.attr(g,h)}else{this.img.removeAttr(g)}}if(!this.img[0].parentNode){this.rte.selection.insertNode(this.img.get(0))}}this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled");var h=this.rte.selection.getEnd(),g=a(h);if(h.nodeName=="IMG"&&!g.hasClass("elrte-protected")){this.domElem.addClass("active")}else{this.domElem.removeClass("active")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.indent=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.command=function(){this.rte.history.add();var h=this.rte.selection.selected({collapsed:true,blocks:true,wrap:"inline",tag:"p"});function g(q){var o=/(IMG|HR|TABLE|EMBED|OBJECT)/.test(q.nodeName)?"margin-left":"padding-left";var p=b.rte.dom.attr(q,"style").indexOf(o)!=-1?parseInt(a(q).css(o))||0:0;a(q).css(o,p+40+"px")}for(var j=0;j<h.length;j++){if(/^(TABLE|THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(h[j].nodeName)){a(h[j]).find("td,th").each(function(){g(this)})}else{if(/^LI$/.test(h[j].nodeName)){var k=a(h[j]);a(this.rte.dom.create(h[j].parentNode.nodeName)).append(a(this.rte.dom.create("li")).html(k.html()||"")).appendTo(k.html("&nbsp;"))}else{g(h[j])}}}this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.justifyleft=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.align=this.name=="justifyfull"?"justify":this.name.replace("justify","");this.command=function(){var g=this.rte.selection.selected({collapsed:true,blocks:true,tag:"div"}),f=g.length;f&&this.rte.history.add();while(f--){this.rte.dom.filter(g[f],"textNodes")&&a(g[f]).css("text-align",this.align)}this.rte.ui.update()};this.update=function(){var f=this.rte.selection.getNode(),g=f.nodeName=="BODY"?f:this.rte.dom.selfOrParent(f,"textNodes")||(f.parentNode&&f.parentNode.nodeName=="BODY"?f.parentNode:null);if(g){this.domElem.removeClass("disabled").toggleClass("active",a(g).css("text-align")==this.align)}else{this.domElem.addClass("disabled")}}};elRTE.prototype.ui.prototype.buttons.justifycenter=elRTE.prototype.ui.prototype.buttons.justifyleft;elRTE.prototype.ui.prototype.buttons.justifyright=elRTE.prototype.ui.prototype.buttons.justifyleft;elRTE.prototype.ui.prototype.buttons.justifyfull=elRTE.prototype.ui.prototype.buttons.justifyleft})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.link=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.img=false;function g(){b.labels={id:"ID","class":"Css class",style:"Css style",dir:"Script direction",lang:"Language",charset:"Charset",type:"Target MIME type",rel:"Relationship page to target (rel)",rev:"Relationship target to page (rev)",tabindex:"Tab index",accesskey:"Access key"};b.src={main:{href:a('<input type="text" />'),title:a('<input type="text" />'),anchor:a("<select />").attr("name","anchor"),target:a("<select />").append(a("<option />").text(b.rte.i18n("In this window")).val("")).append(a("<option />").text(b.rte.i18n("In new window (_blank)")).val("_blank"))},popup:{use:a('<input type="checkbox />"'),url:a('<input type="text" />').val("http://"),name:a('<input type="text" />'),width:a('<input type="text" />').attr({size:6,title:b.rte.i18n("Width")}).css("text-align","right"),height:a('<input type="text" />').attr({size:6,title:b.rte.i18n("Height")}).css("text-align","right"),left:a('<input type="text" />').attr({size:6,title:b.rte.i18n("Left")}).css("text-align","right"),top:a('<input type="text" />').attr({size:6,title:b.rte.i18n("Top")}).css("text-align","right"),location:a('<input type="checkbox" />'),menubar:a('<input type="checkbox" />'),toolbar:a('<input type="checkbox" />'),scrollbars:a('<input type="checkbox" />'),status:a('<input type="checkbox" />'),resizable:a('<input type="checkbox" />'),dependent:a('<input type="checkbox" />'),retfalse:a('<input type="checkbox" />').attr("checked",true)},adv:{id:a('<input type="text" />'),"class":a('<input type="text" />'),style:a('<input type="text" />'),dir:a("<select />").append(a("<option />").text(b.rte.i18n("Not set")).val("")).append(a("<option />").text(b.rte.i18n("Left to right")).val("ltr")).append(a("<option />").text(b.rte.i18n("Right to left")).val("rtl")),lang:a('<input type="text" />'),charset:a('<input type="text" />'),type:a('<input type="text" />'),rel:a('<input type="text" />'),rev:a('<input type="text" />'),tabindex:a('<input type="text" />'),accesskey:a('<input type="text" />')},events:{}};a.each(["onblur","onfocus","onclick","ondblclick","onmousedown","onmouseup","onmouseover","onmouseout","onmouseleave","onkeydown","onkeypress","onkeyup"],function(){b.src.events[this]=a('<input type="text" />')});a.each(b.src,function(){for(var j in this){this[j].attr("name",j);var h=this[j].attr("type");if(!h||(h=="text"&&!this[j].attr("size"))){this[j].css("width","100%")}}})}this.command=function(){var p=this.rte.selection.getNode(),o,u,x,h,t,j,w,k,z;!this.src&&g();this.rte.selection.saveIERange();function q(r){return r.nodeName=="A"&&r.href}this.link=this.rte.dom.selfOrParentLink(p);if(!this.link){o=a.browser.msie?this.rte.selection.selected():this.rte.selection.selected({wrap:false});if(o.length){for(u=0;u<o.length;u++){if(q(o[u])){this.link=o[u];break}}if(!this.link){this.link=this.rte.dom.parent(o[0],q)||this.rte.dom.parent(o[o.length-1],q)}}}this.link=this.link?a(this.link):a(this.rte.doc.createElement("a"));this.img=p.nodeName=="IMG"?p:null;this.updatePopup();this.src.main.anchor.empty();a('a[href!=""][name]',this.rte.doc).each(function(){var r=a(this).attr("name");b.src.main.anchor.append(a("<option />").val(r).text(r))});if(this.src.main.anchor.children().length){this.src.main.anchor.prepend(a("<option />").val("").text(this.rte.i18n("Select bookmark"))).change(function(){var r=a(this).val();if(r){b.src.main.href.val("#"+r)}})}h={rtl:this.rte.rtl,submit:function(r,v){r.stopPropagation();r.preventDefault();b.set();v.close()},tabs:{show:function(v,r){if(r.index==3){b.updateOnclick()}}},close:function(){b.rte.browser.msie&&b.rte.selection.restoreIERange()},dialog:{width:"auto",width:430,title:this.rte.i18n("Link")}};d=new elDialogForm(h);t=a("<div />").append(a("<label />").append(this.src.popup.location).append(this.rte.i18n("Location bar"))).append(a("<label />").append(this.src.popup.menubar).append(this.rte.i18n("Menu bar"))).append(a("<label />").append(this.src.popup.toolbar).append(this.rte.i18n("Toolbar"))).append(a("<label />").append(this.src.popup.scrollbars).append(this.rte.i18n("Scrollbars")));j=a("<div />").append(a("<label />").append(this.src.popup.status).append(this.rte.i18n("Status bar"))).append(a("<label />").append(this.src.popup.resizable).append(this.rte.i18n("Resizable"))).append(a("<label />").append(this.src.popup.dependent).append(this.rte.i18n("Depedent"))).append(a("<label />").append(this.src.popup.retfalse).append(this.rte.i18n("Add return false")));d.tab("main",this.rte.i18n("Properies")).tab("popup",this.rte.i18n("Popup")).tab("adv",this.rte.i18n("Advanced")).tab("events",this.rte.i18n("Events")).append(a("<label />").append(this.src.popup.use).append(this.rte.i18n("Open link in popup window")),"popup").separator("popup").append([this.rte.i18n("URL"),this.src.popup.url],"popup",true).append([this.rte.i18n("Window name"),this.src.popup.name],"popup",true).append([this.rte.i18n("Window size"),a("<span />").append(this.src.popup.width).append(" x ").append(this.src.popup.height).append(" px")],"popup",true).append([this.rte.i18n("Window position"),a("<span />").append(this.src.popup.left).append(" x ").append(this.src.popup.top).append(" px")],"popup",true).separator("popup").append([t,j],"popup",true);w=this.link.get(0);k=this.rte.dom.attr(w,"href");this.src.main.href.val(k).change(function(){a(this).val(b.rte.utils.absoluteURL(a(this).val()))});if(this.rte.options.fmAllow&&this.rte.options.fmOpen){var z=a("<span />").append(this.src.main.href.css("width","87%")).append(a("<span />").addClass("ui-state-default ui-corner-all").css({"float":"right","margin-right":"3px"}).attr("title",b.rte.i18n("Open file manger")).append(a("<span />").addClass("ui-icon ui-icon-folder-open")).click(function(){b.rte.options.fmOpen(function(r){b.src.main.href.val(r).change()})}).hover(function(){a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}));d.append([this.rte.i18n("Link URL"),z],"main",true)}else{d.append([this.rte.i18n("Link URL"),this.src.main.href],"main",true)}this.src.main.href.change();d.append([this.rte.i18n("Title"),this.src.main.title.val(this.rte.dom.attr(w,"title"))],"main",true);if(this.src.main.anchor.children().length){d.append([this.rte.i18n("Bookmark"),this.src.main.anchor.val(k)],"main",true)}if(!this.rte.options.doctype.match(/xhtml/)){d.append([this.rte.i18n("Target"),this.src.main.target.val(this.link.attr("target")||"")],"main",true)}for(var p in this.src.adv){this.src.adv[p].val(this.rte.dom.attr(w,p));d.append([this.rte.i18n(this.labels[p]?this.labels[p]:p),this.src.adv[p]],"adv",true)}for(var p in this.src.events){var x=this.rte.utils.trimEventCallback(this.rte.dom.attr(w,p));this.src.events[p].val(x);d.append([this.rte.i18n(this.labels[p]?this.labels[p]:p),this.src.events[p]],"events",true)}this.src.popup.use.change(function(){var r=a(this).attr("checked");a.each(b.src.popup,function(){if(a(this).attr("name")!="use"){if(r){a(this).removeAttr("disabled")}else{a(this).attr("disabled",true)}}})});this.src.popup.use.change();d.open()};this.update=function(){var h=this.rte.selection.getNode();if(this.rte.dom.selfOrParentLink(h)){this.domElem.removeClass("disabled").addClass("active")}else{if(this.rte.dom.selectionHas(function(j){return j.nodeName=="A"&&j.href})){this.domElem.removeClass("disabled").addClass("active")}else{if(!this.rte.selection.collapsed()||h.nodeName=="IMG"){this.domElem.removeClass("disabled active")}else{this.domElem.addClass("disabled").removeClass("active")}}}};this.updatePopup=function(){var h=this.rte.dom.attr(this.link.get(0),"onclick");h=h?a.trim(h.toString()):"";if(h.length>0&&(m=h.match(/window.open\("([^"]+)",\s*"([^"]*)",\s*"([^"]*)"\s*.*\);\s*(return\s+false)?/))){this.src.popup.use.attr("checked","on");this.src.popup.url.val(m[1]);this.src.popup.name.val(m[2]);if(/location=yes/.test(m[3])){this.src.popup.location.attr("checked",true)}if(/menubar=yes/.test(m[3])){this.src.popup.menubar.attr("checked",true)}if(/toolbar=yes/.test(m[3])){this.src.popup.toolbar.attr("checked",true)}if(/scrollbars=yes/.test(m[3])){this.src.popup.scrollbars.attr("checked",true)}if(/status=yes/.test(m[3])){this.src.popup.status.attr("checked",true)}if(/resizable=yes/.test(m[3])){this.src.popup.resizable.attr("checked",true)}if(/dependent=yes/.test(m[3])){this.src.popup.dependent.attr("checked",true)}if((_m=m[3].match(/width=([^,]+)/))){this.src.popup.width.val(_m[1])}if((_m=m[3].match(/height=([^,]+)/))){this.src.popup.height.val(_m[1])}if((_m=m[3].match(/left=([^,]+)/))){this.src.popup.left.val(_m[1])}if((_m=m[3].match(/top=([^,]+)/))){this.src.popup.top.val(_m[1])}if(m[4]){this.src.popup.retfalse.attr("checked",true)}}else{a.each(this.src.popup,function(){var j=a(this);if(j.attr("type")=="text"){j.val(j.attr("name")=="url"?"http://":"")}else{if(j.attr("name")=="retfalse"){this.attr("checked",true)}else{j.removeAttr("checked")}}})}};this.updateOnclick=function(){var o=this.src.popup.url.val();if(this.src.popup.use.attr("checked")&&o){var p="";if(this.src.popup.location.attr("checked")){p+="location=yes,"}if(this.src.popup.menubar.attr("checked")){p+="menubar=yes,"}if(this.src.popup.toolbar.attr("checked")){p+="toolbar=yes,"}if(this.src.popup.scrollbars.attr("checked")){p+="scrollbars=yes,"}if(this.src.popup.status.attr("checked")){p+="status=yes,"}if(this.src.popup.resizable.attr("checked")){p+="resizable=yes,"}if(this.src.popup.dependent.attr("checked")){p+="dependent=yes,"}if(this.src.popup.width.val()){p+="width="+this.src.popup.width.val()+","}if(this.src.popup.height.val()){p+="height="+this.src.popup.height.val()+","}if(this.src.popup.left.val()){p+="left="+this.src.popup.left.val()+","}if(this.src.popup.top.val()){p+="top="+this.src.popup.top.val()+","}if(p.length>0){p=p.substring(0,p.length-1)}var j=this.src.popup.retfalse.attr("checked")?"return false;":"";var k='window.open("'+o+'", "'+a.trim(this.src.popup.name.val())+'", "'+p+'");'+j;this.src.events.onclick.val(k);if(!this.src.main.href.val()){this.src.main.href.val("#")}}else{var h=this.src.events.onclick.val();h=h.replace(/window\.open\([^\)]+\)\s*;?\s*return\s*false\s*;?/i,"");this.src.events.onclick.val(h)}};this.set=function(){var j,k;this.updateOnclick();this.rte.selection.restoreIERange();this.rte.history.add();j=this.rte.utils.absoluteURL(this.src.main.href.val());if(!j){var p=this.rte.selection.getBookmark();this.rte.dom.unwrap(this.link[0]);this.rte.selection.moveToBookmark(p)}else{if(!this.link[0].parentNode){if(this.img&&this.img.parentNode){this.link=a(this.rte.dom.create("a")).attr("href",j);this.rte.dom.wrap(this.img,this.link[0])}else{k="#--el-editor---"+Math.random();this.rte.doc.execCommand("createLink",false,k);this.link=a('a[href="'+k+'"]',this.rte.doc);this.link.each(function(){var r=a(this);if(!a.trim(r.html())&&!a.trim(r.text())){r.replaceWith(r.text())}})}}this.src.main.href.val(j);for(var o in this.src){if(o!="popup"){for(var q in this.src[o]){if(q!="anchors"){var h=a.trim(this.src[o][q].val());if(h){this.link.attr(q,h)}else{this.link.removeAttr(q)}}}}}this.img&&this.rte.selection.select(this.img)}this.rte.ui.update(true)}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.nbsp=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.command=function(){this.rte.history.add();this.rte.selection.insertHtml("&nbsp;",true);this.rte.window.focus();this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.outdent=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.command=function(){var g=this.find();if(g.node){this.rte.history.add();a(g.node).css(g.type,(g.val>40?g.val-40:0)+"px");this.rte.ui.update()}};this.find=function(j){function g(p){var k={type:"",val:0};var o;if((o=b.rte.dom.attr(p,"style"))){k.type=o.indexOf("padding-left")!=-1?"padding-left":(o.indexOf("margin-left")!=-1?"margin-left":"");k.val=k.type?parseInt(a(p).css(k.type))||0:0}return k}var j=this.rte.selection.getNode();var h=g(j);if(h.val){h.node=j}else{a.each(this.rte.dom.parents(j,"*"),function(){h=g(this);if(h.val){h.node=this;return h}})}return h};this.update=function(){var g=this.find();if(g.node){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.pagebreak=function(c,b){this.constructor.prototype.constructor.call(this,c,b);a(this.rte.doc.body).bind("mousedown",function(f){if(a(f.target).hasClass("elrte-pagebreak")){f.preventDefault()}});this.command=function(){this.rte.selection.insertHtml('<img src="'+this.rte.filter.url+'pixel.gif" class="elrte-protected elrte-pagebreak"/>',false)};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.pasteformattext=function(f,c){this.constructor.prototype.constructor.call(this,f,c);this.iframe=a(document.createElement("iframe")).addClass("el-rte-paste-input");this.doc=null;var b=this;this.command=function(){this.rte.selection.saveIERange();var g=this,h={submit:function(o,p){o.stopPropagation();o.preventDefault();g.paste();p.close()},dialog:{width:500,title:this.rte.i18n("Paste formatted text")}},k=new elDialogForm(h);k.append(this.iframe).open();this.doc=this.iframe.get(0).contentWindow.document;html=this.rte.options.doctype+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';html+="</head><body> <br /> </body></html>";this.doc.open();this.doc.write(html);this.doc.close();if(!this.rte.browser.msie){try{this.doc.designMode="on"}catch(j){}}else{this.doc.body.contentEditable=true}setTimeout(function(){g.iframe[0].contentWindow.focus()},50)};this.paste=function(){a(this.doc.body).find("[class]").removeAttr("class");var g=a.trim(a(this.doc.body).html());if(g){this.rte.history.add();this.rte.selection.restoreIERange();this.rte.selection.insertHtml(this.rte.filter.wysiwyg2wysiwyg(this.rte.filter.proccess("paste",g)));this.rte.ui.update(true)}};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.pastetext=function(f,c){this.constructor.prototype.constructor.call(this,f,c);this.input=a("<textarea />").addClass("el-rte-paste-input");var b=this;this.command=function(){this.rte.browser.msie&&this.rte.selection.saveIERange();var g={submit:function(j,k){j.stopPropagation();j.preventDefault();b.paste();k.close()},dialog:{width:500,title:this.rte.i18n("Paste only text")}};var h=new elDialogForm(g);h.append(this.input).open()};this.paste=function(){var g=a.trim(this.input.val());if(g){this.rte.history.add();this.rte.browser.msie&&this.rte.selection.restoreIERange();this.rte.selection.insertText(g.replace(/\r?\n/g,"<br />"),true);this.rte.ui.update(true)}this.input.val("")};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.save=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.active=true;this.command=function(){this.rte.save()};this.update=function(){}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.smiley=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.img=null;this.url=this.rte.filter.url+"smileys/";this.smileys={smile:"smile.png",happy:"happy.png",tongue:"tongue.png",surprised:"surprised.png",waii:"waii.png",wink:"wink.png",evilgrin:"evilgrin.png",grin:"grin.png",unhappy:"unhappy.png"};this.width=120;this.command=function(){var h=this,j=this.url,o,k,g;this.rte.browser.msie&&this.rte.selection.saveIERange();k={dialog:{height:120,width:this.width,title:this.rte.i18n("Smiley"),buttons:{}}};o=new elDialogForm(k);a.each(this.smileys,function(q,p){o.append(a('<img src="'+j+p+'" title="'+q+'" id="'+q+'" class="el-rte-smiley"/>').click(function(){h.set(this.id,o)}))});o.open()};this.update=function(){this.domElem.removeClass("disabled");this.domElem.removeClass("active")};this.set=function(g,h){this.rte.browser.msie&&this.rte.selection.restoreIERange();if(this.smileys[g]){this.img=a(this.rte.doc.createElement("img"));this.img.attr({src:this.url+this.smileys[g],title:g,alt:g});this.rte.selection.insertNode(this.img.get(0));this.rte.ui.update()}h.close()}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.stopfloat=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.find=function(){if(this.rte.selection.collapsed()){var f=this.rte.dom.selfOrParent(this.rte.selection.getEnd(),/^DIV$/);if(f&&(this.rte.dom.attr(f,"clear")||a(f).css("clear")!="none")){return f}}};this.command=function(){var f;if((f=this.find())){var f=a(f);this.rte.history.add();if(!f.children().length&&!a.trim(f.text()).length){f.remove()}else{f.removeAttr("clear").css("clear","")}}else{this.rte.history.add();this.rte.selection.insertNode(a(this.rte.dom.create("div")).css("clear","both").get(0),true)}this.rte.ui.update(true)};this.update=function(){this.domElem.removeClass("disabled");if(this.find()){this.domElem.addClass("active")}else{this.domElem.removeClass("active")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.table=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.src=null;this.labels=null;function g(){b.labels={main:"Properies",adv:"Advanced",events:"Events",id:"ID","class":"Css class",style:"Css style",dir:"Script direction",summary:"Summary",lang:"Language",href:"URL"};b.src={main:{caption:a('<input type="text" />'),rows:a('<input type="text" />').attr("size",5).val(2),cols:a('<input type="text" />').attr("size",5).val(2),width:a('<input type="text" />').attr("size",5),wunit:a("<select />").append(a("<option />").val("%").text("%")).append(a("<option />").val("px").text("px")),height:a('<input type="text" />').attr("size",5),hunit:a("<select />").append(a("<option />").val("%").text("%")).append(a("<option />").val("px").text("px")),align:a("<select />").append(a("<option />").val("").text(b.rte.i18n("Not set"))).append(a("<option />").val("left").text(b.rte.i18n("Left"))).append(a("<option />").val("center").text(b.rte.i18n("Center"))).append(a("<option />").val("right").text(b.rte.i18n("Right"))),spacing:a('<input type="text" />').attr("size",5),padding:a('<input type="text" />').attr("size",5),border:a("<div />"),rules:a("<select />").append(a("<option />").val("none").text(b.rte.i18n("No"))).append(a("<option />").val("all").text(b.rte.i18n("Cells"))).append(a("<option />").val("groups").text(b.rte.i18n("Groups"))).append(a("<option />").val("rows").text(b.rte.i18n("Rows"))).append(a("<option />").val("cols").text(b.rte.i18n("Columns"))),margin:a("<div />"),bg:a("<div />"),bgimg:a('<input type="text" />').css("width","90%")},adv:{id:a('<input type="text" />'),summary:a('<input type="text" />'),"class":a('<input type="text" />'),style:a('<input type="text" />'),dir:a("<select />").append(a("<option />").text(b.rte.i18n("Not set")).val("")).append(a("<option />").text(b.rte.i18n("Left to right")).val("ltr")).append(a("<option />").text(b.rte.i18n("Right to left")).val("rtl")),lang:a('<input type="text" />')},events:{}};a.each(b.src,function(){for(var j in this){this[j].attr("name",j);var h=this[j].get(0).nodeName;if(h=="INPUT"&&j!="bgimg"){this[j].css(this[j].attr("size")?{"text-align":"right"}:{width:"100%"})}else{if(h=="SELECT"&&j!="wunit"&&j!="hunit"){this[j].css("width","100%")}}}});a.each(["onblur","onfocus","onclick","ondblclick","onmousedown","onmouseup","onmouseover","onmouseout","onmouseleave","onkeydown","onkeypress","onkeyup"],function(){b.src.events[this]=a('<input type="text" />').attr("name",this).css("width","100%")});b.src.main.align.change(function(){var j=a(this).val();if(j=="center"){b.src.main.margin.val({left:"auto",right:"auto"})}else{var h=b.src.main.margin.val();if(h.left=="auto"&&h.right=="auto"){b.src.main.margin.val({left:"",right:""})}}});b.src.main.bgimg.change(function(){var h=a(this);h.val(b.rte.utils.absoluteURL(h.val()))})}this.command=function(){var r=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^TABLE$/);if(this.name=="table"){this.table=a(this.rte.doc.createElement("table"))}else{this.table=r?a(r):a(this.rte.doc.createElement("table"))}!this.src&&g();this.src.main.border.elBorderSelect({styleHeight:117});this.src.main.bg.elColorPicker({palettePosition:"outer","class":"el-colorpicker ui-icon ui-icon-pencil"});this.src.main.margin.elPaddingInput({type:"margin",value:this.table});if(this.table.parents().length){this.src.main.rows.val("").attr("disabled",true);this.src.main.cols.val("").attr("disabled",true)}else{this.src.main.rows.val(2).removeAttr("disabled");this.src.main.cols.val(2).removeAttr("disabled")}var D=this.table.css("width")||this.table.attr("width");this.src.main.width.val(parseInt(D)||"");this.src.main.wunit.val(D.indexOf("px")!=-1?"px":"%");var z=this.table.css("height")||this.table.attr("height");this.src.main.height.val(parseInt(z)||"");this.src.main.hunit.val(z&&z.indexOf("px")!=-1?"px":"%");var B=this.table.css("float");this.src.main.align.val("");if(B=="left"||B=="right"){this.src.main.align.val(B)}else{var t=this.table.css("margin-left");var p=this.table.css("margin-right");if(t=="auto"&&p=="auto"){this.src.main.align.val("center")}}this.src.main.border.val(this.table);this.src.main.rules.val(this.rte.dom.attr(this.table.get(0),"rules"));this.src.main.bg.val(this.table.css("background-color"));var j=(this.table.css("background-image")||"").replace(/url\(([^\)]+)\)/i,"$1");this.src.main.bgimg.val(j!="none"?j:"");var k={rtl:this.rte.rtl,submit:function(h,v){h.stopPropagation();h.preventDefault();b.set();v.close()},dialog:{width:530,title:this.rte.i18n("Table")}};var C=new elDialogForm(k);for(var q in this.src){C.tab(q,this.rte.i18n(this.labels[q]));if(q=="main"){var A=a("<table />").append(a("<tr />").append("<td>"+this.rte.i18n("Rows")+"</td>").append(a("<td />").append(this.src.main.rows))).append(a("<tr />").append("<td>"+this.rte.i18n("Columns")+"</td>").append(a("<td />").append(this.src.main.cols)));var x=a("<table />").append(a("<tr />").append("<td>"+this.rte.i18n("Width")+"</td>").append(a("<td />").append(this.src.main.width).append(this.src.main.wunit))).append(a("<tr />").append("<td>"+this.rte.i18n("Height")+"</td>").append(a("<td />").append(this.src.main.height).append(this.src.main.hunit)));var u=a("<table />").append(a("<tr />").append("<td>"+this.rte.i18n("Spacing")+"</td>").append(a("<td />").append(this.src.main.spacing.val(this.table.attr("cellspacing")||"")))).append(a("<tr />").append("<td>"+this.rte.i18n("Padding")+"</td>").append(a("<td />").append(this.src.main.padding.val(this.table.attr("cellpadding")||""))));C.append([this.rte.i18n("Caption"),this.src.main.caption.val(this.table.find("caption").eq(0).text()||"")],"main",true).separator("main").append([A,x,u],"main",true).separator("main").append([this.rte.i18n("Border"),this.src.main.border],"main",true).append([this.rte.i18n("Inner borders"),this.src.main.rules],"main",true).append([this.rte.i18n("Alignment"),this.src.main.align],"main",true).append([this.rte.i18n("Margins"),this.src.main.margin],"main",true).append([this.rte.i18n("Background"),a("<span />").append(a("<span />").css({"float":"left","margin-right":"3px"}).append(this.src.main.bg)).append(this.src.main.bgimg)],"main",true)}else{for(var o in this.src[q]){var E=this.rte.dom.attr(this.table,o);if(q=="events"){E=this.rte.utils.trimEventCallback(E)}C.append([this.rte.i18n(this.labels[o]?this.labels[o]:o),this.src[q][o].val(E)],q,true)}}}C.open()};this.set=function(){if(!this.table.parents().length){var k=parseInt(this.src.main.rows.val())||0;var B=parseInt(this.src.main.cols.val())||0;if(k<=0||B<=0){return}this.rte.history.add();var D=a(this.rte.doc.createElement("tbody")).appendTo(this.table);for(var u=0;u<k;u++){var C="<tr>";for(var t=0;t<B;t++){C+="<td>&nbsp;</td>"}D.append(C+"</tr>")}}else{this.table.removeAttr("width").removeAttr("height").removeAttr("border").removeAttr("align").removeAttr("bordercolor").removeAttr("bgcolor").removeAttr("cellspacing").removeAttr("cellpadding").removeAttr("frame").removeAttr("rules").removeAttr("style")}var I=a.trim(this.src.main.caption.val());if(I){if(!this.table.children("caption").length){this.table.prepend("<caption />")}this.table.children("caption").text(I)}else{this.table.children("caption").remove()}for(var p in this.src){if(p!="main"){for(var o in this.src[p]){var G=a.trim(this.src[p][o].val());if(G){this.table.attr(o,G)}else{this.table.removeAttr(o)}}}}var A,E,H;if((A=parseInt(this.src.main.spacing.val()))&&A>=0){this.table.attr("cellspacing",A)}if((E=parseInt(this.src.main.padding.val()))&&E>=0){this.table.attr("cellpadding",E)}if((H=this.src.main.rules.val())){this.table.attr("rules",H)}var F=parseInt(this.src.main.width.val())||"",x=parseInt(this.src.main.height.val())||"",u=a.trim(this.src.main.bgimg.val()),D=this.src.main.border.val(),q=this.src.main.margin.val(),z=this.src.main.align.val();this.table.css({width:F?F+this.src.main.wunit.val():"",height:x?x+this.src.main.hunit.val():"",border:a.trim(D.width+" "+D.style+" "+D.color),"background-color":this.src.main.bg.val(),"background-image":u?"url("+u+")":""});if(q.css){this.table.css("margin",q.css)}else{this.table.css({"margin-top":q.top,"margin-right":q.right,"margin-bottom":q.bottom,"margin-left":q.left})}if((z=="left"||z=="right")&&this.table.css("margin-left")!="auto"&&this.table.css("margin-right")!="auto"){this.table.css("float",z)}if(!this.table.attr("style")){this.table.removeAttr("style")}if(!this.table.parents().length){this.rte.selection.insertNode(this.table.get(0),true)}this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled");if(this.name=="tableprops"&&!this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^TABLE$/)){this.domElem.addClass("disabled").removeClass("active")}}};elRTE.prototype.ui.prototype.buttons.tableprops=elRTE.prototype.ui.prototype.buttons.table})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.tablerm=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.command=function(){var f=this.rte.dom.parent(this.rte.selection.getNode(),/^TABLE$/);if(f){this.rte.history.add();a(f).remove()}this.rte.ui.update(true)};this.update=function(){if(this.rte.dom.parent(this.rte.selection.getNode(),/^TABLE$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.tbcellprops=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.src=null;this.labels=null;function g(){b.labels={main:"Properies",adv:"Advanced",events:"Events",id:"ID","class":"Css class",style:"Css style",dir:"Script direction",lang:"Language"};b.src={main:{type:a("<select />").css("width","100%").append(a("<option />").val("td").text(b.rte.i18n("Data"))).append(a("<option />").val("th").text(b.rte.i18n("Header"))),width:a('<input type="text" />').attr("size",4),wunit:a("<select />").append(a("<option />").val("%").text("%")).append(a("<option />").val("px").text("px")),height:a('<input type="text" />').attr("size",4),hunit:a("<select />").append(a("<option />").val("%").text("%")).append(a("<option />").val("px").text("px")),align:a("<select />").css("width","100%").append(a("<option />").val("").text(b.rte.i18n("Not set"))).append(a("<option />").val("left").text(b.rte.i18n("Left"))).append(a("<option />").val("center").text(b.rte.i18n("Center"))).append(a("<option />").val("right").text(b.rte.i18n("Right"))).append(a("<option />").val("justify").text(b.rte.i18n("Justify"))),border:a("<div />"),padding:a("<div />"),bg:a("<div />"),bgimg:a('<input type="text" />').css("width","90%"),apply:a("<select />").css("width","100%").append(a("<option />").val("").text(b.rte.i18n("Current cell"))).append(a("<option />").val("row").text(b.rte.i18n("All cells in row"))).append(a("<option />").val("column").text(b.rte.i18n("All cells in column"))).append(a("<option />").val("table").text(b.rte.i18n("All cells in table")))},adv:{id:a('<input type="text" />'),"class":a('<input type="text" />'),style:a('<input type="text" />'),dir:a("<select />").css("width","100%").append(a("<option />").text(b.rte.i18n("Not set")).val("")).append(a("<option />").text(b.rte.i18n("Left to right")).val("ltr")).append(a("<option />").text(b.rte.i18n("Right to left")).val("rtl")),lang:a('<input type="text" />')},events:{}};a.each(b.src,function(){for(var h in this){this[h].attr("name",h);if(this[h].attr("type")=="text"&&!this[h].attr("size")&&h!="bgimg"){this[h].css("width","100%")}}});a.each(["onblur","onfocus","onclick","ondblclick","onmousedown","onmouseup","onmouseover","onmouseout","onmouseleave","onkeydown","onkeypress","onkeyup"],function(){b.src.events[this]=a('<input type="text" />').attr("name",this).css("width","100%")})}this.command=function(){!this.src&&g();this.cell=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(TD|TH)$/);if(!this.cell){return}this.src.main.type.val(this.cell.nodeName.toLowerCase());this.cell=a(this.cell);this.src.main.border.elBorderSelect({styleHeight:117,value:this.cell});this.src.main.bg.elColorPicker({palettePosition:"outer","class":"el-colorpicker ui-icon ui-icon-pencil"});this.src.main.padding.elPaddingInput({value:this.cell});var j=this.cell.css("width")||this.cell.attr("width");this.src.main.width.val(parseInt(j)||"");this.src.main.wunit.val(j.indexOf("px")!=-1?"px":"%");var q=this.cell.css("height")||this.cell.attr("height");this.src.main.height.val(parseInt(q)||"");this.src.main.hunit.val(q.indexOf("px")!=-1?"px":"%");this.src.main.align.val(this.cell.attr("align")||this.cell.css("text-align"));this.src.main.bg.val(this.cell.css("background-color"));var t=this.cell.css("background-image");this.src.main.bgimg.val(t&&t!="none"?t.replace(/url\(([^\)]+)\)/i,"$1"):"");this.src.main.apply.val("");var r={rtl:this.rte.rtl,submit:function(h,v){h.stopPropagation();h.preventDefault();b.set();v.close()},dialog:{width:520,title:this.rte.i18n("Table cell properties")}};var u=new elDialogForm(r);for(var p in this.src){u.tab(p,this.rte.i18n(this.labels[p]));if(p=="main"){u.append([this.rte.i18n("Width"),a("<span />").append(this.src.main.width).append(this.src.main.wunit)],"main",true).append([this.rte.i18n("Height"),a("<span />").append(this.src.main.height).append(this.src.main.hunit)],"main",true).append([this.rte.i18n("Table cell type"),this.src.main.type],"main",true).append([this.rte.i18n("Border"),this.src.main.border],"main",true).append([this.rte.i18n("Alignment"),this.src.main.align],"main",true).append([this.rte.i18n("Paddings"),this.src.main.padding],"main",true).append([this.rte.i18n("Background"),a("<span />").append(a("<span />").css({"float":"left","margin-right":"3px"}).append(this.src.main.bg)).append(this.src.main.bgimg)],"main",true).append([this.rte.i18n("Apply to"),this.src.main.apply],"main",true)}else{for(var o in this.src[p]){var k=this.cell.attr(o)||"";if(p=="events"){k=this.rte.utils.trimEventCallback(k)}u.append([this.rte.i18n(this.labels[o]?this.labels[o]:o),this.src[p][o].val(k)],p,true)}}}u.open()};this.set=function(){var x=this.cell,B=this.src.main.apply.val();switch(this.src.main.apply.val()){case"row":x=this.cell.parent("tr").children("td,th");break;case"column":x=a(this.rte.dom.tableColumn(this.cell.get(0)));break;case"table":x=this.cell.parents("table").find("td,th");break}for(var o in this.src){if(o!="main"){for(var k in this.src[o]){var C=a.trim(this.src[o][k].val());if(C){x.attr(k,C)}else{x.removeAttr(k)}}}}x.removeAttr("width").removeAttr("height").removeAttr("border").removeAttr("align").removeAttr("bordercolor").removeAttr("bgcolor");var D=this.src.main.type.val();var A=parseInt(this.src.main.width.val())||"";var r=parseInt(this.src.main.height.val())||"";var q=a.trim(this.src.main.bgimg.val());var z=this.src.main.border.val();var u={width:A?A+this.src.main.wunit.val():"",height:r?r+this.src.main.hunit.val():"","background-color":this.src.main.bg.val(),"background-image":q?"url("+q+")":"",border:a.trim(z.width+" "+z.style+" "+z.color),"text-align":this.src.main.align.val()||""};var j=this.src.main.padding.val();if(j.css){u.padding=j.css}else{u["padding-top"]=j.top;u["padding-right"]=j.right;u["padding-bottom"]=j.bottom;u["padding-left"]=j.left}x=x.get();a.each(x,function(){var w=this.nodeName.toLowerCase();var F=a(this);if(w!=D){var h={};for(var t in b.src.adv){var p=F.attr(t);if(p){h[t]=p.toString()}}for(var t in b.src.events){var p=F.attr(t);if(p){h[t]=p.toString()}}var G=F.attr("colspan")||1;var E=F.attr("rowspan")||1;if(G>1){h.colspan=G}if(E>1){h.rowspan=E}F.replaceWith(a("<"+D+" />").html(F.html()).attr(h).css(u))}else{F.css(u)}});this.rte.ui.update()};this.update=function(){if(this.rte.dom.parent(this.rte.selection.getNode(),/^TABLE$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.tbcellsmerge=function(g,f){this.constructor.prototype.constructor.call(this,g,f);var c=this;function b(){var j=c.rte.dom.selfOrParent(c.rte.selection.getStart(),/^(TD|TH)$/);var h=c.rte.dom.selfOrParent(c.rte.selection.getEnd(),/^(TD|TH)$/);if(j&&h&&j!=h&&a(j).parents("table").get(0)==a(h).parents("table").get(0)){return[j,h]}return null}this.command=function(){var z=b();if(z){var x=this.rte.dom.indexOf(a(z[0]).parent("tr").get(0));var r=this.rte.dom.indexOf(a(z[1]).parent("tr").get(0));var q=Math.min(x,r);var u=Math.max(x,r)-q+1;var j=this.rte.dom.tableColumn(z[0],true,true);var h=this.rte.dom.tableColumn(z[1],true);var B=a.inArray(z[0],j.column);var w=a.inArray(z[1],h.column);var p=j.info.offset[B]<h.info.offset[w]?j:h;var v=j.info.offset[B]>=h.info.offset[w]?j:h;var k=0;var t=null;var o="";this.rte.history.add();var A=a(a(z[0]).parents("table").eq(0).find("tr").get().slice(q,q+u)).each(function(E){var D=o.length;var C=false;a(this).children("td,th").each(function(){var K=a(this);var I=a.inArray(this,p.column);var H=a.inArray(this,v.column);if(I!=-1||H!=-1){C=I!=-1&&H==-1;var G=parseInt(K.attr("colspan")||1);if(E==0){k+=G}if(I!=-1&&E>0){var L=p.info.delta[I];if(L>0){if(K.css("text-align")=="left"){var F=K.clone(true);K.html("&nbsp;")}else{var F=K.clone().html("&nbsp;")}F.removeAttr("colspan").removeAttr("id").insertBefore(this);if(L>1){F.attr("colspan",L)}}}if(H!=-1){var L=v.info.delta[H];if(G-L>1){var J=G-L-1;if(K.css("text-align")=="right"){var F=K.clone(true);K.html("&nbsp;")}else{var F=K.clone().html("&nbsp;")}F.removeAttr("colspan").removeAttr("id").insertAfter(this);if(J>1){F.attr("colspan",J)}}}if(!t){t=K}else{o+=K.html();K.remove()}}else{if(C){if(E==0){k+=parseInt(K.attr("colspan")||1)}o+=K.html();K.remove()}}});o+=D!=o.length?"<br />":""});t.removeAttr("colspan").removeAttr("rowspan").html(t.html()+o);if(k>1){t.attr("colspan",k)}if(u>1){t.attr("rowspan",u)}this.rte.dom.fixTable(a(z[0]).parents("table").get(0))}};this.update=function(){if(b()){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.tbcellsplit=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.command=function(){var j=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(TD|TH)$/);if(j){this.rte.history.add();var k=parseInt(this.rte.dom.attr(j,"colspan"));var o=parseInt(this.rte.dom.attr(j,"rowspan"));if(k>1||o>1){var u=k-1;var v=o-1;var q=this.rte.dom.parent(j,/^TABLE$/);var p=this.rte.dom.tableMatrix(q);if(u){for(var t=0;t<u;t++){a(this.rte.dom.create(j.nodeName)).html("&nbsp;").insertAfter(j)}}if(v){var x=this.rte.dom.indexesOfCell(j,p);var h=x[0];var g=x[1];for(var f=h+1;f<h+v+1;f++){var w;if(!p[f][g].nodeName){if(p[f][g-1].nodeName){w=p[f][g-1]}else{for(var t=g-1;t>=0;t--){if(p[f][t].nodeName){w=p[f][t];break}}}if(w){for(var t=0;t<=u;t++){a(this.rte.dom.create(w.nodeName)).html("&nbsp;").insertAfter(w)}}}}}a(j).removeAttr("colspan").removeAttr("rowspan");this.rte.dom.fixTable(q)}}this.rte.ui.update(true)};this.update=function(){var f=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(TD|TH)$/);if(f&&(parseInt(this.rte.dom.attr(f,"colspan"))>1||parseInt(this.rte.dom.attr(f,"rowspan"))>1)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.tbcolbefore=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.command=function(){var g=this.rte.dom.tableColumn(this.rte.selection.getNode(),false,true);if(g.length){this.rte.history.add();a.each(g,function(){var j=a(this);var h=parseInt(j.attr("colspan")||1);if(h>1){j.attr("colspan",h+1)}else{var k=j.clone().html("&nbsp;").removeAttr("colspan").removeAttr("width").removeAttr("id");if(b.name=="tbcolbefore"){k.insertBefore(this)}else{k.insertAfter(this)}}});this.rte.ui.update()}};this.update=function(){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(TD|TH)$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}};elRTE.prototype.ui.prototype.buttons.tbcolafter=elRTE.prototype.ui.prototype.buttons.tbcolbefore})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.tbcolrm=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.command=function(){var p=this.rte.selection.getNode();var o=this.rte.dom.selfOrParent(p,/^(TD|TH)$/);var k=a(o).prev("td,th").get(0);var j=a(o).next("td,th").get(0);var g=this.rte.dom.parent(p,/^TABLE$/);var h=this.rte.dom.tableColumn(p,false,true);if(h.length){this.rte.history.add();a.each(h,function(){var r=a(this);var q=parseInt(r.attr("colspan")||1);if(q>1){r.attr("colspan",q-1)}else{r.remove()}});this.rte.dom.fixTable(g);if(k||j){this.rte.selection.selectContents(k?k:j).collapse(true)}this.rte.ui.update(true)}};this.update=function(){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(TD|TH)$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);elRTE.prototype.ui.prototype.buttons.tbrowbefore=function(b,a){this.constructor.prototype.constructor.call(this,b,a);this.command=function(){var h=this.rte.selection.getNode();var t=this.rte.dom.selfOrParent(h,/^(TD|TH)$/);var f=this.rte.dom.selfOrParent(t,/^TR$/);var w=this.rte.dom.tableMatrix(this.rte.dom.selfOrParent(t,/^TABLE$/));if(t&&f&&w){this.rte.history.add();var u=this.name=="tbrowbefore";var q=$(f).prevAll("tr").length;var j=0;var p=[];function k(c,r){while(r>0){r--;if(w[r]&&w[r][c]&&w[r][c].nodeName){return w[r][c]}}}for(var o=0;o<w[q].length;o++){if(w[q][o]&&w[q][o].nodeName){var v=$(w[q][o]);var g=parseInt(v.attr("colspan")||1);if(parseInt(v.attr("rowspan")||1)>1){if(u){j+=g}else{p.push(v)}}else{j+=g}}else{if(w[q][o]=="-"){v=k(o,q);v&&p.push($(v))}}}var x=$("<tr />");for(var o=0;o<j;o++){x.append("<td>&nbsp;</td>")}if(u){x.insertBefore(f)}else{x.insertAfter(f)}$.each(p,function(){$(this).attr("rowspan",parseInt($(this).attr("rowspan")||1)+1)});this.rte.ui.update()}};this.update=function(){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^TR$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}};elRTE.prototype.ui.prototype.buttons.tbrowafter=elRTE.prototype.ui.prototype.buttons.tbrowbefore;(function(a){elRTE.prototype.ui.prototype.buttons.tbrowrm=function(f,c){this.constructor.prototype.constructor.call(this,f,c);var b=this;this.command=function(){var h=this.rte.selection.getNode(),x=this.rte.dom.selfOrParent(h,/^(TD|TH)$/),g=this.rte.dom.selfOrParent(x,/^TR$/),q=this.rte.dom.selfOrParent(x,/^TABLE$/),A=this.rte.dom.tableMatrix(q);if(x&&g&&A.length){this.rte.history.add();if(A.length==1){a(q).remove();return this.rte.ui.update()}var u=[];var v=a(g).prevAll("tr").length;function p(r,C){while(C>0){C--;if(A[C]&&A[C][r]&&A[C][r].nodeName){return A[C][r]}}}function B(C,r){y=v+1;var E=null;if(A[y]){for(var D=0;D<r;D++){if(A[y][D]&&A[y][D].nodeName){E=A[y][D]}}C=C.remove();if(E){C.insertAfter(E)}else{C.prependTo(a(g).next("tr").eq(0))}}}function o(C){for(var r=0;r<C.length;r++){if(C[r]==x){return r<C.length-1?C[r+1]:C[r-1]}}}for(var t=0;t<A[v].length;t++){var z=null;var j=false;if(A[v][t]&&A[v][t].nodeName){z=A[v][t];j=true}else{if(A[v][t]=="-"&&(z=p(t,v))){j=false}}if(z){z=a(z);var k=parseInt(z.attr("rowspan")||1);if(k>1){z.attr("rowspan",k-1);j&&B(z,t,v)}}}var w=o(this.rte.dom.tableColumn(x));if(w){this.rte.selection.selectContents(w).collapse(true)}a(g).remove()}this.rte.ui.update()};this.update=function(){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^TR$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.undo=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.command=function(){if(this.name=="undo"&&this.rte.history.canBack()){this.rte.history.back();this.rte.ui.update()}else{if(this.name=="redo"&&this.rte.history.canFwd()){this.rte.history.fwd();this.rte.ui.update()}}};this.update=function(){this.domElem.toggleClass("disabled",this.name=="undo"?!this.rte.history.canBack():!this.rte.history.canFwd())}};elRTE.prototype.ui.prototype.buttons.redo=elRTE.prototype.ui.prototype.buttons.undo})(jQuery);(function(a){elRTE.prototype.ui.prototype.buttons.unlink=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.command=function(){var k=this.rte.selection.getNode(),f=this.rte.dom.selfOrParentLink(k);function j(o){return o.nodeName=="A"&&o.href}if(!f){var h=a.browser.msie?this.rte.selection.selected():this.rte.selection.selected({wrap:false});if(h.length){for(var g=0;g<h.length;g++){if(j(h[g])){f=h[g];break}}if(!f){f=this.rte.dom.parent(h[0],j)||this.rte.dom.parent(h[h.length-1],j)}}}if(f){this.rte.history.add();this.rte.selection.select(f);this.rte.doc.execCommand("unlink",false,null);this.rte.ui.update(true)}};this.update=function(){var f=this.rte.selection.getNode();if(this.rte.dom.selfOrParentLink(f)){this.domElem.removeClass("disabled").addClass("active")}else{if(this.rte.dom.selectionHas(function(g){return g.nodeName=="A"&&g.href})){this.domElem.removeClass("disabled").addClass("active")}else{this.domElem.addClass("disabled").removeClass("active")}}}}})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.YOUR_LANG.js (+211 lines)
Line 0 Link Here
1
/*
2
 * WARNING! You this file if you want to make your own translation
3
 */
4
/*
5
 * YOUR_LANGUAGE_TRANSLATION translation
6
 * @author NAME <EMAIL>
7
 * @version 201x-xx-xx
8
 */
9
(function($) {
10
elRTE.prototype.i18Messages.TWO_LETTER_LANG_CODE = {
11
	'Editor' : '',
12
	'Source' : '',
13
	// panels names
14
	'Copy/Pase'      : '',
15
	'Undo/Redo'      : '',
16
	'Text styles'    : '',
17
	'Colors'         : '',
18
	'Alignment'      : '',
19
	'Indent/Outdent' : '',
20
	'Text format'    : '',
21
	'Lists'          : '',
22
	'Misc elements'  : '',
23
	'Links'          : '',
24
	'Images'         : '',
25
	'Media'          : '',
26
	'Tables'         : '',
27
	'File manager (elFinder)' : '',
28
	// buttons names
29
	'About this software'     : '',
30
	'Save'                    : '',
31
	'Copy'                    : '',
32
	'Cut'                     : '',
33
	'Paste'                   : '',
34
	'Paste only text'         : '',
35
	'Paste formatted text'    : '',
36
	'Clean format'            : '',
37
	'Undo last action'        : '',
38
	'Redo previous action'    : '',
39
	'Bold'                    : '',
40
	'Italic'                  : '',
41
	'Underline'               : '',
42
	'Strikethrough'           : '',
43
	'Superscript'             : '',
44
	'Subscript'               : '',
45
	'Align left'              : '',
46
	'Ailgn right'             : '',
47
	'Align center'            : '',
48
	'Align full'              : '',
49
	'Font color'              : '',
50
	'Background color'        : '',
51
	'Indent'                  : '',
52
	'Outdent'                 : '',
53
	'Format'                  : '',
54
	'Font size'               : '',
55
	'Font'                    : '',
56
	'Ordered list'            : '',
57
	'Unordered list'          : '',
58
	'Horizontal rule'         : '',
59
	'Blockquote'              : '',
60
	'Block element (DIV)'     : '',
61
	'Link'                    : '',
62
	'Delete link'             : '',
63
	'Bookmark'                : '',
64
	'Image'                   : '',
65
	'Table'                   : '',
66
	'Delete table'            : '',
67
	'Insert row before'       : '',
68
	'Insert row after'        : '',
69
	'Delete row'              : '',
70
	'Insert column before'    : '',
71
	'Insert column after'     : '',
72
	'Delete column'           : '',
73
	'Merge table cells'       : '',
74
	'Split table cell'        : '',
75
	'Toggle display document structure' : '',
76
	'Table cell properties'   : '',
77
	'Table properties'        : '',
78
	'Toggle full screen mode' : '',
79
	'Open file manager'       : '',
80
	'Non breakable space'     : '',
81
	'Stop element floating'   : '',
82
	// dialogs
83
	'Warning'          : '',
84
	'Properies'        : '',
85
	'Popup'            : '',
86
	'Advanced'         : '',
87
	'Events'           : '',
88
	'Width'            : '',
89
	'Height'           : '',
90
	'Left'             : '',
91
	'Center'           : '',
92
	'Right'            : '',
93
	'Border'           : '',
94
	'Background'       : '',
95
	'Css class'        : '',
96
	'Css style'        : '',
97
	'No'               : '',
98
	'Title'            : '',
99
	'Script direction' : '',
100
	'Language'         : '',
101
	'Charset'          : '',
102
	'Not set'          : '',
103
	'Left to right'    : '',
104
	'Right to left'    : '',
105
	'In this window'   : '',
106
	'In new window (_blank)'         : '',
107
	'In new parent window (_parent)' : '',
108
	'In top frame (_top)'            : '',
109
	'URL'              : '',
110
	'Open in'          : '',
111
	'Open file manger' : '',
112
	// copy
113
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : '',
114
	// format
115
	'Heading 1'     : '',
116
	'Heading 2'     : '',
117
	'Heading 3'     : '',
118
	'Heading 4'     : '',
119
	'Heading 5'     : '',
120
	'Heading 6'     : '',
121
	'Paragraph'     : '',
122
	'Address'       : '',
123
	'Preformatted'  : '',
124
	// font size
125
	'Small (8pt)'   : '',
126
	'Small (10px)'  : '',
127
	'Small (12pt)'  : '',
128
	'Normal (14pt)' : '',
129
	'Large (18pt)'  : '',
130
	'Large (24pt)'  : '',
131
	'Large (36pt)'  : '',
132
	// bookmark
133
	'Bookmark name' : '',
134
	// link
135
	'Link URL'         : '',
136
	'Target'           : '',
137
	'Select bookmark'  : '',
138
	'Open link in popup window' : '',
139
	'Window name'      : '',
140
	'Window size'      : '',
141
	'Window position'  : '',
142
	'Location bar'     : '',
143
	'Menu bar'         : '',
144
	'Toolbar'          : '',
145
	'Scrollbars'       : '',
146
	'Status bar'       : '',
147
	'Resizable'        : '',
148
	'Depedent'         : '',
149
	'Add return false' : '',
150
	'Target MIME type' : '',
151
	'Relationship page to target (rel)' : '',
152
	'Relationship target to page (rev)' : '',
153
	'Tab index'        : '',
154
	'Access key'       : '',
155
	// image
156
	'Size'             : '',
157
	'Preview'          : '',
158
	'Margins'          : '',
159
	'Alt text'         : '',
160
	'Image URL'        : '',
161
	// table
162
	'Spacing'          : '',
163
	'Padding'          : '',
164
	'Rows'             : '',
165
	'Columns'          : '',
166
	'Groups'           : '',
167
	'Cells'            : '',
168
	'Caption'          : '',
169
	'Inner borders'    : '',
170
	// table cell
171
	'Table cell type'  : '',
172
	'Data'             : '',
173
	'Header'           : '',
174
	'Justify'          : '',
175
	'Paddings'         : '',
176
	'Apply to'         : '',
177
	'Current cell'     : '',
178
	'All cells in row' : '',
179
	'All cells in column' : '',
180
	'All cells in table' : '',
181
	// about
182
	'About elRTE'                  : '',
183
	'Version'                      : '',
184
	'Licence'                      : '',
185
	'elRTE is an open-source JavaScript based WYSIWYG HTML-editor.' : '',
186
	'Main goal of the editor - simplify work with text and formating (HTML) on sites, blogs, forums and other online services.' : '',
187
	'You can use it in any commercial or non-commercial projects.' : '',
188
	'Authors'                      : '',
189
	'Chief developer'              : '',
190
	'Developer, tech support'      : '',
191
	'Developer'                    : '',
192
	'Interface designer'           : '',
193
	'Spanish localization'         : '',
194
	'Czech localization'           : '',
195
	'Japanese localization'        : '',
196
	'Latvian localization'         : '',
197
	'German localization'          : '',
198
	'Ukranian localization'        : '',
199
	'Persian (farsi) localization' : '',
200
	'Arabic localization'          : '',
201
	'RTL support'                  : '',
202
	'French localization'          : '',
203
	'Dutch localization'           : '',
204
	'Hungarian localization'       : '',
205
	'Polish localization'          : '',
206
	'Italian localization'         : '',
207
	'Traditional Chinese localization' : '',
208
	'For more information about this software visit the' : '',
209
	'elRTE website'                : 'на сайте elRTE'
210
}
211
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.ar.js (+195 lines)
Line 0 Link Here
1
/**
2
 * Arabic translation
3
 * @author tawfek daghistani <tawfekov@gmail.com>
4
 * @version 2010-09-18
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.ar = {
8
	'Editor' : 'المحرر',
9
	'Source' : 'المصدر',
10
	// Panel Name
11
	'Copy/Pase'      : 'نسخ/لصق',
12
	'Undo/Redo'      : 'تراجع/تكرار',
13
	'Text styles'    : 'تنسيق النص',
14
	'Colors'         : 'الألوان',
15
	'Alignment'      : 'المحاذاة',
16
	'Indent/Outdent' : 'مسافة بادئة / مسافة خاتمة',
17
	'Indent/Outdent' : '',
18
	'Text format'    : 'التنسيق',
19
	'Lists'          : 'قوائم',
20
	'Misc elements'  : 'عناصر متنوعة',
21
	'Links'          : 'رابط تشعبي',
22
	'Images'         : 'صورة',
23
	'Media'          : 'عنصر صوت أو فيديو',
24
	'Tables'         : 'جدول',
25
	'File manager (elFinder)' : 'مستكشف الملفات',
26
	// button names
27
	'Save'                    : 'حفظ',
28
	'Copy'                    : 'نسخ',
29
	'Cut'                     : 'قص',
30
	'Paste'                   : 'لصق',
31
	'Paste only text'         : 'لصق النصوص فقط',
32
	'Paste formatted text'    : 'لصق النصوص المنسقة',
33
	'Clean format'            : 'إزالة التنسيقات',
34
	'Undo last action'        : 'التراجع عن أخر فعل',
35
	'Redo previous action'    : 'تكرار أخر فعل ',
36
	'Bold'                    : 'عريض',
37
	'Italic'                  : 'مائل',
38
	'Underline'               : 'تحته خط',
39
	'Strikethrough'           : 'يتوسطه خط',
40
	'Superscript'             : 'يعلوه خط',
41
	'Subscript'               : 'تحته خط',
42
	'Align left'              : 'محاذاة إلى اليسار',
43
	'Ailgn right'             : 'محاذاة إلى اليمين ',
44
	'Align center'            : 'محاذاة إلى المنتصف',
45
	'Align full'              : 'محاذاة بعرض الصفحة',
46
	'Font color'              : 'لون الخط',
47
	'Background color'        : 'لون الخلفية',
48
	'Indent'                  : 'مسافة بادئة',
49
	'Outdent'                 : 'مسافة خاتمة',
50
	'Underline'               : '',
51
	'Strikethrough'           : '',
52
	'Superscript'             : '',
53
	'Subscript'               : '',
54
	'Align left'              : 'محاذاة إلى اليسار',
55
	'Ailgn right'             : 'محاذاة إلى اليمين ',
56
	'Align center'            : 'محاذاة إل المنتصف',
57
	'Align full'              : '',
58
	'Font color'              : 'لون الخط',
59
	'Background color'        : 'لون الخلفية',
60
	'Indent'                  : '',
61
	'Outdent'                 : '',
62
	'Format'                  : 'النتسيق',
63
	'Font size'               : 'قياس الخط',
64
	'Font'                    : 'الخط',
65
	'Ordered list'            : 'فائمة مرقمة',
66
	'Unordered list'          : 'قائمة مرتبة',
67
	'Horizontal rule'         : 'خط افقي',
68
	'Blockquote'              : 'اقتباس',
69
	'Block element (DIV)'     : 'اقتباس (DIV)',
70
	'Link'                    : 'رابط',
71
	'Delete link'             : 'حذف الرابط',
72
	'Bookmark'                : 'حفظ كعلامة',
73
	'Image'                   : 'صورة',
74
	'Table'                   : 'جدول',
75
	'Delete table'            : 'حذف الجدول',
76
	'Insert row before'       : 'إدراج الصف قبل ',
77
	'Insert row after'        : 'إدراج الصف بعده',
78
	'Delete row'              : 'حذف الصف',
79
	'Insert column before'    : 'إدراج عمود قبل ',
80
	'Insert column after'     : 'إدراج عمود بعد ',
81
	'Delete column'           : 'حذف العمود',
82
	'Merge table cells'       : 'دمج الخلايا',
83
	'Split table cell'        : 'تقسيم الخلية',
84
	'Toggle display document structure' : 'إخفاء/ إظهار ',
85
	'Table cell properties'   : 'خصائص الخلايا',
86
	'Table properties'        : 'خصائص الجدول',
87
	'Toggle full screen mode' : 'عرض بكامل الشاشة',
88
	'Open file manager'       : 'افتح مستكشف الملفات',
89
	'Non breakable space'     : '',
90
	'Stop element floating'   : '',
91
	// dialogs
92
	'Warning' : 'تنبيه',
93
	'Properies' : 'خصائص',
94
	'Popup' : 'نافذة منبئقة',
95
	'Advanced' : 'متقدم',
96
	'Events' : 'الأحداث',
97
	'Popup' : '',
98
	'Advanced' : '',
99
	'Events' : '',
100
	'Width' : 'العرض',
101
	'Height' : 'الارتفاع',
102
	'Left'   : 'اليسار',
103
	'Center' : 'المنتصف',
104
	'Right'  : 'اليمين',
105
	'Border' : 'حدود',
106
	'Background' : 'الخلفية',
107
	'Css class' : 'Css نمط',
108
	'Css style' : 'Css تنسيق',
109
	'Border' : '',
110
	'Background' : '',
111
	'Css class' : '',
112
	'Css style' : '',
113
	'No' : 'لا',
114
	'Title' : 'العنوان',
115
	'Script direction' : 'اتجاه النص',
116
	'Language' : 'اللغة',
117
	'Charset' : 'الترميز',
118
	'Not set' : 'غير محدد',
119
	'Left to right' : 'من اليسار إلى اليمين',
120
	'Right to left' : 'من اليمين إلى اليسار',
121
	'In this window' : '(_self)',
122
	'In new window (_blank)' : '(_blank)',
123
	'In new parent window (_parent)' : '(_parent)',
124
	'In top frame (_top)' : '(_top)',
125
	'URL' : '',
126
	'Open in' : '',
127
	// copy
128
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'هذه العملية معطلة لأسباب أمنية , استخدم الاختصار بدلاً عنها',
129
	// format
130
	'Heading 1' : 'عنوان رئيسي 1',
131
	'Heading 2' : 'عنوان رئيسي 2',
132
	'Heading 3' : 'عنوان رئيسي 3',
133
	'Heading 4' : 'عنوان رئيسي 4',
134
	'Heading 5' : 'عنوان رئيسي 5',
135
	'Heading 6' : 'عنوان رئيسي 6',
136
	'Paragraph' : 'مقطع نصي ',
137
	'Address' : 'العنوان',
138
	'Preformatted' : '',
139
	// font size
140
	'Small (8pt)'   : '',
141
	'Small (10px)'  : '',
142
	'Small (12pt)'  : '',
143
	'Normal (14pt)' : '',
144
	'Large (18pt)'  : '',
145
	'Large (24pt)'  : '',
146
	'Large (36pt)'  : '',
147
	// bookmark
148
	'Bookmark name' : 'اسم العلامة',
149
	// link
150
	'Link URL' : '(ارتباط)',
151
	'Target' : 'الهدف',
152
	'Open link in popup window' : 'افتح في نافذة صغيرة',
153
	'URL' : 'ارتباط',
154
	'Window name' : 'اسم النافذة',
155
	'Window size' : 'حجم النافذة',
156
	'Window position' : 'الموضع',
157
	'Location bar' : 'العنوان',
158
	'Menu bar' : 'شريط القوائم',
159
	'Toolbar' : 'قائمة الأدوات',
160
	'Scrollbars' : 'شريط التمرير',
161
	'Status bar' : 'شريط المعلومات',
162
	'Resizable' : 'متغير الحجم',
163
	'Depedent' : '',
164
	'Add return false' : 'إضافة (return false)',
165
	'Menu bar' : '',
166
	'Toolbar' : 'قائمة الأدوات',
167
	'Scrollbars' : '',
168
	'Status bar' : '',
169
	'Resizable' : 'متغير الحجم',
170
	'Depedent' : '',
171
	'Add return false' : '',
172
	'Target MIME type' : 'MIME type',
173
	'Relationship page to target (rel)' : '',
174
	'Relationship target to page (rev)' : '',
175
	'Tab index' : '',
176
	'Access key' : 'زر اختصار',
177
	// image
178
	'Size' : 'الحجم',
179
	'Preview' : 'معاينة',
180
	'Margins' : '',
181
	'Alt text' : 'نص بديل',
182
	'Image URL' : 'رابط صورة',
183
	// table
184
	'Spacing'       : 'مسافات (spacing)',
185
	'Padding'       : 'الهامش (padding)',
186
	'Spacing'       : '',
187
	'Padding'       : '',
188
	'Rows'          : 'الصفوف',
189
	'Columns'       : 'الأعمدة',
190
	'Groups'        : 'المجموعات',
191
	'Cells'         : 'خلايا',
192
	'Caption'       : 'العنوان',
193
	'Inner borders' : 'حدود داخلية'
194
}
195
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.cs.js (+169 lines)
Line 0 Link Here
1
/*
2
 * Czech translation
3
 * @author Michal Marek <mich.marek@gmail.com>
4
 * @version 2010-09-19
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.cs = {
8
	'Editor' : 'Editor',
9
	'Source' : 'Kód',
10
	// Panel Name
11
	'Copy/Pase'      : 'Kopírovat/Vložit',
12
	'Undo/Redo'      : 'Zpět/Znovu',
13
	'Text styles'    : 'Styly',
14
	'Colors'         : 'Barvy',
15
	'Alignment'      : 'Zarovnání',
16
	'Indent/Outdent' : 'Odsadit / Předsadit',
17
	'Text format'    : 'Formát',
18
	'Lists'          : 'Seznamy',
19
	'Misc elements'  : 'Ostatní elementy',
20
	'Links'          : 'Odkazy',
21
	'Images'         : 'Obrázky',
22
	'Media'          : 'Média',
23
	'Tables'         : 'Tabulky',
24
	'File manager (elFinder)' : 'Správce souborů (elFinder)',
25
	'elfinder' : 'Správce souborů',
26
	// button names
27
	'Save'                    : 'Uložit',
28
	'Copy'                    : 'Kopírovat',
29
	'Cut'                     : 'Vyjmout',
30
	'Paste'                   : 'Vložit',
31
	'Paste only text'         : 'Vložit pouze text',
32
	'Paste formatted text'    : 'Vložit formátovaný text',
33
	'Clean format'            : 'Vyčistit',
34
	'Undo last action'        : 'Zpět',
35
	'Redo previous action'    : 'Znovu',
36
	'Bold'                    : 'Tučné',
37
	'Italic'                  : 'Kurzíva',
38
	'Underline'               : 'Podtržené',
39
	'Strikethrough'           : 'Škrtnuté',
40
	'Superscript'             : 'Horní index',
41
	'Subscript'               : 'Dolní index',
42
	'Align left'              : 'Zarovnat vlevo',
43
	'Ailgn right'             : 'Zarovna vpravo',
44
	'Align center'            : 'Zarovnat na střed',
45
	'Align full'              : 'Do bloku',
46
	'Font color'              : 'Barva písma',
47
	'Background color'        : 'Barva pozadí',
48
	'Indent'                  : 'Odsadit',
49
	'Outdent'                 : 'Předsadit',
50
	'Format'                  : 'Formát',
51
	'Font size'               : 'Velikost',
52
	'Font'                    : 'Písmo',
53
	'Ordered list'            : 'Číslovaný seznam',
54
	'Unordered list'          : 'Seznam',
55
	'Horizontal rule'         : 'Vodorovná čára',
56
	'Blockquote'              : 'Citát',
57
	'Block element (DIV)'     : 'DIV element',
58
	'Link'                    : 'Odkaz',
59
	'Delete link'             : 'Odstranit odkaz',
60
	'Bookmark'                : 'Záložka',
61
	'Image'                   : 'Obrázek',
62
	'Table'                   : 'Tabulka',
63
	'Delete table'            : 'Smazat tabulku',
64
	'Insert row before'       : 'Vložit řádek nad',
65
	'Insert row after'        : 'Vložit řádek pod',
66
	'Delete row'              : 'Smazat řádek',
67
	'Insert column before'    : 'Vložit sloupec před',
68
	'Insert column after'     : 'Vložit sloupec za',
69
	'Delete column'           : 'Smazat sloupec',
70
	'Merge table cells'       : 'Sloučit buňky',
71
	'Split table cell'        : 'Rozdělit buňku',
72
	'Toggle display document structure' : 'Zobrazit strukturu',
73
	'Table cell properties'   : 'Vlastnosti buňky',
74
	'Table properties'        : 'Vlastnosti tabulky',
75
	'Toggle full screen mode' : 'Fullscreen',
76
	'Open file manager'       : 'Otevřít správce souborů',
77
	'Non breakable space'     : 'Nedělitelná mezera',
78
	'Stop element floating'   : 'Zrušit obtékání elementu',
79
	// dialogs
80
	'Warning' : 'Pozor',
81
	'Properies' : 'Vlastnosti',
82
	'Popup' : 'Pop-up',
83
	'Advanced' : 'Více',
84
	'Events' : 'Události',
85
	'Width' : 'Šířka',
86
	'Height' : 'Výška',
87
	'Left'   : 'Vlevo',
88
	'Center' : 'Na střed',
89
	'Right'  : 'Vpravo',
90
	'Border' : 'Rámeček',
91
	'Background' : 'Pozadí',
92
	'Css class' : 'CSS třída',
93
	'Css style' : 'CSS styl',
94
	'No' : 'Ne',
95
	'Title' : 'Titulek',
96
	'Script direction' : 'Pravidla scriptu',
97
	'Language' : 'Jazyk',
98
	'Charset' : 'Znaková sada',
99
	'Not set' : 'Nenastaveno',
100
	'Left to right' : 'Zleva doprava',
101
	'Right to left' : 'Zprava doleva',
102
	'In this window' : 'V tomto okně (_self)',
103
	'In new window (_blank)' : 'V novém okně (_blank)',
104
	'In new parent window (_parent)' : 'V novém rodičovském okně (_parent)',
105
	'In top frame (_top)' : 'V hlavním okně (_top)',
106
	'URL' : 'URL',
107
	'Open in' : 'Otevřít v',
108
	// copy
109
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'Tato operace je ve vašem prohlížeči vypnutá kvůli bezpečnosti. Použijte klávesovou zkratku.',
110
	// format
111
	'Heading 1' : 'Nadpis 1',
112
	'Heading 2' : 'Nadpis 2',
113
	'Heading 3' : 'Nadpis 3',
114
	'Heading 4' : 'Nadpis 4',
115
	'Heading 5' : 'Nadpis 5',
116
	'Heading 6' : 'Nadpis 6',
117
	'Paragraph' : 'Odstavec',
118
	'Address' : 'Adresa',
119
	'Preformatted' : 'Předformátováno',
120
	// font size
121
	'Small (8pt)'   : 'Malé (8 pt)',
122
	'Small (10px)'  : 'Malé (10 pt)',
123
	'Small (12pt)'  : 'Malé (12 pt)',
124
	'Normal (14pt)' : 'Normální (14 pt)',
125
	'Large (18pt)'  : 'Velké (18 pt)',
126
	'Large (24pt)'  : 'Velké (24 pt)',
127
	'Large (36pt)'  : 'Velké (36 pt)',
128
	// bookmark
129
	'Bookmark name' : 'Jméno záložky',
130
	// link
131
	'Link URL' : 'URL',
132
	'Target' : 'Cíl',
133
	'Open link in popup window' : 'Otevírat odkaz v popup okně.',
134
	'URL' : 'URL',
135
	'Window name' : 'Jméno okna',
136
	'Window size' : 'Velikost okna',
137
	'Window position' : 'Pozice okna',
138
	'Location bar' : 'Adresní řádek',
139
	'Menu bar' : 'Menu nabídek',
140
	'Toolbar' : 'Lišta nástrojů',
141
	'Scrollbars' : 'Posuvníky',
142
	'Status bar' : 'Stavový řádek',
143
	'Resizable' : 'Změna velikosti',
144
	'Depedent' : '',
145
	'Add return false' : 'Přidat return false',
146
	'Target MIME type' : 'Cílový MIME typ',
147
	'Relationship page to target (rel)' : '',
148
	'Relationship target to page (rev)' : '',
149
	'Tab index' : '',
150
	'Access key' : '',
151
	// image
152
	'Size' : 'Velikost',
153
	'Preview' : 'Náhled',
154
	'Margins' : 'Okraje',
155
	'Alt text' : 'Alternativní text',
156
	'Image URL' : 'URL',
157
	// table
158
	'Spacing'       : 'Vnější okraje',
159
	'Padding'       : 'Vnitřní okraje',
160
	'Rows'          : 'Řádky',
161
	'Columns'       : 'Sloupce',
162
	'Groups'        : 'Skupiny',
163
	'Cells'         : 'Buňky',
164
	'Caption'       : 'Popisek',
165
	'Inner borders' : 'Vnitřní rámečky'
166
167
168
}
169
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.de.js (+168 lines)
Line 0 Link Here
1
/*
2
 * German translation
3
 * @author Vasiliy Razumnyh <rvn@std42.ru>
4
 * @version 2010-09-18
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.de = {
8
	'Editor' : 'Editor',
9
	'Source' : 'Quellcode',
10
	// Panel Name
11
	'Copy/Pase'      : 'Kopieren/Einfügen',
12
	'Undo/Redo'      : 'Rückgängig/Wiederherstellen',
13
	'Text styles'    : 'Textstile',
14
	'Colors'         : 'Farbe',
15
	'Alignment'      : 'Alignment',
16
	'Indent/Outdent' : 'Einrücken / Ausrücken',
17
	'Text format'    : 'Format',
18
	'Lists'          : 'Listen',
19
	'Misc elements'  : 'Sonstige elemente',
20
	'Links'          : 'Link',
21
	'Images'         : 'Bild',
22
	'Media'          : 'Media datei',
23
	'Tables'         : 'Tabelle',
24
	'File manager (elFinder)' : 'Datei-Manager (elFinder)',
25
	// button names
26
	'Save'                    : 'Speichern',
27
	'Copy'                    : 'Ausschneiden',
28
	'Cut'                     : 'Kopieren',
29
	'Paste'                   : 'Einfügen',
30
	'Paste only text'         : 'Fügen sie nur text',
31
	'Paste formatted text'    : 'Fügen sie formatierten text',
32
	'Clean format'            : 'Formatierungen entfernen',
33
	'Undo last action'        : 'Rückgängig',
34
	'Redo previous action'    : 'Wiederherstellen',
35
	'Bold'                    : 'Fett',
36
	'Italic'                  : 'Kursiv',
37
	'Underline'               : 'Unterstrichen',
38
	'Strikethrough'           : 'Durchgestrichen',
39
	'Superscript'             : 'Hochgestellt',
40
	'Subscript'               : 'Tiefgestellt',
41
	'Align left'              : 'Linksbündig',
42
	'Ailgn right'             : 'Rechtsbündig',
43
	'Align center'            : 'Zentriert',
44
	'Align full'              : 'Blocksatz',
45
	'Font color'              : 'Textfarbe',
46
	'Background color'        : 'Hintergrundfarbe',
47
	'Indent'                  : 'Einzug erhöhen',
48
	'Outdent'                 : 'Einzug verringern',
49
	'Format'                  : 'Format',
50
	'Font size'               : 'Größe',
51
	'Font'                    : 'Schriftart',
52
	'Ordered list'            : 'Nummerierte Liste',
53
	'Unordered list'          : 'Liste',
54
	'Horizontal rule'         : 'Horizontale Linie',
55
	'Blockquote'              : 'Zitatblock',
56
	'Block element (DIV)'     : 'Block-Element (DIV)',
57
	'Link'                    : 'Link',
58
	'Delete link'             : 'Link entfernen',
59
	'Bookmark'                : 'Anker einfügen/editieren',
60
	'Image'                   : 'Bild',
61
	'Table'                   : 'Tabelle',
62
	'Delete table'            : 'Tabelle löschen',
63
	'Insert row before'       : 'Zeile oberhalb einfügen',
64
	'Insert row after'        : 'Zeile unterhalb einfügen',
65
	'Delete row'              : 'Zeile entfernen',
66
	'Insert column before'    : 'Spalte links davor einfügen',
67
	'Insert column after'     : 'Spalte rechts danach einfügen',
68
	'Delete column'           : 'Spalte löschen',
69
	'Merge table cells'       : 'Zellen verbinden',
70
	'Split table cell'        : 'Zelle teilen',
71
	'Toggle display document structure' : 'Blöcke anzeigen',
72
	'Table cell properties'   : 'Zellen-Eigenschaften',
73
	'Table properties'        : 'Tabellen-Eigenschaften',
74
	'Toggle full screen mode' : 'Editor maximieren',
75
	'Open file manager'       : 'Server',
76
	'Non breakable space'     : 'Non-breaking space',
77
	'Stop element floating'   : 'Deaktivieren Sie flow-Element Text',
78
	// dialogs
79
	'Warning' : 'ACHTUNG',
80
	'Properies' : 'Properies',
81
	'Popup' : 'Pop-up',
82
	'Advanced' : 'mehr',
83
	'Events' : 'Veranstaltungen',
84
	'Width' : 'Breite',
85
	'Height' : 'Höhe',
86
	'Left'   : 'Links',
87
	'Center' : 'Zentrum',
88
	'Right'  : 'Rechts',
89
	'Border' : 'Rahmen',
90
	'Background' : 'Hintergrundfarbe',
91
	'Css class' : 'Css class',
92
	'Css style' : 'Css style',
93
	'No' : 'Nein',
94
	'Title' : 'Titel',
95
	'Script direction' : 'Richtung Schreiben',
96
	'Language' : 'Sprache',
97
	'Charset' : 'Charset',
98
	'Not set' : 'nicht',
99
	'Left to right' : 'Links nach Rechts',
100
	'Right to left' : 'Rechts nach Links',
101
	'In this window' : 'Gleiches Fenster (_self)',
102
	'In new window (_blank)' : 'Neues Fenster (_blank)',
103
	'In new parent window (_parent)' : 'Oberes Fenster (_parent)',
104
	'In top frame (_top)' : 'Oberstes Fenster (_top)',
105
	'URL' : '',
106
	'Open in' : '',
107
	// copy
108
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'Dieser Vorgang ist in Ihrem Browser aus Sicherheitsgründen deaktiviert. Tastenkombination statt.',
109
	// format
110
	'Heading 1' : 'Überschrift 1',
111
	'Heading 2' : 'Überschrift 2',
112
	'Heading 3' : 'Überschrift 3',
113
	'Heading 4' : 'Überschrift 4',
114
	'Heading 5' : 'Überschrift 5',
115
	'Heading 6' : 'Überschrift 6',
116
	'Paragraph' : 'Formatiert',
117
	'Address' : 'Addresse',
118
	'Preformatted' : '',
119
	// font size
120
	'Small (8pt)'   : '',
121
	'Small (10px)'  : '',
122
	'Small (12pt)'  : '',
123
	'Normal (14pt)' : '',
124
	'Large (18pt)'  : '',
125
	'Large (24pt)'  : '',
126
	'Large (36pt)'  : '',
127
	// bookmark
128
	'Bookmark name' : 'Anker Name',
129
	// link
130
	'Link URL' : '(URL)',
131
	'Target' : 'Zielseite',
132
	'Open link in popup window' : 'Link in einem Popup-Fenster',
133
	'URL' : '',
134
	'Window name' : 'Pop-up Fenster-Name',
135
	'Window size' : 'Größe',
136
	'Window position' : 'Position',
137
	'Location bar' : 'Adress-Leiste',
138
	'Menu bar' : 'Menü-Leiste',
139
	'Toolbar' : 'Werkzeugleiste',
140
	'Scrollbars' : 'Rollbalken',
141
	'Status bar' : 'Statusleiste',
142
	'Resizable' : 'Vergrößerbar',
143
	'Depedent' : 'Abhängig (Netscape)',
144
	'Add return false' : 'add (return false)',
145
	'Target MIME type' : 'MIME type',
146
	'Relationship page to target (rel)' : '',
147
	'Relationship target to page (rev)' : '',
148
	'Tab index' : '',
149
	'Access key' : 'Zugriffstaste',
150
	// image
151
	'Size' : 'Größe',
152
	'Preview' : 'Vorschau',
153
	'Margins' : '',
154
	'Alt text' : 'Alt',
155
	'Image URL' : 'URL',
156
	// table
157
	'Spacing'       : 'Abstand (spacing)',
158
	'Padding'       : 'Abstand (padding)',
159
	'Rows'          : 'Zeile',
160
	'Columns'       : 'Spalte',
161
	'Groups'        : 'Gruppen',
162
	'Cells'         : 'Zellen',
163
	'Caption'       : 'Tabellen-Eigenschaften',
164
	'Inner borders' : 'Innere Grenzen'
165
166
167
}
168
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.es.js (+167 lines)
Line 0 Link Here
1
/**
2
 * Spanish translation
3
 * @author Ricardo Obregón <robregonm@gmail.com>
4
 * @version 2010-09-18
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.es = {
8
	'Editor' : 'Editor',
9
	'Source' : 'Código Fuente',
10
	// Panel Name
11
	'Copy/Pase'      : 'Copiar/Pegar',
12
	'Undo/Redo'      : 'Deshacer/Rehacer',
13
	'Text styles'    : 'Estilos de Texto',
14
	'Colors'         : 'Colores',
15
	'Alignment'      : 'Alineación',
16
	'Indent/Outdent' : 'Aumentar/Disminuir Sangría',
17
	'Text format'    : 'Formato de texto',
18
	'Lists'          : 'Listas',
19
	'Misc elements'  : 'Elementos varios',
20
	'Links'          : 'Vínculos',
21
	'Images'         : 'Imágenes',
22
	'Media'          : 'Multimedia',
23
	'Tables'         : 'Tablas',
24
	'File manager (elFinder)' : 'Administrador de archivos',
25
	// button names
26
	'Save'                    : 'Guardar',
27
	'Copy'                    : 'Copiar',
28
	'Cut'                     : 'Cortar',
29
	'Paste'                   : 'Pegar',
30
	'Paste only text'         : 'Pegar solo texto',
31
	'Paste formatted text'    : 'Pegar texto formateado',
32
	'Clean format'            : 'Limpiar formato',
33
	'Undo last action'        : 'Deshacer la última acción',
34
	'Redo previous action'    : 'Rehacer la última acción',
35
	'Bold'                    : 'Negrita',
36
	'Italic'                  : 'Cursiva',
37
	'Underline'               : 'Subrayado',
38
	'Strikethrough'           : 'Tachado',
39
	'Superscript'             : 'Superíndice',
40
	'Subscript'               : 'Subíndice',
41
	'Align left'              : 'Alinear a la izquierda',
42
	'Ailgn right'             : 'Alinear a la derecha',
43
	'Align center'            : 'Centrar',
44
	'Align full'              : 'Justificado',
45
	'Font color'              : 'Color de texto',
46
	'Background color'        : 'Color de fondo',
47
	'Indent'                  : 'Aumentar sangría',
48
	'Outdent'                 : 'Reducir sangría',
49
	'Format'                  : 'Formato',
50
	'Font size'               : 'Tamaño de letra',
51
	'Font'                    : 'Fuente',
52
	'Ordered list'            : 'Lista ordenada',
53
	'Unordered list'          : 'Lista desordenada',
54
	'Horizontal rule'         : 'Línea horizontal',
55
	'Blockquote'              : 'Cita',
56
	'Block element (DIV)'     : 'Bloque de Elementos (DIV)',
57
	'Link'                    : 'Vínculo',
58
	'Delete link'             : 'Eliminar vínculo',
59
	'Bookmark'                : 'Marcador',
60
	'Image'                   : 'Imagen',
61
	'Table'                   : 'Tabla',
62
	'Delete table'            : 'Eliminar tabla',
63
	'Insert row before'       : 'Insertar fila antes',
64
	'Insert row after'        : 'Insertar fila después',
65
	'Delete row'              : 'Eliminar fila',
66
	'Insert column before'    : 'Insertar columna antes',
67
	'Insert column after'     : 'Insertar columna después',
68
	'Delete column'           : 'Eliminar columna',
69
	'Merge table cells'       : 'Fundir celdas',
70
	'Split table cell'        : 'Dividir celda',
71
	'Toggle display document structure' : 'Pantalla de estructura de documento',
72
	'Table cell properties'   : 'Propiedades de celda',
73
	'Table properties'        : 'Propiedades de tabla',
74
	'Toggle full screen mode' : 'Modo de pantalla completa',
75
	'Open file manager'       : 'Abrir administrador de archivos',
76
	'Non breakable space'     : 'Espacio indivisible',
77
	'Stop element floating'   : 'Detener elemento flotante',
78
	// dialogs
79
	'Warning' : 'Advertencia',
80
	'Properies' : 'Propiedades',
81
	'Popup' : 'Ventana emergente',
82
	'Advanced' : 'Avanzado',
83
	'Events' : 'Eventos',
84
	'Width' : 'Ancho',
85
	'Height' : 'Alto',
86
	'Left'   : 'Izquierda',
87
	'Center' : 'Centrado',
88
	'Right'  : 'Derecha',
89
	'Border' : 'Borde',
90
	'Background' : 'Fondo',
91
	'Css class' : 'Clase CSS',
92
	'Css style' : 'Estilo CSS',
93
	'No' : 'No',
94
	'Title' : 'Título',
95
	'Script direction' : 'Dirección del script',
96
	'Language' : 'Idioma',
97
	'Charset' : 'Charset',
98
	'Not set' : 'No establecido',
99
	'Left to right' : 'Izquierda a derecha',
100
	'Right to left' : 'Derecha a izquierda',
101
	'In this window' : 'En esta ventana (_self)',
102
	'In new window (_blank)' : 'En nueva ventana (_blank)',
103
	'In new parent window (_parent)' : 'En nueva ventana padre (_parent)',
104
	'In top frame (_top)' : 'En marco superior (_top)',
105
	'URL' : 'URL',
106
	'Open in' : 'Abrir en',
107
	// copy
108
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'Esta operación está desactivada en su navegador por razones de seguridad. Utilice en su lugar un comando de teclado.',
109
	// format
110
	'Heading 1' : 'Encabezado 1',
111
	'Heading 2' : 'Encabezado 2',
112
	'Heading 3' : 'Encabezado 3',
113
	'Heading 4' : 'Encabezado 4',
114
	'Heading 5' : 'Encabezado 5',
115
	'Heading 6' : 'Encabezado 6',
116
	'Paragraph' : 'Párrafo',
117
	'Address' : 'Dirección',
118
	'Preformatted' : 'Preformateado',
119
	// font size
120
	'Small (8pt)'   : 'Pequeño (8pt)',
121
	'Small (10px)'  : 'Pequeño (10px)',
122
	'Small (12pt)'  : 'Pequeño (12pt)',
123
	'Normal (14pt)' : 'Normal (14pt)',
124
	'Large (18pt)'  : 'Grande (18pt)',
125
	'Large (24pt)'  : 'Grande (24pt)',
126
	'Large (36pt)'  : 'Grande (36pt)',
127
	// bookmark
128
	'Bookmark name' : 'Nombre del marcador',
129
	// link
130
	'Link URL' : 'URL del vínculo',
131
	'Target' : 'Objetivo',
132
	'Open link in popup window' : 'Abrir vínculo en ventana emergente',
133
	'Window name' : 'Nombre de la ventana',
134
	'Window size' : 'Tamaño de la ventana',
135
	'Window position' : 'Posición de la ventana',
136
	'Location bar' : 'Barra de dirección',
137
	'Menu bar' : 'Barra de Menú',
138
	'Toolbar' : 'Barra de herramientas',
139
	'Scrollbars' : 'Barras de desplazamiento',
140
	'Status bar' : 'Barra de estado',
141
	'Resizable' : 'Redimensionable',
142
	'Depedent' : 'Dependiente (Netscape)',
143
	'Add return false' : 'Agregar (return false)',
144
	'Target MIME type' : 'Objetivo de Tipo MIME',
145
	'Relationship page to target (rel)' : '',
146
	'Relationship target to page (rev)' : '',
147
	'Tab index' : '',
148
	'Access key' : 'Tecla de acceso',
149
	// image
150
	'Size' : 'Tamaño',
151
	'Preview' : 'Previsualización',
152
	'Margins' : 'Márgenes',
153
	'Alt text' : 'Texto alternativo',
154
	'Image URL' : 'URL de la imagen',
155
	// table
156
	'Spacing'       : 'Espaciado (Spacing)',
157
	'Padding'       : 'Relleno (Padding)',
158
	'Rows'          : 'Filas',
159
	'Columns'       : 'Columnas',
160
	'Groups'        : 'Grupos',
161
	'Cells'         : 'Celdas',
162
	'Caption'       : 'Leyenda',
163
	'Inner borders' : 'Bordes internos'
164
165
166
}
167
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.fa.js (+168 lines)
Line 0 Link Here
1
/**
2
 * Persian translation
3
 * @author Saleh soozanchi <info@soozanchi.ir>
4
 * @version 2010-09-18
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.fa = {
8
	'Editor' : 'ویراستار',
9
	'Source' : 'کد منبع',
10
	// Panel Name
11
	'Copy/Pase'      : 'کپی در حافظه موفت/بازگردانی از حافظه',
12
	'Undo/Redo'      : 'انجام عمل بعد/برگشت به عمل قبل',
13
	'Text styles'    : 'استایل متن',
14
	'Colors'         : 'رنگها',
15
	'Alignment'      : 'صفحه بندی',
16
	'Indent/Outdent' : 'تو رفتگی/ برون رفتگی',
17
	'Text format'    : 'قالب متون',
18
	'Lists'          : 'لیست ها',
19
	'Misc elements'  : 'عناصر متفرقه',
20
	'Links'          : 'پیوندها',
21
	'Images'         : 'تصاویر',
22
	'Media'          : 'مولتی مدیا',
23
	'Tables'         : 'جدول ها',
24
	'File manager (elFinder)' : '(elFinder)مدیریت فایل',
25
	// button names
26
	'Save'                    : 'ذخیره کردن',
27
	'Copy'                    : 'کپی کردن',
28
	'Cut'                     : 'برش دادن',
29
	'Paste'                   : 'بازگردانی',
30
	'Paste only text'         : 'بازگرادنی فقط متنها',
31
	'Paste formatted text'    : 'بازگردانی متن های دارای قالب',
32
	'Clean format'            : 'حذف قالب ها',
33
	'Undo last action'        : 'بازگشتن به آخرین حرکت',
34
	'Redo previous action'    : 'تکرار حرکت قبلی',
35
	'Bold'                    : 'درشت',
36
	'Italic'                  : 'خوابیده',
37
	'Underline'               : 'خط زیر متن',
38
	'Strikethrough'           : 'خط روی متن',
39
	'Superscript'             : 'بالانویس',
40
	'Subscript'               : 'زیرنویس',
41
	'Align left'              : 'چپ چین',
42
	'Ailgn right'             : 'راست چین',
43
	'Align center'            : 'وسط چین',
44
	'Align full'              : 'به صورت کشده و کامل',
45
	'Font color'              : 'رنگ قلم ها',
46
	'Background color'        : 'رنگ ضمینه',
47
	'Indent'                  : 'تورفتگی',
48
	'Outdent'                 : 'بیرون رفتگی',
49
	'Format'                  : 'قالب',
50
	'Font size'               : 'اندازه قلم',
51
	'Font'                    : 'قلم',
52
	'Ordered list'            : 'مرتب سازی لیست',
53
	'Unordered list'          : 'به هم ریختن لیست',
54
	'Horizontal rule'         : 'خط افقی',
55
	'Blockquote'              : 'نقل قول',
56
	'Block element (DIV)'     : 'عنر نگه دارنده (DIV)',
57
	'Link'                    : 'پیوند',
58
	'Delete link'             : 'حذف لینک',
59
	'Bookmark'                : 'نشانه گزاری',
60
	'Image'                   : 'تصویر',
61
	'Table'                   : 'جدول',
62
	'Delete table'            : 'حذف جدول',
63
	'Insert row before'       : 'درج سطر قبل از این',
64
	'Insert row after'        : 'درج سطر بعد از این',
65
	'Delete row'              : 'حذف سطر',
66
	'Insert column before'    : 'درج ستون قبل از',
67
	'Insert column after'     : 'درج ستون بعد از',
68
	'Delete column'           : 'حذف ستون',
69
	'Merge table cells'       : 'ادغام کردن  خانه های جدول',
70
	'Split table cell'        : 'تقسیم و مجزا کردن خانه های جدول',
71
	'Toggle display document structure' : 'زنجیر شده به ساختار سند در حال نمایش',
72
	'Table cell properties'   : 'تنظیمات خونه جدول',
73
	'Table properties'        : 'تنظیمات جدول',
74
	'Toggle full screen mode' : 'نمایش و پوشانیدن کل نمایشگر',
75
	'Open file manager'       : 'بازکردن مدیریت فایل',
76
	'Non breakable space'     : 'فضای غیر قابل شکستن',
77
	'Stop element floating'   : 'متوقف ساخت عنر شناور',
78
	// dialogs
79
	'Warning' : 'اخطار',
80
	'Properies' : 'خصوصیات',
81
	'Popup' : 'پنجر بازشو',
82
	'Advanced' : 'پیشرفته',
83
	'Events' : 'رویداد',
84
	'Width' : 'طول',
85
	'Height' : 'عرض',
86
	'Left'   : 'چپ',
87
	'Center' : 'وسط',
88
	'Right'  : 'راست',
89
	'Border' : 'کادر حایه',
90
	'Background' : 'پشت صحنه/ضمینه',
91
	'Css class' : 'کلاس سی اس اس',
92
	'Css style' : 'استایل سی اس اس',
93
	'No' : 'خیر',
94
	'Title' : 'عنوان',
95
	'Script direction' : 'اسکریپت هم سو',
96
	'Language' : 'ربان',
97
	'Charset' : 'کدپیج زیان',
98
	'Not set' : 'اعمال نشد',
99
	'Left to right' : 'چپ به راست',
100
	'Right to left' : 'راست به چپ',
101
	'In this window' : '(_self) نمایش در همین پنجره',
102
	'In new window (_blank)' : '(_blank) نمایش در پنجره جدید ',
103
	'In new parent window (_parent)' : '(_parent) نمایش در پنجره اصلی',
104
	'In top frame (_top)' : '(_top) نمایش در بالای قاب',
105
	'URL' : '',
106
	'Open in' : 'باز کردن در',
107
	// copy
108
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'این عملیات به دلایل امنیتی در مرورگر وب شما مسدود شده ، لطفا از میانبر ها استفاده کنید.',
109
	// format
110
	'Heading 1' : 'سر فصل 1',
111
	'Heading 2' : 'سر فصل 2',
112
	'Heading 3' : 'سر فصل 3',
113
	'Heading 4' : 'سر فصل 4',
114
	'Heading 5' : 'سر فصل 5',
115
	'Heading 6' : 'سر فصل 6',
116
	'Paragraph' : 'پراگراف',
117
	'Address' : 'آدرس',
118
	'Preformatted' : 'قالب بندی شده',
119
	// font size
120
	'Small (8pt)'   : '',
121
	'Small (10px)'  : '',
122
	'Small (12pt)'  : '',
123
	'Normal (14pt)' : '',
124
	'Large (18pt)'  : '',
125
	'Large (24pt)'  : '',
126
	'Large (36pt)'  : '',
127
	// bookmark
128
	'Bookmark name' : 'نام نشانه',
129
	// link
130
	'Link URL' : '(URL) پیوند',
131
	'Target' : 'مقصد',
132
	'Open link in popup window' : 'باز کردن پیوند در یک پنجره بازشو',
133
	'URL' : '',
134
	'Window name' : 'نام پنجره',
135
	'Window size' : 'سایز پنجره',
136
	'Window position' : 'موقعیت پنجره',
137
	'Location bar' : 'محل نگه دارنده',
138
	'Menu bar' : 'نگه دارنده منو',
139
	'Toolbar' : 'جعبه ابزار',
140
	'Scrollbars' : 'محل اسکرول',
141
	'Status bar' : 'محل وضعیت',
142
	'Resizable' : 'تغییر ساز پذیر بودن',
143
	'Depedent' : 'محتاج',
144
	'Add return false' : '(return false) افزودن',
145
	'Target MIME type' : 'MIME type',
146
	'Relationship page to target (rel)' : '',
147
	'Relationship target to page (rev)' : '',
148
	'Tab index' : '',
149
	'Access key' : 'کیلید دسترسی',
150
	// image
151
	'Size' : 'سایز',
152
	'Preview' : 'پیش نمایش',
153
	'Margins' : 'حاشیه ها',
154
	'Alt text' : 'Alt',
155
	'Image URL' : 'URL',
156
	// table
157
	'Spacing'       : '(spacing)فاصه های میانی',
158
	'Padding'       : '(padding) حاشیه ها درونی',
159
	'Rows'          : 'سطرها',
160
	'Columns'       : 'ستون ها',
161
	'Groups'        : 'گروه هاس',
162
	'Cells'         : 'خانه هاس',
163
	'Caption'       : 'عنوان',
164
	'Inner borders' : 'کادر درونی'
165
166
167
}
168
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.fr.js (+167 lines)
Line 0 Link Here
1
/**
2
 * French translation
3
 * @author Francois Mazerolle <fmaz008@gmail.com>
4
 * @version 2010-09-18
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.fr = {
8
	'Editor' : 'Editeur',
9
	'Source' : 'Code Source',
10
	// Panel Name
11
	'Copy/Pase'      : 'Copier/Coller',
12
	'Undo/Redo'      : 'Annuler/Répéter',
13
	'Text styles'    : 'Styles de texte',
14
	'Colors'         : 'Couleurs',
15
	'Alignment'      : 'Alignement',
16
	'Indent/Outdent' : 'Augmenter/Diminuer l\'incrément',
17
	'Text format'    : 'Format de texte',
18
	'Lists'          : 'Listes',
19
	'Misc elements'  : 'Éléments divers',
20
	'Links'          : 'Liens',
21
	'Images'         : 'Images',
22
	'Media'          : 'Multimédia',
23
	'Tables'         : 'Tableaux',
24
	'File manager (elFinder)' : 'Gestionnaire de fichiers',
25
	// button names
26
	'Save'                    : 'Enregistrer',
27
	'Copy'                    : 'Copier',
28
	'Cut'                     : 'Couper',
29
	'Paste'                   : 'Coller',
30
	'Paste only text'         : 'Coller seulement le texte',
31
	'Paste formatted text'    : 'Coller le texte formaté',
32
	'Clean format'            : 'Effacer le formatage',
33
	'Undo last action'        : 'Annuler la dernière action',
34
	'Redo previous action'    : 'Répéter la dernière action',
35
	'Bold'                    : 'Gras',
36
	'Italic'                  : 'Italique',
37
	'Underline'               : 'Souligner',
38
	'Strikethrough'           : 'Barré',
39
	'Superscript'             : 'Exposant',
40
	'Subscript'               : 'Indice',
41
	'Align left'              : 'Aligner à gauche',
42
	'Ailgn right'             : 'Aligner à droite',
43
	'Align center'            : 'Centrer',
44
	'Align full'              : 'Justifier',
45
	'Font color'              : 'Couleur de texte',
46
	'Background color'        : 'Couleur d\'arrière plan',
47
	'Indent'                  : 'Aumenter la marge',
48
	'Outdent'                 : 'Réduire la marge',
49
	'Format'                  : 'Formater',
50
	'Font size'               : 'Taille de police',
51
	'Font'                    : 'Police',
52
	'Ordered list'            : 'Liste ordonnée',
53
	'Unordered list'          : 'Liste désordonnée',
54
	'Horizontal rule'         : 'Ligne horizontale',
55
	'Blockquote'              : 'Citation',
56
	'Block element (DIV)'     : 'Bloc élément (DIV)',
57
	'Link'                    : 'Lien',
58
	'Delete link'             : 'Supprimer le lien',
59
	'Bookmark'                : 'Marque page',
60
	'Image'                   : 'Image',
61
	'Table'                   : 'Tableau',
62
	'Delete table'            : 'Supprimer tableau',
63
	'Insert row before'       : 'Insérer une ligne avant',
64
	'Insert row after'        : 'Insérer une ligne après',
65
	'Delete row'              : 'Supprimer une ligne',
66
	'Insert column before'    : 'Insérer une colone avant',
67
	'Insert column after'     : 'Insérer une colone après',
68
	'Delete column'           : 'Supprimer une colone',
69
	'Merge table cells'       : 'Fusionner les cellules',
70
	'Split table cell'        : 'Diviser la cellule',
71
	'Toggle display document structure' : 'Alterner la vue du document',
72
	'Table cell properties'   : 'Propriété de la cellule',
73
	'Table properties'        : 'Propriété du tableau',
74
	'Toggle full screen mode' : 'Alterner la vue plein écran',
75
	'Open file manager'       : 'Ouvrir le gestionnaire de fichiers',
76
	'Non breakable space'     : 'Espace insécable',
77
	'Stop element floating'   : 'Interrompre le flottement de l\'élément',
78
	// dialogs
79
	'Warning' : 'Attention',
80
	'Properies' : 'Propriété',
81
	'Popup' : 'Nouvelle fenêtre',
82
	'Advanced' : 'Avancé',
83
	'Events' : 'Évènements',
84
	'Width' : 'Largeur',
85
	'Height' : 'Hauteur',
86
	'Left'   : 'Gauche',
87
	'Center' : 'Centre',
88
	'Right'  : 'Droite',
89
	'Border' : 'Bordure',
90
	'Background' : 'Arrière plan',
91
	'Css class' : 'Classe CSS',
92
	'Css style' : 'Style CSS',
93
	'No' : 'Non',
94
	'Title' : 'Titre',
95
	'Script direction' : 'Direction de script',
96
	'Language' : 'Langue',
97
	'Charset' : 'Jeu de caractères',
98
	'Not set' : 'No set',
99
	'Left to right' : 'Gauche à droite',
100
	'Right to left' : 'Droite à gauche',
101
	'In this window' : 'Dans cette fenêtre (_self)',
102
	'In new window (_blank)' : 'Dans une nouvelle fenêtre (_blank)',
103
	'In new parent window (_parent)' : 'Dans une nouvelle fenêtre parente (_parent)',
104
	'In top frame (_top)' : 'Dans le cadre maitre (_top)',
105
	'URL' : 'URL',
106
	'Open in' : 'Ouvrir dans',
107
	// copy
108
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'Cette opération est désactivée dans votre navigateur pour des raisons de sécurité. Utilisez le raccourci.',
109
	// format
110
	'Heading 1' : 'Entête 1',
111
	'Heading 2' : 'Entête 2',
112
	'Heading 3' : 'Entête 3',
113
	'Heading 4' : 'Entête 4',
114
	'Heading 5' : 'Entête 5',
115
	'Heading 6' : 'Entête 6',
116
	'Paragraph' : 'Paragraphe',
117
	'Address' : 'Adresse',
118
	'Preformatted' : 'Préformaté',
119
	// font size
120
	'Small (8pt)'   : 'Petite (8pt)',
121
	'Small (10px)'  : 'Petite (10px)',
122
	'Small (12pt)'  : 'Petite (12pt)',
123
	'Normal (14pt)' : 'Normale (14pt)',
124
	'Large (18pt)'  : 'Grande (18pt)',
125
	'Large (24pt)'  : 'Grande (24pt)',
126
	'Large (36pt)'  : 'Grande (36pt)',
127
	// bookmark
128
	'Bookmark name' : 'Nom du favori',
129
	// link
130
	'Link URL' : 'Adresse du lien',
131
	'Target' : 'Cible',
132
	'Open link in popup window' : 'Ouvrir dans une nouvelle fenêtre',
133
	'Window name' : 'Nom de la fenêtre',
134
	'Window size' : 'Taille de la fenêtre',
135
	'Window position' : 'Position de la fenêtre',
136
	'Location bar' : 'Barre d\'adresse',
137
	'Menu bar' : 'Barre de menu',
138
	'Toolbar' : 'Barre d\'outils',
139
	'Scrollbars' : 'Barres de défillement',
140
	'Status bar' : 'Barre d\'état',
141
	'Resizable' : 'Redimensionable',
142
	'Depedent' : 'Dépendent (Netscape)',
143
	'Add return false' : 'Ajouter un retour négatif (return false)',
144
	'Target MIME type' : 'Type MIME cible',
145
	'Relationship page to target (rel)' : '',
146
	'Relationship target to page (rev)' : '',
147
	'Tab index' : 'Index de tabulation',
148
	'Access key' : 'Tecla de acceso',
149
	// image
150
	'Size' : 'Taille',
151
	'Preview' : 'Prévisualisation',
152
	'Margins' : 'Marges',
153
	'Alt text' : 'Texte ALT',
154
	'Image URL' : 'URL de l\'image',
155
	// table
156
	'Spacing'       : 'Espace (Spacing)',
157
	'Padding'       : 'Marge intérieure (Padding)',
158
	'Rows'          : 'Lignes',
159
	'Columns'       : 'Colones',
160
	'Groups'        : 'Groupes',
161
	'Cells'         : 'Cellules',
162
	'Caption'       : 'Étiquette',
163
	'Inner borders' : 'Bordures intérieures'
164
165
166
}
167
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.hu.js (+201 lines)
Line 0 Link Here
1
/**
2
 * Hungarian translation
3
 * @author Viktor Tamas <tamas.viktor@totalstudio.hu>
4
 * @version 2010-09-18
5
 */
6
 (function($) {
7
elRTE.prototype.i18Messages.hu = {
8
    'Editor' : 'Szerkesztő',
9
    'Source' : 'Forrás',
10
    // названия панелей
11
    'Copy/Pase'      : 'Másolás/Beillesztés',
12
    'Undo/Redo'      : 'Visszavonás/Ismét',
13
    'Text styles'    : 'Szöveg stílus',
14
    'Colors'         : 'Színek',
15
    'Alignment'      : 'Elrendezés',
16
    'Indent/Outdent' : 'Отступы',
17
    'Text format'    : 'Szöveg forma',
18
    'Lists'          : 'Listák',
19
    'Misc elements'  : 'Egyéb elemek',
20
    'Links'          : 'Linkek',
21
    'Images'         : 'Képek',
22
    'Media'          : 'Média',
23
    'Tables'         : 'Táblázatok',
24
    'File manager (elFinder)' : 'Fájl kezelő (elFinder)',
25
    // названия кнопок
26
    'About this software'     : 'A szoftverről',
27
    'Save'                    : 'Mentés',
28
    'Copy'                    : 'Másolás',
29
    'Cut'                     : 'Kivágás',
30
    'Paste'                   : 'Beillesztés',
31
    'Paste only text'         : 'Beillesztés csak szövegként',
32
    'Paste formatted text'    : 'Beillesztés formázott szövegként',
33
    'Clean format'            : 'Formázás törlése',
34
    'Undo last action'        : 'Utolsó művelet visszavonása',
35
    'Redo previous action'    : 'Előző művelet újra',
36
    'Bold'                    : 'Félkövér',
37
    'Italic'                  : 'Dőlt',
38
    'Underline'               : 'Aláhúzott',
39
    'Strikethrough'           : 'Áthúzott',
40
    'Superscript'             : 'Felső index',
41
    'Subscript'               : 'Alsó index',
42
    'Align left'              : 'Balra igazítás',
43
    'Ailgn right'             : 'Jobbra igazítás',
44
    'Align center'            : 'Középre igazítás',
45
    'Align full'              : 'Sórkizárt igazítás',
46
    'Font color'              : 'Betűszín',
47
    'Background color'        : 'Háttér szín',
48
    'Indent'                  : 'Behúzás',
49
    'Outdent'                 : 'Kihúzás',
50
    'Format'                  : 'Formátum',
51
    'Font size'               : 'Betű méret',
52
    'Font'                    : 'Betű típus',
53
    'Ordered list'            : 'Számozott lista',
54
    'Unordered list'          : 'Lista',
55
    'Horizontal rule'         : 'Vízszintes vonal',
56
    'Blockquote'              : 'Idézet',
57
    'Block element (DIV)'     : 'Blokk elem (DIV)',
58
    'Link'                    : 'Link',
59
    'Delete link'             : 'Link törlése',
60
    'Bookmark'                : 'Horgony',
61
    'Image'                   : 'Kép',
62
    'Table'                   : 'Táblázat',
63
    'Delete table'            : 'Táblázat törlése',
64
    'Insert row before'       : 'Sor beszúrása sor elé',
65
    'Insert row after'        : 'Sor beszúrása sor mögé',
66
    'Delete row'              : 'Sor törlése',
67
    'Insert column before'    : 'Oszlop beszúrása oszlop elé',
68
    'Insert column after'     : 'Oszlop beszúrása oszlop mögé',
69
    'Delete column'           : 'Oszlop törlése',
70
    'Merge table cells'       : 'Cellák összevonása',
71
    'Split table cell'        : 'Cellák szétávlasztása',
72
    'Toggle display document structure' : 'Dokumentum szerkezet megtekintése',
73
    'Table cell properties'   : 'Táblázat cella tulajdonságai',
74
    'Table properties'        : 'Tábla tulajdonságok',
75
    'Toggle full screen mode' : 'Teljes képernyős mód',
76
    'Open file manager'       : 'Fájl kezelő megnyitása',
77
    'Non breakable space'     : 'Szóköz',
78
    'Stop element floating'   : 'Elem elrendezések törlése',
79
    // dialogs
80
    'Warning' : 'Figyelmeztetés',
81
    'Properies' : 'Tulajdonságok',
82
    'Popup' : 'Popup',
83
    'Advanced' : 'Egyéni',
84
    'Events' : 'Események',
85
    'Width' : 'Szélesség',
86
    'Height' : 'Magasság',
87
    'Left'   : 'Bal',
88
    'Center' : 'Közép',
89
    'Right'  : 'Jobb',
90
    'Border' : 'Keret',
91
    'Background' : 'Háttér',
92
    'Css class' : 'Css class',
93
    'Css style' : 'Css stílus',
94
    'No' : 'Nem',
95
    'Title' : 'Cím',
96
    'Script direction' : 'Script hivatkozás',
97
    'Language' : 'Nyelv',
98
    'Charset' : 'Karaktertábla',
99
    'Not set' : 'Nincs beállítva',
100
    'Left to right' : 'Balról jobbra',
101
    'Right to left' : 'Jobbról balra',
102
    'In this window' : 'Ebbe az ablakba',
103
    'In new window (_blank)' : 'Új ablakba (_blank)',
104
    'In new parent window (_parent)' : 'Egy új ablakba (_parent)',
105
    'In top frame (_top)' : 'A top frame-be (_top)',
106
    'URL' : '',
107
    'Open in' : 'Megnyitás',
108
    'Open file manger' : 'Fájlkezelő megnyitása',
109
    // copy
110
    'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'Ez a művelet le van tiltva a böngészőjében a biztonsági okból. Használja a parancsikont ehelyett.',
111
    // format
112
    'Heading 1' : 'Címsor 1',
113
    'Heading 2' : 'Címsor 2',
114
    'Heading 3' : 'Címsor 3',
115
    'Heading 4' : 'Címsor 4',
116
    'Heading 5' : 'Címsor 5',
117
    'Heading 6' : 'Címsor 6',
118
    'Paragraph' : 'Bekezdés',
119
    'Address' : 'Cím',
120
    'Preformatted' : 'Előre formázott',
121
    // font size
122
    'Small (8pt)'   : 'Kicsi (8pt)',
123
    'Small (10px)'  : 'Kicsi (10px)',
124
    'Small (12pt)'  : 'Kicsi (12pt)',
125
    'Normal (14pt)' : 'Normál (14pt)',
126
    'Large (18pt)'  : 'Nagy (18pt)',
127
    'Large (24pt)'  : 'Nagy (24pt)',
128
    'Large (36pt)'  : 'Nagy (36pt)',
129
    // bookmark
130
    'Bookmark name' : 'Horgony neve',
131
    // link
132
    'Link URL' : 'Link címe (URL)',
133
    'Target' : 'Cél',
134
    'Select bookmark' : 'Horgony választása',
135
    'Open link in popup window' : 'Hivatkozás megnyitása új popup ablakban',
136
    'URL' : '',
137
    'Window name' : 'Ablak neve',
138
    'Window size' : 'Ablak mérete',
139
    'Window position' : 'Ablak pozíciója',
140
    'Location bar' : 'Címsor',
141
    'Menu bar' : 'Menüsor',
142
    'Toolbar' : 'Eszköztár',
143
    'Scrollbars' : 'Görgősáv',
144
    'Status bar' : 'Státusz sor',
145
    'Resizable' : 'Átméretezhető',
146
    'Depedent' : '',
147
    'Add return false' : 'Hozzáadás (return false)',
148
    'Target MIME type' : 'MIME típusú cél',
149
    'Relationship page to target (rel)' : 'Célhoz kapcsolódó lap (rel)',
150
    'Relationship target to page (rev)' : 'Laphoz kapcsolódó cél (rev)',
151
    'Tab index' : 'Tabulátor index',
152
    'Access key' : 'Hozzáférési kulcs',
153
    // image
154
    'Size' : 'Méret',
155
    'Preview' : 'Előnézet',
156
    'Margins' : 'Margók',
157
    'Alt text' : 'Alt szöveg',
158
    'Image URL' : 'Kép URL',
159
    // table
160
    'Spacing'       : 'Cellaköz',
161
    'Padding'       : '',
162
    'Rows'          : 'Sorok',
163
    'Columns'       : 'Oszlopok',
164
    'Groups'        : 'Csoportok',
165
    'Cells'         : 'Cellák',
166
    'Caption'       : 'Felirat',
167
    'Inner borders' : 'Belső keret',
168
    // table cell
169
    'Table cell type' : 'Táblázat cella típus',
170
    'Data' : 'Adat',
171
    'Header' : 'Címsor',
172
    'Justify' : 'Sorkizárt',
173
    'Paddings' : 'Padding',
174
    'Apply to' : 'Alkalmazás a',
175
    'Current cell' : 'Jelenlegi cella',
176
    'All cells in row' : 'Összes cella a sorban',
177
    'All cells in column' : 'Összes cella az oszlopban',
178
    'All cells in table' : 'Összes cella a táblázatban',
179
    // about
180
    'About elRTE' : 'Az elRTE-ről',
181
    'Version' : 'Verzió',
182
    'Licence' : 'Liszensz',
183
    'elRTE is an open-source JavaScript based WYSIWYG HTML-editor.' : 'Az elRTE egy nyíltforráskódú JavaScript alapú WYSIWYG HTML-szerkesztő.',
184
    'Main goal of the editor - simplify work with text and formating (HTML) on sites, blogs, forums and other online services.' : 'A szerkesztő fő célja, hogy egyszerűsítse a munkát és a szöveg formázást (HTML) az oldalakon, blogokon, fórumokon illetve más online szolgáltatásokban.',
185
    'You can use it in any commercial or non-commercial projects.' : 'Használhatod bármilyen kereskedelni vagy nem-kereskedelmi célú projektben.',
186
    'Authors' : 'Készítők',
187
    'Chief developer' : 'Fő fejlesztő',
188
    'Developer, tech support' : 'Fejelsaztő, tech kapcsolat',
189
    'Interface designer' : 'Interface tervező',
190
    'Spanish localization' : 'Spanyol fordító',
191
    'Japanese localization' : 'Japán fordító',
192
    'Latvian localization' : 'Litván fordító',
193
    'German localization' : 'Német fordító',
194
    'Ukranian localization' : 'Ukrán fordító',
195
    'Magyar localization' : 'Magyar fordító',
196
    'For more information about this software visit the' : 'További információkért a szoftverről keresse fel a ',
197
    'elRTE website' : 'elRTE honlapját'
198
199
200
}
201
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.it.js (+167 lines)
Line 0 Link Here
1
/**
2
 * Italian translation
3
 * @author Ugo Punzolo <sadraczerouno@gmail.com>
4
 * @version 2010-09-20
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.it = {
8
	'Editor' : 'Editor',
9
	'Source' : 'Codice Sorgente',
10
	// Panel Name
11
	'Copy/Pase'      : 'Copia/Incolla',
12
	'Undo/Redo'      : 'Annulla/Ripristina',
13
	'Text styles'    : 'Stile del testo',
14
	'Colors'         : 'Colori',
15
	'Alignment'      : 'Allineamento',
16
	'Indent/Outdent' : 'Aumenta/Riduci indentazione',
17
	'Text format'    : 'Formato del testo',
18
	'Lists'          : 'Liste',
19
	'Misc elements'  : 'Elementi vari',
20
	'Links'          : 'Collegamenti',
21
	'Images'         : 'Immagini',
22
	'Media'          : 'Multimedia',
23
	'Tables'         : 'Tabelle',
24
	'File manager (elFinder)' : 'File manager (elFinder)',
25
	// button names
26
	'Save'                    : 'Salva',
27
	'Copy'                    : 'Copia',
28
	'Cut'                     : 'Taglia',
29
	'Paste'                   : 'Incolla',
30
	'Paste only text'         : 'Incolla solo testo',
31
	'Paste formatted text'    : 'Incolla testo formattato',
32
	'Clean format'            : 'Pulisci formato',
33
	'Undo last action'        : 'Annulla ultima azione',
34
	'Redo previous action'    : 'Ripristina ultima azione',
35
	'Bold'                    : 'Neretto',
36
	'Italic'                  : 'Corsivo',
37
	'Underline'               : 'Sottolineato',
38
	'Strikethrough'           : 'Barrato',
39
	'Superscript'             : 'Indice',
40
	'Subscript'               : 'Pedice/Deponente',
41
	'Align left'              : 'Allinea a sinistra',
42
	'Ailgn right'             : 'Allinea a destra',
43
	'Align center'            : 'Centra',
44
	'Align full'              : 'Giustifica',
45
	'Font color'              : 'Colore del testo',
46
	'Background color'        : 'Colore di sfondo',
47
	'Indent'                  : 'Aumenta indentazione',
48
	'Outdent'                 : 'Riduci indentazione',
49
	'Format'                  : 'Formato',
50
	'Font size'               : 'Grandezza caratteri',
51
	'Font'                    : 'Carattere',
52
	'Ordered list'            : 'Lista ordinata',
53
	'Unordered list'          : 'Lista non ordinata',
54
	'Horizontal rule'         : 'Linea orizzontale',
55
	'Blockquote'              : 'Citazione',
56
	'Block element (DIV)'     : 'Blocco elemento (DIV)',
57
	'Link'                    : 'Collegamento',
58
	'Delete link'             : 'Elimina collegamento',
59
	'Bookmark'                : 'Segnalibro',
60
	'Image'                   : 'Immagine',
61
	'Table'                   : 'Tabella',
62
	'Delete table'            : 'Elimina tabella',
63
	'Insert row before'       : 'Inserisci riga sopra',
64
	'Insert row after'        : 'Inserisci riga sotto',
65
	'Delete row'              : 'Elimina riga',
66
	'Insert column before'    : 'Inserisci colonna a sinistra',
67
	'Insert column after'     : 'Inserisci colonna a destra',
68
	'Delete column'           : 'Elimina colonna',
69
	'Merge table cells'       : 'Unisci celle',
70
	'Split table cell'        : 'Separa celle',
71
	'Toggle display document structure' : 'Passa alla modalit&agrave; "visualizzazione struttura del documento"',
72
	'Table cell properties'   : 'Propriet&agrave; celle',
73
	'Table properties'        : 'Propriet&agrave; tabella',
74
	'Toggle full screen mode' : 'Passa alla modalit&agrave; "schermo intero"',
75
	'Open file manager'       : 'Apri il file manager',
76
	'Non breakable space'     : 'Spazio non divisibile',
77
	'Stop element floating'   : 'Blocca elemento fluttuante',
78
	// dialogs
79
	'Warning' : 'Attenzione',
80
	'Properies' : 'Propriet&agrave;',
81
	'Popup' : 'Popup',
82
	'Advanced' : 'Avanzate',
83
	'Events' : 'Eventi',
84
	'Width' : 'Larghezza',
85
	'Height' : 'Altezza',
86
	'Left'   : 'Sinistra',
87
	'Center' : 'Centro',
88
	'Right'  : 'Destra',
89
	'Border' : 'Bordo',
90
	'Background' : 'Sfondo',
91
	'Css class' : 'Classe CSS',
92
	'Css style' : 'Stile CSS',
93
	'No' : 'No',
94
	'Title' : 'Titolo',
95
	'Script direction' : 'Direzione dello script',
96
	'Language' : 'Lingua',
97
	'Charset' : 'Charset',
98
	'Not set' : 'Non settato',
99
	'Left to right' : 'Da sinistra a destra',
100
	'Right to left' : 'Da destra a sinistra',
101
	'In this window' : 'In questa finestra (_self)',
102
	'In new window (_blank)' : 'In una nuova finestra (_blank)',
103
	'In new parent window (_parent)' : 'In una nuova finestra madre (_parent)',
104
	'In top frame (_top)' : 'In alto al frame (_top)',
105
	'URL' : 'URL',
106
	'Open in' : 'Apri in',
107
	// copy
108
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'Questa operazione &egrave; disabilitata nel tuo browser per motivi di sicurezza. Puoi comunque utilizzare un comando da tastiera.',
109
	// format
110
	'Heading 1' : 'Intestazione 1',
111
	'Heading 2' : 'Intestazione 2',
112
	'Heading 3' : 'Intestazione 3',
113
	'Heading 4' : 'Intestazione 4',
114
	'Heading 5' : 'Intestazione 5',
115
	'Heading 6' : 'Intestazione 6',
116
	'Paragraph' : 'Paragrafo',
117
	'Address' : 'Indirizzo',
118
	'Preformatted' : 'Preformattato',
119
	// font size
120
	'Small (8pt)'   : 'Piccolo (8pt)',
121
	'Small (10px)'  : 'Piccolo (10px)',
122
	'Small (12pt)'  : 'Piccolo (12pt)',
123
	'Normal (14pt)' : 'Normale (14pt)',
124
	'Large (18pt)'  : 'Grande (18pt)',
125
	'Large (24pt)'  : 'Grande (24pt)',
126
	'Large (36pt)'  : 'Grande (36pt)',
127
	// bookmark
128
	'Bookmark name' : 'Nome del segnalibro',
129
	// link
130
	'Link URL' : 'URL del collegamento',
131
	'Target' : 'Target',
132
	'Open link in popup window' : 'Apri il link in una finestra popup',
133
	'Window name' : 'Nome della finestra',
134
	'Window size' : 'Dimensioni della finestra',
135
	'Window position' : 'Posizione della finestra',
136
	'Location bar' : 'Barra direzionale',
137
	'Menu bar' : 'Barra del menu',
138
	'Toolbar' : 'Barra degli strumenti',
139
	'Scrollbars' : 'Barra di scorrimento',
140
	'Status bar' : 'Barra di stato',
141
	'Resizable' : 'Ridimensionabile',
142
	'Depedent' : 'Dipendente (Netscape)',
143
	'Add return false' : 'Aggiungi condizione falsa (return false)',
144
	'Target MIME type' : 'Obiettivo del tipo di MIME (MIME type)',
145
	'Relationship page to target (rel)' : 'Dalla pagina correlata all\'obiettivo',
146
	'Relationship target to page (rev)' : 'Dall\'obiettivo alla pagina correlata',
147
	'Tab index' : 'Indice di tabulazione',
148
	'Access key' : 'Chiave di accesso',
149
	// image
150
	'Size' : 'Dimensione',
151
	'Preview' : 'Anteprima',
152
	'Margins' : 'Margini',
153
	'Alt text' : 'Testo alternativo',
154
	'Image URL' : 'URL dell\'immagine',
155
	// table
156
	'Spacing'       : 'Spaziatura (Spacing)',
157
	'Padding'       : 'Riempimento (Padding)',
158
	'Rows'          : 'Righe',
159
	'Columns'       : 'Colonne',
160
	'Groups'        : 'Gruppi',
161
	'Cells'         : 'Celle',
162
	'Caption'       : 'Didascalia',
163
	'Inner borders' : 'Bordi interni'
164
165
166
}
167
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.jp.js (+187 lines)
Line 0 Link Here
1
/**
2
 * Japanese translation
3
 * @author Tomoaki Yoshida <info@yoshida-studio.jp>
4
 * @version 2010-09-18
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.jp = {
8
	'Editor' : 'エディター',
9
	'Source' : 'ソース',
10
	// Panel Name
11
	'Copy/Pase'      : 'コピー/ペースト',
12
	'Undo/Redo'      : '元に戻す/やり直し',
13
	'Text styles'    : 'テキストスタイル',
14
	'Colors'         : '色',
15
	'Alignment'      : '行揃え',
16
	'Indent/Outdent' : 'インデント/アウトデント',
17
	'Text format'    : 'テキストフォーマット',
18
	'Lists'          : 'リスト',
19
	'Misc elements'  : 'その他',
20
	'Links'          : 'リンク',
21
	'Images'         : '画像',
22
	'Media'          : 'メディア',
23
	'Tables'         : 'テーブル',
24
	'File manager (elFinder)' : 'ファイルマネージャ(elFinder)',
25
	// button names
26
	'About this software'     : 'このソフトウェアについて',
27
	'Save'                    : '保存',
28
	'Copy'                    : 'コピー',
29
	'Cut'                     : '切り取り',
30
	'Paste'                   : '貼り付け',
31
	'Paste only text'         : 'テキストのみ貼り付け',
32
	'Paste formatted text'    : 'フォーマットされたテキストの貼り付け',
33
	'Clean format'            : 'フォーマット消去',
34
	'Undo last action'        : '元に戻す',
35
	'Redo previous action'    : 'やり直し',
36
	'Bold'                    : '太字',
37
	'Italic'                  : '斜体',
38
	'Underline'               : '下線',
39
	'Strikethrough'           : '打ち消し線',
40
	'Superscript'             : '上付き文字',
41
	'Subscript'               : '添え字',
42
	'Align left'              : '左揃え',
43
	'Ailgn right'             : '右揃え',
44
	'Align center'            : '中央揃え',
45
	'Align full'              : '両端揃え',
46
	'Font color'              : 'テキスト色',
47
	'Background color'        : '背景色',
48
	'Indent'                  : 'インデント',
49
	'Outdent'                 : 'アウトデント',
50
	'Format'                  : 'フォーマット',
51
	'Font size'               : 'サイズ',
52
	'Font'                    : 'フォント',
53
	'Ordered list'            : '段落番号',
54
	'Unordered list'          : '箇条書き',
55
	'Horizontal rule'         : '横罫線',
56
	'Blockquote'              : 'ブロック引用',
57
	'Block element (DIV)'     : 'ブロック要素 (DIV)',
58
	'Link'                    : 'リンク',
59
	'Delete link'             : 'リンク削除',
60
	'Bookmark'                : 'アンカー挿入/編集',
61
	'Image'                   : 'イメージ',
62
	'Table'                   : 'テーブル',
63
	'Delete table'            : 'テーブル削除',
64
	'Insert row before'       : '前に行を挿入',
65
	'Insert row after'        : '後ろに行を挿入',
66
	'Delete row'              : '行を削除',
67
	'Insert column before'    : '前に列を挿入',
68
	'Insert column after'     : '後ろに列を挿入',
69
	'Delete column'           : '列を削除',
70
	'Merge table cells'       : 'セルを結合する',
71
	'Split table cell'        : 'セルを分割する',
72
	'Toggle display document structure' : '構成要素の表示',
73
	'Table cell properties'   : 'テーブルセルプロパティ',
74
	'Table properties'        : 'テーブルプロパティ',
75
	'Toggle full screen mode' : '最大化',
76
	'Open file manager'       : 'ファイルマネージャを開く',
77
	'Non breakable space'     : '改行なしスペース',
78
	'Stop element floating'   : 'フロートの解除',
79
	// dialogs
80
	'Warning' : '警告',
81
	'Properies' : 'プロパティ',
82
	'Popup' : 'ポップアップ',
83
	'Advanced' : 'アドバンス',
84
	'Events' : 'イベント',
85
	'Width' : '幅',
86
	'Height' : '高さ',
87
	'Left'   : '左',
88
	'Center' : '中央',
89
	'Right'  : '右',
90
	'Border' : 'ボーダー',
91
	'Background' : '背景',
92
	'Css class' : 'CSS class',
93
	'Css style' : 'CSS style',
94
	'No' : 'No',
95
	'Title' : 'タイトル',
96
	'Script direction' : '文字表記方向',
97
	'Language' : '言語',
98
	'Charset' : 'Charset',
99
	'Not set' : '設定しない',
100
	'Left to right' : '左から右',
101
	'Right to left' : '右から左',
102
	'In this window' : '同じウィンドウ (_self)',
103
	'In new window (_blank)' : '新しいウィンドウ (_blank)',
104
	'In new parent window (_parent)' : '新しい親ウィンドウ (_parent)',
105
	'In top frame (_top)' : 'トップフレーム (_top)',
106
	'URL' : 'URL',
107
	'Open in' : 'Open in',
108
	// copy
109
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'この機能はお使いのブラウザではセキュリティの観点からご利用できません。ショートカットをご利用ください。',
110
	// format
111
	'Heading 1' : '見出し1',
112
	'Heading 2' : '見出し2',
113
	'Heading 3' : '見出し3',
114
	'Heading 4' : '見出し4',
115
	'Heading 5' : '見出し5',
116
	'Heading 6' : '見出し6',
117
	'Paragraph' : '段落',
118
	'Address' : 'アドレス',
119
	'Preformatted' : '',
120
	// font size
121
	'Small (8pt)'   : '小(8pt)',
122
	'Small (10px)'  : '小(10pt)',
123
	'Small (12pt)'  : '小(12pt)',
124
	'Normal (14pt)' : '中(14pt)',
125
	'Large (18pt)'  : '大(18pt)',
126
	'Large (24pt)'  : '大(24pt)',
127
	'Large (36pt)'  : '大(36pt)',
128
	// bookmark
129
	'Bookmark name' : 'アンカー名',
130
	// link
131
	'Link URL' : '(URL)',
132
	'Target' : 'ターゲット',
133
	'Open link in popup window' : 'リンク先をポップアップで開く',
134
	'URL' : 'URL',
135
	'Window name' : 'ウィンドウ名',
136
	'Window size' : 'ウィンドウサイズ',
137
	'Window position' : 'ウィンドウ位置',
138
	'Location bar' : 'ロケーションバー',
139
	'Menu bar' : 'メニューバー',
140
	'Toolbar' : 'ツールバー',
141
	'Scrollbars' : 'スクロールバー',
142
	'Status bar' : 'ステータスバー',
143
	'Resizable' : 'サイズ可変',
144
	'Depedent' : 'ウィンドウ連動',
145
	'Add return false' : 'return falseを加える',
146
	'Target MIME type' : 'Target MIME type',
147
	'Relationship page to target (rel)' : 'ページからターゲットの関係 (rel)',
148
	'Relationship target to page (rev)' : 'ターゲットからページの関係 (rev)',
149
	'Tab index' : 'タブインデックス',
150
	'Access key' : 'アクセスキー',
151
	// image
152
	'Size' : 'サイズ',
153
	'Preview' : 'プレビュー',
154
	'Margins' : 'マージン',
155
	'Alt text' : '代替テキスト',
156
	'Image URL' : '画像URL',
157
	// table
158
	'Spacing'       : 'セル間隔 (spacing)',
159
	'Padding'       : 'セル内余白 (padding)',
160
	'Rows'          : '行',
161
	'Columns'       : '列',
162
	'Groups'        : 'グループ',
163
	'Cells'         : 'セル',
164
	'Caption'       : 'キャプション',
165
	'Inner borders' : '内部ボーダー',
166
	// about
167
	'About elRTE' : 'elRTEについて',
168
	'Version' : 'バージョン',
169
	'Licence' : 'ライセンス',
170
	'elRTE is an open-source JavaScript based WYSIWYG HTML-editor.' : 'elRTEはJavascriptベースのオープンソースWYSIWYG HTMLエディタです。',
171
	'Main goal of the editor - simplify work with text and formating (HTML) on sites, blogs, forums and other online services.' : 'このエディタの主な目的は、ウェブサイト、ブログ、フォーラムやその他のオンラインサービスのテキストとHTMLフォーマット入力作業をシンプルにすることです。',
172
	'You can use it in any commercial or non-commercial projects.' : '商用・非商用に関わらずご利用いただけます。',
173
	'Authors' : '著作者',
174
	'Chief developer' : 'チーフデベロッパー',
175
	'Developer, tech support' : 'デベロッパー・テクニカルサポート',
176
	'Interface designer' : 'インターフェイスデザイナー',
177
	'Spanish localization' : 'スペイン語化ローカライゼーション',
178
	'Japanese localization' : '日本語化ローカライゼーション',
179
	'Latvian localization' : 'ラトビア語化ローカライゼーション',
180
	'German localization' : 'ドイツ語化ローカライゼーション',
181
	'Ukranian localization' : 'ウクライナ語化ローカライゼーション',
182
	'For more information about this software visit the' : '次のURLにてこのソフトウェアのより詳しい情報を公開しています。',
183
	'elRTE website' : 'elRTE ウェブサイト'
184
185
186
}
187
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.lv.js (+179 lines)
Line 0 Link Here
1
/**
2
 * Latvian translation
3
 * @author Uldis Plotiņš <uldis.plotins@gmail.com>
4
 * @version 2010-09-18
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.lv = {
8
	'Editor' : 'Redaktors',
9
	'Source' : 'Izejas kods',
10
	// panel names
11
	'Copy/Pase'      : 'Kopēt/Ievietot',
12
	'Undo/Redo'      : 'Atcelt/Atkārtot darbību',
13
	'Text styles'    : 'Teksta stili',
14
	'Colors'         : 'Krāsa',
15
	'Alignment'      : 'Izlīdzināšana',
16
	'Indent/Outdent' : 'Atkāpes',
17
	'Text format'    : 'Formatēšana',
18
	'Lists'          : 'Saraksti',
19
	'Misc elements'  : 'Dažādi elementi',
20
	'Links'          : 'Saites',
21
	'Images'         : 'Attēli',
22
	'Media'          : 'Mēdiju faili',
23
	'Tables'         : 'Tabulas',
24
	'File manager (elFinder)' : 'Failu pārvaldnieks (elFinder)',
25
	// button names
26
	'Save'                    : 'Saglabāt',
27
	'Copy'                    : 'Kopēt',
28
	'Cut'                     : 'Izgriezt',
29
	'Paste'                   : 'Ievietot',
30
	'Paste only text'         : 'Ievietot tikai tekstu',
31
	'Paste formatted text'    : 'Ievietot formatētu tekstu',
32
	'Clean format'            : 'Atcelt formatēšanu',
33
	'Undo last action'        : 'Atcelt pēdējo darbību',
34
	'Redo previous action'    : 'Atkārtot pēdējo darbību',
35
	'Bold'                    : 'Treknraksts',
36
	'Italic'                  : 'Slīpraksts',
37
	'Underline'               : 'Pasvītrots',
38
	'Strikethrough'           : 'Izsvītrots',
39
	'Superscript'             : 'Augšraksts',
40
	'Subscript'               : 'Apakšraksts',
41
	'Align left'              : 'Izlīdzināt pa kreiso malu',
42
	'Ailgn right'             : 'Izlīdzināt pa labo malu',
43
	'Align center'            : 'Centrēt',
44
	'Align full'              : 'Izlīdzināt pa malām',
45
	'Font color'              : 'Šrifta krāsa',
46
	'Background color'        : 'Fona krāsa',
47
	'Indent'                  : 'Palielināt atkāpi',
48
	'Outdent'                 : 'Samazināt atkāpi',
49
	'Format'                  : 'Formatēšana',
50
	'Font size'               : 'Šrifta lielums',
51
	'Font'                    : 'Šrifts',
52
	'Ordered list'            : 'Numurēts saraksts',
53
	'Unordered list'          : 'Nenumurēts saraksts',
54
	'Horizontal rule'         : 'Horizontālā līnija',
55
	'Blockquote'              : 'Citāts',
56
	'Block element (DIV)'     : 'Bloka elements (DIV)',
57
	'Link'                    : 'Saite',
58
	'Delete link'             : 'Dzēst saiti',
59
	'Bookmark'                : 'Grāmatzīme',
60
	'Image'                   : 'Attēls',
61
	'Table'                   : 'Tabula',
62
	'Delete table'            : 'Dzēst tabulu',
63
	'Insert row before'       : 'Ievietot rindu pirms',
64
	'Insert row after'        : 'Ievietot rindu pēc',
65
	'Delete row'              : 'Dzēst rindu',
66
	'Insert column before'    : 'Ievietot kolonnu pirms',
67
	'Insert column after'     : 'Ievietot kolonnu pēc',
68
	'Delete column'           : 'Dzēst kolonnu',
69
	'Merge table cells'       : 'Apvienot ailes',
70
	'Split table cell'        : 'Sadalīt aili',
71
	'Toggle display document structure' : 'Rādīt dokumenta struktūru/neredzamos elementus',
72
	'Table cell properties'   : 'Ailes iestatījumi',
73
	'Table properties'        : 'Tabulas iestatījumi',
74
	'Toggle full screen mode' : 'Pilns ekrāns',
75
	'Open file manager'       : 'Atvērt failu pārvaldnieku',
76
	'Non breakable space'     : 'Nepārtrauktā atstarpe',
77
	'Stop element floating'   : 'Atslēgt elementu apklāšanu ar tekstu',
78
	// dialogs
79
	'Warning' : 'Uzmanību',
80
	'Properies' : 'Iestatījumi',
81
	'Popup' : 'Jauns logs',
82
	'Advanced' : 'Papildus',
83
	'Events' : 'Notikumi',
84
	'Width' : 'Platums',
85
	'Height' : 'Augstums',
86
	'Left'   : 'Pa kresi',
87
	'Center' : 'Pa centru',
88
	'Right'  : 'Pa labi',
89
	'Border' : 'Mala',
90
	'Background' : 'Fons',
91
	'Css class' : 'Css klase',
92
	'Css style' : 'Css stils',
93
	'No' : 'Nē',
94
	'Title' : 'Virsraksts',
95
	'Script direction' : 'Vēstules virziens',
96
	'Language' : 'Valoda',
97
	'Charset' : 'Kodējums',
98
	'Not set' : 'Nav uzstādī†s',
99
	'Left to right' : 'No kreisās uz labo',
100
	'Right to left' : 'No labās uz kreiso',
101
	'In this window' : 'Dotajā logā',
102
	'In new window (_blank)' : 'Jaunā logā (_blank)',
103
	'In new parent window (_parent)' : 'Vecāku logā (_parent)',
104
	'In top frame (_top)' : 'Augšējā rāmī (_top)',
105
	'URL' : 'URL',
106
	'Open in' : 'Atvērt',
107
	'Open file manger' : 'Atvērt failu pārvaldnieku',
108
	// copy
109
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'Dotā darbība jūsu pārlūkam ir liegta saistībā ar drošības aspektiem. Izmantojiet taustiņu kombināciju.',
110
	// format
111
	'Heading 1' : 'Virsraksts 1',
112
	'Heading 2' : 'Virsraksts 2',
113
	'Heading 3' : 'Virsraksts 3',
114
	'Heading 4' : 'Virsraksts 4',
115
	'Heading 5' : 'Virsraksts 5',
116
	'Heading 6' : 'Virsraksts 6',
117
	'Paragraph' : 'Paragrāfs',
118
	'Address' : 'Adrese',
119
	'Preformatted' : '',
120
	// font size
121
	'Small (8pt)'   : 'Sīks (8pt)',
122
	'Small (10px)'  : 'Mazs (10px)',
123
	'Small (12pt)'  : 'Neliels (12pt)',
124
	'Normal (14pt)' : 'Parasts (14pt)',
125
	'Large (18pt)'  : 'Liels (18pt)',
126
	'Large (24pt)'  : 'Ļoti liels(24pt)',
127
	'Large (36pt)'  : 'Milzīgs (36pt)',
128
	// bookmark
129
	'Bookmark name' : 'Grāmatzīmes vārds',
130
	// link
131
	'Link URL' : 'Saites adrese (URL)',
132
	'Target' : 'Mērķis',
133
	'Select bookmark' : 'Izvēlēties grāmatzīmi',
134
	'Open link in popup window' : 'Atvērt saiti jaunā logā',
135
	'URL' : 'URL',
136
	'Window name' : 'Loga nosaukums',
137
	'Window size' : 'Loga izmērs',
138
	'Window position' : 'Loga pozīcija',
139
	'Location bar' : 'Vietas panelis',
140
	'Menu bar' : 'Izvēlnes panelis',
141
	'Toolbar' : 'Instrumentu panelis',
142
	'Scrollbars' : 'Ritjoslas',
143
	'Status bar' : 'Stāvokļa panelis',
144
	'Resizable' : 'Izmēra izmaiņas',
145
	'Depedent' : 'Atkarīgs (Netscape)',
146
	'Add return false' : 'Pievienot (return false)',
147
	'Target MIME type' : 'MIME type mērķi',
148
	'Relationship page to target (rel)' : 'Lapas attiecībaa pret mērķi (rel)',
149
	'Relationship target to page (rev)' : 'Mērķa attiecība pret lapu (rev)',
150
	'Tab index' : '',
151
	'Access key' : 'Pieejas taustiņš',
152
	// image
153
	'Size' : 'Izmērs',
154
	'Preview' : 'Priekšskats',
155
	'Margins' : 'Atkāpes',
156
	'Alt text' : 'Apraksta teksts',
157
	'Image URL' : 'Bildes URL',
158
	// table
159
	'Spacing'       : 'Atstarpe',
160
	'Padding'       : 'Atkāpe',
161
	'Rows'          : 'Rindas',
162
	'Columns'       : 'Kolonnas',
163
	'Groups'        : 'Grupas',
164
	'Cells'         : 'Ailes',
165
	'Caption'       : 'Tabulas virsraksts',
166
	'Inner borders' : 'Iekšējās robežas',
167
	// table cell
168
	'Table cell type' : 'Tabulas ailes tips',
169
	'Data' : 'Dati',
170
	'Header' : 'Virsraksts',
171
	'Justify' : 'Pa malām',
172
	'Paddings' : 'Atkāpes',
173
	'Apply to' : 'Pielietot uz',
174
	'Current cell' : 'Izvēlētā aile',
175
	'All cells in row' : 'Visas rindas ailes',
176
	'All cells in column' : 'Visas stabiņa ailes',
177
	'All cells in table' : 'Visas tabulas ailes'
178
}
179
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.nl.js (+199 lines)
Line 0 Link Here
1
/**
2
 * Dutch translation
3
 * @author Kurt Aerts
4
 * @link http://ilabsolutions.net/
5
 * @version 2010-09-18
6
 */
7
(function($) {
8
elRTE.prototype.i18Messages.nl = {
9
	'Editor' : 'Editor',
10
	'Source' : 'Broncode',
11
// Panel names
12
	'Copy / Pase' : 'Kopieeer / Plakken',
13
	'Undo / Redo' : 'Ongedaan maken / Herhalen typen',
14
	'Text styles' : 'Tekst stijlen',
15
	'Colors': 'Kleuren:',
16
	'Alignment': 'Alinea',
17
	'Indent / Outdent': '',
18
	'Text format': 'Tekst opmaak',
19
	'Lists': 'Lijsten',
20
	'Misc elements': '',
21
	'Links': 'Links',
22
	'Images': 'Afbeeldingen',
23
	'Media': 'Media',
24
	'Tables': 'Tabelllen',
25
	'File manager (elFinder)' : 'Bestandsmanager (elFinder)',
26
// Button names
27
	'About this software'     : 'Over deze software',
28
	'Save': 'Opslaan',
29
	'Copy': 'Kopieer',
30
	'Cut': 'Knip',
31
	'Paste': 'Plak',
32
	'Paste only text': 'Plak alleen tekst',
33
	'Paste formatted text': 'Plak opgemaakte tekst',
34
	'Clean format': 'Opmaak opschonen',
35
	'Undo last action': 'Maak laaste actie ongedaan',
36
	'Redo previous action': 'Herdoe laatst gedane actie',
37
	'Bold': 'Vet',
38
	'Italic': 'Cursief',
39
	'Underline': 'Onderlijnt',
40
	'Strikethrough': 'Doorstreept',
41
	'Superscript': '',
42
	'Subscript': '',
43
	'Align left': 'Links uitlijnen',
44
	'Ailgn right': 'Rechts uitlijnen',
45
	'Align center': 'Centreren',
46
	'Align full': 'Uitvullen',
47
	'Font color': 'Tekst kleur',
48
	'Background color': 'Achtergrond kleur',
49
	'Indent': 'Inspringing vergroten',
50
	'Outdent': 'Inspringing Verkleinen',
51
	'Format': 'Opmaak',
52
	'Font size': 'Tekst grootte',
53
	'Font': 'Lettertype',
54
	'Ordered list': 'Geordende lijst',
55
	'Unordered list': 'Ongeordende lijst',
56
	'Horizontal rule': 'Horizontale regel',
57
	'Blockquote': '',
58
	'Block element (DIV)'  : '',
59
	'Link': 'Link',
60
	'Delete link': 'Verwijder mo,l',
61
	'Bookmark': '',
62
	'Image': 'Afbeelding',
63
	'Table': 'Tabel',
64
	'Delete table': 'Verwijder tabel',
65
	'Insert row before': 'Invoegen voor rij',
66
	'Insert row after': 'Invoegen na rij',
67
	'Delete row': 'Verwijder rij',
68
	'Insert column before': 'Invoegen voor kolom',
69
	'Insert column after': 'Invoegen na kolom',
70
	'Delete column': 'Verwijder kolom',
71
	'Merge table cells': 'Samenvoegen tabel cellen',
72
	'Split table cell': '',
73
	'Toggle display document structure': '',
74
	'Table cell properties': '',
75
	'Table properties': '',
76
	'Toggle full screen mode' : '(toggle) Volledig scherm',
77
	'Open file manager'       : 'Open bestandsmanager',
78
	'Non breakable space'   : '',
79
	'Stop element floating' : '',
80
// Dialogs
81
	'Warning': 'Waarschuwing',
82
	'Properies': 'Opties',
83
	'Popup': 'Popup',
84
	'Advanced': 'Geavanceerd',
85
	'Events': 'Events',
86
	'Width': 'Breedte',
87
	'Height': 'Hoogte',
88
	'Left'   : 'Links',
89
	'Center' : 'Midden',
90
	'Right'  : 'Rechts',
91
	'Border': 'Border',
92
	'Background': 'Achtergrond',
93
	'Css class': 'Css Class',
94
	'Css style': 'Css style',
95
	'No': 'Nee',
96
	'Title': 'Titel',
97
	'Script direction': '',
98
	'Language': 'Taal',
99
	'Charset': 'Charset',
100
	'Not set': 'Niet gezet',
101
	'Left to right': 'Links naar rechts',
102
	'Right to left': 'Rechts naar link',
103
	'In this window': 'In dit venster',
104
	'In new window (_blank)': 'In nieuw venster (_blank)',
105
	'In new parent window (_parent)': 'In new parent window (_parent)',
106
	'In top frame (_top)': 'In top frame (_top)',
107
	'URL':'',
108
	'Open in': 'Open in',
109
// Copy
110
	'This operation is disabled in your browser on security reason. Use shortcut instead. ' : 'Deze operatie is uitgeschakeld in jou browser voor beveiligings redenen. Gebruik de snelkoppeling.',
111
// Format
112
	'Heading 1' : '',
113
	'Heading 2' : '',
114
	'Heading 3' : '',
115
	'Heading 4' : '',
116
	'Heading 5' : '',
117
	'Heading 6' : '',
118
	'Paragraph' : '',
119
	'Address' : '',
120
	'Preformatted':'',
121
// Font size
122
	'Small (8pt)': 'Kleinst (8pt)',
123
	'Small (10px)': 'Kleiner (10px)',
124
	'Small (12pt)': 'Klein (12pt)',
125
	'Normal (14pt)': 'Normaal (14pt)',
126
	'Large (18pt)': 'Groot (18pt)',
127
	'Large (24pt)': 'Groter (24pt)',
128
	'Large (36pt)': 'Grootst (36pt)',
129
// Bookmark
130
	'Bookmark name': '',
131
// Link
132
	'Link URL': '',
133
	'Target': 'Doel',
134
	'Select bookmark' : '',
135
	'Open link in popup window': '',
136
	'URL':'',
137
	'Window name': 'Venster naam',
138
	'Window size': 'Venster grootte',
139
	'Window position': 'Venster Positie',
140
	'Open link in popup window': 'Open link in een popup enster',
141
	'Location bar': 'Locatie balk',
142
	'Menu bar': 'Menu balk',
143
	'Toolbar': 'Toolbar',
144
	'Scrollbars': 'Scrollbar',
145
	'Status bar': 'Status balk',
146
	'Resizable': 'Schaalbaar',
147
	'Depedent': '',
148
	'Add return false': '',
149
	'Target MIME type': '',
150
	'Relationship page to target (rel)': '',
151
	'Relationship target to page (rev)': '',
152
	'Tab index':'',
153
	'Access key': '',
154
// Image
155
	'Size': 'Grootte',
156
	'Preview': 'Voorbeeld',
157
	'Margins': '',
158
	'Alt text': 'Alt tekst',
159
	'Image URL': 'Afbeelding URL',
160
// Table
161
	'Spacing'       : '',
162
	'Padding'       : '',
163
	'Rows'          : '',
164
	'Columns'       : '',
165
	'Groups'        : '',
166
	'Cells'         : '',
167
	'Caption'       : '',
168
	'Inner borders' : '' ,
169
	// table cell
170
	'Table cell type' : '',
171
	'Data' : '',
172
	'Header' : '',
173
	'Justify' : '',
174
	'Paddings' : '',
175
	'Apply to' : 'Toepassen op',
176
	'Current cell' : 'Huidige cell',
177
	'All cells in row' : 'Alle cellen in rij',
178
	'All cells in column' : 'Alle cellen in kolom',
179
	'All cells in table' : 'Alle cellen in tabel',
180
	// about
181
	'About elRTE' : 'Over elRTE',
182
	'Version' : 'Versie',
183
	'Licence' : 'Licentie',
184
	'elRTE is an open-source JavaScript based WYSIWYG HTML-editor.' : 'elRTE is een open-source Javascript gebasseerd WYSIWYG HTML-editor.',
185
	'Main goal of the editor - simplify work with text and formating (HTML) on sites, blogs, forums and other online services.' : 'Hoofddoel van de editor - Simpel wekren met tekst en opmaak (HTML) op websites, forums en andere online diensten.',
186
	'You can use it in any commercial or non-commercial projects.' : 'Je kan het gebruiken in commerciele en niet commericiele projecten.',
187
	'Authors' : 'Auteurs',
188
	'Chief developer' : '',
189
	'Developer, tech support' : '',
190
	'Interface designer' : '',
191
	'Spanish localization' : '',
192
	'Japanese localization' : '',
193
	'Latvian localization' : '',
194
	'German localization' : '',
195
	'Ukranian localization' : '',
196
	'For more information about this software visit the' : 'Voor meer informatie over deze software bezoek de',
197
	'elRTE website' : ''
198
};
199
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.pl.js (+168 lines)
Line 0 Link Here
1
/**
2
 * Polish translation
3
 * @author Andrzej Borowicz
4
 * @version 2010-09-18
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.pl = {
8
	'Editor' : 'Edytor',
9
	'Source' : 'Kod źródłowy',
10
	// Panel Name
11
	'Copy/Pase'      : 'Kopiuj/Wklej',
12
	'Undo/Redo'      : 'Cofnij/Ponów',
13
	'Text styles'    : 'Style tekstowe',
14
	'Colors'         : 'Kolor',
15
	'Alignment'      : 'Wyrównanie',
16
	'Indent/Outdent' : 'Wcięcie / wysynięcie',
17
	'Text format'    : 'Format',
18
	'Lists'          : 'Lista',
19
	'Misc elements'  : 'Inne elementy',
20
	'Links'          : 'Link',
21
	'Images'         : 'Obraz',
22
	'Media'          : 'Pliki multimedialne',
23
	'Tables'         : 'Tabela',
24
	'File manager (elFinder)' : 'Menadżer plików (elFinder)',
25
	// button names
26
	'Save'                    : 'Zapisz',
27
	'Copy'                    : 'Wytnij',
28
	'Cut'                     : 'Kopiuj',
29
	'Paste'                   : 'Wklej',
30
	'Paste only text'         : 'Wklej tylko tekst',
31
	'Paste formatted text'    : 'Wklej tekst sformatowany',
32
	'Clean format'            : 'Wyczyść formaty',
33
	'Undo last action'        : 'Cofnij',
34
	'Redo previous action'    : 'Ponów',
35
	'Bold'                    : 'Pogróbienie',
36
	'Italic'                  : 'Kursywa',
37
	'Underline'               : 'Podkreślenie',
38
	'Strikethrough'           : 'Przekreślenie',
39
	'Superscript'             : 'Index górny',
40
	'Subscript'               : 'index dolny',
41
	'Align left'              : 'Wyrównanie do lewej',
42
	'Ailgn right'             : 'Wyrównanie do prawej',
43
	'Align center'            : 'Wycentrowanie',
44
	'Align full'              : 'Wyjustowanie',
45
	'Font color'              : 'Kolor czcionki',
46
	'Background color'        : 'Kolor tła',
47
	'Indent'                  : 'Wcięcie',
48
	'Outdent'                 : 'Wysunięcie',
49
	'Format'                  : 'Format',
50
	'Font size'               : 'Rozmiar czcionki',
51
	'Font'                    : 'Czcionka',
52
	'Ordered list'            : 'Lista numerowana',
53
	'Unordered list'          : 'Lista',
54
	'Horizontal rule'         : 'Linia poziomae',
55
	'Blockquote'              : 'Cytat',
56
	'Block element (DIV)'     : 'Element blokowy (DIV)',
57
	'Link'                    : 'Link',
58
	'Delete link'             : 'Usuń link',
59
	'Bookmark'                : 'Wstaw/etytuj kotwicę',
60
	'Image'                   : 'Obraz',
61
	'Table'                   : 'Tabela',
62
	'Delete table'            : 'Skasuj Tabelę',
63
	'Insert row before'       : 'Wstaw wiers przed',
64
	'Insert row after'        : 'Wstaw wiers po',
65
	'Delete row'              : 'Skasuj wiersz',
66
	'Insert column before'    : 'Wstaw kolumnę Spalte przed',
67
	'Insert column after'     : 'Wstaw kolumnę po',
68
	'Delete column'           : 'Skasuj kolumnę',
69
	'Merge table cells'       : 'Połącz komórki',
70
	'Split table cell'        : 'Rozłącz komórki',
71
	'Toggle display document structure' : 'Pokaż bloki',
72
	'Table cell properties'   : 'Właściwości komórki',
73
	'Table properties'        : 'Właściwości tabeli',
74
	'Toggle full screen mode' : 'Pełny ekran',
75
	'Open file manager'       : 'Menadźer plików',
76
	'Non breakable space'     : 'Twarda spacja',
77
	'Stop element floating'   : 'Wyłącz otaczanie elementów',
78
	// dialogs
79
	'Warning' : 'Ostrzeżenie',
80
	'Properies' : 'Właściwości',
81
	'Popup' : 'okienko Pop-up',
82
	'Advanced' : 'Więcej',
83
	'Events' : 'Wydarzenia',
84
	'Width' : 'Szerokość',
85
	'Height' : 'Wysokość',
86
	'Left'   : 'Lewy',
87
	'Center' : 'Centrum',
88
	'Right'  : 'Prawy',
89
	'Border' : 'Ramka',
90
	'Background' : 'Kolor tła',
91
	'Css class' : 'klasa Css',
92
	'Css style' : 'styl Css',
93
	'No' : 'Nie',
94
	'Title' : 'Tytuł',
95
	'Script direction' : 'Komentarz sktyptu',
96
	'Language' : 'Język',
97
	'Charset' : 'Strona kodowa',
98
	'Not set' : 'nic',
99
	'Left to right' : 'Z lewej do prawej',
100
	'Right to left' : 'Z prawej do lewej',
101
	'In this window' : 'To samo okno (_self)',
102
	'In new window (_blank)' : 'Nowe okno (_blank)',
103
	'In new parent window (_parent)' : 'Okno nadrzędne (_parent)',
104
	'In top frame (_top)' : 'Górna ramka (_top)',
105
	'URL' : '',
106
	'Open in' : 'Otwórz w',
107
	// copy
108
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'Ta operacja jest zabroniona w twojej przeglądarce z powodu zabezpieczeń. Pomimo to możesz używać klawiszy skrótów.',
109
	// format
110
	'Heading 1' : 'Nagłówek 1',
111
	'Heading 2' : 'Nagłówek 2',
112
	'Heading 3' : 'Nagłówek 3',
113
	'Heading 4' : 'Nagłówek 4',
114
	'Heading 5' : 'Nagłówek 5',
115
	'Heading 6' : 'Nagłówek 6',
116
	'Paragraph' : 'Paragraf',
117
	'Address' : 'Addresse',
118
	'Preformatted' : '',
119
	// font size
120
	'Small (8pt)'   : 'Mały (8pt)',
121
	'Small (10px)'  : 'Mały (10pt)',
122
	'Small (12pt)'  : 'Mały (12pt)',
123
	'Normal (14pt)' : 'Średni (14pt)',
124
	'Large (18pt)'  : 'Duży (18pt)',
125
	'Large (24pt)'  : 'Duży (24pt)',
126
	'Large (36pt)'  : 'Duży (36pt)',
127
	// bookmark
128
	'Bookmark name' : 'Nazwa kotwicy',
129
	// link
130
	'Link URL' : '(URL)',
131
	'Target' : 'Cel',
132
	'Open link in popup window' : 'Otwórz link w nowym oknie',
133
	'URL' : '',
134
	'Window name' : 'Okienko Pop-up Nazwa',
135
	'Window size' : 'Rozmiar',
136
	'Window position' : 'Pozycja',
137
	'Location bar' : 'pasek adresu',
138
	'Menu bar' : 'Pasek menu',
139
	'Toolbar' : 'Pasek narzędzi',
140
	'Scrollbars' : 'Paski przewijania',
141
	'Status bar' : 'pasek statusy',
142
	'Resizable' : 'Zmiana rozmiaru okna',
143
	'Depedent' : 'Zależne (Netscape)',
144
	'Add return false' : 'dodaj (return false)',
145
	'Target MIME type' : 'MIME type',
146
	'Relationship page to target (rel)' : 'Zależnośc strony do celu (rel)',
147
	'Relationship target to page (rev)' : 'Zależnośc strony do strony (rev)',
148
	'Tab index' : 'Index tab',
149
	'Access key' : 'Klawisz dostepu',
150
	// image
151
	'Size' : 'Rozmiar',
152
	'Preview' : 'Podgląd',
153
	'Margins' : 'Marginesy',
154
	'Alt text' : 'Text alternatywny',
155
	'Image URL' : 'URL',
156
	// table
157
	'Spacing'       : 'Dystans (spacing)',
158
	'Padding'       : 'Dystans (padding)',
159
	'Rows'          : 'Wiersz',
160
	'Columns'       : 'Kolumna',
161
	'Groups'        : 'Grupa',
162
	'Cells'         : 'Komórki',
163
	'Caption'       : 'Legenda',
164
	'Inner borders' : 'Wewnętrzne ramki'
165
166
167
}
168
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.ru.js (+211 lines)
Line 0 Link Here
1
/*
2
 * Russian translation
3
 * @author Dmitry Levashov <dio@std42.ru>
4
 * @version 2010-09-20
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.ru = {
8
	'Editor' : 'Редактор',
9
	'Source' : 'Исходник',
10
	// названия панелей
11
	'Copy/Pase'      : 'Копирование/Вставка',
12
	'Undo/Redo'      : 'Отмена/Повтор действия',
13
	'Text styles'    : 'Стили текста',
14
	'Colors'         : 'Цвета',
15
	'Alignment'      : 'Выравнивание',
16
	'Indent/Outdent' : 'Отступы',
17
	'Text format'    : 'Форматирование',
18
	'Lists'          : 'Списки',
19
	'Misc elements'  : 'Разные элементы',
20
	'Links'          : 'Ссылки',
21
	'Images'         : 'Изображения',
22
	'Media'          : 'Media файлы',
23
	'Tables'         : 'Таблицы',
24
	'File manager (elFinder)' : 'Файловый менеджер (elFinder)',
25
	// названия кнопок
26
	'About this software'     : 'О программе',
27
	'Save'                    : 'Сохранить',
28
	'Copy'                    : 'Копировать',
29
	'Cut'                     : 'Вырезать',
30
	'Paste'                   : 'Вставить',
31
	'Paste only text'         : 'Вставить только текст',
32
	'Paste formatted text'    : 'Вставить форматированый текст',
33
	'Clean format'            : 'Удалить форматирование',
34
	'Undo last action'        : 'Отменить действие',
35
	'Redo previous action'    : 'Повторить действие ',
36
	'Bold'                    : 'Жирный',
37
	'Italic'                  : 'Курсив',
38
	'Underline'               : 'Подчеркнутый',
39
	'Strikethrough'           : 'Перечеркнутый',
40
	'Superscript'             : 'Надстрочный текст',
41
	'Subscript'               : 'Подстрочный текст',
42
	'Align left'              : 'Выровнять налево',
43
	'Ailgn right'             : 'Выровнять направо',
44
	'Align center'            : 'Выровнять по центру',
45
	'Align full'              : 'Выровнять по краям',
46
	'Font color'              : 'Цвет шрифта',
47
	'Background color'        : 'Цвет заливки',
48
	'Indent'                  : 'Увеличить отступ',
49
	'Outdent'                 : 'Уменьшить отступ',
50
	'Format'                  : 'Форматирование',
51
	'Font size'               : 'Размер шрифта',
52
	'Font'                    : 'Шрифт',
53
	'Ordered list'            : 'Нумерованый список',
54
	'Unordered list'          : 'Ненумерованый список',
55
	'Horizontal rule'         : 'Горизонтальная линия',
56
	'Blockquote'              : 'Цитата',
57
	'Block element (DIV)'     : 'Блочный элемент (DIV)',
58
	'Link'                    : 'Ссылка',
59
	'Delete link'             : 'Удалить ссылку',
60
	'Bookmark'                : 'Закладка',
61
	'Image'                   : 'Изображение',
62
	'Table'                   : 'Таблица',
63
	'Delete table'            : 'Удалить таблицу',
64
	'Insert row before'       : 'Вставить ряд до',
65
	'Insert row after'        : 'Вставить ряд после',
66
	'Delete row'              : 'Удалить ряд',
67
	'Insert column before'    : 'Вставить колонку до',
68
	'Insert column after'     : 'Вставить колонку после',
69
	'Delete column'           : 'Удалить колонку',
70
	'Merge table cells'       : 'Склеить ячейки',
71
	'Split table cell'        : 'Разделить ячейку',
72
	'Toggle display document structure' : 'Показать структуру документа/невидимые элементы',
73
	'Table cell properties'   : 'Свойство ячейки',
74
	'Table properties'        : 'Свойство таблицы',
75
	'Toggle full screen mode' : 'Во весь экран',
76
	'Open file manager'       : 'Открыть файловый менеджер',
77
	'Non breakable space'     : 'Неразрывный пробел',
78
	'Stop element floating'   : 'Отключить обтекание элементов текстом',
79
	// dialogs
80
	'Warning' : 'Внимание',
81
	'Properies' : 'Свойства',
82
	'Popup' : 'Новое окно',
83
	'Advanced' : 'Дополнительно',
84
	'Events' : 'События',
85
	'Width' : 'Ширина',
86
	'Height' : 'Высота',
87
	'Left'   : 'Слева',
88
	'Center' : 'По центру',
89
	'Right'  : 'Справа',
90
	'Border' : 'Бордюр',
91
	'Background' : 'Фон',
92
	'Css class' : 'Css класс',
93
	'Css style' : 'Css cтиль',
94
	'No' : 'Нет',
95
	'Title' : 'Заголовок',
96
	'Script direction' : 'Направление письма',
97
	'Language' : 'Язык',
98
	'Charset' : 'Кодировка',
99
	'Not set' : 'Не установлено',
100
	'Left to right' : 'Слево направо',
101
	'Right to left' : 'Справа налево',
102
	'In this window' : 'В этом окне',
103
	'In new window (_blank)' : 'В новом окне (_blank)',
104
	'In new parent window (_parent)' : 'В родительском окне (_parent)',
105
	'In top frame (_top)' : 'В верхнем фрейме (_top)',
106
	'URL' : '',
107
	'Open in' : 'Открыть',
108
	'Open file manger' : 'Открыть файловый менеджер',
109
	// copy
110
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : 'Действие запрещено в вашем браузере по соображениям безопастности. Используйте сочетание клавиш',
111
	// format
112
	'Heading 1' : 'Заголовок 1',
113
	'Heading 2' : 'Заголовок 2',
114
	'Heading 3' : 'Заголовок 3',
115
	'Heading 4' : 'Заголовок 4',
116
	'Heading 5' : 'Заголовок 5',
117
	'Heading 6' : 'Заголовок 6',
118
	'Paragraph' : 'Параграф',
119
	'Address' : 'Адрес',
120
	'Preformatted' : '',
121
	// font size
122
	'Small (8pt)'   : 'Мелкий (8pt)',
123
	'Small (10px)'  : 'Маленький (10px)',
124
	'Small (12pt)'  : 'Небольшой (12pt)',
125
	'Normal (14pt)' : 'Обычный (14pt)',
126
	'Large (18pt)'  : 'Большой (18pt)',
127
	'Large (24pt)'  : 'Крупный (24pt)',
128
	'Large (36pt)'  : 'Огромный (36pt)',
129
	// bookmark
130
	'Bookmark name' : 'Имя закладки',
131
	// link
132
	'Link URL' : 'Адрес ссылки (URL)',
133
	'Target' : 'Цель',
134
	'Select bookmark' : 'Выбрать закладку',
135
	'Open link in popup window' : 'Открыть ссылку во всплывающем окне',
136
	'URL' : '',
137
	'Window name' : 'Название окна',
138
	'Window size' : 'Размер окна',
139
	'Window position' : 'Позиция окна',
140
	'Location bar' : 'Панель локации',
141
	'Menu bar' : 'Панель меню',
142
	'Toolbar' : 'Панель инструментов',
143
	'Scrollbars' : 'Полосы прокрутки',
144
	'Status bar' : 'Строка состояния',
145
	'Resizable' : 'Изменение размера',
146
	'Depedent' : 'Зависимый (Netscape)',
147
	'Add return false' : 'Добавить (return false)',
148
	'Target MIME type' : 'MIME type цели',
149
	'Relationship page to target (rel)' : 'Отношение страницы к цели (rel)',
150
	'Relationship target to page (rev)' : 'Отношение цели к странице (rev)',
151
	'Tab index' : '',
152
	'Access key' : 'Клавиша доступа',
153
	// image
154
	'Size' : 'Размер',
155
	'Preview' : 'Предварительный просмотр',
156
	'Margins' : 'Отступы',
157
	'Alt text' : 'Описание (Alt)',
158
	'Image URL' : 'URL',
159
	// table
160
	'Spacing'       : 'Промежуток (spacing)',
161
	'Padding'       : 'Отступ (padding)',
162
	'Rows'          : 'Строки',
163
	'Columns'       : 'Колонки',
164
	'Groups'        : 'Группы',
165
	'Cells'         : 'Ячейки',
166
	'Caption'       : 'Заголовок таблицы',
167
	'Inner borders' : 'Внутренний бордюр',
168
	// table cell
169
	'Table cell type' : 'Тип ячейки',
170
	'Data' : 'Данные',
171
	'Header' : 'Заголовок',
172
	'Justify' : 'По краям',
173
	'Paddings' : 'Отступы',
174
	'Apply to' : 'Применить к',
175
	'Current cell' : 'Выбранная ячейка',
176
	'All cells in row' : 'Все ячейки в ряду',
177
	'All cells in column' : 'Все ячейки в столбце',
178
	'All cells in table' : 'Все ячейки таблицы',
179
	// about
180
	'About elRTE' : 'О редакторе elRTE',
181
	'Version' : 'Версия',
182
	'Licence' : 'Лицензия',
183
	'elRTE is an open-source JavaScript based WYSIWYG HTML-editor.' : 'elRTE - это свободный WYSIWYG редактор для сайтов и систем управления контентом (CMS), написанный на JavaScript.',
184
	'Main goal of the editor - simplify work with text and formating (HTML) on sites, blogs, forums and other online services.' : 'Основная цель редактора - максимально упростить работу с текстом и разметкой (HTML) на сайтах, блогах, форумах и прочих online сервисах.',
185
	'You can use it in any commercial or non-commercial projects.' : 'Вы можете использовать его в любых коммерческих и некоммерческих проектах.',
186
	'Authors' : 'Авторы',
187
	'Chief developer' : 'Ведущий разработчик',
188
	'Developer, tech support' : 'Разработчик, техническая поддержка',
189
	'Developer' : 'Разработчик',
190
	'Interface designer' : 'Дизайнер интерфейса',
191
	'Spanish localization' : 'Испанская локализация',
192
	'Czech localization' : 'Чешская локализация',
193
	'Japanese localization' : 'Японская локализация',
194
	'Latvian localization' : 'Латышская локализация',
195
	'German localization' : 'Немецкая локализация',
196
	'Ukranian localization' : 'Украинская локализация',
197
	'Persian (farsi) localization' : 'Персидская (фарси) локализация',
198
	'Arabic localization' : 'Арабская локализация',
199
	'RTL support' : 'Поддержка RTL',
200
	'French localization' : 'Французская локализация',
201
	'Dutch localization' : 'Голландская локализация',
202
	'Hungarian localization' : 'Венгерская локализация',
203
	'Polish localization' : 'Польская локализация',
204
	'Italian localization' : 'Итальянская локализация',
205
	'Traditional Chinese localization' : 'Китайская (традиционная) локализация',
206
	'For more information about this software visit the' : 'Подробная информация и форум тех. поддержки',
207
	'elRTE website' : 'на сайте elRTE'
208
209
210
}
211
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.ua.js (+201 lines)
Line 0 Link Here
1
/*
2
 * Ukranian translation
3
 * @author Artem Vasilyev
4
 * @version 2010-09-18
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.ua = {
8
	'Editor' : 'Редактор',
9
	'Source' : 'Джерело',
10
// Назви панелей
11
	'Copy / Pase' : 'Копіювання / Вставка',
12
	'Undo / Redo' : 'Скасувати / Повтор дії',
13
	'Text styles' : 'Стилі тексту',
14
	'Colors': 'Кольори',
15
	'Alignment': 'Вирівнювання',
16
	'Indent / Outdent': 'Відступи',
17
	'Text format': 'Форматування',
18
	'Lists': 'Списки',
19
	'Misc elements': 'Різні елементи',
20
	'Links': 'Посилання',
21
	'Images': 'Малюнки',
22
	'Media': 'Media файли',
23
	'Tables': 'Таблиці',
24
	'File manager (elFinder)' : 'Файловый менеджер (elFinder)',
25
// Назви кнопок
26
	'About this software'     : 'О программе',
27
	'Save': 'Зберегти',
28
	'Copy': 'Копіювати',
29
	'Cut': 'Вирізати',
30
	'Paste': 'Вставити',
31
	'Paste only text': 'Вставити тільки текст',
32
	'Paste formatted text': 'Вставити форматування тексту',
33
	'Clean format': 'Видалити форматування',
34
	'Undo last action': 'Скасувати дію',
35
	'Redo previous action': 'Повторити дію',
36
	'Bold': 'Товстий',
37
	'Italic': 'Курсив',
38
	'Underline': 'Підкреслений',
39
	'Strikethrough': 'Перекреслений',
40
	'Superscript': 'Верхній регістр',
41
	'Subscript': 'Нижній регістр',
42
	'Align left': 'Вирівняти ліворуч',
43
	'Ailgn right': 'Вирівняти праворуч',
44
	'Align center': 'Вирівняти по центру',
45
	'Align full': 'Вирівняти по краях',
46
	'Font color': 'Колір тексту',
47
	'Background color': 'Колір залікві',
48
	'Indent': 'Збільшити відступ',
49
	'Outdent': 'Зменшити відступ',
50
	'Format': 'Форматування',
51
	'Font size': 'Розмір шрифту',
52
	'Font': 'Шрифт',
53
	'Ordered list': 'Нумерований список',
54
	'Unordered list': 'Ненумерований список',
55
	'Horizontal rule': 'Горизонтальна лінія',
56
	'Blockquote': 'Цитата',
57
	'Block element (DIV)'  : 'Блочный элемент (DIV)',
58
	'Link': 'Посилання',
59
	'Delete link': 'Видалити посилання',
60
	'Bookmark': 'Закладка',
61
	'Image': 'Зображення',
62
	'Table': 'Таблиця',
63
	'Delete table': 'Видалити таблицю',
64
	'Insert row before': 'Вставити ряд до',
65
	'Insert row after': 'Вставити ряд після',
66
	'Delete row': 'Видалити ряд',
67
	'Insert column before': 'Вставити колонку до',
68
	'Insert column after': 'Вставити колонку після',
69
	'Delete column': 'Видалити колонку',
70
	'Merge table cells': 'склеїти осередку',
71
	'Split table cell': 'Розділити клітинку',
72
	'Toggle display document structure': 'Показати структуру документа / невидимі елементи',
73
	'Table cell properties': 'Властивість клітинку',
74
	'Table properties': 'Властивість таблиці',
75
	'Toggle full screen mode' : 'Во весь экран',
76
	'Open file manager'       : 'Открыть файловый менеджер',
77
	'Non breakable space'   : 'Неразрывный пробел',
78
	'Stop element floating' : 'Отключить обтекание элементов текстом',
79
//Dialogs
80
	'Warning': 'Увага',
81
	'Properies': 'Властивості',
82
	'Popup': 'Нове вікно',
83
	'Advanced': 'Більше',
84
	'Events': 'Події',
85
	'Width': 'Ширина',
86
	'Height': 'Висота',
87
	'Left'   : 'Слева',
88
	'Center' : 'По центру',
89
	'Right'  : 'Справа',
90
	'Border': 'Бордюр',
91
	'Background': 'Фон',
92
	'Css class': 'Css клас',
93
	'Css style': 'Css style',
94
	'No': 'Ні',
95
	'Title': 'Заголовок',
96
	'Script direction': 'Направлення письма',
97
	'Language': 'Мова',
98
	'Charset': 'Кодування',
99
	'Not set': 'Не встановлено',
100
	'Left to right': 'Зліва направо',
101
	'Right to left': 'Справа наліво',
102
	'In this window': 'У цьому вікні',
103
	'In new window (_blank)': 'У новому вікні (_blank)',
104
	'In new parent window (_parent)': 'У батьківському вікні (_parent)',
105
	'In top frame (_top)': 'У верхньому фреймі (_top)',
106
	'URL':'',
107
	'Open in': 'Відкрити',
108
// Copy
109
	'This operation is disabled in your browser on security reason. Use shortcut instead. ' : 'Дія заборонено у вашому браузері з міркувань безпеки. Використовуйте клавіші ',
110
// Format
111
	'Heading 1' : 'Заголовок 1',
112
	'Heading 2' : 'Заголовок 2',
113
	'Heading 3' : 'Заголовок 3',
114
	'Heading 4' : 'Заголовок 4',
115
	'Heading 5' : 'Заголовок 5',
116
	'Heading 6' : 'Заголовок 6',
117
	'Paragraph' : 'Параграф',
118
	'Address' : 'Адрес',
119
	'Preformatted':'',
120
// Font size
121
	'Small (8pt)': 'Дрібний (8pt)',
122
	'Small (10px)': 'Маленький (10px)',
123
	'Small (12pt)': 'Невеликий (12pt)',
124
	'Normal (14pt)': 'Звичайний (14pt)',
125
	'Large (18pt)': 'Великий (18pt)',
126
	'Large (24pt)': 'Крупний (24pt)',
127
	'Large (36pt)': 'Величезний (36pt)',
128
// Bookmark
129
	'Bookmark name': 'Ім&rsquo;я закладки',
130
// Link
131
	'Link URL': 'Адреса ссиклі (URL)',
132
	'Target': 'Мета',
133
	'Select bookmark' : 'Выбрать закладку',
134
	'Open link in popup window': 'Відкрити посилання у спливаючому вікні',
135
	'URL':'',
136
	'Window name': 'Назва вікна',
137
	'Window size': 'Розмір вікна',
138
	'Window position': 'Позиція вікна',
139
	'Open link in popup window': 'Відкрити посилання у спливаючому вікні',
140
	'Window name': 'Назва вікна',
141
	'Window size': 'Розмір вікна',
142
	'Window position': 'Позиція вікна',
143
	'Location bar': 'Панель локації',
144
	'Menu bar': 'Панель меню',
145
	'Toolbar': 'Панель інструментів',
146
	'Scrollbars': 'Смуги прокрутки',
147
	'Status bar': 'Рядок стану',
148
	'Resizable': 'Зміна розміру',
149
	'Depedent': 'Залежний (Netscape)',
150
	'Add return false': 'Додати (return false)',
151
	'Target MIME type': 'MIME type цілі',
152
	'Relationship page to target (rel)': 'Ставлення сторінки до мети (rel) ',
153
	'Relationship target to page (rev)': 'Відношення мети до сторінки (rev)',
154
	'Tab index':'',
155
	'Access key': 'Клавіша доступу',
156
// Image
157
	'Size': 'Розмір',
158
	'Preview': 'Попередній перегляд',
159
	'Margins': 'Відступи',
160
	'Alt text': 'Опис (Alt)',
161
	'Image URL': 'URL',
162
// Table
163
	'Spacing'       : 'Проміжок (spacing)',
164
	'Padding'       : 'Відступ (padding)',
165
	'Rows'          : 'Рядок ',
166
	'Columns'       : 'Колонки',
167
	'Groups'        : 'Группы',
168
	'Cells'         : 'Ячейки',
169
	'Caption'       : 'Заголовок таблиці',
170
	'Inner borders' : 'Внутрішній бордюр' ,
171
	// table cell
172
	'Table cell type' : 'Тип ячейки',
173
	'Data' : 'Данные',
174
	'Header' : 'Заголовок',
175
	'Justify' : 'По краям',
176
	'Paddings' : 'Отступы',
177
	'Apply to' : 'Применить к',
178
	'Current cell' : 'Выбранная ячейка',
179
	'All cells in row' : 'Все ячейки в ряду',
180
	'All cells in column' : 'Все ячейки в столбце',
181
	'All cells in table' : 'Все ячейки таблицы',
182
	// about
183
	'About elRTE' : 'О редакторе elRTE',
184
	'Version' : 'Версия',
185
	'Licence' : 'Лицензия',
186
	'elRTE is an open-source JavaScript based WYSIWYG HTML-editor.' : 'elRTE - это свободный WYSIWYG редактор для сайтов и систем управления контентом (CMS), написанный на JavaScript.',
187
	'Main goal of the editor - simplify work with text and formating (HTML) on sites, blogs, forums and other online services.' : 'Основная цель редактора - максимально упростить работу с текстом и разметкой (HTML) на сайтах, блогах, форумах и прочих online сервисах.',
188
	'You can use it in any commercial or non-commercial projects.' : 'Вы можете использовать его в любых коммерческих и некоммерческих проектах.',
189
	'Authors' : 'Авторы',
190
	'Chief developer' : 'Ведущий разработчик',
191
	'Developer, tech support' : 'Разработчик, техническая поддержка',
192
	'Interface designer' : 'Дизайнер интерфейса',
193
	'Spanish localization' : 'Испанская локализация',
194
	'Japanese localization' : 'Японская локализация',
195
	'Latvian localization' : 'Латвийская локализация',
196
	'German localization' : 'Немецкая локализация',
197
	'Ukranian localization' : 'Украинская локализация',
198
	'For more information about this software visit the' : 'Подробная информация и форум тех. поддержки',
199
	'elRTE website' : 'на сайте elRTE'
200
};
201
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/i18n/elrte.zh_TW.js (+167 lines)
Line 0 Link Here
1
/**
2
 * Traditional Chinese translation
3
 * @author Tad <tad0616@gmail.com>
4
 * @version 2010-09-18
5
 */
6
(function($) {
7
elRTE.prototype.i18Messages.zh_TW = {
8
	'Editor' : '所見即所得',
9
	'Source' : '原始碼',
10
	// Panel Name
11
	'Copy/Pase'      : '複製/貼上',
12
	'Undo/Redo'      : '復原/重做',
13
	'Text styles'    : '文字樣式',
14
	'Colors'         : '顏色',
15
	'Alignment'      : '對齊',
16
	'Indent/Outdent' : '縮排/凸排',
17
	'Text format'    : '文字格式',
18
	'Lists'          : '清單',
19
	'Misc elements'  : '其他元件',
20
	'Links'          : '連結',
21
	'Images'         : '圖檔',
22
	'Media'          : '多媒體',
23
	'Tables'         : '表格',
24
	'File manager (elFinder)' : '檔案管理',
25
	// button names
26
	'Save'                    : '儲存',
27
	'Copy'                    : '複製',
28
	'Cut'                     : '剪下',
29
	'Paste'                   : '貼上',
30
	'Paste only text'         : '貼上純文字',
31
	'Paste formatted text'    : '貼上已格式化文字',
32
	'Clean format'            : '清除格式',
33
	'Undo last action'        : '復原最後一個動作',
34
	'Redo previous action'    : '重做上一個動作',
35
	'Bold'                    : '粗體',
36
	'Italic'                  : '斜體',
37
	'Underline'               : '底線',
38
	'Strikethrough'           : '刪除線',
39
	'Superscript'             : '上標',
40
	'Subscript'               : '下標',
41
	'Align left'              : '靠左',
42
	'Ailgn right'             : '靠右',
43
	'Align center'            : '置中',
44
	'Align full'              : '左右對齊',
45
	'Font color'              : '文字顏色',
46
	'Background color'        : '背景顏色',
47
	'Indent'                  : '縮排',
48
	'Outdent'                 : '凸排',
49
	'Format'                  : '格式',
50
	'Font size'               : '字型大小',
51
	'Font'                    : '字型',
52
	'Ordered list'            : '編號',
53
	'Unordered list'          : '項目符號',
54
	'Horizontal rule'         : '水平線',
55
	'Blockquote'              : '引用',
56
	'Block element (DIV)'     : '區域元件 (DIV)',
57
	'Link'                    : '連結',
58
	'Delete link'             : '移除連結',
59
	'Bookmark'                : '書籤',
60
	'Image'                   : '插圖',
61
	'Table'                   : '表格',
62
	'Delete table'            : '刪除表格',
63
	'Insert row before'       : '上方新增一列',
64
	'Insert row after'        : '下方新增一列',
65
	'Delete row'              : '刪除列',
66
	'Insert column before'    : '左邊新增一欄',
67
	'Insert column after'     : '右邊新增一欄',
68
	'Delete column'           : '刪除欄',
69
	'Merge table cells'       : '合併儲存格',
70
	'Split table cell'        : '分割儲存格',
71
	'Toggle display document structure' : '切換顯示文件結構',
72
	'Table cell properties'   : '表格儲存格屬性',
73
	'Table properties'        : '表格屬性',
74
	'Toggle full screen mode' : '切換為全螢幕',
75
	'Open file manager'       : '開啟檔案管理',
76
	'Non breakable space'     : '不斷行空白',
77
	'Stop element floating'   : '停止元件浮動屬性',
78
	// dialogs
79
	'Warning' : '警告',
80
	'Properies' : '屬性',
81
	'Popup' : '跳出框',
82
	'Advanced' : '進階',
83
	'Events' : '事件',
84
	'Width' : '寬度',
85
	'Height' : '高度',
86
	'Left'   : '靠左',
87
	'Center' : '置中',
88
	'Right'  : '靠右',
89
	'Border' : '邊框',
90
	'Background' : '背景',
91
	'Css class' : 'CSS類別',
92
	'Css style' : 'CSS樣式',
93
	'No' : '不設置',
94
	'Title' : '標題',
95
	'Script direction' : '語言方向',
96
	'Language' : '語言',
97
	'Charset' : '字元編碼',
98
	'Not set' : '不設定',
99
	'Left to right' : '左至右',
100
	'Right to left' : '右到左',
101
	'In this window' : '在此視窗',
102
	'In new window (_blank)' : '在新視窗 (_blank)',
103
	'In new parent window (_parent)' : '在父視窗 (_parent)',
104
	'In top frame (_top)' : '跳出框架 (_top)',
105
	'URL' : '網址',
106
	'Open in' : '開啟至',
107
	// copy
108
	'This operation is disabled in your browser on security reason. Use shortcut instead.' : '基於安全理由,此動作無法在瀏覽器中進行,請直接按 Ctrl+V 試試。',
109
	// format
110
	'Heading 1' : '標題 1',
111
	'Heading 2' : '標題 2',
112
	'Heading 3' : '標題 3',
113
	'Heading 4' : '標題 4',
114
	'Heading 5' : '標題 5',
115
	'Heading 6' : '標題 6',
116
	'Paragraph' : '段落',
117
	'Address' : '位址',
118
	'Preformatted' : '固定格式',
119
	// font size
120
	'Small (8pt)'   : '極小 (8pt)',
121
	'Small (10px)'  : '更小 (10px)',
122
	'Small (12pt)'  : '小 (12pt)',
123
	'Normal (14pt)' : '中 (14pt)',
124
	'Large (18pt)'  : '大 (18pt)',
125
	'Large (24pt)'  : '更大 (24pt)',
126
	'Large (36pt)'  : '極大 (36pt)',
127
	// bookmark
128
	'Bookmark name' : '書籤名稱',
129
	// link
130
	'Link URL' : '連結位址',
131
	'Target' : '目標',
132
	'Open link in popup window' : '在跳出視窗中開啟',
133
	'Window name' : '視窗名稱',
134
	'Window size' : '視窗尺寸',
135
	'Window position' : '視窗位置',
136
	'Location bar' : '位址列',
137
	'Menu bar' : '選單列',
138
	'Toolbar' : '工具列',
139
	'Scrollbars' : '捲軸',
140
	'Status bar' : '狀態列',
141
	'Resizable' : '可否調整尺寸',
142
	'Depedent' : '相關 (Netscape)',
143
	'Add return false' : '加入傳回false (return false)',
144
	'Target MIME type' : '目標物的MIME類型',
145
	'Relationship page to target (rel)' : '定義連結的起點文件與目標文件之間的關係 (rel)',
146
	'Relationship target to page (rev)' : '定義連結的起點文件與目標文件之間的反向關係 (rev)',
147
	'Tab index' : '定位索引',
148
	'Access key' : '存取鍵',
149
	// image
150
	'Size' : '尺寸',
151
	'Preview' : '預覽',
152
	'Margins' : '邊界',
153
	'Alt text' : '提示文字',
154
	'Image URL' : '圖檔網址',
155
	// table
156
	'Spacing'       : '儲存格間距 (Spacing)',
157
	'Padding'       : '儲存格內距 (Padding)',
158
	'Rows'          : '列',
159
	'Columns'       : '欄',
160
	'Groups'        : '儲存格群組',
161
	'Cells'         : '儲存格',
162
	'Caption'       : '表格標題',
163
	'Inner borders' : '框線'
164
165
166
}
167
})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/jquery-1.4.2.min.js (+154 lines)
Line 0 Link Here
1
/*!
2
 * jQuery JavaScript Library v1.4.2
3
 * http://jquery.com/
4
 *
5
 * Copyright 2010, John Resig
6
 * Dual licensed under the MIT or GPL Version 2 licenses.
7
 * http://jquery.org/license
8
 *
9
 * Includes Sizzle.js
10
 * http://sizzlejs.com/
11
 * Copyright 2010, The Dojo Foundation
12
 * Released under the MIT, BSD, and GPL Licenses.
13
 *
14
 * Date: Sat Feb 13 22:33:48 2010 -0500
15
 */
16
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
17
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
18
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
19
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
20
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
21
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
22
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
23
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
24
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
25
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
26
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
27
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
28
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
29
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
30
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
31
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
32
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
33
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
34
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
35
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
36
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
37
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
38
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
39
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
40
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
41
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
42
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
43
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
44
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
45
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
46
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
47
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
48
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
49
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
50
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
51
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
52
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
53
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
54
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
55
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
56
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
57
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
58
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
59
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
60
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
61
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
62
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
63
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
64
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
65
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
66
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
67
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
68
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
69
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
70
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
71
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
72
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
73
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
74
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
75
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
76
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\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
77
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
78
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
79
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
80
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
81
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
82
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
83
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
84
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
85
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
86
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
87
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
88
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
89
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
90
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
91
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
92
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
93
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
94
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
95
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
96
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
97
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
98
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
99
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
100
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
101
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
102
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
103
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
104
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
105
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
106
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
107
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
108
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
109
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
110
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
111
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
112
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
113
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
114
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
115
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
116
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
117
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
118
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
119
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
120
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
121
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
122
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
123
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
124
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
125
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
126
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
127
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
128
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
129
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
130
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
131
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
132
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
133
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
134
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
135
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
136
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
137
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
138
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
139
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
140
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
141
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
142
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
143
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
144
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
145
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
146
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
147
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
148
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
149
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
150
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
151
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
152
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
153
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
154
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/jquery-ui-1.8.5.custom.min.js (+284 lines)
Line 0 Link Here
1
/*!
2
 * jQuery UI 1.8.5
3
 *
4
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
5
 * Dual licensed under the MIT or GPL Version 2 licenses.
6
 * http://jquery.org/license
7
 *
8
 * http://docs.jquery.com/UI
9
 */
10
(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.5",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
11
NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
12
"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
13
if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"));if(!isNaN(b)&&b!=0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind("mousedown.ui-disableSelection selectstart.ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
14
"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c.style(this,h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c.style(this,
15
h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
16
c(function(){var a=document.createElement("div"),b=document.body;c.extend(a.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.appendChild(a).offsetHeight===100;b.removeChild(a).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,
17
d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
18
;/*!
19
 * jQuery UI Widget 1.8.5
20
 *
21
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
22
 * Dual licensed under the MIT or GPL Version 2 licenses.
23
 * http://jquery.org/license
24
 *
25
 * http://docs.jquery.com/UI/Widget
26
 */
27
(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
28
a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)===
29
"_")return h;e?this.each(function(){var g=b.data(this,a);if(!g)throw"cannot call methods on "+a+" prior to initialization; attempted to call method '"+d+"'";if(!b.isFunction(g[d]))throw"no such method '"+d+"' for "+a+" widget instance";var i=g[d].apply(g,f);if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",
30
widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
31
"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}b.each(d,function(f,h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",
32
false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
33
;/*!
34
 * jQuery UI Mouse 1.8.5
35
 *
36
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
37
 * Dual licensed under the MIT or GPL Version 2 licenses.
38
 * http://jquery.org/license
39
 *
40
 * http://docs.jquery.com/UI/Mouse
41
 *
42
 * Depends:
43
 *	jquery.ui.widget.js
44
 */
45
(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(a._preventClickEvent){a._preventClickEvent=false;b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&
46
this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();
47
return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.browser.safari||a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&
48
this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=a.target==this._mouseDownEvent.target;this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-
49
a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
50
;/*
51
 * jQuery UI Position 1.8.5
52
 *
53
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
54
 * Dual licensed under the MIT or GPL Version 2 licenses.
55
 * http://jquery.org/license
56
 *
57
 * http://docs.jquery.com/UI/Position
58
 */
59
(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.scrollTo&&d.document){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j=
60
{top:b.of.pageY,left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/
61
2;if(b.at[1]==="bottom")j.top+=k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+parseInt(c.curCSS(this,"marginRight",true))||0,w=m+q+parseInt(c.curCSS(this,"marginBottom",true))||0,i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]===
62
"center")i.top-=m/2;i.left=parseInt(i.left);i.top=parseInt(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();
63
b.left=d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];
64
b.left+=a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=
65
c(b),g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
66
;/*
67
 * jQuery UI Draggable 1.8.5
68
 *
69
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
70
 * Dual licensed under the MIT or GPL Version 2 licenses.
71
 * http://jquery.org/license
72
 *
73
 * http://docs.jquery.com/UI/Draggables
74
 *
75
 * Depends:
76
 *	jquery.ui.core.js
77
 *	jquery.ui.mouse.js
78
 *	jquery.ui.widget.js
79
 */
80
(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
81
"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
82
this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-
83
this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();
84
d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||
85
this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode)return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,
86
b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
87
a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||
88
0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
89
this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-
90
(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment==
91
"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&
92
a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),
93
10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
94
this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():
95
f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])e=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+
96
this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;e=this.originalPageX+
97
Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=this.containment?!(e-this.offset.click.left<this.containment[0]||e-this.offset.click.left>this.containment[2])?e:!(e-this.offset.click.left<this.containment[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-
98
this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=
99
this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.5"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var g=d.data(this,"sortable");
100
if(g&&!g.options.disabled){c.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;
101
c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=
102
1;this.instance.currentItem=d(f).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;
103
this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=
104
this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","iframeFix",{start:function(){var a=
105
d(this).data("draggable").options;d(a.iframeFix===true?"iframe":a.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;
106
if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!=
107
"HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-
108
b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
109
c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
110
width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,g=b.offset.left,n=g+c.helperProportions.width,m=b.offset.top,o=m+c.helperProportions.height,h=c.snapElements.length-1;h>=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e<g&&g<k+e&&j-e<m&&m<l+e||i-e<g&&g<k+e&&j-e<o&&o<l+e||i-e<n&&n<k+e&&j-e<m&&m<l+e||i-e<n&&n<k+e&&j-e<o&&
111
o<l+e){if(f.snapMode!="inner"){var p=Math.abs(j-o)<=e,q=Math.abs(l-m)<=e,r=Math.abs(i-n)<=e,s=Math.abs(k-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k}).left-c.margins.left}var t=
112
p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(j-m)<=e;q=Math.abs(l-o)<=e;r=Math.abs(i-g)<=e;s=Math.abs(k-n)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[h].snapping&&
113
(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=p||q||r||s||t}else{c.snapElements[h].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
114
10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
115
;/*
116
 * jQuery UI Droppable 1.8.5
117
 *
118
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
119
 * Dual licensed under the MIT or GPL Version 2 licenses.
120
 * http://jquery.org/license
121
 *
122
 * http://docs.jquery.com/UI/Droppables
123
 *
124
 * Depends:
125
 *	jquery.ui.core.js
126
 *	jquery.ui.widget.js
127
 *	jquery.ui.mouse.js
128
 *	jquery.ui.draggable.js
129
 */
130
(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
131
a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
132
this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
133
this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
134
d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
135
a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.5"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
136
switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
137
i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
138
"none";if(c[f].visible){c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight};e=="mousedown"&&c[f]._activate.call(c[f],b)}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
139
a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=
140
d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})}}})(jQuery);
141
;/*
142
 * jQuery UI Resizable 1.8.5
143
 *
144
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
145
 * Dual licensed under the MIT or GPL Version 2 licenses.
146
 * http://jquery.org/license
147
 *
148
 * http://docs.jquery.com/UI/Resizables
149
 *
150
 * Depends:
151
 *	jquery.ui.core.js
152
 *	jquery.ui.mouse.js
153
 *	jquery.ui.widget.js
154
 */
155
(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
156
_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
157
top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
158
this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
159
nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
160
String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
161
this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};
162
if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),
163
d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=
164
this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:
165
this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",
166
b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;
167
f={width:c.size.width-(f?0:c.sizeDiff.width),height:c.size.height-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",
168
b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=
169
a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=l(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=l(b.width)&&a.minWidth&&a.minWidth>b.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,
170
k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),
171
c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=
172
this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+
173
a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,
174
arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,
175
{version:"1.8.5"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,
176
function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=
177
(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=
178
false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-
179
a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",
180
b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top",
181
"Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,
182
f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=
183
a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+
184
a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&
185
e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",
186
height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=
187
d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
188
;/*
189
 * jQuery UI Selectable 1.8.5
190
 *
191
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
192
 * Dual licensed under the MIT or GPL Version 2 licenses.
193
 * http://jquery.org/license
194
 *
195
 * http://docs.jquery.com/UI/Selectables
196
 *
197
 * Depends:
198
 *	jquery.ui.core.js
199
 *	jquery.ui.mouse.js
200
 *	jquery.ui.widget.js
201
 */
202
(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
203
selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
204
c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
205
c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
206
this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
207
a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
208
!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
209
e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.5"})})(jQuery);
210
;/*
211
 * jQuery UI Dialog 1.8.5
212
 *
213
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
214
 * Dual licensed under the MIT or GPL Version 2 licenses.
215
 * http://jquery.org/license
216
 *
217
 * http://docs.jquery.com/UI/Dialog
218
 *
219
 * Depends:
220
 *	jquery.ui.core.js
221
 *	jquery.ui.widget.js
222
 *  jquery.ui.button.js
223
 *	jquery.ui.draggable.js
224
 *	jquery.ui.mouse.js
225
 *	jquery.ui.position.js
226
 *	jquery.ui.resizable.js
227
 */
228
(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");
229
if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||"&#160;",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog",
230
"aria-labelledby":f}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);
231
return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&
232
g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");
233
b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=
234
f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);
235
a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,
236
f=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){h=c.isFunction(h)?{click:h,text:e}:h;e=c("<button></button>",h).unbind("click").click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position,
237
offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);
238
b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(),
239
handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,
240
a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a);
241
f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b?
242
d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&&
243
d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:c.support.minHeight?"auto":Math.max(a.minHeight-
244
b,0)}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.5",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),
245
function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=
246
(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,
247
b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<
248
b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
249
;/*
250
 * jQuery UI Tabs 1.8.5
251
 *
252
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
253
 * Dual licensed under the MIT or GPL Version 2 licenses.
254
 * http://jquery.org/license
255
 *
256
 * http://docs.jquery.com/UI/Tabs
257
 *
258
 * Depends:
259
 *	jquery.ui.core.js
260
 *	jquery.ui.widget.js
261
 */
262
(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(a,e){if(a=="selected")this.options.collapsible&&
263
e==this.options.selected||this.select(e);else{this.options[a]=e;this._tabify()}},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var a=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[a].concat(d.makeArray(arguments)))},_ui:function(a,e){return{tab:a,panel:e,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var a=
264
d(this);a.html(a.data("label.tabs")).removeData("label.tabs")})},_tabify:function(a){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var b=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
265
(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))b.panels=b.panels.add(b._sanitizeSelector(i));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=b._tabId(f);f.href="#"+i;f=d("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(b.panels[g-1]||b.list);f.data("destroy.tabs",true)}b.panels=b.panels.add(f)}else c.disabled.push(g)});if(a){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
266
this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(b._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
267
this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return b.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
268
if(c.selected>=0&&this.anchors.length){this.panels.eq(c.selected).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");b.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[c.selected],b.panels[c.selected]))});this.load(c.selected)}d(window).bind("unload",function(){b.lis.add(b.anchors).unbind(".tabs");b.lis=b.anchors=b.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[c.collapsible?"addClass":
269
"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);a=0;for(var j;j=this.lis[a];a++)d(j)[d.inArray(a,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs",
270
function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);b._trigger("show",
271
null,b._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");b._trigger("show",null,b._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){b.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);b.element.dequeue("tabs")})}:function(g,f){b.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");b.element.dequeue("tabs")};this.anchors.bind(c.event+".tabs",
272
function(){var g=this,f=d(g).closest("li"),i=b.panels.filter(":not(.ui-tabs-hide)"),l=d(b._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||b.panels.filter(":animated").length||b._trigger("select",null,b._ui(this,l[0]))===false){this.blur();return false}c.selected=b.anchors.index(this);b.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=-1;c.cookie&&b._cookie(c.selected,c.cookie);b.element.queue("tabs",
273
function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&b._cookie(c.selected,c.cookie);b.element.queue("tabs",function(){r(g,l)});b.load(b.anchors.index(this));this.blur();return false}c.cookie&&b._cookie(c.selected,c.cookie);if(l.length){i.length&&b.element.queue("tabs",function(){s(g,i)});b.element.queue("tabs",function(){r(g,l)});b.load(b.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",
274
function(){return false})},_getIndex:function(a){if(typeof a=="string")a=this.anchors.index(this.anchors.filter("[href$="+a+"]"));return a},destroy:function(){var a=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=d.data(this,"href.tabs");if(e)this.href=
275
e;var b=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){b.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});a.cookie&&this._cookie(null,a.cookie);return this},add:function(a,e,b){if(b===p)b=this.anchors.length;
276
var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,a).replace(/#\{label\}/g,e));a=!a.indexOf("#")?a.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=d("#"+a);j.length||(j=d(h.panelTemplate).attr("id",a).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(b>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[b]);
277
j.insertBefore(this.panels[b])}h.disabled=d.map(h.disabled,function(k){return k>=b?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[b],this.panels[b]));return this},remove:function(a){a=this._getIndex(a);var e=this.options,b=this.lis.eq(a).remove(),c=this.panels.eq(a).remove();
278
if(b.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(a+(a+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=a}),function(h){return h>=a?--h:h});this._tabify();this._trigger("remove",null,this._ui(b.find("a")[0],c[0]));return this},enable:function(a){a=this._getIndex(a);var e=this.options;if(d.inArray(a,e.disabled)!=-1){this.lis.eq(a).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(b){return b!=a});this._trigger("enable",null,
279
this._ui(this.anchors[a],this.panels[a]));return this}},disable:function(a){a=this._getIndex(a);var e=this.options;if(a!=e.selected){this.lis.eq(a).addClass("ui-state-disabled");e.disabled.push(a);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a]))}return this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;this.anchors.eq(a).trigger(this.options.event+".tabs");return this},
280
load:function(a){a=this._getIndex(a);var e=this,b=this.options,c=this.anchors.eq(a)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(a).addClass("ui-state-processing");if(b.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(b.spinner)}this.xhr=d.ajax(d.extend({},b.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(c.hash)).html(k);e._cleanup();b.cache&&d.data(c,"cache.tabs",
281
true);e._trigger("load",null,e._ui(e.anchors[a],e.panels[a]));try{b.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[a],e.panels[a]));try{b.ajaxOptions.error(k,n,a,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(a,
282
e){this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.5"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(a,e){var b=this,c=this.options,h=b._rotate||(b._rotate=function(j){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var k=c.selected;b.select(++k<b.anchors.length?k:0)},a);j&&j.stopPropagation()});e=b._unrotate||(b._unrotate=!e?function(j){j.clientX&&b.rotate(null)}:
283
function(){t=c.selected;h()});if(a){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(b.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
284
;
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/elrte-1.1/js/ui-themes/smoothness/jquery-ui-1.8.5.custom.css (-1 / +362 lines)
Line 0 Link Here
0
- 
1
/*
2
 * jQuery UI CSS Framework @VERSION
3
 *
4
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
5
 * Dual licensed under the MIT or GPL Version 2 licenses.
6
 * http://jquery.org/license
7
 *
8
 * http://docs.jquery.com/UI/Theming/API
9
 */
10
11
/* Layout helpers
12
----------------------------------*/
13
.ui-helper-hidden { display: none; }
14
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
15
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
16
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
17
.ui-helper-clearfix { display: inline-block; }
18
/* required comment for clearfix to work in Opera \*/
19
* html .ui-helper-clearfix { height:1%; }
20
.ui-helper-clearfix { display:block; }
21
/* end clearfix */
22
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
23
24
25
/* Interaction Cues
26
----------------------------------*/
27
.ui-state-disabled { cursor: default !important; }
28
29
30
/* Icons
31
----------------------------------*/
32
33
/* states and images */
34
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
35
36
37
/* Misc visuals
38
----------------------------------*/
39
40
/* Overlays */
41
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
42
43
44
/*
45
 * jQuery UI CSS Framework @VERSION
46
 *
47
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
48
 * Dual licensed under the MIT or GPL Version 2 licenses.
49
 * http://jquery.org/license
50
 *
51
 * http://docs.jquery.com/UI/Theming/API
52
 *
53
 * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
54
 */
55
56
57
/* Component containers
58
----------------------------------*/
59
.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
60
.ui-widget .ui-widget { font-size: 1em; }
61
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
62
.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
63
.ui-widget-content a { color: #222222; }
64
.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
65
.ui-widget-header a { color: #222222; }
66
67
/* Interaction states
68
----------------------------------*/
69
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
70
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
71
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
72
.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
73
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
74
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
75
.ui-widget :active { outline: none; }
76
77
/* Interaction Cues
78
----------------------------------*/
79
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
80
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
81
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
82
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
83
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
84
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
85
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
86
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
87
88
/* Icons
89
----------------------------------*/
90
91
/* states and images */
92
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
93
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
94
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
95
.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
96
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
97
.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
98
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
99
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
100
101
/* positioning */
102
.ui-icon-carat-1-n { background-position: 0 0; }
103
.ui-icon-carat-1-ne { background-position: -16px 0; }
104
.ui-icon-carat-1-e { background-position: -32px 0; }
105
.ui-icon-carat-1-se { background-position: -48px 0; }
106
.ui-icon-carat-1-s { background-position: -64px 0; }
107
.ui-icon-carat-1-sw { background-position: -80px 0; }
108
.ui-icon-carat-1-w { background-position: -96px 0; }
109
.ui-icon-carat-1-nw { background-position: -112px 0; }
110
.ui-icon-carat-2-n-s { background-position: -128px 0; }
111
.ui-icon-carat-2-e-w { background-position: -144px 0; }
112
.ui-icon-triangle-1-n { background-position: 0 -16px; }
113
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
114
.ui-icon-triangle-1-e { background-position: -32px -16px; }
115
.ui-icon-triangle-1-se { background-position: -48px -16px; }
116
.ui-icon-triangle-1-s { background-position: -64px -16px; }
117
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
118
.ui-icon-triangle-1-w { background-position: -96px -16px; }
119
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
120
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
121
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
122
.ui-icon-arrow-1-n { background-position: 0 -32px; }
123
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
124
.ui-icon-arrow-1-e { background-position: -32px -32px; }
125
.ui-icon-arrow-1-se { background-position: -48px -32px; }
126
.ui-icon-arrow-1-s { background-position: -64px -32px; }
127
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
128
.ui-icon-arrow-1-w { background-position: -96px -32px; }
129
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
130
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
131
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
132
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
133
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
134
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
135
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
136
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
137
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
138
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
139
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
140
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
141
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
142
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
143
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
144
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
145
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
146
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
147
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
148
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
149
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
150
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
151
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
152
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
153
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
154
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
155
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
156
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
157
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
158
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
159
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
160
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
161
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
162
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
163
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
164
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
165
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
166
.ui-icon-arrow-4 { background-position: 0 -80px; }
167
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
168
.ui-icon-extlink { background-position: -32px -80px; }
169
.ui-icon-newwin { background-position: -48px -80px; }
170
.ui-icon-refresh { background-position: -64px -80px; }
171
.ui-icon-shuffle { background-position: -80px -80px; }
172
.ui-icon-transfer-e-w { background-position: -96px -80px; }
173
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
174
.ui-icon-folder-collapsed { background-position: 0 -96px; }
175
.ui-icon-folder-open { background-position: -16px -96px; }
176
.ui-icon-document { background-position: -32px -96px; }
177
.ui-icon-document-b { background-position: -48px -96px; }
178
.ui-icon-note { background-position: -64px -96px; }
179
.ui-icon-mail-closed { background-position: -80px -96px; }
180
.ui-icon-mail-open { background-position: -96px -96px; }
181
.ui-icon-suitcase { background-position: -112px -96px; }
182
.ui-icon-comment { background-position: -128px -96px; }
183
.ui-icon-person { background-position: -144px -96px; }
184
.ui-icon-print { background-position: -160px -96px; }
185
.ui-icon-trash { background-position: -176px -96px; }
186
.ui-icon-locked { background-position: -192px -96px; }
187
.ui-icon-unlocked { background-position: -208px -96px; }
188
.ui-icon-bookmark { background-position: -224px -96px; }
189
.ui-icon-tag { background-position: -240px -96px; }
190
.ui-icon-home { background-position: 0 -112px; }
191
.ui-icon-flag { background-position: -16px -112px; }
192
.ui-icon-calendar { background-position: -32px -112px; }
193
.ui-icon-cart { background-position: -48px -112px; }
194
.ui-icon-pencil { background-position: -64px -112px; }
195
.ui-icon-clock { background-position: -80px -112px; }
196
.ui-icon-disk { background-position: -96px -112px; }
197
.ui-icon-calculator { background-position: -112px -112px; }
198
.ui-icon-zoomin { background-position: -128px -112px; }
199
.ui-icon-zoomout { background-position: -144px -112px; }
200
.ui-icon-search { background-position: -160px -112px; }
201
.ui-icon-wrench { background-position: -176px -112px; }
202
.ui-icon-gear { background-position: -192px -112px; }
203
.ui-icon-heart { background-position: -208px -112px; }
204
.ui-icon-star { background-position: -224px -112px; }
205
.ui-icon-link { background-position: -240px -112px; }
206
.ui-icon-cancel { background-position: 0 -128px; }
207
.ui-icon-plus { background-position: -16px -128px; }
208
.ui-icon-plusthick { background-position: -32px -128px; }
209
.ui-icon-minus { background-position: -48px -128px; }
210
.ui-icon-minusthick { background-position: -64px -128px; }
211
.ui-icon-close { background-position: -80px -128px; }
212
.ui-icon-closethick { background-position: -96px -128px; }
213
.ui-icon-key { background-position: -112px -128px; }
214
.ui-icon-lightbulb { background-position: -128px -128px; }
215
.ui-icon-scissors { background-position: -144px -128px; }
216
.ui-icon-clipboard { background-position: -160px -128px; }
217
.ui-icon-copy { background-position: -176px -128px; }
218
.ui-icon-contact { background-position: -192px -128px; }
219
.ui-icon-image { background-position: -208px -128px; }
220
.ui-icon-video { background-position: -224px -128px; }
221
.ui-icon-script { background-position: -240px -128px; }
222
.ui-icon-alert { background-position: 0 -144px; }
223
.ui-icon-info { background-position: -16px -144px; }
224
.ui-icon-notice { background-position: -32px -144px; }
225
.ui-icon-help { background-position: -48px -144px; }
226
.ui-icon-check { background-position: -64px -144px; }
227
.ui-icon-bullet { background-position: -80px -144px; }
228
.ui-icon-radio-off { background-position: -96px -144px; }
229
.ui-icon-radio-on { background-position: -112px -144px; }
230
.ui-icon-pin-w { background-position: -128px -144px; }
231
.ui-icon-pin-s { background-position: -144px -144px; }
232
.ui-icon-play { background-position: 0 -160px; }
233
.ui-icon-pause { background-position: -16px -160px; }
234
.ui-icon-seek-next { background-position: -32px -160px; }
235
.ui-icon-seek-prev { background-position: -48px -160px; }
236
.ui-icon-seek-end { background-position: -64px -160px; }
237
.ui-icon-seek-start { background-position: -80px -160px; }
238
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
239
.ui-icon-seek-first { background-position: -80px -160px; }
240
.ui-icon-stop { background-position: -96px -160px; }
241
.ui-icon-eject { background-position: -112px -160px; }
242
.ui-icon-volume-off { background-position: -128px -160px; }
243
.ui-icon-volume-on { background-position: -144px -160px; }
244
.ui-icon-power { background-position: 0 -176px; }
245
.ui-icon-signal-diag { background-position: -16px -176px; }
246
.ui-icon-signal { background-position: -32px -176px; }
247
.ui-icon-battery-0 { background-position: -48px -176px; }
248
.ui-icon-battery-1 { background-position: -64px -176px; }
249
.ui-icon-battery-2 { background-position: -80px -176px; }
250
.ui-icon-battery-3 { background-position: -96px -176px; }
251
.ui-icon-circle-plus { background-position: 0 -192px; }
252
.ui-icon-circle-minus { background-position: -16px -192px; }
253
.ui-icon-circle-close { background-position: -32px -192px; }
254
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
255
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
256
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
257
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
258
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
259
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
260
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
261
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
262
.ui-icon-circle-zoomin { background-position: -176px -192px; }
263
.ui-icon-circle-zoomout { background-position: -192px -192px; }
264
.ui-icon-circle-check { background-position: -208px -192px; }
265
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
266
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
267
.ui-icon-circlesmall-close { background-position: -32px -208px; }
268
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
269
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
270
.ui-icon-squaresmall-close { background-position: -80px -208px; }
271
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
272
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
273
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
274
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
275
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
276
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
277
278
279
/* Misc visuals
280
----------------------------------*/
281
282
/* Corner radius */
283
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
284
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
285
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
286
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
287
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
288
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
289
.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
290
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
291
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
292
293
/* Overlays */
294
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
295
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
296
 * jQuery UI Resizable @VERSION
297
 *
298
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
299
 * Dual licensed under the MIT or GPL Version 2 licenses.
300
 * http://jquery.org/license
301
 *
302
 * http://docs.jquery.com/UI/Resizable#theming
303
 */
304
.ui-resizable { position: relative;}
305
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
306
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
307
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
308
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
309
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
310
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
311
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
312
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
313
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
314
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
315
 * jQuery UI Selectable @VERSION
316
 *
317
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
318
 * Dual licensed under the MIT or GPL Version 2 licenses.
319
 * http://jquery.org/license
320
 *
321
 * http://docs.jquery.com/UI/Selectable#theming
322
 */
323
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
324
/*
325
 * jQuery UI Dialog @VERSION
326
 *
327
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
328
 * Dual licensed under the MIT or GPL Version 2 licenses.
329
 * http://jquery.org/license
330
 *
331
 * http://docs.jquery.com/UI/Dialog#theming
332
 */
333
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
334
.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative;  }
335
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; }
336
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
337
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
338
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
339
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
340
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
341
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
342
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
343
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
344
.ui-draggable .ui-dialog-titlebar { cursor: move; }
345
/*
346
 * jQuery UI Tabs @VERSION
347
 *
348
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
349
 * Dual licensed under the MIT or GPL Version 2 licenses.
350
 * http://jquery.org/license
351
 *
352
 * http://docs.jquery.com/UI/Tabs#theming
353
 */
354
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
355
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
356
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
357
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
358
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
359
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
360
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
361
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
362
.ui-tabs .ui-tabs-hide { display: none !important; }

Return to bug 5401