Project

General

Profile

1
function addParagraph() {
2
    var newParaWidget = document.createElement("textarea");
3
    newParaWidget.setAttribute("rows", "6");
4
    newParaWidget.className="longwidth";
5
    newParaWidget.setAttribute("name", "methodPara");
6

    
7
    var TR = document.createElement("tr");
8
    TR.className='sectbody';
9
    var TD = createTD("5","left");
10
    var emptyTD = createTD("","right");
11
    TD.appendChild(newParaWidget);
12
    TR.appendChild(emptyTD);
13
    TR.appendChild(TD);
14
    var addParaButton = document.getElementById("addparabutton1");
15
    var parent = addParaButton.parentNode;
16
    parent.insertBefore(TR, addParaButton);
17
}
18

    
19
function addMethod() {
20
    var index = incrementCount('methodCount');
21
    var methodButton = document.getElementById("addmethodbutton");
22
    var parent = methodButton.parentNode;
23
    
24
    parent.insertBefore(createHRRow(), methodButton);
25
    parent.insertBefore(addMethodTitle(), methodButton);
26
    parent.insertBefore(addMethodDescription(index), methodButton);
27
    parent.insertBefore(addMethodButton(index), methodButton);
28
}
29

    
30
function  addMethodButton(index) {
31
    var TR = document.createElement("tr");
32
    var buttonId = 'addparabutton' + index;
33
    TR.className='sectbody';
34
    TR.setAttribute("id", buttonId);
35
    var labelTD = createTD("","right");
36
    var TD = createTD("5","left");
37
    var button = document.createElement("input");
38
    button.setAttribute("type", "button"); 
39
    button.setAttribute("value", "Add Paragraph to Method Description"); 
40
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
41
        button.attachEvent("onclick", new Function("addParagraph("+ index + ", '" + buttonId + "')"));
42
    } else {
43
        button.setAttribute("onclick", "addParagraph("+ index +", '" + buttonId + "')"); 
44
    }
45
    TD.appendChild(button);
46
    TR.appendChild(labelTD);
47
    TR.appendChild(TD);
48
    return TR;
49
}
50

    
51
function  addMethodTitle() {
52
    var TR = document.createElement("tr");
53
    TR.className='sectbody';
54
    var labelTD = createTD("","right");
55
    labelTD.appendChild(document.createTextNode("Method Title"));
56
    var TD = createTD("5","left");
57
    var textField = document.createElement("input");
58
    textField.setAttribute("type", "text"); 
59
    textField.setAttribute("name", "methodTitle"); 
60
    textField.className="longwidth";
61
    TD.appendChild(textField);
62
    TR.appendChild(labelTD);
63
    TR.appendChild(TD);
64
    return TR;
65
}
66

    
67
function  addMethodDescription(index) {
68
    var TR = document.createElement("tr");
69
    TR.className='sectbody';
70
    var labelTD = createTD("","right");
71
    labelTD.setAttribute("vAlign","top");
72
    labelTD.appendChild(document.createTextNode("Method Description"));
73
    var TD = createTD("5","left");
74
    var textArea = document.createElement("textarea");
75
    textArea.setAttribute("name", "methodPara"+index);
76
    textArea.setAttribute("rows", 6); 
77
    textArea.className="longwidth";
78
    TD.appendChild(textArea);
79
    TR.appendChild(labelTD);
80
    TR.appendChild(TD);
81
    return TR;
82
}
83

    
84
function createTextField(name, size, value) {
85
    var newField = document.createElement("input");
86
    newField.setAttribute("type", "text"); 
87
    newField.setAttribute("name", name); 
88
    newField.setAttribute("size", size); 
89
    newField.value = value; 
90
    return newField;
91
}
92

    
93
function createTextRow(count, varName, labelText, value) {
94
    var textField = createTextField(varName + count, "30", value);
95
    var row = createRow(count, textField, labelText);
96
    return row;
97
}
98

    
99
function createRow(count, elem, labelText) {
100
    var textTD = createTD("5");
101
    textTD.appendChild(elem);
102

    
103
    var labelTD = createTD("","right");
104

    
105
    var labelSpan = document.createElement("span");
106
    labelSpan.className = 'label';
107

    
108
    var label = document.createTextNode(labelText);
109
    labelSpan.appendChild(label);
110
    labelTD.appendChild(labelSpan);
111

    
112
    var TR = document.createElement("tr");
113
    TR.className='sectbody';
114
    TR.appendChild(labelTD);
115
    TR.appendChild(textTD);
116

    
117
    return TR;
118
}
119

    
120
function createHRRow() {
121
    var hrCell = createTD("6");
122
    var hr = document.createElement("hr");
123
    hr.setAttribute("width", "85%");
124
    hrCell.appendChild(hr);
125

    
126
    var hrTR = document.createElement("tr");
127
    hrTR.className = 'sectbody';
128
    hrTR.appendChild(hrCell);
129

    
130
    return hrTR;
131
}
132

    
133
function createHiddenInput(name, value) {
134
    var elem = document.createElement("input");
135
    elem.setAttribute("type", "hidden");
136
    elem.setAttribute("name", name);
137
    elem.setAttribute("value", value);
138
    return elem
139
}
140

    
141
function sortInputTags() {
142
    sortTagWithAttributeName("aoFirstName", "addAssociatedParty");
143
    sortTagWithAttributeName("aoLastName", "addAssociatedParty");
144
    sortTagWithAttributeName("aoRole", "addAssociatedParty", "select");
145
    
146
    sortTagWithAttributeName("taxonName", "addTaxon");
147
    sortTagWithAttributeName("taxonRank", "addTaxon");
148
    
149
    sortTagWithAttributeName("keyword", "addKeyword");
150
    sortTagWithAttributeName("keywordType", "addKeyword");
151
    sortTagWithAttributeName("keywordTh", "addKeyword");
152
}
153

    
154

    
155
function sortTagWithAttributeName(tag, afterTag, parentTag) {
156
    var elem = document.getElementById(afterTag);
157
   
158
    elem = elem.nextSibling.nextSibling;
159
    while (elem.nodeName == "TR") {
160
    var nodes = elem.getElementsByTagName("input");
161
        for(var i = 0; i < nodes.length; i++) {
162
            var node = nodes.item(i); 
163
            if (node.getAttribute("name")==tag) {
164
                    var parent = node.parentNode;
165
                    var clone = node.cloneNode(true);
166
                    parent.removeChild(node);
167
                    parent.appendChild(clone);
168
            }
169
        }
170
        if (parentTag != null) {
171
            var nodes = elem.getElementsByTagName(parentTag);
172
            for(var i = 0; i < nodes.length; i++) {
173
                var node = nodes.item(i); 
174
                if (node.getAttribute("name")==tag) {
175
                        var parent = node.parentNode;
176
                        var clone = node.cloneNode(true);
177
                        clone.value = node.value;
178
                        parent.removeChild(node);
179
                        parent.appendChild(clone);
180
                }
181
            }
182
        }
183
        elem = elem.nextSibling;
184
    }
185
}
186

    
187
function incrementCount(_count) {
188
    var countField = document.getElementById(_count);
189
    var count = countField.getAttribute("value");
190
    count++;
191
    countField.setAttribute("value", count);
192
    return count;
193
}
194

    
195
function decrementCount(_count) {
196
    var countField = document.getElementById(_count);
197
    var count = countField.getAttribute("value");
198
    count--;
199
    countField.setAttribute("value", count);
200
    return count;
201
}
202

    
203
function createImageLink(imgSrc, imgAlt, imgOnClick, cursor) {
204
    var link = document.createElement("a");
205
    var img = document.createElement("img");
206
    img.setAttribute("src", imgSrc);
207
    img.setAttribute("alt", imgAlt);
208
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
209
        link.style.setAttribute("cursor", cursor);
210
        img.attachEvent("onclick", new Function(imgOnClick));
211
    } else {
212
        link.setAttribute("style", "cursor:"+cursor);
213
        img.setAttribute("onClick", imgOnClick);
214
    }
215
    img.setAttribute("border", "0");
216
    link.appendChild(img);        
217
    return link;
218
}
219

    
220

    
221
function createTD(colSpan, align, cursor) {
222
    var td = document.createElement("td");
223
    if (colSpan != "")
224
        td.setAttribute("colSpan", colSpan);
225
    td.setAttribute("align", align);
226
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
227
        td.style.setAttribute("cursor", cursor);
228
    } else {
229
        td.setAttribute("style", "cursor:"+cursor);
230
    }
231
    return td;
232
}
233

    
234

    
235
function cleanTextNodes(startTagId, endTagId) {
236
    var startTag = document.getElementById(startTagId);
237

    
238
    var bro = startTag.nextSibling;       
239

    
240
    while(bro) {
241
        if (bro.nodeName == "#text") {
242
            var temp = bro.nextSibling;
243
            bro.parentNode.removeChild(bro);
244
            bro = temp;
245
        } else {
246
            var id = bro.getAttribute("id");
247
            if (id == endTagId) {
248
              return;
249
            }
250
            bro = bro.nextSibling;
251
        }
252
    }
253

    
254
}
255

    
256
function delRow(evt) {
257
    evt = (evt) ? evt : ((window.event) ? window.event : null);
258
    if (evt) {
259
        // equalize W3C/IE models to get event target reference
260
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
261
        if (elem) {
262
            try {
263
                var table = elem.parentNode.parentNode.parentNode.parentNode;
264
                var row = elem.parentNode.parentNode.parentNode;
265

    
266
                table.removeChild(row);
267
            }
268
            catch(e) {
269
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
270
                alert("Error:\n" + msg);
271
                return;
272
            }
273
        }
274
    }
275
}
276

    
277
function moveUpRow(evt) {
278
    evt = (evt) ? evt : ((window.event) ? window.event : null);
279
    if (evt) {
280
        // equalize W3C/IE models to get event target reference
281
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
282
        if (elem) {
283
            try {
284
                var table = elem.parentNode.parentNode.parentNode.parentNode;
285
                var row = elem.parentNode.parentNode.parentNode;
286
                
287
                var bro = row.previousSibling;
288
                if (bro != null && bro.previousSibling.nodeName =="TR") {
289
                    clone = row.cloneNode(true);
290
                    table.insertBefore(clone, bro);
291
                    table.removeChild(row);
292
                }
293
            }
294
            catch(e) {
295
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
296
                alert("Error:\n" + msg);
297
                return;
298
            }
299
        }
300
    }
301
}
302

    
303
function moveDownRow(evt, lastTR) {
304
    evt = (evt) ? evt : ((window.event) ? window.event : null);
305
    if (evt) {
306
        // equalize W3C/IE models to get event target reference
307
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
308
        if (elem) {
309
            try {
310
                var table = elem.parentNode.parentNode.parentNode.parentNode;
311
                var row = elem.parentNode.parentNode.parentNode;
312
                
313
                var _test = row.nextSibling;
314
                if (_test.getAttribute("id") == lastTR) {
315
                    return;
316
                }
317
                var bro = row.nextSibling.nextSibling;
318
                if (bro != null && bro.nodeName =="TR") {
319
                    clone = row.cloneNode(true);
320
                    table.insertBefore(clone, bro);
321
                    table.removeChild(row);
322
                }
323
            }
324
            catch(e) {
325
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
326
                alert("Error:\n" + msg);
327
                return;
328
            }
329
        }
330
    }
331
}
332

    
333
function addAssociatedParty() {
334
    var AOLN   = document.getElementById("AONameLast");
335
    var AOFN   = document.getElementById("AONameFirst");
336
    var AORole = document.getElementById("AORole");
337

    
338
    if (AOLN.value != "") {
339
        var aoCount = incrementCount("aoCount");
340
        
341
        try {
342
            var aoRow = createAORow(aoCount, AOLN.value, AOFN.value, AORole.options[AORole.selectedIndex].text);
343
        } catch(e) {
344
            var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
345
            alert("Error:\n" + msg);
346
            return;
347
        }
348

    
349
        var aoRowMarker = document.getElementById("addaorow");
350
        var parent = aoRowMarker.parentNode;
351
        
352
        var aoHR = document.getElementById("aoHRRow");
353
        if (aoHR == null) {
354
            var aoHRRow = createHRRow();
355
            aoHRRow.setAttribute("id", "aoHRRow");
356
            parent.insertBefore(aoHRRow, aoRowMarker);
357
        }
358
        
359
        parent.insertBefore(aoRow, aoRowMarker);
360
    
361
        AOFN.value = "";
362
        AOLN.value = "";
363
        AORole.selectedIndex = 0;
364
    } else {
365
        alert("Enter the last name of the associated party");
366
    }
367
}
368

    
369
function createAORow(aoCount, AOLN, AOFN, AORole){    
370
    var TR = document.createElement("tr");
371
    TR.className='sectbody';
372
    var labelTD = createTD("5","left", "pointer");
373
    
374
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
375
        labelTD.attachEvent("onclick", new Function("aoEditRow(event, 0, \"" + AOFN  + "\",\""
376
                         + AOLN  + "\",\"" + AORole + "\")"));
377
    } else {
378
        labelTD.setAttribute("onClick","aoEditRow(event, 0, \"" + AOFN  + "\",\""
379
                         + AOLN  + "\",\"" + AORole + "\")");
380
    }
381

    
382
    var text   = AOFN + " " + AOLN + " (Role: " + AORole + ")";
383
    var label = document.createTextNode(text);
384

    
385
    labelTD.appendChild(label);
386
    labelTD.appendChild(createHiddenInput("aoFirstName", AOFN));
387
    labelTD.appendChild(createHiddenInput("aoLastName", AOLN));
388
    labelTD.appendChild(createHiddenInput("aoRole", AORole));
389
    
390
    var imgTD = createTD("","right");
391
    
392
    imgTD.appendChild(createImageLink("http://ebm.nceas.ucsb.edu:80/knb/style/images/previous.gif",
393
                                      "Move Up","moveUpRow(event)","pointer"));
394
    imgTD.appendChild(document.createTextNode(" "));
395
    imgTD.appendChild(createImageLink("http://ebm.nceas.ucsb.edu:80/knb/style/images/next.gif",
396
                                      "Move Down", "moveDownRow(event, \"addaorow\")",
397
                                      "pointer"));
398
    imgTD.appendChild(document.createTextNode(" "));
399
    imgTD.appendChild(createImageLink("http://ebm.nceas.ucsb.edu:80/knb/style/images/delete.gif",
400
                                      "Delete", "delRow(event)",
401
                                      "pointer"));
402

    
403
    TR.appendChild(imgTD);
404
    TR.appendChild(labelTD);
405
    
406
    return TR;
407
}
408

    
409
function aoEditRow(evt, num,  AOFN ,  AOLN ,  AORole) {
410
    evt = (evt) ? evt : ((window.event) ? window.event : null);
411
    if (evt) {
412
        // equalize W3C/IE models to get event target reference
413
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
414
        if (elem && elem.nodeName == "TD") {
415
            try {
416
                var table = elem.parentNode;
417
                if (num == 0) {
418
                    table.removeChild(elem);
419
                    var TD = createTD("5","left", "pointer");
420
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
421
                        TD.attachEvent("onclick", new Function("aoEditRow(event, 1, \"" + AOFN  + "\",\""
422
                                                    + AOLN  + "\",\"" + AORole + "\")"));
423
                    } else {
424
                        TD.setAttribute("onClick","aoEditRow(event, 1, \"" + AOFN  + "\",\""
425
                                             + AOLN  + "\",\"" + AORole + "\")");
426
                    }                   
427
                    TD.appendChild(createTextField("aoFirstName", 15, AOFN));
428
                    TD.appendChild(document.createTextNode(" "));
429
                    TD.appendChild(createTextField("aoLastName", 15, AOLN));
430
                    TD.appendChild(document.createTextNode(" Role: "));
431
                    TD.appendChild(createAORoleTypeSelect("aoRole", AORole));
432
                    table.appendChild(TD);
433
                } else {
434
                    var child = elem.childNodes;
435
                    AOFN = child.item(0).value;
436
                    AOLN = child.item(2).value;
437
                    var _AORole = child.item(4);
438
                    AORole = _AORole.options[_AORole.selectedIndex].text;
439
                    table.removeChild(elem);
440

    
441
                    var TD = createTD("5","left", "pointer");
442
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
443
                        TD.attachEvent("onclick", new Function("aoEditRow(event, 0, \"" + AOFN  + "\",\""
444
                                                    + AOLN  + "\",\"" + AORole + "\")"));
445
                    } else {
446
                        TD.setAttribute("onClick","aoEditRow(event, 0, \"" + AOFN  + "\",\""
447
                                             + AOLN  + "\",\"" + AORole + "\")");
448
                    }
449
                    var text   = AOFN + " " + AOLN + " (Role: " + AORole + ")";
450
                    var label = document.createTextNode(text);
451
                    TD.appendChild(label);
452
                    TD.appendChild(createHiddenInput("aoFirstName", AOFN));
453
                    TD.appendChild(createHiddenInput("aoLastName", AOLN));
454
                    TD.appendChild(createHiddenInput("aoRole", AORole));
455
                    table.appendChild(TD);
456
                }
457
            } catch(e) {
458
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
459
                alert("Error:\n" + msg);
460
                return;
461
            }
462
        }
463
    }
464
}
465

    
466
function createAORoleTypeSelect(name, value) {
467
    var newField = document.createElement("select");
468
    newField.setAttribute("name", name);
469
    var option1 = document.createElement("option");
470
    var text1 = document.createTextNode("Co-owner");
471
    option1.appendChild(text1);
472
    newField.appendChild(option1);
473
    var option2 = document.createElement("option");
474
    var text2 = document.createTextNode("Custodian/Steward");
475
    option2.appendChild(text2);
476
    newField.appendChild(option2);
477
    var option3 = document.createElement("option");
478
    var text3 = document.createTextNode("Metadata Provider");
479
    option3.appendChild(text3);
480
    newField.appendChild(option3)
481
    var option4 = document.createElement("option");
482
    var text4 = document.createTextNode("User");
483
    option4.appendChild(text4);
484
    newField.appendChild(option4);
485
        
486
    if (value == "Co-owner") {
487
        newField.selectedIndex = 0;
488
    } else if (value == "Custodian/Steward") {
489
        newField.selectedIndex = 1;
490
    } else if (value == "Metadata Provider") {
491
        newField.selectedIndex = 2;
492
    } else if (value == "User") {
493
        newField.selectedIndex = 3;
494
    }
495

    
496
    return newField;
497
}
498

    
499
function addTaxon() {   
500
    var taxonRank   = document.getElementById("taxonRank");
501
    var taxonName   = document.getElementById("taxonName");
502

    
503
    if (taxonRank.value !="" && taxonName.value != "") {
504
        var taxonCount = incrementCount("taxaCount");
505
        var row = createTaxonRow(taxonCount, taxonRank.value, taxonName.value);
506
        var taxonRowMarker = document.getElementById("addtaxarow");
507
        var parent = taxonRowMarker.parentNode;
508
        
509
        var taxonHR = document.getElementById("taxonHRRow");
510
        if (taxonHR == null) {
511
            var taxonHRRow = createHRRow();
512
            taxonHRRow.setAttribute("id", "taxonHRRow");
513
            parent.insertBefore(taxonHRRow, taxonRowMarker);
514
        }
515
        
516
        parent.insertBefore(row, taxonRowMarker);
517

    
518
        taxonRank.value = "";
519
        taxonName.value = "";
520
    } else {
521
        alert("Enter complete taxonomic information");
522
    }
523
}
524

    
525
function createTaxonRow(taxonCount, taxonRank, taxonName){    
526
    var TR = document.createElement("tr");
527
    TR.className='sectbody';
528

    
529
    var labelTD = createTD("5","left", "pointer");
530
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
531
        labelTD.attachEvent("onclick",new Function("taxonEditRow(event, 0, \"" + taxonName
532
                         + "\",\"" + taxonRank  + "\")"));
533
    } else {
534
        labelTD.setAttribute("onClick","taxonEditRow(event, 0, \"" + taxonName
535
                         + "\",\"" + taxonRank  + "\")");
536
    }
537

    
538
    var text = "Rank: " + taxonRank + ", Name: " + taxonName;
539
    var label = document.createTextNode(text);
540

    
541
    labelTD.appendChild(label);
542
    labelTD.appendChild(createHiddenInput("taxonName", taxonName));
543
    labelTD.appendChild(createHiddenInput("taxonRank", taxonRank));
544
    
545
    var imgTD = createTD("","right");
546
    imgTD.appendChild(createImageLink("http://ebm.nceas.ucsb.edu:80/knb/style/images/previous.gif",
547
                                      "Move Up", "moveUpRow(event)",
548
                                      "pointer"));
549
    imgTD.appendChild(document.createTextNode(" "));
550
    imgTD.appendChild(createImageLink("http://ebm.nceas.ucsb.edu:80/knb/style/images/next.gif",
551
                                      "Move Down", "moveDownRow(event, 'addtaxarow')",
552
                                      "pointer"));
553
    imgTD.appendChild(document.createTextNode(" "));
554
    imgTD.appendChild(createImageLink("http://ebm.nceas.ucsb.edu:80/knb/style/images/delete.gif",
555
                                      "Delete", "delRow(event)",
556
                                      "pointer"));
557

    
558
    TR.appendChild(imgTD);
559
    TR.appendChild(labelTD);
560
    
561
    return TR;
562
}
563

    
564
function taxonEditRow(evt, num,  taxonName ,  taxonRank) {
565
    evt = (evt) ? evt : ((window.event) ? window.event : null);
566
    if (evt) {
567
        // equalize W3C/IE models to get event target reference
568
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
569
        if (elem && elem.nodeName == "TD") {
570
            try {
571
                var table = elem.parentNode;
572
                if (num == 0) {
573
                    table.removeChild(elem);
574
                    var TD = createTD("5","left", "pointer");
575
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
576
                        TD.attachEvent("onclick",new Function("taxonEditRow(event, 1, \"" + taxonName
577
                                       + "\",\"" + taxonRank  + "\")"));
578
                    } else {
579
                        TD.setAttribute("onClick","taxonEditRow(event, 1, \"" + taxonName
580
                                        + "\",\"" + taxonRank  + "\")");
581
                    }
582
          
583
                    TD.appendChild(document.createTextNode("Rank: "));
584
                    TD.appendChild(createTextField("taxonName", 15, taxonName));
585
                    TD.appendChild(document.createTextNode(" Name: "));
586
                    TD.appendChild(createTextField("taxonRank", 15, taxonRank));
587
                    table.appendChild(TD);
588
                } else {
589
                    var child = elem.childNodes;
590
                    taxonName = child.item(1).value;
591
                    taxonRank = child.item(3).value;
592
                    table.removeChild(elem);
593

    
594
                    var TD = createTD("5","left", "pointer");
595
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
596
                        TD.attachEvent("onclick",new Function("taxonEditRow(event, 0, \"" + taxonName
597
                                       + "\",\"" + taxonRank  + "\")"));
598
                    } else {
599
                        TD.setAttribute("onClick","taxonEditRow(event, 0, \"" + taxonName
600
                                        + "\",\"" + taxonRank  + "\")");
601
                    }                        
602
                    var text = "Rank: " + taxonName + ", Name: " + taxonRank;
603
                    var label = document.createTextNode(text);
604
                    TD.appendChild(label);
605
                    TD.appendChild(createHiddenInput("taxonName", taxonName));
606
                    TD.appendChild(createHiddenInput("taxonRank", taxonRank));
607
                    table.appendChild(TD);
608
                }
609
            } catch(e) {
610
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
611
                alert("Error:\n" + msg);
612
                return;
613
            }
614
        }
615
    }
616
}
617

    
618
function addKeyword() {
619
    var keyword   = document.getElementById("keyword");
620
    var keywordType   = document.getElementById("keywordType");
621
    var keywordTh = document.getElementById("keywordTh");
622

    
623
    if (keyword.value !="") {
624
        var keyCount = incrementCount("keyCount");
625
        var keyRow = createKeywordRow(keyCount, keyword.value, 
626
                                      keywordType.options[keywordType.selectedIndex].text, 
627
                                      keywordTh.options[keywordTh.selectedIndex].text);
628
        var keyRowMarker = document.getElementById("addkeyrow");
629
        var parent = keyRowMarker.parentNode;
630
        
631
        var keyHR = document.getElementById("keywordHRRow");
632
        if (keyHR == null) {
633
            var keyHRRow = createHRRow();
634
            keyHRRow.setAttribute("id", "keywordHRRow");
635
            parent.insertBefore(keyHRRow, keyRowMarker);
636
        }
637
        
638
        parent.insertBefore(keyRow, keyRowMarker);
639
    
640
        keyword.value = "";
641
        keywordType.selectedIndex = 0;
642
        keywordTh.selectedIndex = 0;
643
    } else {
644
        alert("Enter keyword");
645
    }
646
}
647

    
648
function createKeywordRow(keyCount, keyword, keywordType, keywordTh){    
649
    var TR = document.createElement("tr");
650
    TR.className='sectbody';
651

    
652
    var labelTD = createTD("5","left", "pointer");
653
    
654
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
655
        labelTD.attachEvent("onclick", new Function("keywordEditRow(event, 0, \"" + keyword
656
            + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
657
    } else {
658
        labelTD.setAttribute("onClick","keywordEditRow(event, 0, \"" + keyword
659
            + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
660
    }
661
              
662
    var text   = keyword + " (Type: " + keywordType + ", Thesaurus: " + keywordTh + ")";
663
    var label = document.createTextNode(text);
664

    
665
    labelTD.appendChild(label);
666
    labelTD.appendChild(createHiddenInput("keyword", keyword));
667
    labelTD.appendChild(createHiddenInput("keywordType", keywordType));
668
    labelTD.appendChild(createHiddenInput("keywordTh", keywordTh));
669
    
670
    var imgTD = createTD("","right");
671
    imgTD.appendChild(createImageLink("http://ebm.nceas.ucsb.edu:80/knb/style/images/previous.gif",
672
                                      "Move Up", "moveUpRow(event)",
673
                                      "pointer"));
674
    imgTD.appendChild(document.createTextNode(" "));
675
    imgTD.appendChild(createImageLink("http://ebm.nceas.ucsb.edu:80/knb/style/images/next.gif",
676
                                      "Move Down", "moveDownRow(event, 'addkeyrow')",
677
                                      "pointer"));
678
    imgTD.appendChild(document.createTextNode(" "));
679
    imgTD.appendChild(createImageLink("http://ebm.nceas.ucsb.edu:80/knb/style/images/delete.gif",
680
                                      "Delete", "delRow(event)",
681
                                      "pointer"));
682

    
683
    TR.appendChild(imgTD);
684
    TR.appendChild(labelTD);
685
    
686
    return TR;
687
}
688

    
689
function keywordEditRow(evt, num,  keyword,  keywordType, keywordTh) {
690
    evt = (evt) ? evt : ((window.event) ? window.event : null);
691
    if (evt) {
692
        // equalize W3C/IE models to get event target reference
693
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
694
        if (elem && elem.nodeName == "TD") {
695
            try {
696
                var table = elem.parentNode;
697
                if (num == 0) {
698
                    table.removeChild(elem);
699
                    var TD = createTD("5","left", "pointer");
700
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
701
                        TD.attachEvent("onclick", new Function("keywordEditRow(event, 1, \"" + keyword
702
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
703
                    } else {
704
                        TD.setAttribute("onClick","keywordEditRow(event, 1, \"" + keyword
705
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
706
                    }
707
                
708
                    TD.appendChild(createTextField("keyword", 15, keyword));
709
                    TD.appendChild(document.createTextNode(" Type: "));
710
                    TD.appendChild(createKeyTypeSelect("keywordType", keywordType));
711
                    TD.appendChild(document.createTextNode(" Thesaurus: "));
712
                    TD.appendChild(createKeyThSelect("keywordTh", keywordTh));
713
                    table.appendChild(TD);
714
                } else {
715
                    var child = elem.childNodes;
716
                    keyword = child.item(0).value;
717
                    var _keywordType = child.item(2);
718
                    keywordType = _keywordType.options[_keywordType.selectedIndex].text;
719
                    var _keywordTh = child.item(4);
720
                    keywordTh = _keywordTh.options[_keywordTh.selectedIndex].text;
721
                    table.removeChild(elem);
722

    
723
                    var TD = createTD("5","left", "pointer");
724
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
725
                        TD.attachEvent("onclick", new Function("keywordEditRow(event, 0, \"" + keyword
726
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
727
                    } else {
728
                        TD.setAttribute("onClick","keywordEditRow(event, 0, \"" + keyword
729
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
730
                    }
731
                
732
                    var text   = keyword + " (Type: " + keywordType + ", Thesaurus: " + keywordTh + ")";
733
                    var label = document.createTextNode(text);
734
                    TD.appendChild(label);
735
                    TD.appendChild(createHiddenInput("keyword", keyword));
736
                    TD.appendChild(createHiddenInput("keywordType", keywordType));
737
                    TD.appendChild(createHiddenInput("keywordTh", keywordTh));
738
                    table.appendChild(TD);
739
                }
740
            } catch(e) {
741
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
742
                alert("Error:\n" + msg);
743
                return;
744
            }
745
        }
746
    }
747
}
748

    
749
function createKeywordThesaurusRow(name) {        
750
    var keyRowTemplate = document.getElementById("keyThRow");
751
    var newField =  keyRowTemplate.cloneNode(true);
752
    var nodes = newField.getElementsByTagName("input");
753
    nodes.item(0).setAttribute("name", name);
754
    nodes.item(1).setAttribute("name", name);
755
    return newField;
756
}
757

    
758
function createKeyThSelect(name, value) {
759
    var newField = document.createElement("select");
760
    newField.setAttribute("name", name);
761
    var option1 = document.createElement("option");
762
    var text1 = document.createTextNode("None");
763
    option1.appendChild(text1);
764
    newField.appendChild(option1);
765
    var option2 = document.createElement("option");
766
    var text2 = document.createTextNode("GCMD");
767
    option2.appendChild(text2);
768
    newField.appendChild(option2);
769

    
770
    if (value == "None") {
771
        newField.selectedIndex = 0;
772
    } else if (value == "GCMD") {
773
        newField.selectedIndex = 1;
774
    }
775
    return newField;
776
}
777

    
778
function createKeyTypeSelect(name, value) {
779
    var newField = document.createElement("select");
780
    newField.setAttribute("name", name);
781
    var option1 = document.createElement("option");
782
    var text1 = document.createTextNode("None");
783
    option1.appendChild(text1);
784
    newField.appendChild(option1);
785
    var option2 = document.createElement("option");
786
    var text2 = document.createTextNode("Theme");
787
    option2.appendChild(text2);
788
    newField.appendChild(option2);
789
    var option3 = document.createElement("option");
790
    var text3 = document.createTextNode("Place");
791
    option3.appendChild(text3);
792
    newField.appendChild(option3)
793
    var option4 = document.createElement("option");
794
    var text4 = document.createTextNode("Stratum");
795
    option4.appendChild(text4);
796
    newField.appendChild(option4);
797
    var option5 = document.createElement("option");
798
    var text5 = document.createTextNode("Temporal");
799
    option5.appendChild(text5);
800
    newField.appendChild(option5);
801
    var option6 = document.createElement("option");
802
    var text6 = document.createTextNode("Taxonomic");
803
    option6.appendChild(text6);
804
    newField.appendChild(option6);        
805
    if (value == "None") {
806
        newField.selectedIndex = 0;
807
    } else if (value == "Theme") {
808
        newField.selectedIndex = 1;
809
    } else if (value == "Place") {
810
        newField.selectedIndex = 2;
811
    } else if (value == "Stratum") {
812
        newField.selectedIndex = 3;
813
    }else if (value == "Temporal") {
814
        newField.selectedIndex = 4;
815
    } else if (value == "Taxonomic") {
816
        newField.selectedIndex = 5;
817
    }
818
    return newField;
819
}
820

    
821
var basicInfoBit = 1;
822
var submitterBit = 1;
823
var dsoBit = 1;
824
var apBit = 1;
825
var abstractBit = 1;
826
var keywordBit = 1;
827
var temporalBit = 1;
828
var spatialBit = 1;
829
var taxonomicBit = 1;
830
var methodBit = 1;
831
var dscBit = 1;
832
var distBit = 1;
833
var uploadBit = 1;
834

    
835
function swap(evt, _node, nodeBit) {
836
    evt = (evt) ? evt : ((window.event) ? window.event : null);
837
    if (evt) {
838
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
839
        
840
        // hack so that this works on safari...
841
        if (elem.nodeName != 'A') {
842
            elem = elem.parentNode;
843
        }
844
        elem.removeChild(elem.firstChild);
845
        var node = document.getElementById(_node);
846
        if (nodeBit) {
847
            elem.appendChild(document.createTextNode("Show"));
848
            node.className="hide";
849
            return 0;
850
        } else {
851
            elem.appendChild(document.createTextNode("Hide"));
852
            node.className="tables";
853
            return 1;
854
        }
855
    }        
856
}
857

    
858
function handleOther(enable, node) {
859
    var textBox = document.getElementById(node);
860
    if (enable) {
861
        textBox.removeAttribute("disabled");   
862
    } else {
863
        textBox.value="";
864
        textBox.disabled = "true";   
865
    }
866
}
867

    
868
function copyContact() {
869
    var checkBox = document.getElementById("copyCheckBox");
870
    if (checkBox.checked == true)
871
    {
872
        var cnf = document.getElementById("contactNameFirst");
873
        var onf = document.getElementById("origNameFirst");
874
        cnf.value = onf.value;
875
        cnf.disabled = "true";
876

    
877
        var cnl = document.getElementById("contactNameLast");
878
        var onl = document.getElementById("origNameLast");
879
        cnl.value = onl.value;
880
        cnl.disabled = "true";
881

    
882
        var cno = document.getElementById("contactNameOrg");
883
        var ono = document.getElementById("origNameOrg");
884
        cno.value = ono.value;
885
        cno.disabled = "true";
886

    
887
        var ce = document.getElementById("contactEmail");
888
        var oe = document.getElementById("origEmail");
889
        ce.value = oe.value;
890
        ce.disabled = "true";
891

    
892
        var cp = document.getElementById("contactPhone");
893
        var op = document.getElementById("origPhone");
894
        cp.value = op.value;
895
        cp.disabled = "true";
896

    
897
        var cf = document.getElementById("contactFAX");
898
        var of = document.getElementById("origFAX");
899
        cf.value = of.value;
900
        cf.disabled = "true";
901

    
902
        var cd = document.getElementById("contactDelivery");
903
        var od = document.getElementById("origDelivery");
904
        cd.value = od.value;
905
        cd.disabled = "true";
906

    
907
        var cc = document.getElementById("contactCity");
908
        var oc = document.getElementById("origCity");
909
        cc.value = oc.value;
910
        cc.disabled = "true";
911

    
912
        var cs = document.getElementById("contactState");
913
        var os = document.getElementById("origState");
914
        cs.options[os.selectedIndex].selected = true;
915
        cs.disabled = "true";           
916

    
917
        var cso = document.getElementById("contactStateOther");
918
        var oso = document.getElementById("origStateOther");
919
        cso.value = oso.value;
920
        cso.disabled = "true";
921

    
922
        var cz = document.getElementById("contactZip");
923
        var oz = document.getElementById("origZip");
924
        cz.value = oz.value;
925
        cz.disabled = "true";
926

    
927
        var cC = document.getElementById("contactCountry");
928
        var oC = document.getElementById("origCountry");
929
        cC.value = oC.value;
930
        cC.disabled = "true";
931
    } else {
932
        var cnf = document.getElementById("contactNameFirst");
933
        cnf.value = "";
934
        cnf.removeAttribute("disabled");
935

    
936
        var cnl = document.getElementById("contactNameLast");
937
        cnl.value = "";
938
        cnl.removeAttribute("disabled");
939

    
940
        var cno = document.getElementById("contactNameOrg");
941
        cno.value = "";
942
        cno.removeAttribute("disabled");
943

    
944
        var ce = document.getElementById("contactEmail");
945
        ce.value = "";
946
        ce.removeAttribute("disabled");
947

    
948
        var cp = document.getElementById("contactPhone");
949
        cp.value = "";
950
        cp.removeAttribute("disabled");
951

    
952
        var cf = document.getElementById("contactFAX");
953
        cf.value = "";
954
        cf.removeAttribute("disabled");
955

    
956
        var cd = document.getElementById("contactDelivery");
957
        cd.value = "";
958
        cd.removeAttribute("disabled");
959

    
960
        var cc = document.getElementById("contactCity");
961
        cc.value = "";
962
        cc.removeAttribute("disabled");
963

    
964
        var cs = document.getElementById("contactState");
965
              cs.options[0].selected = true;
966
        cs.removeAttribute("disabled");
967

    
968
        var cso = document.getElementById("contactStateOther");
969
        cso.value = "";
970
        cso.removeAttribute("disabled");
971

    
972
        var cz = document.getElementById("contactZip");
973
        cz.value = "";
974
        cz.removeAttribute("disabled");
975

    
976
        var cC = document.getElementById("contactCountry");
977
        cC.value = "";
978
        cC.removeAttribute("disabled");
979
    }
980
}
981

    
982
// include source for Multiple file uploader:
983
// http://the-stickman.com/web-development/javascript/
984

    
985
function MultiSelector(list_target, max) {
986

    
987
    this.list_target = list_target;
988
    this.count = 0;
989
    this.id = 0;
990
    var fcount =  document.getElementById("fileCount");
991
    if (fcount.value > 0) {
992
        this.id = fcount.value;
993
    }
994

    
995
    if (max) {
996
        this.max = max;
997
    } else {
998
      this.max = -1;
999
    };
1000

    
1001
    /**
1002
     * Add a new file input element
1003
     */
1004
    this.addElement = function( element ) {
1005

    
1006
        // Make sure it's a file input element
1007
        if (element.tagName == 'INPUT' && element.type == 'file' ) {
1008
            // Element name -- what number am I?
1009
            element.name = 'file_' + this.id++;
1010

    
1011
            // Add reference to this object
1012
            element.multi_selector = this;
1013

    
1014
            // What to do when a file is selected
1015
            element.onchange = function() {
1016
            // Increment file counter
1017
            var fileCount = incrementCount("fileCount");
1018
                // Clean up file text
1019
                var comment_element = document.getElementById( 'file_comment' );
1020
                if (comment_element) {
1021
                    comment_element.parentNode.removeChild(comment_element);
1022
                }
1023

    
1024
                // New file input
1025
                var new_element = document.createElement( 'input' );
1026
                new_element.type = 'file';
1027

    
1028
                // Add new element
1029
                this.parentNode.insertBefore( new_element, this );
1030

    
1031
                // Apply 'update' to element
1032
                this.multi_selector.addElement( new_element );
1033

    
1034
                // Update list
1035
                this.multi_selector.addListRow( this );
1036

    
1037
                // Hide this: we can't use display:none because Safari doesn't like it
1038
                this.style.position = 'absolute';
1039
                this.style.left = '-1000px';
1040
            };
1041

    
1042
            // If we've reached maximum number, disable input element
1043
            if (this.max != -1 && this.count >= this.max ) {
1044
                element.disabled = true;
1045
            };
1046
            
1047
            // File element counter
1048
            this.count++;
1049

    
1050
            // Most recent element
1051
            this.current_element = element;
1052

    
1053
        } else {
1054
            // This can only be applied to file input elements!
1055
            alert( 'Error: not a file input element' );
1056
        };
1057
    };
1058

    
1059
    /**
1060
     * Add a new row to the list of files
1061
     */
1062
    this.addListRow = function( element ) {
1063
        // Row div
1064
        var new_row = document.createElement( 'div' );
1065

    
1066
        // Delete button
1067
        var new_row_button = document.createElement( 'input' );
1068
        new_row_button.type = 'button';
1069
        new_row_button.value = 'Delete';
1070

    
1071
        // Permissions check boxes
1072
        var radio_value_a = 'public';
1073
        var radio_value_b = 'private';
1074
        var new_radio_a = document.createElement('input');
1075
        var new_radio_b = document.createElement('input');
1076
        new_radio_a.type = new_radio_b.type = 'radio';
1077
        // get the file upload name, use the number to keep track of the file we're setting permissions on
1078
        new_radio_a.name = new_radio_b.name = 'uploadperm_' + element.name.split("_")[1];
1079
        new_radio_a.value = radio_value_a;
1080
        new_radio_b.value = radio_value_b;
1081
        new_radio_a.checked = false;
1082
        new_radio_b.checked = true; // when adding new files, default is private
1083
         
1084
        // References
1085
        new_row.element = element;
1086

    
1087
        // Delete function
1088
        new_row_button.onclick= function() {
1089
            // Remove element from form
1090
            this.parentNode.element.parentNode.removeChild( this.parentNode.element );
1091

    
1092
            // Remove this row from the list
1093
            this.parentNode.parentNode.removeChild( this.parentNode );
1094
            // Decrement counter
1095
            this.parentNode.element.multi_selector.count--;
1096

    
1097
            // Re-enable input element (if it's disabled)
1098
            this.parentNode.element.multi_selector.current_element.disabled = false;
1099

    
1100
            // Appease Safari
1101
            //    without it Safari wants to reload the browser window
1102
            //    which nixes your already queued uploads
1103
            return false;
1104
        };
1105
       
1106
        // filename may include path, show only file name itself
1107
        var name_pattern = element.value.replace(/.*[\/\\](.*)/, "$1");
1108

    
1109
        // Set row value
1110
        new_row.appendChild( document.createTextNode(name_pattern + " ") );
1111
        
1112
        // Add in radio buttons and their text
1113
        new_row.appendChild( new_radio_a );
1114
        new_row.appendChild( document.createTextNode(capitalize(radio_value_a) + " ") );
1115
        new_row.appendChild( new_radio_b );
1116
        new_row.appendChild( document.createTextNode(capitalize(radio_value_b) + " ") );
1117

    
1118
        // Add button
1119
        new_row.appendChild( new_row_button );
1120

    
1121
        // Add it to the list
1122
        this.list_target.appendChild( new_row );
1123
    };
1124

    
1125
};
1126

    
1127
function deleteFile(evt, file) {
1128
    evt = (evt) ? evt : ((window.event) ? window.event : null);
1129
    if (evt) {
1130
        // equalize W3C/IE models to get event target reference
1131
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
1132
        var element = document.getElementById("file_element");
1133
        if (elem) {
1134
            try {
1135
                // Add a new hidden form element to delete exisiting files
1136
                var delete_existing = document.createElement( 'input' );
1137
                delete_existing.type = "hidden";
1138
                delete_existing.name = "deletefile"; // HTML array
1139
                delete_existing.value = file.name;
1140
                element.parentNode.appendChild( delete_existing );
1141

    
1142
                // Remove this row from the list
1143
                elem.parentNode.parentNode.removeChild( elem.parentNode );
1144
            } catch(e) {
1145
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
1146
                alert("Error:\n" + msg);
1147
                return;
1148
            }
1149
        }
1150
    }
1151
}
1152

    
1153
function capitalize(word) {
1154
    return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
1155
}
(3-3/24)