remove old readme
[atutor.git] / jscripts / ATutor.js
1 /************************************************************************/
2 /* ATutor                                                               */
3 /************************************************************************/
4 /* Copyright (c) 2002 - 2010                                            */
5 /* Inclusive Design Institute                                           */
6 /* http://atutor.ca                                                     */
7 /*                                                                      */
8 /* This program is free software. You can redistribute it and/or        */
9 /* modify it under the terms of the GNU General Public License          */
10 /* as published by the Free Software Foundation.                        */
11 /************************************************************************/
12 // $Id: $
13
14 var ATutor = ATutor || {};
15 ATutor.users = ATutor.users || {};
16 ATutor.users.preferences = ATutor.users.preferences || {};
17
18 (function() {
19         /**
20          * A function to open a popup window
21          */
22         ATutor.poptastic = function (url) {
23                 var newwindow=window.open(url,'popup','height=600,width=600,scrollbars=yes,resizable=yes');
24                 if (window.focus) {
25                         newwindow.focus();
26                 }
27         };
28         
29         /**
30          * Cookie handling
31          */
32         var getexpirydate = function (nodays) {
33                 var Today = new Date();
34                 var nomilli = Date.parse(Today);
35                 Today.setTime(nomilli + nodays * 24 * 60 * 60 * 1000);
36                 return Today.toUTCString();
37         };
38
39         ATutor.setcookie = function (name, value, duration) {
40                 document.cookie = name + "=" + escape(value) + ";path=/;expires=" + getexpirydate(duration);;
41                 if( !ATutor.getcookie(name) ){
42                         return false;
43                 } else {
44                         return true;
45                 }
46         };
47
48         ATutor.getcookie = function (cookiename) {
49                 var cookiestring = "" + document.cookie;
50                 var index1 = cookiestring.indexOf(cookiename);
51                 if (index1 == -1 || cookiename == "") {
52                         return "";
53                 }
54                 var index2 = cookiestring.indexOf( ';', index1);
55                 if (index2 == -1) {
56                         index2 = cookiestring.length;
57                 }
58                 return unescape(cookiestring.substring(index1 + cookiename.length + 1, index2));
59         };
60         
61         //styles block for user preferences
62         //used by ATutor.users.preferences.setStyles
63     ATutor.users.preferences.user_styles = 
64         '<style id="pref_style" type="text/css">' + 
65         '<!--' + 
66         'body {' +
67                 'FG_COLOR BG_COLOR FONT_SIZE FONT_FAMILY' +
68                 '}' +
69                 'h1, h2, h3, h4, h5, h6 {' +
70                 'FG_COLOR BG_COLOR' +
71                 '}' +
72                 '.tab {' +
73                 'FG_COLOR BG_COLOR' +
74                 '}' +
75                 '.editor_tab {' +
76                 'FG_COLOR BG_COLOR' +
77                 '}' +
78                 '.editor_buttontab {' +
79                 'FG_COLOR BG_COLOR' +
80                 '}' +
81                 '.editor_tab_selected {' +
82                 'FG_COLOR BG_COLOR' +
83                 '}' +
84                 '#contentwrapper {' +
85                 'FG_COLOR BG_COLOR' +
86                 '}' +
87                 '#contentcolumn {' +
88                 'FG_COLOR BG_COLOR' +
89                 '}' +
90                 '#rightcolumn {' +
91                 'FG_COLOR BG_COLOR' +
92                 '}' +
93                 '#ctitle {' +
94                 'FG_COLOR BG_COLOR FONT_SIZE FONT_FAMILY' +
95                 '}' +
96                 '#body_text{' +
97                 'FG_COLOR BG_COLOR' +
98                 '}' +
99                 '.group_form {' +
100                 'FG_COLOR BG_COLOR' +
101                 '}' +
102                 '.test_instruction {' +
103                 'FG_COLOR BG_COLOR' +
104                 '}' +
105                 '.contentbox {' +
106                 'FG_COLOR BG_COLOR FONT_SIZE FONT_FAMILY'+
107                 '}' +
108                 '#footer {' +
109                 'FG_COLOR BG_COLOR' +
110                 '}' +
111                 'p.toc {' +
112                 'FG_COLOR BG_COLOR' +
113                 '}' +
114                 'a:link, a:visited, a:active { ' +
115                 'FG_COLOR BG_COLOR ' +
116                 '}' +
117                 'a.dropdown-title {' +
118                 'FG_COLOR BG_COLOR' +
119                 '}' +
120                 '.button, .button2 {' +
121                 'FG_COLOR BG_COLOR' +
122                 '}' +
123                 '.editorsmallbox, .editorlargebox {' +
124                 'FG_COLOR BG_COLOR' +
125                 '}' +
126                 '.buttontab {' +
127                 'FG_COLOR BG_COLOR FONT_SIZE FONT_FAMILY' +
128                 '}' +
129                 '.prefs_buttontab {' +
130                 'FG_COLOR BG_COLOR FONT_SIZE FONT_FAMILY' +
131                 '}' +
132                 '.prefs_tab {' +
133                 'FG_COLOR BG_COLOR FONT_FAMILY' +
134                 '}' +
135                 '.prefs_tab_selected {' +
136                 'FG_COLOR BG_COLOR FONT_SIZE FONT_FAMILY' +
137                 '}' +
138                 '.even {' +
139                 'FG_COLOR BG_COLOR FONT_FAMILY' +
140                 '}' +
141                 '.odd {' +
142                 'FG_COLOR BG_COLOR FONT_FAMILY' +
143                 '}' +
144                 '.tab {' +
145                 'FG_COLOR BG_COLOR' +
146                 '}' +
147                 '.active {' +
148                 'FG_COLOR BG_COLOR' +
149                 '}' +
150                 '.econtainer {' +
151                 'FG_COLOR BG_COLOR' +
152                 '}' +
153                 '.etabself {' +
154                 'FG_COLOR BG_COLOR' +
155                 '}' +
156                 '.unsaved {' +
157                 'FG_COLOR BG_COLOR' +
158                 '}' +
159                 '.saved {' +
160                 'FG_COLOR BG_COLOR' +
161                 '}' +
162                 'td.dropdown-heading {' +
163                 'FG_COLOR BG_COLOR' +
164                 '}' +
165                 'td.dropdown {' +
166                 'FG_COLOR BG_COLOR' +
167                 '}' +
168                 'td.dropdown a, td.dropdown a:visited  {' +
169                 'FG_COLOR BG_COLOR' +
170                 '}' +
171                 'td.dropdown strong {' +
172                 'FG_COLOR BG_COLOR' +
173                 '}' +
174                 'h5.search-results {' +
175                 'FG_COLOR BG_COLOR' +
176                 '}' +
177                 'small.search-info {' +
178                 'FG_COLOR BG_COLOR' +
179                 '}' +
180                 'p.search-description {' +
181                 'FG_COLOR BG_COLOR' +
182                 '}' +
183                 '.test-box {' +
184                 'FG_COLOR BG_COLOR' +
185                 '}' +
186                 'table.tabbed-table th.tab {' +
187                 'FG_COLOR BG_COLOR' +
188                 '}' +
189                 'table.tabbed-table th.selected {' +
190                 'FG_COLOR BG_COLOR' +
191                 '}' +
192                 'div#sub-navigation {' +
193                 'FG_COLOR BG_COLOR' +
194                 '}' +
195                 'div#sub-navigation strong {' +
196                 'FG_COLOR BG_COLOR' +
197                 '}' +
198                 '#subnavlist li{' +
199                 'FG_COLOR BG_COLOR' +
200                 '}' +
201                 '.logoutbar{' +
202                 'FG_COLOR BG_COLOR' +
203                 '}' +
204                 'div#help {' +
205                 'FG_COLOR BG_COLOR' +
206                 '}' +
207                 'h3#help-title {' +
208                 'FG_COLOR BG_COLOR' +
209                 '}' +
210                 '#jumpmenu:focus{' +
211                 'FG_COLOR BG_COLOR' +
212                 '}' +
213                 'a#editor-link {' +
214                 'FG_COLOR BG_COLOR' +
215                 '}' +
216                 'table.data th {' +
217                 'FG_COLOR BG_COLOR' +
218                 '}' +
219                 'table.data th a {' +
220                 'FG_COLOR BG_COLOR' +
221                 '}' +
222                 'table.data tbody th {' +
223                 'FG_COLOR BG_COLOR' +
224                 '}' +
225                 'table.data tbody tr.selected {' +
226                 'FG_COLOR BG_COLOR' +
227                 '}' +
228                 'table.data tfoot {' +
229                 'FG_COLOR BG_COLOR' +
230                 '}' +
231                 'table.data tfoot tr:first-child td {' +
232                 'FG_COLOR BG_COLOR' +
233                 '}' +
234                 'table.data tfoot input {' +
235                 'FG_COLOR BG_COLOR' +
236                 '}' +
237                 'div#error {' +
238                 'FG_COLOR BG_COLOR' +
239                 '}' +
240                 'div#error h4 {' +
241                 'FG_COLOR BG_COLOR' +
242                 '}' +
243                 'div#feedback {' +
244                 'FG_COLOR BG_COLOR' +
245                 '}' +
246                 'div#help {' +
247                 'FG_COLOR BG_COLOR' +
248                 '}' +
249                 'div#info {' +
250                 'FG_COLOR BG_COLOR' +
251                 '}' +
252                 'div#warning {' +
253                 'FG_COLOR BG_COLOR' +
254                 '}' +
255                 'div.news span.date {' +
256                 'FG_COLOR BG_COLOR' +
257                 '}' +
258                 'div.dropdown {' +
259                 'FG_COLOR BG_COLOR' +
260                 '}' +
261                 'div.dropdown-heading {' +
262                 'FG_COLOR BG_COLOR' +
263                 '}' +
264                 'div.required {' +
265                 'FG_COLOR BG_COLOR' +
266                 '}' +
267                 '#header{' +
268                 'FG_COLOR BG_COLOR' +
269                 '}' +
270                 '#header a{' +
271                 'FG_COLOR BG_COLOR' +
272                 '}' +
273                 'div.tabs a {' +
274                 'FG_COLOR BG_COLOR' +
275                 '}' +
276                 'div.tabs a.selected {' +
277                 'FG_COLOR BG_COLOR' +
278                 '}' +
279                 'div.box {' +
280                 'FG_COLOR BG_COLOR' +
281                 '}' +
282                 'h5.box {' + 
283                 'FG_COLOR BG_COLOR' +
284                 '}' +
285                 'div.box a:visited {' +
286                 'FG_COLOR BG_COLOR' +
287                 '}' +
288                 'div.box .even {' +
289                 'FG_COLOR BG_COLOR' +
290                 '}' +
291                 'div.box .odd {' +
292                 'FG_COLOR BG_COLOR' +
293                 '}' +
294                 'div.course {' +
295                 'FG_COLOR BG_COLOR' +
296                 '}' +
297                 'fieldset#shortcuts {' +
298                 'FG_COLOR BG_COLOR' +
299                 '}' +
300                 'a#guide {' +
301                 'FG_COLOR BG_COLOR' +
302                 '}' +
303                 'div#content-test ol ul li{' +
304                 'FG_COLOR BG_COLOR' +
305                 '}' +
306                 'div#content-info {' +
307                 'FG_COLOR BG_COLOR' +
308                 '}' +
309                 'div.column h3 {' +
310                 'FG_COLOR BG_COLOR' +
311                 '}' +
312                 '#navlist li a {' +
313                 'FG_COLOR BG_COLOR' +
314                 '}' +
315                 '#forum-thread li {' +
316                 'FG_COLOR BG_COLOR' +
317                 '}' +
318                 '#forum-thread li.even {' +
319                 'FG_COLOR BG_COLOR' +
320                 '}' +
321                 '#forum-thread li.odd {' +
322                 'FG_COLOR BG_COLOR' +
323                 '}' +
324                 'div.forum-post-ctrl span {' +
325                 'FG_COLOR BG_COLOR' +
326                 '}' +
327                 'div.forum-post-content p.date {' +
328                 'FG_COLOR BG_COLOR' +
329                 '}' +
330                 'div.forum-paginator{' +
331                 'FG_COLOR BG_COLOR' +
332                 '}' +
333                 'div#topnavlistcontainer {' +
334                 'FG_COLOR BG_COLOR' +
335                 '}' +
336                 'ul#topnavlist li a {' +
337                 'FG_COLOR BG_COLOR' +
338                 '}' +
339                 '#breadcrumbs {' +
340                 'FG_COLOR BG_COLOR' +
341                 '}' +
342                 '.crumbcontainer {' +
343                 'FG_COLOR BG_COLOR' +
344                 '}' +
345                 '.wizscreen {' +
346                 'FG_COLOR BG_COLOR' +
347                 '}' +
348                 'ul#topnavlist li a.selected {' +
349                 'FG_COLOR BG_COLOR' +
350                 '}' +
351                 'ol#tools>li:hover {' +
352                 'FG_COLOR BG_COLOR' +
353                 '}' +
354                 'li.top-tool {' + 
355                 'FG_COLOR BG_COLOR' +
356                 '}' +
357                 'dl.browse-course {' +
358                 'FG_COLOR BG_COLOR' +
359                 '}' +
360                 'legend.group_form{' +
361                 'FG_COLOR BG_COLOR' +
362                 '}' +
363                 'div.column_equivalent{' +
364                 'FG_COLOR BG_COLOR' +
365                 '}' +
366                 'div.resource_box{' +
367                 'FG_COLOR BG_COLOR' +
368                 '}' +
369                 'h2.alternatives_to{' +
370                 'FG_COLOR BG_COLOR' +
371                 '}' +
372                 'div.alternative_box{' +
373                 'FG_COLOR BG_COLOR' +
374                 '}' +
375                 'div.alternative_box legend {' +
376                 'FG_COLOR BG_COLOR' +
377                 '}' +
378                 'div.resource_box legend {' +
379                 'FG_COLOR BG_COLOR' +
380                 '}' +
381                 'label.primary a{' +
382                 'FG_COLOR BG_COLOR' +
383                 '}' +
384                 'div.input-form {' +
385                 'FG_COLOR BG_COLOR' +
386                 '}' +
387                 'div.input-form div.row {' +
388                 'FG_COLOR BG_COLOR' +
389                 '}' +
390                 'input[type=checkbox]{' +
391                 'FG_COLOR BG_COLOR' +
392                 '}' +
393                 'div.input-form div.buttons input {' +
394                 'FG_COLOR BG_COLOR' +
395                 '}' +
396                 'div.input-form div.row_alternatives {' +
397                 'FG_COLOR BG_COLOR' +
398                 '}' +
399                 'a:active, a:hover, a:focus, .highlight, a.highlight {' +
400                 'HL_COLOR FG_COLOR }' +
401                 'ul#topnavlist li a:hover, ul#topnavlist li a:focus, ul#topnavlist li a.active {' +
402                 'HL_COLOR FG_COLOR' +
403                 '}' +
404                 '.tab a:hover {' +
405                 'background-color:  #FF0000;    ; FG_COLOR' +
406                 '}' +
407                 '.button:focus, .button2:focus {' +
408                 'background-color:  #FF0000;    ; FG_COLOR' +
409                 '}' +
410                 'table.data tfoot {' +
411                 'HL_COLOR FG_COLOR' +
412                 '}' +
413                 'td.selected{' +
414                 'HL_COLOR FG_COLOR FONT_SIZE FONT_FAMILY' +
415                 '}' +
416                 '.buttontab selected {' +
417                 'HL_COLOR FG_COLOR' +
418                 '}' +
419                 'td.dropdown a:hover {' +
420                 'HL_COLOR FG_COLOR' +
421                 '}' +
422                 'table.tabbed-table th.tab:hover {' +
423                 'HL_COLOR FG_COLOR' +
424                 '}' +
425                 'table.tabbed-table th.tab a:focus {' +
426                 'HL_COLOR FG_COLOR' +
427                 '}' +
428                 'table.tabbed-table a, table.tabbed-table a:visited, table.tabbed-table a:hover {' +
429                 'HL_COLOR FG_COLOR' +
430                 '}' +
431                 'div#top-links a:focus{' +
432                 'HL_COLOR FG_COLOR' +
433                 '}' +
434                 'a#editor-link:hover {' +
435                 'HL_COLOR FG_COLOR' +
436                 '}' +
437                 'table.data tbody tr:hover {' +
438                 'HL_COLOR FG_COLOR' +
439                 '}' +
440                 'table.data tfoot input:focus {' +
441                 'HL_COLOR FG_COLOR' +
442                 '}' +
443                 'div.home-link:hover {' +
444                 'HL_COLOR FG_COLOR' +
445                 '}' +
446                 '#header a:hover {' +
447                 'HL_COLOR FG_COLOR' +
448                 '}' +
449                 'div.tabs a:hover, div.tabs a.active {' +
450                 'HL_COLOR FG_COLOR' +
451                 '}' +
452                 'div.course:hover {' +
453                 'HL_COLOR FG_COLOR' +
454                 '}' +
455                 '#navlist li a:hover, #navlist li a:active {' +
456                 'HL_COLOR FG_COLOR' +
457                 '}' +
458                 'input[type=image].fl-force-right {' +
459                 'BG_COLOR FG_COLOR' +
460                 '}' +
461                 '.page_wrapper {' +
462                 'BORDER FG_COLOR;' +
463                 '}' +
464                  '.input-form {' +
465                 'BORDER FG_COLOR;' +
466                 '}' +
467                  '.group_form {' +
468                 'BORDER FG_COLOR;' +
469                 '}' +
470                 '#topnavlist li a{' +
471                 'BORDER FG_COLOR;' +
472                 '}' +
473                 '#topnavlist li a{' +
474                 'BORDER FG_COLOR;' +
475                 '}' +
476                 '#subnavlist li {' +
477                 'BORDER FG_COLOR;' +
478                 '}' +
479                 '.album_panel {' +
480                 'BORDER FG_COLOR;' +
481                 '}' +
482                 '.album {' +
483                 'BORDER FG_COLOR;' +
484                 '}' +
485                 '.add_profile_photo {' +
486                 'BORDER FG_COLOR;' +
487                 '}' +
488                 '.comment_panel {' +
489                 'BORDER FG_COLOR;' +
490                 '}' +
491                 '.photo_actions {' +
492                 'BORDER FG_COLOR;' +
493                 '}' +
494                 '.etabbed-list li {' +
495                 'BORDER FG_COLOR;' +
496                 '}' +
497                 'input[type=submit] {' +
498                 'BORDER FG_COLOR' +
499                 '}' +
500                 'input[type=reset] {' +
501                 'BORDER FG_COLOR' +
502                 '}' +
503                 'input[type=text] {' +
504                 'BORDER FG_COLOR' +
505                 '}' +
506                 'input[type=file] {' +
507                 'BORDER FG_COLOR' +
508                 '}' +
509                 'textarea {' +
510                 'BORDER FG_COLOR' +
511                 '}' +
512                 '.data {' +
513                 'BORDER FG_COLOR;' +
514                 '}' +
515                 '.current_box {' +
516                 'BORDER FG_COLOR;' +
517                 '}' +
518                 '.box {' +
519                 'BORDER FG_COLOR;' +
520                 '}' +
521                 '.outside_box {' +
522                 'BORDER FG_COLOR;' +
523                 '}' +
524                 '.inside_box {' +
525                 'BORDER FG_COLOR;' +
526                 '}' +
527                 '.forum-paginator {' +
528                 'BORDER FG_COLOR;' +
529                 '}' +
530                 '#forum-thread li {' +
531                 'BORDER FG_COLOR;' +
532                 '}' +
533                 '.forum-post-ctrl {' +
534                 'BORDER FG_COLOR;' +
535                 '}' +
536                 '.profile-picture {' +
537                 'BORDER FG_COLOR;' +
538                 '}' +
539                 '.dropdown {' +
540                 'BORDER FG_COLOR;' +
541                 '}' +
542                 '.dropdown-heading {' +
543                 'BORDER FG_COLOR;' +
544                 '}' +
545                 /** Armin 23.09.2010 */
546                 'ul.recent_item {' +
547                 'BG_COLOR FG_COLOR' +
548                 '}' +
549                 'div.recent_activity_box {' +
550                 'BG_COLOR FG_COLOR' +
551                 '}' +
552                 'div.current_box {' +
553                 'BG_COLOR FG_COLOR' +
554                 '}' +
555                 'fieldset.toc {' +
556                 'BG_COLOR FG_COLOR' +
557                 '}' +
558                 'div.site-name {' +
559                 'BG_COLOR FG_COLOR' +
560                 '}' +
561                 
562                 /** Armin 23.09.2010 */ 
563         '-->' +
564         '</style>';
565
566     /**
567      * Substitutes styles into styles block above and then places those styles on the page
568      */
569     ATutor.users.preferences.setStyles = function (bg_color, fg_color, hl_color, font, font_size) {
570                 var font_style = font ? 'font-family:' + font + ' !important;\n' : '';
571                 var font_size_style = font_size ? 'font-size:' + font_size + 'em !important;\n' : '';
572                 var bg_color_style = bg_color ? 'background-color: #' + bg_color + ' !important;\n' + 'background-image: none  !important;\n' : '';
573                 var fg_color_style = fg_color ? 'color: #' + fg_color + ' !important;\n' : '';
574                 var hl_color_style = hl_color ? 'background-color: #' + hl_color + '! important;\n' : '';
575                 var bd_color_style = fg_color ? 'border-color: #' + fg_color + '! important;\n' : '';   
576                 
577                 //var pref_style = ATutor.users.preferences.user_styles.replace(/FONT_FAMILY/g, font_style).replace(/FONT_SIZE/g, font_size_style).replace(/BG_COLOR/g, bg_color_style).replace(/FG_COLOR/g, fg_color_style).replace(/HL_COLOR/g, hl_color_style);
578            var pref_style = ATutor.users.preferences.user_styles.replace(/FONT_FAMILY/g, font_style).replace(/FONT_SIZE/g, font_size_style).replace(/BG_COLOR/g, bg_color_style).replace(/FG_COLOR/g, fg_color_style).replace(/HL_COLOR/g, hl_color_style).replace(/BORDER/g, bd_color_style);
579            
580            jQuery('#pref_style').replaceWith(pref_style);
581             if (window.opener) jQuery('#pref_style', window.opener.document).replaceWith(pref_style);
582         };
583         
584         /**
585          * Adds click hander to links with id pref_wiz_launcher
586          */
587         ATutor.users.preferences.addPrefWizClickHandler = function () {
588         var launcherArray = jQuery(".pref_wiz_launcher");       
589         launcherArray.click(function() {
590                 var query_string = "";
591                 if (ATutor.users.preferences.course_id !== "") {
592                         query_string = 'course_id=' + ATutor.users.preferences.course_id;
593                 }
594                 if (query_string !== "") {
595                         query_string = "?" + query_string;
596                 }
597                 window.open(ATutor.base_href + 'users/pref_wizard/index.php' + query_string,'prefWizWindow','menubar=0,scrollbars=1,resizable=1,width=640,height=580');
598                 return false;
599         });
600     };
601     
602     /*
603      * Allow adding javascript from javascript
604      * @param: jsname - the javascript to include. Make sure the path to the js file is correct
605      *         tagToAppendJS - Optional. The tag where you want the js file to be included. For example: head, body
606      * Refrence: http://javascript.about.com/library/bladdjs.htm
607      */
608     ATutor.addJavascript = function(jsname,tagToAppendJS) {
609         // set the default 
610         if (tagToAppendJS === undefined) {
611                 tagToAppendJS = 'head';
612         }
613         var th = document.getElementsByTagName(tagToAppendJS)[0];
614         var s = document.createElement('script');
615         s.setAttribute('type','text/javascript');
616         s.setAttribute('src',jsname);
617         th.appendChild(s);
618     }
619
620 })();