text changes to registration mail content
[namibia] / public / js / lib / syntaxhighlighter / src / shAutoloader.js
1 /**
2  * SyntaxHighlighter
3  * http://alexgorbatchev.com/SyntaxHighlighter
4  *
5  * SyntaxHighlighter is donationware. If you are using it, please donate.
6  * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
7  *
8  * @version
9  * 3.0.83 (July 02 2010)
10  * 
11  * @copyright
12  * Copyright (C) 2004-2010 Alex Gorbatchev.
13  *
14  * @license
15  * Dual licensed under the MIT and GPL licenses.
16  */
17 (function() {
18
19 var sh = SyntaxHighlighter;
20
21 /**
22  * Provides functionality to dynamically load only the brushes that a needed to render the current page.
23  *
24  * There are two syntaxes that autoload understands. For example:
25  * 
26  * SyntaxHighlighter.autoloader(
27  *     [ 'applescript',          'Scripts/shBrushAppleScript.js' ],
28  *     [ 'actionscript3', 'as3', 'Scripts/shBrushAS3.js' ]
29  * );
30  *
31  * or a more easily comprehendable one:
32  *
33  * SyntaxHighlighter.autoloader(
34  *     'applescript       Scripts/shBrushAppleScript.js',
35  *     'actionscript3 as3 Scripts/shBrushAS3.js'
36  * );
37  */
38 sh.autoloader = function()
39 {
40         var list = arguments,
41                 elements = sh.findElements(),
42                 brushes = {},
43                 scripts = {},
44                 all = SyntaxHighlighter.all,
45                 allCalled = false,
46                 allParams = null,
47                 i
48                 ;
49                 
50         SyntaxHighlighter.all = function(params)
51         {
52                 allParams = params;
53                 allCalled = true;
54         };
55         
56         function addBrush(aliases, url)
57         {
58                 for (var i = 0; i < aliases.length; i++)
59                         brushes[aliases[i]] = url;
60         };
61         
62         function getAliases(item)
63         {
64                 return item.pop
65                         ? item
66                         : item.split(/\s+/)
67                         ;
68         }
69         
70         // create table of aliases and script urls
71         for (i = 0; i < list.length; i++)
72         {
73                 var aliases = getAliases(list[i]),
74                         url = aliases.pop()
75                         ;
76                         
77                 addBrush(aliases, url);
78         }
79         
80         // dynamically add <script /> tags to the document body
81         for (i = 0; i < elements.length; i++)
82         {
83                 var url = brushes[elements[i].params.brush];
84                 
85                 if (!url)
86                         continue;
87                 
88                 scripts[url] = false;
89                 loadScript(url);
90         }
91         
92         function loadScript(url)
93         {
94                 var script = document.createElement('script'),
95                         done = false
96                         ;
97                 
98                 script.src = url;
99                 script.type = 'text/javascript';
100                 script.language = 'javascript';
101                 script.onload = script.onreadystatechange = function()
102                 {
103                         if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete'))
104                         {
105                                 done = true;
106                                 scripts[url] = true;
107                                 checkAll();
108                                 
109                                 // Handle memory leak in IE
110                                 script.onload = script.onreadystatechange = null;
111                                 script.parentNode.removeChild(script);
112                         }
113                 };
114                 
115                 // sync way of adding script tags to the page
116                 document.body.appendChild(script);
117         };
118         
119         function checkAll()
120         {
121                 for(var url in scripts)
122                         if (scripts[url] == false)
123                                 return;
124                 
125                 if (allCalled)
126                         SyntaxHighlighter.highlight(allParams);
127         };
128 };
129
130 })();