]> git.mxchange.org Git - friendica.git/blob - view/theme/frost/js/main.js
Merge remote-tracking branch 'upstream/master'
[friendica.git] / view / theme / frost / js / main.js
1
2         function openClose(listID) {
3 /*              if(document.getElementById(theID).style.display == "block") { 
4                         document.getElementById(theID).style.display = "none" 
5                 }
6                 else { 
7                         document.getElementById(theID).style.display = "block" 
8                 }*/
9                 listID = "#" + listID.replace(/:/g, "\\:");
10                 listID = listID.replace(/\./g, "\\.");
11                 listID = listID.replace(/@/g, "\\@");
12
13                 if($j(listID).is(":visible")) {
14                         $j(listID).hide();
15                         $j(listID+"-wrapper").show();
16                 }
17                 else {
18                         $j(listID).show();
19                         $j(listID+"-wrapper").hide();
20                 }
21         }
22
23         function openMenu(theID) {
24                 document.getElementById(theID).style.display = "block" 
25         }
26
27         function closeMenu(theID) {
28                 document.getElementById(theID).style.display = "none" 
29         }
30
31
32
33         var src = null;
34         var prev = null;
35         var livetime = null;
36         var msie = false;
37         var stopped = false;
38         var totStopped = false;
39         var timer = null;
40         var pr = 0;
41         var liking = 0;
42         var in_progress = false;
43         var langSelect = false;
44         var commentBusy = false;
45         var last_popup_menu = null;
46         var last_popup_button = null;
47
48         $j(function() {
49                 $j.ajaxSetup({cache: false});
50
51                 msie = $j.browser.msie ;
52                 
53                 collapseHeight();
54                 
55                 /* setup tooltips *//*
56                 $j("a,.tt").each(function(){
57                         var e = $j(this);
58                         var pos="bottom";
59                         if (e.hasClass("tttop")) pos="top";
60                         if (e.hasClass("ttbottom")) pos="bottom";
61                         if (e.hasClass("ttleft")) pos="left";
62                         if (e.hasClass("ttright")) pos="right";
63                         e.tipTip({defaultPosition: pos, edgeOffset: 8});
64                 });*/
65                 
66                 
67                 
68                 /* setup onoff widgets */
69                 $j(".onoff input").each(function(){
70                         val = $j(this).val();
71                         id = $j(this).attr("id");
72                         $j("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
73                         
74                 });
75                 $j(".onoff > a").click(function(event){
76                         event.preventDefault(); 
77                         var input = $j(this).siblings("input");
78                         var val = 1-input.val();
79                         var id = input.attr("id");
80                         $j("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
81                         $j("#"+id+"_onoff ."+ (val==1?"on":"off")).removeClass("hidden");
82                         input.val(val);
83                         //console.log(id);
84                 });
85                 
86                 /* setup field_richtext */
87                 //setupFieldRichtext();
88
89                 /* popup menus */
90                 function close_last_popup_menu(e) {
91
92                         if( last_popup_menu ) {
93                                 if( '#' + last_popup_menu.attr('id') !== $j(e.target).attr('rel')) {
94                                         last_popup_menu.hide();
95                                         last_popup_button.removeClass("selected");
96                                         last_popup_menu = null;
97                                         last_popup_button = null;
98                                 }
99                         }
100                 }
101                 $j('a[rel^=#]').click(function(e){
102
103                         close_last_popup_menu(e);
104                         menu = $j( $j(this).attr('rel') );
105                         e.preventDefault();
106                         e.stopPropagation();
107
108                         if (menu.attr('popup')=="false") return false;
109
110                         $j(this).parent().toggleClass("selected");
111                         menu.slideToggle('fast');
112
113                         if (menu.css("display") == "none") {
114                                 last_popup_menu = null;
115                                 last_popup_button = null;
116                         } else {
117                                 last_popup_menu = menu;
118                                 last_popup_button = $j(this).parent();
119                         }
120                         return false;
121                 });
122                 $j('html').click(function(e) {
123                         close_last_popup_menu(e);
124                 });
125                 
126                 // fancyboxes
127                 $j("a.popupbox").colorbox({
128                         'inline' : true,
129                         'transition' : 'elastic'
130                 });
131                 
132
133                 /* notifications template */
134                 var notifications_tpl= unescape($j("#nav-notifications-template[rel=template]").html());
135                 var notifications_all = unescape($j('<div>').append( $j("#nav-notifications-see-all").clone() ).html()); //outerHtml hack
136                 var notifications_mark = unescape($j('<div>').append( $j("#nav-notifications-mark-all").clone() ).html()); //outerHtml hack
137                 var notifications_empty = unescape($j("#nav-notifications-menu").html());
138                 
139                 /* nav update event  */
140                 $j('nav').bind('nav-update', function(e,data){;
141                         var invalid = $j(data).find('invalid').text();
142                         if(invalid == 1) { window.location.href=window.location.href }
143
144                         var net = $j(data).find('net').text();
145                         if(net == 0) { net = ''; $j('#net-update').removeClass('show') } else { $j('#net-update').addClass('show') }
146                         $j('#net-update').html(net);
147
148                         var home = $j(data).find('home').text();
149                         if(home == 0) { home = '';  $j('#home-update').removeClass('show') } else { $j('#home-update').addClass('show') }
150                         $j('#home-update').html(home);
151                         
152                         var intro = $j(data).find('intro').text();
153                         if(intro == 0) { intro = '';  $j('#intro-update').removeClass('show') } else { $j('#intro-update').addClass('show') }
154                         $j('#intro-update').html(intro);
155
156                         var mail = $j(data).find('mail').text();
157                         if(mail == 0) { mail = '';  $j('#mail-update').removeClass('show') } else { $j('#mail-update').addClass('show') }
158                         $j('#mail-update').html(mail);
159                         
160                         var intro = $j(data).find('intro').text();
161                         if(intro == 0) { intro = '';  $j('#intro-update-li').removeClass('show') } else { $j('#intro-update-li').addClass('show') }
162                         $j('#intro-update-li').html(intro);
163
164                         var mail = $j(data).find('mail').text();
165                         if(mail == 0) { mail = '';  $j('#mail-update-li').removeClass('show') } else { $j('#mail-update-li').addClass('show') }
166                         $j('#mail-update-li').html(mail);
167
168                         var eNotif = $j(data).find('notif')
169                         
170                         if (eNotif.children("note").length==0){
171                                 $j("#nav-notifications-menu").html(notifications_empty);
172                         } else {
173                                 nnm = $j("#nav-notifications-menu");
174                                 nnm.html(notifications_all + notifications_mark);
175                                 //nnm.attr('popup','true');
176                                 eNotif.children("note").each(function(){
177                                         e = $j(this);
178                                         text = e.text().format("<span class='contactname'>"+e.attr('name')+"</span>");
179                                         html = notifications_tpl.format(e.attr('href'),e.attr('photo'), text, e.attr('date'), e.attr('seen'));
180                                         nnm.append(html);
181                                 });
182
183                                 $j("img[data-src]", nnm).each(function(i, el){
184                                         // Add src attribute for images with a data-src attribute
185                                         $j(el).attr('src', $j(el).data("src"));
186                                 });
187                         }
188                         notif = eNotif.attr('count');
189                         if (notif>0){
190                                 $j("#nav-notifications-linkmenu").addClass("on");
191                         } else {
192                                 $j("#nav-notifications-linkmenu").removeClass("on");
193                         }
194                         if(notif == 0) { notif = ''; $j('#notify-update').removeClass('show') } else { $j('#notify-update').addClass('show') }
195                         $j('#notify-update').html(notif);
196                         
197                         var eSysmsg = $j(data).find('sysmsgs');
198                         eSysmsg.children("notice").each(function(){
199                                 text = $j(this).text();
200                                 $j.jGrowl(text, { sticky: false, theme: 'notice', life: 3000 }); // originally: sticky: true,
201                         });
202                         eSysmsg.children("info").each(function(){
203                                 text = $j(this).text();
204                                 $j.jGrowl(text, { sticky: false, theme: 'info', life: 1000 });
205                         });
206                         
207                 });
208                 
209                 
210                 NavUpdate(); 
211                 // Allow folks to stop the ajax page updates with the pause/break key
212                 $j(document).keydown(function(event) {
213                         if(event.keyCode == '8') {
214                                 var target = event.target || event.srcElement;
215                                 if (!/input|textarea/i.test(target.nodeName)) {
216                                         return false;
217                                 }
218                         }
219                         if(event.keyCode == '19' || (event.ctrlKey && event.which == '32')) {
220                                 event.preventDefault();
221                                 if(stopped == false) {
222                                         stopped = true;
223                                         if (event.ctrlKey) {
224                                                 totStopped = true;
225                                         }
226                                         $j('#pause').html('<img src="images/pause.gif" alt="pause" style="border: 1px solid black;" />');
227                                 } else {
228                                         unpause();
229                                 }
230                         } else {
231                                 if (!totStopped) {
232                                         unpause();
233                                 }
234                         }
235                 });
236                 
237                 
238         });
239
240         function NavUpdate() {
241
242                 if(! stopped) {
243                         var pingCmd = 'ping' + ((localUser != 0) ? '?f=&uid=' + localUser : '');
244                         $j.get(pingCmd,function(data) {
245                                 $j(data).find('result').each(function() {
246                                         // send nav-update event
247                                         $j('nav').trigger('nav-update', this);
248                                         
249                                         
250                                         // start live update
251
252                                         
253
254                                         if($j('#live-network').length)   { src = 'network'; liveUpdate(); }
255                                         if($j('#live-profile').length)   { src = 'profile'; liveUpdate(); }
256                                         if($j('#live-community').length) { src = 'community'; liveUpdate(); }
257                                         if($j('#live-notes').length)     { src = 'notes'; liveUpdate(); }
258                                         if($j('#live-display').length) { src = 'display'; liveUpdate(); }
259                                         /*if($j('#live-display').length) {
260                                                 if(liking) {
261                                                         liking = 0;
262                                                         window.location.href=window.location.href 
263                                                 }
264                                         }*/
265                                         if($j('#live-photos').length) {
266                                                 if(liking) {
267                                                         liking = 0;
268                                                         window.location.href=window.location.href 
269                                                 }
270                                         }
271
272                                         
273                                         
274                                         
275                                 });
276                         }) ;
277                 }
278                 timer = setTimeout(NavUpdate,updateInterval);
279         }
280
281         function liveUpdate() {
282                 if((src == null) || (stopped) || (typeof profile_uid == 'undefined') || (! profile_uid)) { $j('.like-rotator').hide(); return; }
283                 if(($j('.comment-edit-text-full').length) || (in_progress)) {
284                         if(livetime) {
285                                 clearTimeout(livetime);
286                         }
287                         livetime = setTimeout(liveUpdate, 10000);
288                         return;
289                 }
290                 if(livetime != null)
291                         livetime = null;
292
293                 prev = 'live-' + src;
294
295                 in_progress = true;
296                 var udargs = ((netargs.length) ? '/' + netargs : '');
297                 var update_url = 'update_' + src + udargs + '&p=' + profile_uid + '&page=' + profile_page + '&msie=' + ((msie) ? 1 : 0);
298
299                 $j.get(update_url,function(data) {
300                         in_progress = false;
301                         //                      $j('.collapsed-comments',data).each(function() {
302                         //      var ident = $j(this).attr('id');
303                         //      var is_hidden = $j('#' + ident).is(':hidden');
304                         //      if($j('#' + ident).length) {
305                         //              $j('#' + ident).replaceWith($j(this));
306                         //              if(is_hidden)
307                         //                      $j('#' + ident).hide();
308                         //      }
309                         //});
310
311                         // add a new thread
312
313                         $j('.toplevel_item',data).each(function() {
314                                 var ident = $j(this).attr('id');
315
316                                 if($j('#' + ident).length == 0 && profile_page == 1) {
317                                         $j('img',this).each(function() {
318                                                 $j(this).attr('src',$j(this).attr('dst'));
319                                         });
320                                         $j('#' + prev).after($j(this));
321                                 }
322                                 else {
323                                         // Find out if the hidden comments are open, so we can keep it that way
324                                         // if a new comment has been posted
325                                         var id = $j('.hide-comments-total', this).attr('id');
326                                         if(typeof id != 'undefined') {
327                                                 id = id.split('-')[3];
328                                                 var commentsOpen = $j("#collapsed-comments-" + id).is(":visible");
329                                         }
330
331                                         $j('img',this).each(function() {
332                                                 $j(this).attr('src',$j(this).attr('dst'));
333                                         });
334                                         //vScroll = $j(document).scrollTop();
335                                         $j('html').height($j('html').height());
336                                         $j('#' + ident).replaceWith($j(this));
337
338                                         if(typeof id != 'undefined') {
339                                                 if(commentsOpen) showHideComments(id);
340                                         }
341                                         $j('html').height('auto');
342                                         //$j(document).scrollTop(vScroll);
343                                 }
344
345                                 // Add Colorbox for viewing Network page images
346                                 $j("#" + ident + " .wall-item-body a img").each(function(){
347                                         var aElem = $j(this).parent();
348                                         var imgHref = aElem.attr("href");
349
350                                         // We need to make sure we only put a Colorbox on links to Friendica images
351                                         // We'll try to do this by looking for links of the form
352                                         // .../photo/ab803d8eg08daf85023adfec08(-0.jpg) (with nothing more following), in hopes
353                                         // that that will be unique enough
354                                         if(imgHref.match(/\/photo\/[a-fA-F0-9]+(-[0-9]\.[\w]+?)?$/)) {
355
356                                                 // Add a unique class to all the images of a certain post, to allow scrolling through
357                                                 var cBoxClass = $j(this).closest(".wall-item-body").attr("id") + "-lightbox";
358                                                 $j(this).addClass(cBoxClass);
359
360                                                 aElem.colorbox({
361                                                         maxHeight: '90%',
362                                                         photo: true,
363                                                         rel: cBoxClass
364                                                 });
365                                         }
366                                 });
367
368                                 prev = ident;
369                         });
370
371                         // reset vars for inserting individual items
372
373                         /*prev = 'live-' + src;
374
375                         $j('.wall-item-outside-wrapper',data).each(function() {
376                                 var ident = $j(this).attr('id');
377
378                                 if($j('#' + ident).length == 0 && prev != 'live-' + src) {
379                                                 $j('img',this).each(function() {
380                                                         $j(this).attr('src',$j(this).attr('dst'));
381                                                 });
382                                                 $j('#' + prev).after($j(this));
383                                 }
384                                 else { 
385                                         $j('#' + ident + ' ' + '.wall-item-ago').replaceWith($j(this).find('.wall-item-ago')); 
386                                         if($j('#' + ident + ' ' + '.comment-edit-text-empty').length)
387                                                 $j('#' + ident + ' ' + '.wall-item-comment-wrapper').replaceWith($j(this).find('.wall-item-comment-wrapper'));
388                                         $j('#' + ident + ' ' + '.hide-comments-total').replaceWith($j(this).find('.hide-comments-total'));
389                                         $j('#' + ident + ' ' + '.wall-item-like').replaceWith($j(this).find('.wall-item-like'));
390                                         $j('#' + ident + ' ' + '.wall-item-dislike').replaceWith($j(this).find('.wall-item-dislike'));
391                                         $j('#' + ident + ' ' + '.my-comment-photo').each(function() {
392                                                 $j(this).attr('src',$j(this).attr('dst'));
393                                         });
394                                 }
395                                 prev = ident; 
396                         });*/
397                         
398                         $j('.like-rotator').hide();
399                         if(commentBusy) {
400                                 commentBusy = false;
401                                 $j('body').css('cursor', 'auto');
402                         }
403                         /* autocomplete @nicknames */
404                         $j(".comment-edit-form  textarea").contact_autocomplete(baseurl+"/acl");
405                 
406                         collapseHeight();
407
408                 });
409         }
410
411         function collapseHeight(elems) {
412                 var elemName = '.wall-item-body:not(.divmore)';
413                 if(typeof elems != 'undefined') {
414                         elemName = elems + ' ' + elemName;
415                 }
416                 $j(elemName).each(function() {
417                         if($j(this).height() > 450) {
418                                 $j('html').height($j('html').height());
419                                 $j(this).divgrow({ initialHeight: 400, showBrackets: false, speed: 0 });
420                                 $j(this).addClass('divmore');
421                                 $j('html').height('auto');
422                         }                                       
423                 });
424         }
425
426         /*function imgbright(node) {
427                 $j(node).removeClass("drophide").addClass("drop");
428         }
429
430         function imgdull(node) {
431                 $j(node).removeClass("drop").addClass("drophide");
432         }*/
433
434         // Since our ajax calls are asynchronous, we will give a few 
435         // seconds for the first ajax call (setting like/dislike), then 
436         // run the updater to pick up any changes and display on the page.
437         // The updater will turn any rotators off when it's done. 
438         // This function will have returned long before any of these
439         // events have completed and therefore there won't be any
440         // visible feedback that anything changed without all this
441         // trickery. This still could cause confusion if the "like" ajax call
442         // is delayed and NavUpdate runs before it completes.
443
444         function dolike(ident,verb) {
445                 unpause();
446                 $j('#like-rotator-' + ident.toString()).show();
447                 $j.get('like/' + ident.toString() + '?verb=' + verb, NavUpdate );
448                 liking = 1;
449         }
450
451         function dostar(ident) {
452                 ident = ident.toString();
453 //              $j('#like-rotator-' + ident).show();
454                 $j.get('starred/' + ident, function(data) {
455                         if(data.match(/1/)) {
456                                 $j('#starred-' + ident).addClass('starred');
457                                 $j('#starred-' + ident).removeClass('unstarred');
458                                 $j('#star-' + ident).addClass('hidden');
459                                 $j('#unstar-' + ident).removeClass('hidden');
460                         }
461                         else {                  
462                                 $j('#starred-' + ident).addClass('unstarred');
463                                 $j('#starred-' + ident).removeClass('starred');
464                                 $j('#star-' + ident).removeClass('hidden');
465                                 $j('#unstar-' + ident).addClass('hidden');
466                         }
467 //                      $j('#like-rotator-' + ident).hide();    
468                 });
469         }
470
471         function getPosition(e) {
472                 var cursor = {x:0, y:0};
473                 if ( e.pageX || e.pageY  ) {
474                         cursor.x = e.pageX;
475                         cursor.y = e.pageY;
476                 }
477                 else {
478                         if( e.clientX || e.clientY ) {
479                                 cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
480                                 cursor.y = e.clientY + (document.documentElement.scrollTop  || document.body.scrollTop)  - document.documentElement.clientTop;
481                         }
482                         else {
483                                 if( e.x || e.y ) {
484                                         cursor.x = e.x;
485                                         cursor.y = e.y;
486                                 }
487                         }
488                 }
489                 return cursor;
490         }
491
492         var lockvisible = false;
493
494         function lockview(event,id) {
495                 event = event || window.event;
496                 cursor = getPosition(event);
497                 if(lockvisible) {
498                         lockviewhide();
499                 }
500                 else {
501                         lockvisible = true;
502                         $j.get('lockview/' + id, function(data) {
503                                 $j('#panel').html(data);
504                                 $j('#panel').css({ 'left': cursor.x + 5 , 'top': cursor.y + 5});
505                                 $j('#panel').show();
506                         });
507                 }
508         }
509
510         function lockviewhide() {
511                 lockvisible = false;
512                 $j('#panel').hide();
513         }
514
515         function post_comment(id) {
516                 unpause();
517                 commentBusy = true;
518                 $j('body').css('cursor', 'wait');
519                 $j("#comment-preview-inp-" + id).val("0");
520                 $j.post(  
521              "item",  
522              $j("#comment-edit-form-" + id).serialize(),
523                         function(data) {
524                                 if(data.success) {
525                                         $j("#comment-edit-wrapper-" + id).hide();
526                                         $j("#comment-edit-text-" + id).val('');
527                                 var tarea = document.getElementById("comment-edit-text-" + id);
528                                         if(tarea)
529                                                 commentClose(tarea,id);
530                                         if(timer) clearTimeout(timer);
531                                         timer = setTimeout(NavUpdate,10);
532                                 }
533                                 if(data.reload) {
534                                         window.location.href=data.reload;
535                                 }
536                         },
537                         "json"  
538          );  
539          return false;  
540         }
541
542
543         function preview_comment(id) {
544                 $j("#comment-preview-inp-" + id).val("1");
545                 $j("#comment-edit-preview-" + id).show();
546                 $j.post(  
547              "item",  
548              $j("#comment-edit-form-" + id).serialize(),
549                         function(data) {
550                                 if(data.preview) {
551                                                 
552                                         $j("#comment-edit-preview-" + id).html(data.preview);
553                                         $j("#comment-edit-preview-" + id + " a").click(function() { return false; });
554                                 }
555                         },
556                         "json"  
557          );  
558          return true;  
559         }
560
561
562         function showHideComments(id) {
563                 if( $j("#collapsed-comments-" + id).is(":visible")) {
564                         $j("#collapsed-comments-" + id).hide();
565                         $j("#hide-comments-" + id).html(window.showMore);
566                 }
567                 else {
568                         $j("#collapsed-comments-" + id).show();
569                         $j("#hide-comments-" + id).html(window.showFewer);
570                         collapseHeight("#collapsed-comments-" + id);
571                 }
572         }
573
574
575         function preview_post() {
576                 $j("#jot-preview").val("1");
577                 $j("#jot-preview-content").show();
578                 tinyMCE.triggerSave();
579                 $j.post(  
580                         "item",  
581                         $j("#profile-jot-form").serialize(),
582                         function(data) {
583                                 if(data.preview) {                      
584                                         $j("#jot-preview-content").html(data.preview);
585                                         $j("#jot-preview-content" + " a").click(function() { return false; });
586                                 }
587                         },
588                         "json"  
589                 );  
590                 $j("#jot-preview").val("0");
591                 return true;  
592         }
593
594
595         function unpause() {
596                 // unpause auto reloads if they are currently stopped
597                 totStopped = false;
598                 stopped = false;
599             $j('#pause').html('');
600         }
601                 
602
603     function bin2hex(s){  
604         // Converts the binary representation of data to hex    
605         //   
606         // version: 812.316  
607         // discuss at: http://phpjs.org/functions/bin2hex  
608         // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)  
609         // +   bugfixed by: Onno Marsman  
610         // +   bugfixed by: Linuxworld  
611         // *     example 1: bin2hex('Kev');  
612         // *     returns 1: '4b6576'  
613         // *     example 2: bin2hex(String.fromCharCode(0x00));  
614         // *     returns 2: '00'  
615         var v,i, f = 0, a = [];  
616         s += '';  
617         f = s.length;  
618           
619         for (i = 0; i<f; i++) {  
620             a[i] = s.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1");  
621         }  
622           
623         return a.join('');  
624     }  
625
626         function groupChangeMember(gid, cid, sec_token) {
627                 $j('body .fakelink').css('cursor', 'wait');
628                 $j.get('group/' + gid + '/' + cid + "?t=" + sec_token, function(data) {
629                                 $j('#group-update-wrapper').html(data);
630                                 $j('body .fakelink').css('cursor', 'auto');                             
631                 });
632         }
633
634         function profChangeMember(gid,cid) {
635                 $j('body .fakelink').css('cursor', 'wait');
636                 $j.get('profperm/' + gid + '/' + cid, function(data) {
637                                 $j('#prof-update-wrapper').html(data);
638                                 $j('body .fakelink').css('cursor', 'auto');                             
639                 });
640         }
641
642         function contactgroupChangeMember(gid,cid) {
643                 $j('body').css('cursor', 'wait');
644                 $j.get('contactgroup/' + gid + '/' + cid, function(data) {
645                                 $j('body').css('cursor', 'auto');
646                 });
647         }
648
649
650 function checkboxhighlight(box) {
651   if($j(box).is(':checked')) {
652         $j(box).addClass('checkeditem');
653   }
654   else {
655         $j(box).removeClass('checkeditem');
656   }
657 }
658
659 function notifyMarkAll() {
660         $j.get('notify/mark/all', function(data) {
661                 if(timer) clearTimeout(timer);
662                 timer = setTimeout(NavUpdate,1000);
663         });
664 }
665
666
667 // code from http://www.tinymce.com/wiki.php/How-to_implement_a_custom_file_browser
668 function fcFileBrowser (field_name, url, type, win) {
669     /* TODO: If you work with sessions in PHP and your client doesn't accept cookies you might need to carry
670        the session name and session ID in the request string (can look like this: "?PHPSESSID=88p0n70s9dsknra96qhuk6etm5").
671        These lines of code extract the necessary parameters and add them back to the filebrowser URL again. */
672
673
674     var cmsURL = baseurl+"/fbrowser/"+type+"/";
675
676     tinyMCE.activeEditor.windowManager.open({
677         file : cmsURL,
678         title : 'File Browser',
679         width : 420,  // Your dimensions may differ - toy around with them!
680         height : 400,
681         resizable : "yes",
682         inline : "yes",  // This parameter only has an effect if you use the inlinepopups plugin!
683         close_previous : "no"
684     }, {
685         window : win,
686         input : field_name
687     });
688     return false;
689   }
690
691 /*function setupFieldRichtext(){
692         tinyMCE.init({
693                 theme : "advanced",
694                 mode : "specific_textareas",
695                 editor_selector: "fieldRichtext",
696                 plugins : "bbcode,paste, inlinepopups",
697                 theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
698                 theme_advanced_buttons2 : "",
699                 theme_advanced_buttons3 : "",
700                 theme_advanced_toolbar_location : "top",
701                 theme_advanced_toolbar_align : "center",
702                 theme_advanced_blockformats : "blockquote,code",
703                 paste_text_sticky : true,
704                 entity_encoding : "raw",
705                 add_unload_trigger : false,
706                 remove_linebreaks : false,
707                 //force_p_newlines : false,
708                 //force_br_newlines : true,
709                 forced_root_block : 'div',
710                 convert_urls: false,
711                 content_css: baseurl+"/view/custom_tinymce.css",
712                 theme_advanced_path : false,
713                 file_browser_callback : "fcFileBrowser",
714         });
715 }*/
716
717
718 /** 
719  * sprintf in javascript 
720  *      "{0} and {1}".format('zero','uno'); 
721  **/
722 String.prototype.format = function() {
723     var formatted = this;
724     for (var i = 0; i < arguments.length; i++) {
725         var regexp = new RegExp('\\{'+i+'\\}', 'gi');
726         formatted = formatted.replace(regexp, arguments[i]);
727     }
728     return formatted;
729 };
730 // Array Remove
731 Array.prototype.remove = function(item) {
732   to=undefined; from=this.indexOf(item);
733   var rest = this.slice((to || from) + 1 || this.length);
734   this.length = from < 0 ? this.length + from : from;
735   return this.push.apply(this, rest);
736 };
737
738 function previewTheme(elm) {
739         theme = $j(elm).val();
740         $j.getJSON('pretheme?f=&theme=' + theme,function(data) {
741                         $j('#theme-preview').html('<div id="theme-desc">' + data.desc + '</div><div id="theme-version">' + data.version + '</div><div id="theme-credits">' + data.credits + '</div><a href="' + data.img + '"><img src="' + data.img + '" width="320" height="240" alt="' + theme + '" /></a>');
742         });
743
744 }