Project

General

Profile

1
function getParams() {
2
    var paramsArray = document.location.href.split('?')[1].split('&');
3
    for (var i = 0; i < paramsArray.length; i++) {
4
        var temp = paramsArray[i].split('=');
5
        alert(unescape(temp[0]) + '=' + unescape(temp[1]));
6
    }
7
}
8

    
9
function addParagraph() {
10
    var newParaWidget = document.createElement("textarea");
11
    newParaWidget.setAttribute("rows", "6");
12
    newParaWidget.className="longwidth";
13
    newParaWidget.setAttribute("name", "methodPara");
14

    
15
    var TR = document.createElement("tr");
16
    TR.className='sectbody';
17
    var TD = createTD("5","left");
18
    var emptyTD = createTD("","right");
19
    TD.appendChild(newParaWidget);
20
    TR.appendChild(emptyTD);
21
    TR.appendChild(TD);
22
    var addParaButton = document.getElementById("addparabutton1");
23
    var parent = addParaButton.parentNode;
24
    parent.insertBefore(TR, addParaButton);
25
}
26

    
27
function addMethod() {
28
    var index = incrementCount('methodCount');
29
    var methodButton = document.getElementById("addmethodbutton");
30
    var parent = methodButton.parentNode;
31
    
32
    parent.insertBefore(createHRRow(), methodButton);
33
    parent.insertBefore(addMethodTitle(), methodButton);
34
    parent.insertBefore(addMethodDescription(index), methodButton);
35
    parent.insertBefore(addMethodButton(index), methodButton);
36
}
37

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

    
59
function  addMethodTitle() {
60
    var TR = document.createElement("tr");
61
    TR.className='sectbody';
62
    var labelTD = createTD("","right");
63
    labelTD.appendChild(document.createTextNode("Method Title"));
64
    var TD = createTD("5","left");
65
    var textField = document.createElement("input");
66
    textField.setAttribute("type", "text"); 
67
    textField.setAttribute("name", "methodTitle"); 
68
    textField.className="longwidth";
69
    TD.appendChild(textField);
70
    TR.appendChild(labelTD);
71
    TR.appendChild(TD);
72
    return TR;
73
}
74

    
75
function  addMethodDescription(index) {
76
    var TR = document.createElement("tr");
77
    TR.className='sectbody';
78
    var labelTD = createTD("","right");
79
    labelTD.setAttribute("vAlign","top");
80
    labelTD.appendChild(document.createTextNode("Method Description"));
81
    var TD = createTD("5","left");
82
    var textArea = document.createElement("textarea");
83
    textArea.setAttribute("name", "methodPara"+index);
84
    textArea.setAttribute("rows", 6); 
85
    textArea.className="longwidth";
86
    TD.appendChild(textArea);
87
    TR.appendChild(labelTD);
88
    TR.appendChild(TD);
89
    return TR;
90
}
91

    
92
function createTextField(name, size, value) {
93
    var newField = document.createElement("input");
94
    newField.setAttribute("type", "text"); 
95
    newField.setAttribute("name", name); 
96
    newField.setAttribute("size", size); 
97
    newField.value = value; 
98
    return newField;
99
}
100

    
101
function createTextRow(count, varName, labelText, value) {
102
    var textField = createTextField(varName + count, "30", value);
103
    var row = createRow(count, textField, labelText);
104
    return row;
105
}
106

    
107
function createRow(count, elem, labelText) {
108
    var textTD = createTD("5");
109
    textTD.appendChild(elem);
110

    
111
    var labelTD = createTD("","right");
112

    
113
    var labelSpan = document.createElement("span");
114
    labelSpan.className = 'label';
115

    
116
    var label = document.createTextNode(labelText);
117
    labelSpan.appendChild(label);
118
    labelTD.appendChild(labelSpan);
119

    
120
    var TR = document.createElement("tr");
121
    TR.className='sectbody';
122
    TR.appendChild(labelTD);
123
    TR.appendChild(textTD);
124

    
125
    return TR;
126
}
127

    
128
function createHRRow() {
129
    var hrCell = createTD("6");
130
    var hr = document.createElement("hr");
131
    hr.setAttribute("width", "85%");
132
    hrCell.appendChild(hr);
133

    
134
    var hrTR = document.createElement("tr");
135
    hrTR.className = 'sectbody';
136
    hrTR.appendChild(hrCell);
137

    
138
    return hrTR;
139
}
140

    
141
function createHiddenInput(name, value) {
142
    var elem = document.createElement("input");
143
    elem.setAttribute("type", "hidden");
144
    elem.setAttribute("name", name);
145
    elem.setAttribute("value", value);
146
    return elem
147
}
148

    
149
function sortInputTags() {
150
    sortTagWithAttributeName("aoFirstName", "addAssociatedParty");
151
    sortTagWithAttributeName("aoLastName", "addAssociatedParty");
152
    sortTagWithAttributeName("aoRole", "addAssociatedParty", "select");
153
    
154
    sortTagWithAttributeName("taxonName", "addTaxon");
155
    sortTagWithAttributeName("taxonRank", "addTaxon");
156
    
157
    sortTagWithAttributeName("keyword", "addKeyword");
158
    sortTagWithAttributeName("keywordType", "addKeyword");
159
    sortTagWithAttributeName("keywordTh", "addKeyword");
160
}
161

    
162

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

    
195
function incrementCount(_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 decrementCount(_count) {
204
    var countField = document.getElementById(_count);
205
    var count = countField.getAttribute("value");
206
    count--;
207
    countField.setAttribute("value", count);
208
    return count;
209
}
210

    
211
function createImageLink(imgSrc, imgAlt, imgOnClick, cursor) {
212
    var link = document.createElement("a");
213
    var img = document.createElement("img");
214
    img.setAttribute("src", imgSrc);
215
    img.setAttribute("alt", imgAlt);
216
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
217
        link.style.setAttribute("cursor", cursor);
218
        img.attachEvent("onclick", new Function(imgOnClick));
219
    } else {
220
        link.setAttribute("style", "cursor:"+cursor);
221
        img.setAttribute("onClick", imgOnClick);
222
    }
223
    img.setAttribute("border", "0");
224
    link.appendChild(img);        
225
    return link;
226
}
227

    
228

    
229
function createTD(colSpan, align, cursor) {
230
    var td = document.createElement("td");
231
    if (colSpan != "")
232
        td.setAttribute("colSpan", colSpan);
233
    td.setAttribute("align", align);
234
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
235
        td.style.setAttribute("cursor", cursor);
236
    } else {
237
        td.setAttribute("style", "cursor:"+cursor);
238
    }
239
    return td;
240
}
241

    
242

    
243
function cleanTextNodes(startTagId, endTagId) {
244
    var startTag = document.getElementById(startTagId);
245

    
246
    var bro = startTag.nextSibling;       
247

    
248
    while(bro) {
249
        if (bro.nodeName == "#text") {
250
            var temp = bro.nextSibling;
251
            bro.parentNode.removeChild(bro);
252
            bro = temp;
253
        } else {
254
            var id = bro.getAttribute("id");
255
            if (id == endTagId) {
256
              return;
257
            }
258
            bro = bro.nextSibling;
259
        }
260
    }
261

    
262
}
263

    
264
function delRow(evt) {
265
    evt = (evt) ? evt : ((window.event) ? window.event : null);
266
    if (evt) {
267
        // equalize W3C/IE models to get event target reference
268
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
269
        if (elem) {
270
            try {
271
                var table = elem.parentNode.parentNode.parentNode.parentNode;
272
                var row = elem.parentNode.parentNode.parentNode;
273

    
274
                table.removeChild(row);
275
            }
276
            catch(e) {
277
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
278
                alert("Error:\n" + msg);
279
                return;
280
            }
281
        }
282
    }
283
}
284

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

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

    
341
function addAssociatedParty() {
342
    var AOLN   = document.getElementById("AONameLast");
343
    var AOFN   = document.getElementById("AONameFirst");
344
    var AORole = document.getElementById("AORole");
345

    
346
    if (AOLN.value != "") {
347
        var aoCount = incrementCount("aoCount");
348
        
349
        try {
350
            var aoRow = createAORow(aoCount, AOLN.value, AOFN.value, AORole.options[AORole.selectedIndex].text);
351
        } catch(e) {
352
            var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
353
            alert("Error:\n" + msg);
354
            return;
355
        }
356

    
357
        var aoRowMarker = document.getElementById("addaorow");
358
        var parent = aoRowMarker.parentNode;
359
        
360
        var aoHR = document.getElementById("aoHRRow");
361
        if (aoHR == null) {
362
            var aoHRRow = createHRRow();
363
            aoHRRow.setAttribute("id", "aoHRRow");
364
            parent.insertBefore(aoHRRow, aoRowMarker);
365
        }
366
        
367
        parent.insertBefore(aoRow, aoRowMarker);
368
    
369
        AOFN.value = "";
370
        AOLN.value = "";
371
        AORole.selectedIndex = 0;
372
    } else {
373
        alert("Enter the last name of the associated party");
374
    }
375
}
376

    
377
function createAORow(aoCount, AOLN, AOFN, AORole){    
378
    var TR = document.createElement("tr");
379
    TR.className='sectbody';
380
    var labelTD = createTD("5","left", "pointer");
381
    
382
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
383
        labelTD.attachEvent("onclick", new Function("aoEditRow(event, 0, \"" + AOFN  + "\",\""
384
                         + AOLN  + "\",\"" + AORole + "\")"));
385
    } else {
386
        labelTD.setAttribute("onClick","aoEditRow(event, 0, \"" + AOFN  + "\",\""
387
                         + AOLN  + "\",\"" + AORole + "\")");
388
    }
389

    
390
    var text   = AOFN + " " + AOLN + " (Role: " + AORole + ")";
391
    var label = document.createTextNode(text);
392

    
393
    labelTD.appendChild(label);
394
    labelTD.appendChild(createHiddenInput("aoFirstName", AOFN));
395
    labelTD.appendChild(createHiddenInput("aoLastName", AOLN));
396
    labelTD.appendChild(createHiddenInput("aoRole", AORole));
397
    
398
    var imgTD = createTD("","right");
399
    
400
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/previous.gif",
401
                                      "Move Up","moveUpRow(event)","pointer"));
402
    imgTD.appendChild(document.createTextNode(" "));
403
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/next.gif",
404
                                      "Move Down", "moveDownRow(event, \"addaorow\")",
405
                                      "pointer"));
406
    imgTD.appendChild(document.createTextNode(" "));
407
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/delete.gif",
408
                                      "Delete", "delRow(event)",
409
                                      "pointer"));
410

    
411
    TR.appendChild(imgTD);
412
    TR.appendChild(labelTD);
413
    
414
    return TR;
415
}
416

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

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

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

    
504
    return newField;
505
}
506

    
507
function addTaxon() {   
508
    var taxonRank   = document.getElementById("taxonRank");
509
    var taxonName   = document.getElementById("taxonName");
510

    
511
    if (taxonRank.value !="" && taxonName.value != "") {
512
        var taxonCount = incrementCount("taxaCount");
513
        var row = createTaxonRow(taxonCount, taxonRank.value, taxonName.value);
514
        var taxonRowMarker = document.getElementById("addtaxarow");
515
        var parent = taxonRowMarker.parentNode;
516
        
517
        var taxonHR = document.getElementById("taxonHRRow");
518
        if (taxonHR == null) {
519
            var taxonHRRow = createHRRow();
520
            taxonHRRow.setAttribute("id", "taxonHRRow");
521
            parent.insertBefore(taxonHRRow, taxonRowMarker);
522
        }
523
        
524
        parent.insertBefore(row, taxonRowMarker);
525

    
526
        taxonRank.value = "";
527
        taxonName.value = "";
528
    } else {
529
        alert("Enter complete taxonomic information");
530
    }
531
}
532

    
533
function createTaxonRow(taxonCount, taxonRank, taxonName){    
534
    var TR = document.createElement("tr");
535
    TR.className='sectbody';
536

    
537
    var labelTD = createTD("5","left", "pointer");
538
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
539
        labelTD.attachEvent("onclick",new Function("taxonEditRow(event, 0, \"" + taxonName
540
                         + "\",\"" + taxonRank  + "\")"));
541
    } else {
542
        labelTD.setAttribute("onClick","taxonEditRow(event, 0, \"" + taxonName
543
                         + "\",\"" + taxonRank  + "\")");
544
    }
545

    
546
    var text = "Rank: " + taxonRank + ", Name: " + taxonName;
547
    var label = document.createTextNode(text);
548

    
549
    labelTD.appendChild(label);
550
    labelTD.appendChild(createHiddenInput("taxonName", taxonName));
551
    labelTD.appendChild(createHiddenInput("taxonRank", taxonRank));
552
    
553
    var imgTD = createTD("","right");
554
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/previous.gif",
555
                                      "Move Up", "moveUpRow(event)",
556
                                      "pointer"));
557
    imgTD.appendChild(document.createTextNode(" "));
558
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/next.gif",
559
                                      "Move Down", "moveDownRow(event, 'addtaxarow')",
560
                                      "pointer"));
561
    imgTD.appendChild(document.createTextNode(" "));
562
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/delete.gif",
563
                                      "Delete", "delRow(event)",
564
                                      "pointer"));
565

    
566
    TR.appendChild(imgTD);
567
    TR.appendChild(labelTD);
568
    
569
    return TR;
570
}
571

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

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

    
626
function addKeyword() {
627
    var keyword   = document.getElementById("keyword");
628
    var keywordType   = document.getElementById("keywordType");
629
    var keywordTh = document.getElementById("keywordTh");
630

    
631
    if (keyword.value !="") {
632
        var keyCount = incrementCount("keyCount");
633
        var keyRow = createKeywordRow(keyCount, keyword.value, 
634
                                      keywordType.options[keywordType.selectedIndex].text, 
635
                                      keywordTh.options[keywordTh.selectedIndex].text);
636
        var keyRowMarker = document.getElementById("addkeyrow");
637
        var parent = keyRowMarker.parentNode;
638
        
639
        var keyHR = document.getElementById("keywordHRRow");
640
        if (keyHR == null) {
641
            var keyHRRow = createHRRow();
642
            keyHRRow.setAttribute("id", "keywordHRRow");
643
            parent.insertBefore(keyHRRow, keyRowMarker);
644
        }
645
        
646
        parent.insertBefore(keyRow, keyRowMarker);
647
    
648
        keyword.value = "";
649
        keywordType.selectedIndex = 0;
650
        keywordTh.selectedIndex = 0;
651
    } else {
652
        alert("Enter keyword");
653
    }
654
}
655

    
656
function createKeywordRow(keyCount, keyword, keywordType, keywordTh){    
657
    var TR = document.createElement("tr");
658
    TR.className='sectbody';
659

    
660
    var labelTD = createTD("5","left", "pointer");
661
    
662
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
663
        labelTD.attachEvent("onclick", new Function("keywordEditRow(event, 0, \"" + keyword
664
            + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
665
    } else {
666
        labelTD.setAttribute("onClick","keywordEditRow(event, 0, \"" + keyword
667
            + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
668
    }
669
              
670
    var text   = keyword + " (Type: " + keywordType + ", Thesaurus: " + keywordTh + ")";
671
    var label = document.createTextNode(text);
672

    
673
    labelTD.appendChild(label);
674
    labelTD.appendChild(createHiddenInput("keyword", keyword));
675
    labelTD.appendChild(createHiddenInput("keywordType", keywordType));
676
    labelTD.appendChild(createHiddenInput("keywordTh", keywordTh));
677
    
678
    var imgTD = createTD("","right");
679
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/previous.gif",
680
                                      "Move Up", "moveUpRow(event)",
681
                                      "pointer"));
682
    imgTD.appendChild(document.createTextNode(" "));
683
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/next.gif",
684
                                      "Move Down", "moveDownRow(event, 'addkeyrow')",
685
                                      "pointer"));
686
    imgTD.appendChild(document.createTextNode(" "));
687
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/delete.gif",
688
                                      "Delete", "delRow(event)",
689
                                      "pointer"));
690

    
691
    TR.appendChild(imgTD);
692
    TR.appendChild(labelTD);
693
    
694
    return TR;
695
}
696

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

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

    
757
function createKeywordThesaurusRow(name) {        
758
    var keyRowTemplate = document.getElementById("keyThRow");
759
    var newField =  keyRowTemplate.cloneNode(true);
760
    var nodes = newField.getElementsByTagName("input");
761
    nodes.item(0).setAttribute("name", name);
762
    nodes.item(1).setAttribute("name", name);
763
    return newField;
764
}
765

    
766
function createKeyThSelect(name, value) {
767
    var newField = document.createElement("select");
768
    newField.setAttribute("name", name);
769
    var option1 = document.createElement("option");
770
    var text1 = document.createTextNode("None");
771
    option1.appendChild(text1);
772
    newField.appendChild(option1);
773
    var option2 = document.createElement("option");
774
    var text2 = document.createTextNode("GCMD");
775
    option2.appendChild(text2);
776
    newField.appendChild(option2);
777

    
778
    if (value == "None") {
779
        newField.selectedIndex = 0;
780
    } else if (value == "GCMD") {
781
        newField.selectedIndex = 1;
782
    }
783
    return newField;
784
}
785

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

    
829
var basicInfoBit = 1;
830
var submitterBit = 1;
831
var dsoBit = 1;
832
var apBit = 1;
833
var abstractBit = 1;
834
var keywordBit = 1;
835
var temporalBit = 1;
836
var spatialBit = 1;
837
var taxonomicBit = 1;
838
var methodBit = 1;
839
var dscBit = 1;
840
var distBit = 1;
841
var uploadBit = 1;
842

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

    
866
function handleOther(enable, node) {
867
    var textBox = document.getElementById(node);
868
    if (enable) {
869
        textBox.removeAttribute("disabled");   
870
    } else {
871
        textBox.value="";
872
        textBox.disabled = "true";   
873
    }
874
}
875

    
876
function copyContact() {
877
    var checkBox = document.getElementById("copyCheckBox");
878
    if (checkBox.checked == true)
879
    {
880
        var cnf = document.getElementById("contactNameFirst");
881
        var onf = document.getElementById("origNameFirst");
882
        cnf.value = onf.value;
883
        cnf.disabled = "true";
884

    
885
        var cnl = document.getElementById("contactNameLast");
886
        var onl = document.getElementById("origNameLast");
887
        cnl.value = onl.value;
888
        cnl.disabled = "true";
889

    
890
        var cno = document.getElementById("contactNameOrg");
891
        var ono = document.getElementById("origNameOrg");
892
        cno.value = ono.value;
893
        cno.disabled = "true";
894

    
895
        var ce = document.getElementById("contactEmail");
896
        var oe = document.getElementById("origEmail");
897
        ce.value = oe.value;
898
        ce.disabled = "true";
899

    
900
        var cp = document.getElementById("contactPhone");
901
        var op = document.getElementById("origPhone");
902
        cp.value = op.value;
903
        cp.disabled = "true";
904

    
905
        var cf = document.getElementById("contactFAX");
906
        var of = document.getElementById("origFAX");
907
        cf.value = of.value;
908
        cf.disabled = "true";
909

    
910
        var cd = document.getElementById("contactDelivery");
911
        var od = document.getElementById("origDelivery");
912
        cd.value = od.value;
913
        cd.disabled = "true";
914

    
915
        var cc = document.getElementById("contactCity");
916
        var oc = document.getElementById("origCity");
917
        cc.value = oc.value;
918
        cc.disabled = "true";
919

    
920
        var cs = document.getElementById("contactState");
921
        var os = document.getElementById("origState");
922
        cs.options[os.selectedIndex].selected = true;
923
        cs.disabled = "true";           
924

    
925
        var cso = document.getElementById("contactStateOther");
926
        var oso = document.getElementById("origStateOther");
927
        cso.value = oso.value;
928
        cso.disabled = "true";
929

    
930
        var cz = document.getElementById("contactZip");
931
        var oz = document.getElementById("origZip");
932
        cz.value = oz.value;
933
        cz.disabled = "true";
934

    
935
        var cC = document.getElementById("contactCountry");
936
        var oC = document.getElementById("origCountry");
937
        cC.value = oC.value;
938
        cC.disabled = "true";
939
    } else {
940
        var cnf = document.getElementById("contactNameFirst");
941
        cnf.value = "";
942
        cnf.removeAttribute("disabled");
943

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

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

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

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

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

    
964
        var cd = document.getElementById("contactDelivery");
965
        cd.value = "";
966
        cd.removeAttribute("disabled");
967

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

    
972
        var cs = document.getElementById("contactState");
973
              cs.options[0].selected = true;
974
        cs.removeAttribute("disabled");
975

    
976
        var cso = document.getElementById("contactStateOther");
977
        cso.value = "";
978
        cso.removeAttribute("disabled");
979

    
980
        var cz = document.getElementById("contactZip");
981
        cz.value = "";
982
        cz.removeAttribute("disabled");
983

    
984
        var cC = document.getElementById("contactCountry");
985
        cC.value = "";
986
        cC.removeAttribute("disabled");
987
    }
988
}
989

    
990
// include source for Multiple file uploader:
991
// http://the-stickman.com/web-development/javascript/
992

    
993
function MultiSelector(list_target, max) {
994

    
995
    this.list_target = list_target;
996
    this.count = 0;
997
    this.id = 0;
998
    var ucount =  document.getElementById("upCount");
999
    var fcount =  document.getElementById("fileCount");
1000
    if (fcount.value > 0) {
1001
        this.id = fcount.value;
1002
    } else {
1003
        // upCount contains pre-existing uploads, check this for editing existing packages
1004
        if (ucount.value > 0) {
1005
            this.id = ucount.value;
1006
            alert(this.id);
1007
        }
1008
    }
1009

    
1010
    if (max) {
1011
        this.max = max;
1012
    } else {
1013
      this.max = -1;
1014
    };
1015

    
1016
    /**
1017
     * Add a new file input element
1018
     */
1019
    this.addElement = function( element ) {
1020

    
1021
        // Make sure it's a file input element
1022
        if (element.tagName == 'INPUT' && element.type == 'file' ) {
1023
            // Element name -- what number am I?
1024
            element.name = 'file_' + this.id++;
1025

    
1026
            // Add reference to this object
1027
            element.multi_selector = this;
1028

    
1029
            // What to do when a file is selected
1030
            element.onchange = function() {
1031
            // Increment file counter
1032
            var fileCount = incrementCount("fileCount");
1033
                // Clean up file text
1034
                var comment_element = document.getElementById( 'file_comment' );
1035
                if (comment_element) {
1036
                    comment_element.parentNode.removeChild(comment_element);
1037
                }
1038

    
1039
                // New file input
1040
                var new_element = document.createElement( 'input' );
1041
                new_element.type = 'file';
1042

    
1043
                // Add new element
1044
                this.parentNode.insertBefore( new_element, this );
1045

    
1046
                // Apply 'update' to element
1047
                this.multi_selector.addElement( new_element );
1048

    
1049
                // Update list
1050
                this.multi_selector.addListRow( this );
1051

    
1052
                // Hide this: we can't use display:none because Safari doesn't like it
1053
                this.style.position = 'absolute';
1054
                this.style.left = '-1000px';
1055
            };
1056

    
1057
            // If we've reached maximum number, disable input element
1058
            if (this.max != -1 && this.count >= this.max ) {
1059
                element.disabled = true;
1060
            };
1061
            
1062
            // File element counter
1063
            this.count++;
1064

    
1065
            // Most recent element
1066
            this.current_element = element;
1067

    
1068
        } else {
1069
            // This can only be applied to file input elements!
1070
            alert( 'Error: not a file input element' );
1071
        };
1072
    };
1073

    
1074
    /**
1075
     * Add a new row to the list of files
1076
     */
1077
    this.addListRow = function( element ) {
1078
        // Row div
1079
        var new_row = document.createElement( 'div' );
1080

    
1081
        // Delete button
1082
        var new_row_button = document.createElement( 'input' );
1083
        new_row_button.type = 'button';
1084
        new_row_button.value = 'Delete';
1085

    
1086
        // Permissions check boxes
1087
        var radio_value_a = 'public';
1088
        var radio_value_b = 'private';
1089
        var new_radio_a = document.createElement('input');
1090
        var new_radio_b = document.createElement('input');
1091
        new_radio_a.type = new_radio_b.type = 'radio';
1092
        // get the file upload name, use the number to keep track of the file we're setting permissions on
1093
        new_radio_a.name = new_radio_b.name = 'uploadperm_' + element.name.split("_")[1];
1094
        new_radio_a.value = radio_value_a;
1095
        new_radio_b.value = radio_value_b;
1096
        new_radio_a.checked = false;
1097
        new_radio_b.checked = true; // when adding new files, default is private
1098
         
1099
        // References
1100
        new_row.element = element;
1101

    
1102
        // Delete function
1103
        new_row_button.onclick= function() {
1104
            // Remove element from form
1105
            this.parentNode.element.parentNode.removeChild( this.parentNode.element );
1106

    
1107
            // Remove this row from the list
1108
            this.parentNode.parentNode.removeChild( this.parentNode );
1109
            // Decrement counter
1110
            this.parentNode.element.multi_selector.count--;
1111

    
1112
            // Re-enable input element (if it's disabled)
1113
            this.parentNode.element.multi_selector.current_element.disabled = false;
1114

    
1115
            // Appease Safari
1116
            //    without it Safari wants to reload the browser window
1117
            //    which nixes your already queued uploads
1118
            return false;
1119
        };
1120
       
1121
        // filename may include path, show only file name itself
1122
        var name_pattern = element.value.replace(/.*[\/\\](.*)/, "$1");
1123

    
1124
        // Set row value
1125
        new_row.appendChild( document.createTextNode(name_pattern + " ") );
1126
        
1127
        // Add in radio buttons and their text
1128
        new_row.appendChild( new_radio_a );
1129
        new_row.appendChild( document.createTextNode(capitalize(radio_value_a) + " ") );
1130
        new_row.appendChild( new_radio_b );
1131
        new_row.appendChild( document.createTextNode(capitalize(radio_value_b) + " ") );
1132

    
1133
        // Add button
1134
        new_row.appendChild( new_row_button );
1135

    
1136
        // Add it to the list
1137
        this.list_target.appendChild( new_row );
1138
    };
1139

    
1140
};
1141

    
1142
// Append files to be deleted to an HTML array
1143
function deleteFile(evt, file) {
1144
    evt = (evt) ? evt : ((window.event) ? window.event : null);
1145
    if (evt) {
1146
        // equalize W3C/IE models to get event target reference
1147
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
1148
        var element = document.getElementById("file_element");
1149
        if (elem) {
1150
            try {
1151
                // Add a new hidden form element to delete exisiting files
1152
                var delete_existing = document.createElement( 'input' );
1153
                delete_existing.type = "hidden";
1154
                delete_existing.name = "deletefile"; // HTML array
1155
                delete_existing.value = file.name;
1156
                element.parentNode.appendChild( delete_existing );
1157

    
1158
                // Remove this row from the list
1159
                elem.parentNode.parentNode.removeChild( elem.parentNode );
1160
            } catch(e) {
1161
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
1162
                alert("Error:\n" + msg);
1163
                return;
1164
            }
1165
        }
1166
    }
1167
}
1168

    
1169
function capitalize(word) {
1170
    return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
1171
}
(3-3/24)