2 // generate toc from prefs form, fold sections
3 // XXX: needs testing on IE/Mac and safari
4 // more comments to follow
5 function tabbedprefs() {
6 var prefform
= document
.getElementById('preferences');
7 if (!prefform
|| !document
.createElement
) {
10 if (prefform
.nodeName
.toLowerCase() == 'a') {
11 return; // Occasional IE problem
13 prefform
.className
= prefform
.className
+ 'jsprefs';
15 var children
= prefform
.childNodes
;
17 for (var i
= 0; i
< children
.length
; i
++) {
18 if (children
[i
].nodeName
.toLowerCase() == 'fieldset') {
19 children
[i
].id
= 'prefsection-' + seci
;
20 children
[i
].className
= 'prefsection';
21 if (is_opera
|| is_khtml
) {
22 children
[i
].className
= 'prefsection operaprefsection';
24 var legends
= children
[i
].getElementsByTagName('legend');
26 if (legends
[0]) legends
[0].className
= 'mainLegend';
27 if (legends
[0] && legends
[0].firstChild
.nodeValue
) {
28 sections
[seci
].text
= legends
[0].firstChild
.nodeValue
;
30 sections
[seci
].text
= '# ' + seci
;
32 sections
[seci
].secid
= children
[i
].id
;
34 if (sections
.length
!= 1) {
35 children
[i
].style
.display
= 'none';
37 var selectedid
= children
[i
].id
;
41 var toc
= document
.createElement('ul');
43 toc
.selectedid
= selectedid
;
44 for (i
= 0; i
< sections
.length
; i
++) {
45 var li
= document
.createElement('li');
47 li
.className
= 'selected';
49 var a
= document
.createElement('a');
50 a
.href
= '#' + sections
[i
].secid
;
51 a
.onmousedown
= a
.onclick
= uncoversection
;
52 a
.appendChild(document
.createTextNode(sections
[i
].text
));
53 a
.secid
= sections
[i
].secid
;
57 prefform
.parentNode
.insertBefore(toc
, prefform
.parentNode
.childNodes
[0]);
58 document
.getElementById('prefsubmit').id
= 'prefcontrol';
61 function uncoversection() {
62 var oldsecid
= this.parentNode
.parentNode
.selectedid
;
63 var newsec
= document
.getElementById(this.secid
);
64 if (oldsecid
!= this.secid
) {
65 var ul
= document
.getElementById('preftoc');
66 document
.getElementById(oldsecid
).style
.display
= 'none';
67 newsec
.style
.display
= 'block';
68 ul
.selectedid
= this.secid
;
69 var lis
= ul
.getElementsByTagName('li');
70 for (var i
= 0; i
< lis
.length
; i
++) {
71 lis
[i
].className
= '';
73 this.parentNode
.className
= 'selected';
79 // tz in format [+-]HHMM
80 function checkTimezone(tz
, msg
) {
81 var localclock
= new Date();
82 // returns negative offset from GMT in minutes
83 var tzRaw
= localclock
.getTimezoneOffset();
84 var tzHour
= Math
.floor( Math
.abs(tzRaw
) / 60);
85 var tzMin
= Math
.abs(tzRaw
) % 60;
86 var tzString
= ((tzRaw
>= 0) ? "-" : "+") + ((tzHour
< 10) ? "0" : "") + tzHour
+ ((tzMin
< 10) ? "0" : "") + tzMin
;
88 var junk
= msg
.split('$1');
89 document
.write(junk
[0] + "UTC" + tzString
+ junk
[1]);
93 function unhidetzbutton() {
94 var tzb
= document
.getElementById('guesstimezonebutton');
96 tzb
.style
.display
= 'inline';
100 // in [-]HH:MM format...
101 // won't yet work with non-even tzs
102 function fetchTimezone() {
103 // FIXME: work around Safari bug
104 var localclock
= new Date();
105 // returns negative offset from GMT in minutes
106 var tzRaw
= localclock
.getTimezoneOffset();
107 var tzHour
= Math
.floor( Math
.abs(tzRaw
) / 60);
108 var tzMin
= Math
.abs(tzRaw
) % 60;
109 var tzString
= ((tzRaw
>= 0) ? "-" : "") + ((tzHour
< 10) ? "0" : "") + tzHour
+
110 ":" + ((tzMin
< 10) ? "0" : "") + tzMin
;
114 function guessTimezone(box
) {
115 document
.getElementsByName("wpHourDiff")[0].value
= fetchTimezone();
118 hookEvent("load", unhidetzbutton
);
119 hookEvent("load", tabbedprefs
);