(no commit message)
[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                 '.test_instruction {' +
88                 'FG_COLOR BG_COLOR' +
89                 '}' +
90                 '.contentbox {' +
91                 'FG_COLOR BG_COLOR FONT_SIZE FONT_FAMILY'+
92                 '}' +
93                 '#footer {' +
94                 'FG_COLOR BG_COLOR' +
95                 '}' +
96                 'p.toc {' +
97                 'FG_COLOR BG_COLOR' +
98                 '}' +
99                 'a:link, a:visited, a:active { ' +
100                 'FG_COLOR BG_COLOR ' +
101                 '}' +
102                 'a.dropdown-title {' +
103                 'FG_COLOR BG_COLOR' +
104                 '}' +
105                 '.button, .button2 {' +
106                 'FG_COLOR BG_COLOR' +
107                 '}' +
108                 '.editorsmallbox, .editorlargebox {' +
109                 'FG_COLOR BG_COLOR' +
110                 '}' +
111                 '.buttontab {' +
112                 'FG_COLOR BG_COLOR FONT_SIZE FONT_FAMILY' +
113                 '}' +
114                 '.prefs_buttontab {' +
115                 'FG_COLOR BG_COLOR FONT_SIZE FONT_FAMILY' +
116                 '}' +
117                 '.prefs_tab {' +
118                 'FG_COLOR BG_COLOR FONT_FAMILY' +
119                 '}' +
120                 '.prefs_tab_selected {' +
121                 'FG_COLOR BG_COLOR FONT_SIZE FONT_FAMILY' +
122                 '}' +
123                 '.even {' +
124                 'FG_COLOR BG_COLOR FONT_FAMILY' +
125                 '}' +
126                 '.odd {' +
127                 'FG_COLOR BG_COLOR FONT_FAMILY' +
128                 '}' +
129                 '.tab {' +
130                 'FG_COLOR BG_COLOR' +
131                 '}' +
132                 '.active {' +
133                 'FG_COLOR BG_COLOR' +
134                 '}' +
135                 '.econtainer {' +
136                 'FG_COLOR BG_COLOR' +
137                 '}' +
138                 '.etabself {' +
139                 'FG_COLOR BG_COLOR' +
140                 '}' +
141                 '.unsaved {' +
142                 'FG_COLOR BG_COLOR' +
143                 '}' +
144                 '.saved {' +
145                 'FG_COLOR BG_COLOR' +
146                 '}' +
147                 'td.dropdown-heading {' +
148                 'FG_COLOR BG_COLOR' +
149                 '}' +
150                 'td.dropdown {' +
151                 'FG_COLOR BG_COLOR' +
152                 '}' +
153                 'td.dropdown a, td.dropdown a:visited  {' +
154                 'FG_COLOR BG_COLOR' +
155                 '}' +
156                 'td.dropdown strong {' +
157                 'FG_COLOR BG_COLOR' +
158                 '}' +
159                 'h5.search-results {' +
160                 'FG_COLOR BG_COLOR' +
161                 '}' +
162                 'small.search-info {' +
163                 'FG_COLOR BG_COLOR' +
164                 '}' +
165                 'p.search-description {' +
166                 'FG_COLOR BG_COLOR' +
167                 '}' +
168                 '.test-box {' +
169                 'FG_COLOR BG_COLOR' +
170                 '}' +
171                 'table.tabbed-table th.tab {' +
172                 'FG_COLOR BG_COLOR' +
173                 '}' +
174                 'table.tabbed-table th.selected {' +
175                 'FG_COLOR BG_COLOR' +
176                 '}' +
177                 'div#sub-navigation {' +
178                 'FG_COLOR BG_COLOR' +
179                 '}' +
180                 'div#sub-navigation strong {' +
181                 'FG_COLOR BG_COLOR' +
182                 '}' +
183                 '#subnavlist li{' +
184                 'FG_COLOR BG_COLOR' +
185                 '}' +
186                 '.logoutbar{' +
187                 'FG_COLOR BG_COLOR' +
188                 '}' +
189                 'div#help {' +
190                 'FG_COLOR BG_COLOR' +
191                 '}' +
192                 'h3#help-title {' +
193                 'FG_COLOR BG_COLOR' +
194                 '}' +
195                 '#jumpmenu:focus{' +
196                 'FG_COLOR BG_COLOR' +
197                 '}' +
198                 'a#editor-link {' +
199                 'FG_COLOR BG_COLOR' +
200                 '}' +
201                 'table.data th {' +
202                 'FG_COLOR BG_COLOR' +
203                 '}' +
204                 'table.data th a {' +
205                 'FG_COLOR BG_COLOR' +
206                 '}' +
207                 'table.data tbody th {' +
208                 'FG_COLOR BG_COLOR' +
209                 '}' +
210                 'table.data tbody tr.selected {' +
211                 'FG_COLOR BG_COLOR' +
212                 '}' +
213                 'table.data tfoot {' +
214                 'FG_COLOR BG_COLOR' +
215                 '}' +
216                 'table.data tfoot tr:first-child td {' +
217                 'FG_COLOR BG_COLOR' +
218                 '}' +
219                 'table.data tfoot input {' +
220                 'FG_COLOR BG_COLOR' +
221                 '}' +
222                 'div#error {' +
223                 'FG_COLOR BG_COLOR' +
224                 '}' +
225                 'div#error h4 {' +
226                 'FG_COLOR BG_COLOR' +
227                 '}' +
228                 'div#feedback {' +
229                 'FG_COLOR BG_COLOR' +
230                 '}' +
231                 'div#help {' +
232                 'FG_COLOR BG_COLOR' +
233                 '}' +
234                 'div#info {' +
235                 'FG_COLOR BG_COLOR' +
236                 '}' +
237                 'div#warning {' +
238                 'FG_COLOR BG_COLOR' +
239                 '}' +
240                 'div.news span.date {' +
241                 'FG_COLOR BG_COLOR' +
242                 '}' +
243                 'div.dropdown {' +
244                 'FG_COLOR BG_COLOR' +
245                 '}' +
246                 'div.dropdown-heading {' +
247                 'FG_COLOR BG_COLOR' +
248                 '}' +
249                 'div.required {' +
250                 'FG_COLOR BG_COLOR' +
251                 '}' +
252                 '#header{' +
253                 'FG_COLOR BG_COLOR' +
254                 '}' +
255                 '#header a{' +
256                 'FG_COLOR BG_COLOR' +
257                 '}' +
258                 'div.tabs a {' +
259                 'FG_COLOR BG_COLOR' +
260                 '}' +
261                 'div.tabs a.selected {' +
262                 'FG_COLOR BG_COLOR' +
263                 '}' +
264                 'div.box {' +
265                 'FG_COLOR BG_COLOR' +
266                 '}' +
267                 'h5.box {' + 
268                 'FG_COLOR BG_COLOR' +
269                 '}' +
270                 'div.box a:visited {' +
271                 'FG_COLOR BG_COLOR' +
272                 '}' +
273                 'div.box .even {' +
274                 'FG_COLOR BG_COLOR' +
275                 '}' +
276                 'div.box .odd {' +
277                 'FG_COLOR BG_COLOR' +
278                 '}' +
279                 'div.course {' +
280                 'FG_COLOR BG_COLOR' +
281                 '}' +
282                 'fieldset#shortcuts {' +
283                 'FG_COLOR BG_COLOR' +
284                 '}' +
285                 'a#guide {' +
286                 'FG_COLOR BG_COLOR' +
287                 '}' +
288                 'div#content-test ol ul li{' +
289                 'FG_COLOR BG_COLOR' +
290                 '}' +
291                 'div#content-info {' +
292                 'FG_COLOR BG_COLOR' +
293                 '}' +
294                 'div.column h3 {' +
295                 'FG_COLOR BG_COLOR' +
296                 '}' +
297                 '#navlist li a {' +
298                 'FG_COLOR BG_COLOR' +
299                 '}' +
300                 '#forum-thread li {' +
301                 'FG_COLOR BG_COLOR' +
302                 '}' +
303                 '#forum-thread li.even {' +
304                 'FG_COLOR BG_COLOR' +
305                 '}' +
306                 '#forum-thread li.odd {' +
307                 'FG_COLOR BG_COLOR' +
308                 '}' +
309                 'div.forum-post-ctrl span {' +
310                 'FG_COLOR BG_COLOR' +
311                 '}' +
312                 'div.forum-post-content p.date {' +
313                 'FG_COLOR BG_COLOR' +
314                 '}' +
315                 'div.forum-paginator{' +
316                 'FG_COLOR BG_COLOR' +
317                 '}' +
318                 'div#topnavlistcontainer {' +
319                 'FG_COLOR BG_COLOR' +
320                 '}' +
321                 'ul#topnavlist li a {' +
322                 'FG_COLOR BG_COLOR' +
323                 '}' +
324                 '#breadcrumbs {' +
325                 'FG_COLOR BG_COLOR' +
326                 '}' +
327                 '.crumbcontainer {' +
328                 'FG_COLOR BG_COLOR' +
329                 '}' +
330                 '.wizscreen {' +
331                 'FG_COLOR BG_COLOR' +
332                 '}' +
333                 'ul#topnavlist li a.selected {' +
334                 'FG_COLOR BG_COLOR' +
335                 '}' +
336                 'ol#tools>li:hover {' +
337                 'FG_COLOR BG_COLOR' +
338                 '}' +
339                 'li.top-tool {' + 
340                 'FG_COLOR BG_COLOR' +
341                 '}' +
342                 'dl.browse-course {' +
343                 'FG_COLOR BG_COLOR' +
344                 '}' +
345                 'legend.group_form{' +
346                 'FG_COLOR BG_COLOR' +
347                 '}' +
348                 'div.column_equivalent{' +
349                 'FG_COLOR BG_COLOR' +
350                 '}' +
351                 'div.resource_box{' +
352                 'FG_COLOR BG_COLOR' +
353                 '}' +
354                 'h2.alternatives_to{' +
355                 'FG_COLOR BG_COLOR' +
356                 '}' +
357                 'div.alternative_box{' +
358                 'FG_COLOR BG_COLOR' +
359                 '}' +
360                 'div.alternative_box legend {' +
361                 'FG_COLOR BG_COLOR' +
362                 '}' +
363                 'div.resource_box legend {' +
364                 'FG_COLOR BG_COLOR' +
365                 '}' +
366                 'label.primary a{' +
367                 'FG_COLOR BG_COLOR' +
368                 '}' +
369                 'div.input-form {' +
370                 'FG_COLOR BG_COLOR' +
371                 '}' +
372                 'div.input-form div.row {' +
373                 'FG_COLOR BG_COLOR' +
374                 '}' +
375                 'input[type=checkbox]{' +
376                 'FG_COLOR BG_COLOR' +
377                 '}' +
378                 'div.input-form div.buttons input {' +
379                 'FG_COLOR BG_COLOR' +
380                 '}' +
381                 'div.input-form div.row_alternatives {' +
382                 'FG_COLOR BG_COLOR' +
383                 '}' +
384                 'a:active, a:hover, a:focus, .highlight, a.highlight {' +
385                 'HL_COLOR FG_COLOR }' +
386                 'ul#topnavlist li a:hover, ul#topnavlist li a:focus, ul#topnavlist li a.active {' +
387                 'HL_COLOR FG_COLOR' +
388                 '}' +
389                 '.tab a:hover {' +
390                 'background-color:  #FF0000;    ; FG_COLOR' +
391                 '}' +
392                 '.button:focus, .button2:focus {' +
393                 'background-color:  #FF0000;    ; FG_COLOR' +
394                 '}' +
395                 'table.data tfoot {' +
396                 'HL_COLOR FG_COLOR' +
397                 '}' +
398                 'td.selected{' +
399                 'HL_COLOR FG_COLOR FONT_SIZE FONT_FAMILY' +
400                 '}' +
401                 '.buttontab selected {' +
402                 'HL_COLOR FG_COLOR' +
403                 '}' +
404                 'td.dropdown a:hover {' +
405                 'HL_COLOR FG_COLOR' +
406                 '}' +
407                 'table.tabbed-table th.tab:hover {' +
408                 'HL_COLOR FG_COLOR' +
409                 '}' +
410                 'table.tabbed-table th.tab a:focus {' +
411                 'HL_COLOR FG_COLOR' +
412                 '}' +
413                 'table.tabbed-table a, table.tabbed-table a:visited, table.tabbed-table a:hover {' +
414                 'HL_COLOR FG_COLOR' +
415                 '}' +
416                 'div#top-links a:focus{' +
417                 'HL_COLOR FG_COLOR' +
418                 '}' +
419                 'a#editor-link:hover {' +
420                 'HL_COLOR FG_COLOR' +
421                 '}' +
422                 'table.data tbody tr:hover {' +
423                 'HL_COLOR FG_COLOR' +
424                 '}' +
425                 'table.data tfoot input:focus {' +
426                 'HL_COLOR FG_COLOR' +
427                 '}' +
428                 'div.home-link:hover {' +
429                 'HL_COLOR FG_COLOR' +
430                 '}' +
431                 '#header a:hover {' +
432                 'HL_COLOR FG_COLOR' +
433                 '}' +
434                 'div.tabs a:hover, div.tabs a.active {' +
435                 'HL_COLOR FG_COLOR' +
436                 '}' +
437                 'div.course:hover {' +
438                 'HL_COLOR FG_COLOR' +
439                 '}' +
440                 '#navlist li a:hover, #navlist li a:active {' +
441                 'HL_COLOR FG_COLOR' +
442                 '}' +
443                 'input[type=image].fl-force-right {' +
444                 'BG_COLOR FG_COLOR' +
445                 '}' +
446                 /** Armin 23.09.2010 */
447                 'ul.recent_item {' +
448                 'BG_COLOR FG_COLOR' +
449                 '}' +
450                 'div.recent_activity_box {' +
451                 'BG_COLOR FG_COLOR' +
452                 '}' +
453                 'div.current_box {' +
454                 'BG_COLOR FG_COLOR' +
455                 '}' +
456                 'fieldset.toc {' +
457                 'BG_COLOR FG_COLOR' +
458                 '}' +
459                 'div.site-name {' +
460                 'BG_COLOR FG_COLOR' +
461                 '}' +
462                 /** Armin 23.09.2010 */ 
463         '-->' +
464         '</style>';
465
466     /**
467      * Substitutes styles into styles block above and then places those styles on the page
468      */
469     ATutor.users.preferences.setStyles = function (bg_color, fg_color, hl_color, font, font_size) {
470                 var font_style = font ? 'font-family:' + font + ' !important;\n' : '';
471                 var font_size_style = font_size ? 'font-size:' + font_size + 'em !important;\n' : '';
472                 var bg_color_style = bg_color ? 'background-color: #' + bg_color + ' !important;\n' : '';
473                 var fg_color_style = fg_color ? 'color: #' + fg_color + ' !important;\n' : '';
474                 var hl_color_style = hl_color ? 'background-color: #' + hl_color + '! important;\n' : '';
475                                 
476                 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);
477             jQuery('#pref_style').replaceWith(pref_style);
478             if (window.opener) jQuery('#pref_style', window.opener.document).replaceWith(pref_style);
479         };
480         
481         /**
482          * Adds click hander to links with id pref_wiz_launcher
483          */
484         ATutor.users.preferences.addPrefWizClickHandler = function () {
485         var launcherArray = jQuery(".pref_wiz_launcher");       
486         launcherArray.click(function() {
487                 var query_string = "";
488                 if (ATutor.users.preferences.course_id !== "") {
489                         query_string = 'course_id=' + ATutor.users.preferences.course_id;
490                 }
491                 if (query_string !== "") {
492                         query_string = "?" + query_string;
493                 }
494                 window.open(ATutor.base_href + 'users/pref_wizard/index.php' + query_string,'prefWizWindow','menubar=0,scrollbars=1,resizable=1,width=640,height=580');
495                 return false;
496         });
497     };
498     
499 })();