5
// Fix for bug in IE6.0 float handling (don't ask, don't tell ;)
7
if (document.all && window.attachEvent) window.attachEvent("onload", fixWinIE);
10
document.getElementById('content').style.display = 'block';
15
// The calendar popup show/hide:
17
function showDay(date) {
18
document.getElementById('day' + date).style.visibility = 'visible';
22
function hideDay(date) {
23
document.getElementById('day' + date).style.visibility = 'hidden';
27
// Focus on error or tabindex=1
28
if (window.addEventListener) window.addEventListener("load",setFocus,false);
29
else if (window.attachEvent) window.attachEvent("onload",setFocus);
31
var xre = new RegExp(/\berror\b/);
32
// Search only forms to avoid spending time on regular text
33
for (var f = 0; (formnode = document.getElementsByTagName('form').item(f)); f++) {
34
// Search for errors first, focus on first error if found
35
for (var i = 0; (node = formnode.getElementsByTagName('div').item(i)); i++) {
36
if (xre.exec(node.className)) {
37
for (var j = 0; (inputnode = node.getElementsByTagName('input').item(j)); j++) {
43
// If no error, focus on input element with tabindex 1
44
for (var i = 0; (node = formnode.getElementsByTagName('input').item(i)); i++) {
45
if (node.getAttribute('tabindex') == 1) {
53
/********* Table sorter script *************/
54
// Table sorter script, thanks to Geir Bļæ½kholt for this.
55
// DOM table sorter originally made by Paul Sowden
62
if (au.charAt(4) != '-' && au.charAt(7) != '-')
64
var an = parseFloat(au)
65
var bn = parseFloat(bu)
67
if (isNaN(an) || isNaN(bn))
68
{as = au.toLowerCase()
82
function getConcatenedTextContent(node) {
87
var childrens = node.childNodes;
89
while (i < childrens.length) {
90
var child = childrens.item(i);
91
switch (child.nodeType) {
92
case 1: // ELEMENT_NODE
93
case 5: // ENTITY_REFERENCE_NODE
94
_result += getConcatenedTextContent(child);
97
case 2: // ATTRIBUTE_NODE
98
case 4: // CDATA_SECTION_NODE
99
_result += child.nodeValue;
101
case 6: // ENTITY_NODE
102
case 7: // PROCESSING_INSTRUCTION_NODE
103
case 8: // COMMENT_NODE
104
case 9: // DOCUMENT_NODE
105
case 10: // DOCUMENT_TYPE_NODE
106
case 11: // DOCUMENT_FRAGMENT_NODE
107
case 12: // NOTATION_NODE
119
var el = window.event ? window.event.srcElement : e.currentTarget;
121
// a pretty ugly sort function, but it works nonetheless
123
// check if the image or the th is clicked. Proceed to parent id it is the image
124
// NOTE THAT nodeName IS UPPERCASE
125
if (el.nodeName == 'IMG') el = el.parentNode;
126
//var name = el.firstChild.nodeValue;
127
// This is not very robust, it assumes there is an image as first node then text
128
var name = el.childNodes.item(1).nodeValue;
129
var dad = el.parentNode;
133
for (var im = 0; (node = dad.getElementsByTagName("th").item(im)); im++) {
134
// NOTE THAT nodeName IS IN UPPERCASE
135
if (node.lastChild.nodeName == 'IMG')
137
lastindex = node.getElementsByTagName('img').length - 1;
138
node.getElementsByTagName('img').item(lastindex).setAttribute('src','http://docs.opengroupware.org/arrowBlank.gif');
142
for (var i = 0; (node = dad.getElementsByTagName("th").item(i)); i++) {
143
var xre = new RegExp(/\bnosort\b/);
144
// Make sure we are not messing with nosortable columns, then check second node.
145
if (!xre.exec(node.className) && node.childNodes.item(1).nodeValue == name)
147
//window.alert(node.childNodes.item(1).nodeValue;
148
lastindex = node.getElementsByTagName('img').length -1;
149
node.getElementsByTagName('img').item(lastindex).setAttribute('src','http://docs.opengroupware.org/arrowUp.gif');
154
var tbody = dad.parentNode.parentNode.getElementsByTagName("tbody").item(0);
155
for (var j = 0; (node = tbody.getElementsByTagName("tr").item(j)); j++) {
157
// crude way to sort by surname and name after first choice
159
a[j][0] = getConcatenedTextContent(node.getElementsByTagName("td").item(i));
160
a[j][1] = getConcatenedTextContent(node.getElementsByTagName("td").item(1));
161
a[j][2] = getConcatenedTextContent(node.getElementsByTagName("td").item(0));
169
// not a perfect way to check, but hell, it suits me fine
170
if (a[0][0] == getConcatenedTextContent(tbody.getElementsByTagName("tr").item(0).getElementsByTagName("td").item(i))
171
&& a[1][0] == getConcatenedTextContent(tbody.getElementsByTagName("tr").item(1).getElementsByTagName("td").item(i)))
174
lastindex = el.getElementsByTagName('img').length - 1;
175
el.getElementsByTagName('img').item(lastindex).setAttribute('src','http://docs.opengroupware.org/arrowDown.gif');
180
for (var j = 0; j < a.length; j++) {
181
tbody.appendChild(a[j][3]);
186
var tbls = document.getElementsByTagName('table');
187
for (var t = 0; t < tbls.length; t++)
189
// elements of class="listing" can be sorted
190
var re = new RegExp(/\blisting\b/)
191
// elements of class="nosort" should not be sorted
192
var xre = new RegExp(/\bnosort\b/)
193
if (re.exec(tbls[t].className) && !xre.exec(tbls[t].className))
196
var tablename = tbls[t].getAttribute('id');
197
var thead = document.getElementById(tablename).getElementsByTagName("thead").item(0);
199
// set up blank spaceholder gifs
200
blankarrow = document.createElement('img');
201
blankarrow.setAttribute('src','http://docs.opengroupware.org/arrowBlank.gif');
202
blankarrow.setAttribute('height',6);
203
blankarrow.setAttribute('width',9);
204
// the first sortable column should get an arrow initially.
206
for (var i = 0; (node = thead.getElementsByTagName("th").item(i)); i++) {
207
// check that the columns does not have class="nosort"
208
if (!xre.exec(node.className)) {
209
node.insertBefore(blankarrow.cloneNode(1), node.firstChild);
212
uparrow = document.createElement('img');
213
uparrow.setAttribute('src','http://docs.opengroupware.org/arrowUp.gif');
214
uparrow.setAttribute('height',6);
215
uparrow.setAttribute('width',9);
216
node.appendChild(uparrow);
218
node.appendChild(blankarrow.cloneNode(1));
221
if (node.addEventListener) node.addEventListener("click",sort,false);
222
else if (node.attachEvent) node.attachEvent("onclick",sort);
230
// initialize the sorter functions
231
// add stuff to secure it from broken DOM-implanetations or missing objects.
235
// p.appendChild(document.createTextNode("Change sorting by clicking on each individual heading."));
236
// document.getElementById(tablename).parentNode.insertBefore(p,document.getElementById(tablename));
239
if (window.addEventListener) window.addEventListener("load",init,false);
240
else if (window.attachEvent) window.attachEvent("onload",init);
243
// **** End table sort script ***
247
// Actions used in the folder_contents view
249
function submitFolderAction(folderAction) {
250
document.folderContentsForm.action = document.folderContentsForm.action+'/'+folderAction;
251
document.folderContentsForm.submit();
254
function submitFilterAction() {
255
document.folderContentsForm.action = document.folderContentsForm.action+'/folder_contents';
256
filter_selection=document.getElementById('filter_selection');
257
for (var i =0; i < filter_selection.length; i++){
258
if (filter_selection.options[i].selected) {
259
if (filter_selection.options[i].value=='#') {
260
document.folderContentsForm.filter_state.value='clear_view_filter';
263
document.folderContentsForm.filter_state.value='set_view_filter'
267
document.folderContentsForm.submit();
271
// Functions for selecting all checkboxes in folder_contents view
275
function selectAll() {
276
checkboxes = document.getElementsByName('ids:list');
277
for (i = 0; i < checkboxes.length; i++)
278
checkboxes[i].checked = true ;
283
function deselectAll() {
284
checkboxes = document.getElementsByName('ids:list');
285
for (i = 0; i < checkboxes.length; i++)
286
checkboxes[i].checked = false ;
291
function toggleSelect(selectbutton) {
292
if (isSelected == false) {
293
selectbutton.setAttribute('src','http://docs.opengroupware.org/select_none_icon.gif');
297
selectbutton.setAttribute('src','http://docs.opengroupware.org/select_all_icon.gif');
298
return deselectAll();