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("1","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 setCount(_count, val) {
212
    var countField = document.getElementById(_count);
213
    var count = countField.getAttribute("value");
214
    countField.setAttribute("value", val);
215
    return count;
216
}
217

    
218
/** 
219
 * Deprecated in favor of createIconLink() method
220
 * 
221
function createImageLink(imgSrc, imgAlt, imgOnClick, cursor) {
222
    var link = document.createElement("a");
223
    var img = document.createElement("img");
224
    img.setAttribute("src", imgSrc);
225
    img.setAttribute("alt", imgAlt);
226
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
227
        link.style.setAttribute("cursor", cursor);
228
        img.attachEvent("onclick", new Function(imgOnClick));
229
    } else {
230
        link.setAttribute("style", "cursor:"+cursor);
231
        img.setAttribute("onClick", imgOnClick);
232
    }
233
    img.setAttribute("border", "0");
234
    link.appendChild(img);        
235
    return link;
236
}
237
*/
238

    
239
function createIconLink(iconClass, iconAlt, iconOnClick, cursor) {
240
    var link = document.createElement("a");
241
    var icon = document.createElement("i");
242
    icon.setAttribute("class", iconClass);
243
    icon.setAttribute("alt", iconAlt);
244
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
245
        link.style.setAttribute("cursor", cursor);
246
        icon.attachEvent("onclick", new Function(iconOnClick));
247
    } else {
248
        link.setAttribute("style", "cursor:"+cursor);
249
        icon.setAttribute("onClick", iconOnClick);
250
    }
251
    link.appendChild(icon);        
252
    return link;
253
}
254

    
255

    
256
function createTD(colSpan, align, cursor) {
257
    var td = document.createElement("td");
258
    if (colSpan != "")
259
        td.setAttribute("colSpan", colSpan);
260
    td.setAttribute("align", align);
261
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
262
        td.style.setAttribute("cursor", cursor);
263
    } else {
264
        td.setAttribute("style", "cursor:"+cursor);
265
    }
266
    return td;
267
}
268

    
269

    
270
function cleanTextNodes(startTagId, endTagId) {
271
    var startTag = document.getElementById(startTagId);
272

    
273
    var bro = startTag.nextSibling;       
274

    
275
    while(bro) {
276
        if (bro.nodeName == "#text") {
277
            var temp = bro.nextSibling;
278
            bro.parentNode.removeChild(bro);
279
            bro = temp;
280
        } else {
281
            var id = bro.getAttribute("id");
282
            if (id == endTagId) {
283
              return;
284
            }
285
            bro = bro.nextSibling;
286
        }
287
    }
288

    
289
}
290

    
291
function delRow(evt) {
292
    evt = (evt) ? evt : ((window.event) ? window.event : null);
293
    if (evt) {
294
        // equalize W3C/IE models to get event target reference
295
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
296
        if (elem) {
297
            try {
298
                var table = elem.parentNode.parentNode.parentNode.parentNode;
299
                var row = elem.parentNode.parentNode.parentNode;
300

    
301
                table.removeChild(row);
302
            }
303
            catch(e) {
304
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
305
                alert("Error:\n" + msg);
306
                return;
307
            }
308
        }
309
    }
310
}
311

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

    
338
function moveDownRow(evt, lastTR) {
339
    evt = (evt) ? evt : ((window.event) ? window.event : null);
340
    if (evt) {
341
        // equalize W3C/IE models to get event target reference
342
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
343
        if (elem) {
344
            try {
345
                var table = elem.parentNode.parentNode.parentNode.parentNode;
346
                var row = elem.parentNode.parentNode.parentNode;
347
                
348
                var _test = row.nextSibling;
349
                if (_test.getAttribute("id") == lastTR) {
350
                    return;
351
                }
352
                var bro = row.nextSibling.nextSibling;
353
                if (bro != null && bro.nodeName =="TR") {
354
                    clone = row.cloneNode(true);
355
                    table.insertBefore(clone, bro);
356
                    table.removeChild(row);
357
                }
358
            }
359
            catch(e) {
360
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
361
                alert("Error:\n" + msg);
362
                return;
363
            }
364
        }
365
    }
366
}
367

    
368
function addAssociatedParty() {
369
    var AOLN   = document.getElementById("AONameLast");
370
    var AOFN   = document.getElementById("AONameFirst");
371
    var AORole = document.getElementById("AORole");
372

    
373
    if (AOLN.value != "") {
374
        var aoCount = incrementCount("aoCount");
375
        
376
        try {
377
            var aoRow = createAORow(aoCount, AOLN.value, AOFN.value, AORole.options[AORole.selectedIndex].text);
378
        } catch(e) {
379
            var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
380
            alert("Error:\n" + msg);
381
            return;
382
        }
383

    
384
        var aoRowMarker = document.getElementById("addaorow");
385
        var parent = aoRowMarker.parentNode;
386
        
387
        var aoHR = document.getElementById("aoHRRow");
388
        if (aoHR == null) {
389
            var aoHRRow = createHRRow();
390
            aoHRRow.setAttribute("id", "aoHRRow");
391
            parent.insertBefore(aoHRRow, aoRowMarker);
392
        }
393
        
394
        parent.insertBefore(aoRow, aoRowMarker);
395
    
396
        AOFN.value = "";
397
        AOLN.value = "";
398
        AORole.selectedIndex = 0;
399
    } else {
400
        alert("Enter the last name of the associated party");
401
    }
402
}
403

    
404
function createAORow(aoCount, AOLN, AOFN, AORole){    
405
    var TR = document.createElement("tr");
406
    TR.className='sectbody';
407
    var labelTD = createTD("5","left", "pointer");
408
    
409
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
410
        labelTD.attachEvent("onclick", new Function("aoEditRow(event, 0, \"" + AOFN  + "\",\""
411
                         + AOLN  + "\",\"" + AORole + "\")"));
412
    } else {
413
        labelTD.setAttribute("onClick","aoEditRow(event, 0, \"" + AOFN  + "\",\""
414
                         + AOLN  + "\",\"" + AORole + "\")");
415
    }
416

    
417
    var text   = AOFN + " " + AOLN + " (Role: " + AORole + ")";
418
    var label = document.createTextNode(text);
419

    
420
    labelTD.appendChild(label);
421
    labelTD.appendChild(createHiddenInput("aoFirstName", AOFN));
422
    labelTD.appendChild(createHiddenInput("aoLastName", AOLN));
423
    labelTD.appendChild(createHiddenInput("aoRole", AORole));
424
    
425
    var imgTD = createTD("","right");
426
    imgTD.className = 'rightCol';
427
        
428
    imgTD.appendChild(createIconLink("icon-arrow-up",
429
                                      "Move Up","moveUpRow(event)","pointer"));
430
    imgTD.appendChild(document.createTextNode(" "));
431
    imgTD.appendChild(createIconLink("icon-arrow-down",
432
                                      "Move Down", "moveDownRow(event, \"addaorow\")",
433
                                      "pointer"));
434
    imgTD.appendChild(document.createTextNode(" "));
435
    imgTD.appendChild(createIconLink("icon-remove-sign",
436
                                      "Delete", "delRow(event)",
437
                                      "pointer"));
438

    
439
    TR.appendChild(imgTD);
440
    TR.appendChild(labelTD);
441
    
442
    return TR;
443
}
444

    
445
function aoEditRow(evt, num,  AOFN ,  AOLN ,  AORole) {
446
    evt = (evt) ? evt : ((window.event) ? window.event : null);
447
    if (evt) {
448
        // equalize W3C/IE models to get event target reference
449
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
450
        if (elem && elem.nodeName == "TD") {
451
            try {
452
                var table = elem.parentNode;
453
                if (num == 0) {
454
                    table.removeChild(elem);
455
                    var TD = createTD("5","left", "pointer");
456
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
457
                        TD.attachEvent("onclick", new Function("aoEditRow(event, 1, \"" + AOFN  + "\",\""
458
                                                    + AOLN  + "\",\"" + AORole + "\")"));
459
                    } else {
460
                        TD.setAttribute("onClick","aoEditRow(event, 1, \"" + AOFN  + "\",\""
461
                                             + AOLN  + "\",\"" + AORole + "\")");
462
                    }                   
463
                    TD.appendChild(createTextField("aoFirstName", 15, AOFN));
464
                    TD.appendChild(document.createTextNode(" "));
465
                    TD.appendChild(createTextField("aoLastName", 15, AOLN));
466
                    TD.appendChild(document.createTextNode(" Role: "));
467
                    TD.appendChild(createAORoleTypeSelect("aoRole", AORole));
468
                    table.appendChild(TD);
469
                } else {
470
                    var child = elem.childNodes;
471
                    AOFN = child.item(0).value;
472
                    AOLN = child.item(2).value;
473
                    var _AORole = child.item(4);
474
                    AORole = _AORole.options[_AORole.selectedIndex].text;
475
                    table.removeChild(elem);
476

    
477
                    var TD = createTD("5","left", "pointer");
478
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
479
                        TD.attachEvent("onclick", new Function("aoEditRow(event, 0, \"" + AOFN  + "\",\""
480
                                                    + AOLN  + "\",\"" + AORole + "\")"));
481
                    } else {
482
                        TD.setAttribute("onClick","aoEditRow(event, 0, \"" + AOFN  + "\",\""
483
                                             + AOLN  + "\",\"" + AORole + "\")");
484
                    }
485
                    var text   = AOFN + " " + AOLN + " (Role: " + AORole + ")";
486
                    var label = document.createTextNode(text);
487
                    TD.appendChild(label);
488
                    TD.appendChild(createHiddenInput("aoFirstName", AOFN));
489
                    TD.appendChild(createHiddenInput("aoLastName", AOLN));
490
                    TD.appendChild(createHiddenInput("aoRole", AORole));
491
                    table.appendChild(TD);
492
                }
493
            } catch(e) {
494
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
495
                alert("Error:\n" + msg);
496
                return;
497
            }
498
        }
499
    }
500
}
501

    
502
function createAORoleTypeSelect(name, value) {
503
    var newField = document.createElement("select");
504
    newField.setAttribute("name", name);
505
    var option1 = document.createElement("option");
506
    var text1 = document.createTextNode("Co-owner");
507
    option1.appendChild(text1);
508
    newField.appendChild(option1);
509
    var option2 = document.createElement("option");
510
    var text2 = document.createTextNode("Custodian/Steward");
511
    option2.appendChild(text2);
512
    newField.appendChild(option2);
513
    var option3 = document.createElement("option");
514
    var text3 = document.createTextNode("Metadata Provider");
515
    option3.appendChild(text3);
516
    newField.appendChild(option3)
517
    var option4 = document.createElement("option");
518
    var text4 = document.createTextNode("User");
519
    option4.appendChild(text4);
520
    newField.appendChild(option4);
521
        
522
    if (value == "Co-owner") {
523
        newField.selectedIndex = 0;
524
    } else if (value == "Custodian/Steward") {
525
        newField.selectedIndex = 1;
526
    } else if (value == "Metadata Provider") {
527
        newField.selectedIndex = 2;
528
    } else if (value == "User") {
529
        newField.selectedIndex = 3;
530
    }
531

    
532
    return newField;
533
}
534

    
535
function addTaxon() {   
536
    var taxonRank   = document.getElementById("taxonRank");
537
    var taxonName   = document.getElementById("taxonName");
538

    
539
    if (taxonRank.value !="" && taxonName.value != "") {
540
        var taxonCount = incrementCount("taxaCount");
541
        var row = createTaxonRow(taxonCount, taxonRank.value, taxonName.value);
542
        var taxonRowMarker = document.getElementById("addtaxarow");
543
        var parent = taxonRowMarker.parentNode;
544
        
545
        var taxonHR = document.getElementById("taxonHRRow");
546
        if (taxonHR == null) {
547
            var taxonHRRow = createHRRow();
548
            taxonHRRow.setAttribute("id", "taxonHRRow");
549
            parent.insertBefore(taxonHRRow, taxonRowMarker);
550
        }
551
        
552
        parent.insertBefore(row, taxonRowMarker);
553

    
554
        taxonRank.value = "";
555
        taxonName.value = "";
556
    } else {
557
        alert("Enter complete taxonomic information");
558
    }
559
}
560

    
561
function createTaxonRow(taxonCount, taxonRank, taxonName){    
562
    var TR = document.createElement("tr");
563
    TR.className='sectbody';
564

    
565
    var labelTD = createTD("5","left", "pointer");
566
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
567
        labelTD.attachEvent("onclick",new Function("taxonEditRow(event, 0, \"" + taxonName
568
                         + "\",\"" + taxonRank  + "\")"));
569
    } else {
570
        labelTD.setAttribute("onClick","taxonEditRow(event, 0, \"" + taxonName
571
                         + "\",\"" + taxonRank  + "\")");
572
    }
573

    
574
    var text = "Rank: " + taxonRank + ", Name: " + taxonName;
575
    var label = document.createTextNode(text);
576

    
577
    labelTD.appendChild(label);
578
    labelTD.appendChild(createHiddenInput("taxonName", taxonName));
579
    labelTD.appendChild(createHiddenInput("taxonRank", taxonRank));
580
    
581
    var imgTD = createTD("","right");
582
    imgTD.className = 'rightCol';
583

    
584
    imgTD.appendChild(createIconLink("icon-arrow-up",
585
                                      "Move Up", "moveUpRow(event)",
586
                                      "pointer"));
587
    imgTD.appendChild(document.createTextNode(" "));
588
    imgTD.appendChild(createIconLink("icon-arrow-down",
589
                                      "Move Down", "moveDownRow(event, 'addtaxarow')",
590
                                      "pointer"));
591
    imgTD.appendChild(document.createTextNode(" "));
592
    imgTD.appendChild(createIconLink("icon-remove-sign",
593
                                      "Delete", "delRow(event)",
594
                                      "pointer"));
595

    
596
    TR.appendChild(imgTD);
597
    TR.appendChild(labelTD);
598
    
599
    return TR;
600
}
601

    
602
function taxonEditRow(evt, num,  taxonName ,  taxonRank) {
603
    evt = (evt) ? evt : ((window.event) ? window.event : null);
604
    if (evt) {
605
        // equalize W3C/IE models to get event target reference
606
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
607
        if (elem && elem.nodeName == "TD") {
608
            try {
609
                var table = elem.parentNode;
610
                if (num == 0) {
611
                    table.removeChild(elem);
612
                    var TD = createTD("5","left", "pointer");
613
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
614
                        TD.attachEvent("onclick",new Function("taxonEditRow(event, 1, \"" + taxonName
615
                                       + "\",\"" + taxonRank  + "\")"));
616
                    } else {
617
                        TD.setAttribute("onClick","taxonEditRow(event, 1, \"" + taxonName
618
                                        + "\",\"" + taxonRank  + "\")");
619
                    }
620
          
621
                    TD.appendChild(document.createTextNode("Rank: "));
622
                    TD.appendChild(createTextField("taxonName", 15, taxonName));
623
                    TD.appendChild(document.createTextNode(" Name: "));
624
                    TD.appendChild(createTextField("taxonRank", 15, taxonRank));
625
                    table.appendChild(TD);
626
                } else {
627
                    var child = elem.childNodes;
628
                    taxonName = child.item(1).value;
629
                    taxonRank = child.item(3).value;
630
                    table.removeChild(elem);
631

    
632
                    var TD = createTD("5","left", "pointer");
633
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
634
                        TD.attachEvent("onclick",new Function("taxonEditRow(event, 0, \"" + taxonName
635
                                       + "\",\"" + taxonRank  + "\")"));
636
                    } else {
637
                        TD.setAttribute("onClick","taxonEditRow(event, 0, \"" + taxonName
638
                                        + "\",\"" + taxonRank  + "\")");
639
                    }                        
640
                    var text = "Rank: " + taxonName + ", Name: " + taxonRank;
641
                    var label = document.createTextNode(text);
642
                    TD.appendChild(label);
643
                    TD.appendChild(createHiddenInput("taxonName", taxonName));
644
                    TD.appendChild(createHiddenInput("taxonRank", taxonRank));
645
                    table.appendChild(TD);
646
                }
647
            } catch(e) {
648
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
649
                alert("Error:\n" + msg);
650
                return;
651
            }
652
        }
653
    }
654
}
655

    
656
function addKeyword() {
657
    var keyword   = document.getElementById("keyword");
658
    var keywordType   = document.getElementById("keywordType");
659
    var keywordTh = document.getElementById("keywordTh");
660

    
661
    if (keyword.value !="") {
662
        var keyCount = incrementCount("keyCount");
663
        var keyRow = createKeywordRow(keyCount, keyword.value, 
664
                                      keywordType.options[keywordType.selectedIndex].text, 
665
                                      keywordTh.options[keywordTh.selectedIndex].text);
666
        var keyRowMarker = document.getElementById("addkeyrow");
667
        var parent = keyRowMarker.parentNode;
668
        
669
        var keyHR = document.getElementById("keywordHRRow");
670
        if (keyHR == null) {
671
            var keyHRRow = createHRRow();
672
            keyHRRow.setAttribute("id", "keywordHRRow");
673
            parent.insertBefore(keyHRRow, keyRowMarker);
674
        }
675
        
676
        parent.insertBefore(keyRow, keyRowMarker);
677
    
678
        keyword.value = "";
679
        keywordType.selectedIndex = 0;
680
        keywordTh.selectedIndex = 0;
681
    } else {
682
        alert("Enter keyword");
683
    }
684
}
685

    
686
function createKeywordRow(keyCount, keyword, keywordType, keywordTh){    
687
    var TR = document.createElement("tr");
688
    TR.className='sectbody';
689

    
690
    var labelTD = createTD("5","left", "pointer");
691
    
692
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
693
        labelTD.attachEvent("onclick", new Function("keywordEditRow(event, 0, \"" + keyword
694
            + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
695
    } else {
696
        labelTD.setAttribute("onClick","keywordEditRow(event, 0, \"" + keyword
697
            + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
698
    }
699
              
700
    var text   = keyword + " (Type: " + keywordType + ", Thesaurus: " + keywordTh + ")";
701
    var label = document.createTextNode(text);
702

    
703
    labelTD.appendChild(label);
704
    labelTD.appendChild(createHiddenInput("keyword", keyword));
705
    labelTD.appendChild(createHiddenInput("keywordType", keywordType));
706
    labelTD.appendChild(createHiddenInput("keywordTh", keywordTh));
707
    
708
    var imgTD = createTD("","right");
709
    imgTD.className = 'rightCol';
710

    
711
    imgTD.appendChild(createIconLink("icon-arrow-up",
712
                                      "Move Up", "moveUpRow(event)",
713
                                      "pointer"));
714
    imgTD.appendChild(document.createTextNode(" "));
715
    imgTD.appendChild(createIconLink("icon-arrow-down",
716
                                      "Move Down", "moveDownRow(event, 'addkeyrow')",
717
                                      "pointer"));
718
    imgTD.appendChild(document.createTextNode(" "));
719
    imgTD.appendChild(createIconLink("icon-remove-sign",
720
                                      "Delete", "delRow(event)",
721
                                      "pointer"));
722

    
723
    TR.appendChild(imgTD);
724
    TR.appendChild(labelTD);
725
    
726
    return TR;
727
}
728

    
729
function keywordEditRow(evt, num,  keyword,  keywordType, keywordTh) {
730
    evt = (evt) ? evt : ((window.event) ? window.event : null);
731
    if (evt) {
732
        // equalize W3C/IE models to get event target reference
733
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
734
        if (elem && elem.nodeName == "TD") {
735
            try {
736
                var table = elem.parentNode;
737
                if (num == 0) {
738
                    table.removeChild(elem);
739
                    var TD = createTD("5","left", "pointer");
740
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
741
                        TD.attachEvent("onclick", new Function("keywordEditRow(event, 1, \"" + keyword
742
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
743
                    } else {
744
                        TD.setAttribute("onClick","keywordEditRow(event, 1, \"" + keyword
745
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
746
                    }
747
                
748
                    TD.appendChild(createTextField("keyword", 15, keyword));
749
                    TD.appendChild(document.createTextNode(" Type: "));
750
                    TD.appendChild(createKeyTypeSelect("keywordType", keywordType));
751
                    TD.appendChild(document.createTextNode(" Thesaurus: "));
752
                    TD.appendChild(createKeyThSelect("keywordTh", keywordTh));
753
                    table.appendChild(TD);
754
                } else {
755
                    var child = elem.childNodes;
756
                    keyword = child.item(0).value;
757
                    var _keywordType = child.item(2);
758
                    keywordType = _keywordType.options[_keywordType.selectedIndex].text;
759
                    var _keywordTh = child.item(4);
760
                    keywordTh = _keywordTh.options[_keywordTh.selectedIndex].text;
761
                    table.removeChild(elem);
762

    
763
                    var TD = createTD("5","left", "pointer");
764
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
765
                        TD.attachEvent("onclick", new Function("keywordEditRow(event, 0, \"" + keyword
766
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
767
                    } else {
768
                        TD.setAttribute("onClick","keywordEditRow(event, 0, \"" + keyword
769
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
770
                    }
771
                
772
                    var text   = keyword + " (Type: " + keywordType + ", Thesaurus: " + keywordTh + ")";
773
                    var label = document.createTextNode(text);
774
                    TD.appendChild(label);
775
                    TD.appendChild(createHiddenInput("keyword", keyword));
776
                    TD.appendChild(createHiddenInput("keywordType", keywordType));
777
                    TD.appendChild(createHiddenInput("keywordTh", keywordTh));
778
                    table.appendChild(TD);
779
                }
780
            } catch(e) {
781
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
782
                alert("Error:\n" + msg);
783
                return;
784
            }
785
        }
786
    }
787
}
788

    
789
function createKeywordThesaurusRow(name) {        
790
    var keyRowTemplate = document.getElementById("keyThRow");
791
    var newField =  keyRowTemplate.cloneNode(true);
792
    var nodes = newField.getElementsByTagName("input");
793
    nodes.item(0).setAttribute("name", name);
794
    nodes.item(1).setAttribute("name", name);
795
    return newField;
796
}
797

    
798
function createKeyThSelect(name, value) {
799
    var newField = document.createElement("select");
800
    newField.setAttribute("name", name);
801
    var option1 = document.createElement("option");
802
    var text1 = document.createTextNode("None");
803
    option1.appendChild(text1);
804
    newField.appendChild(option1);
805
    var option2 = document.createElement("option");
806
    var text2 = document.createTextNode("GCMD");
807
    option2.appendChild(text2);
808
    newField.appendChild(option2);
809

    
810
    if (value == "None") {
811
        newField.selectedIndex = 0;
812
    } else if (value == "GCMD") {
813
        newField.selectedIndex = 1;
814
    }
815
    return newField;
816
}
817

    
818
function createKeyTypeSelect(name, value) {
819
    var newField = document.createElement("select");
820
    newField.setAttribute("name", name);
821
    var option1 = document.createElement("option");
822
    var text1 = document.createTextNode("None");
823
    option1.appendChild(text1);
824
    newField.appendChild(option1);
825
    var option2 = document.createElement("option");
826
    var text2 = document.createTextNode("Theme");
827
    option2.appendChild(text2);
828
    newField.appendChild(option2);
829
    var option3 = document.createElement("option");
830
    var text3 = document.createTextNode("Place");
831
    option3.appendChild(text3);
832
    newField.appendChild(option3)
833
    var option4 = document.createElement("option");
834
    var text4 = document.createTextNode("Stratum");
835
    option4.appendChild(text4);
836
    newField.appendChild(option4);
837
    var option5 = document.createElement("option");
838
    var text5 = document.createTextNode("Temporal");
839
    option5.appendChild(text5);
840
    newField.appendChild(option5);
841
    var option6 = document.createElement("option");
842
    var text6 = document.createTextNode("Taxonomic");
843
    option6.appendChild(text6);
844
    newField.appendChild(option6);        
845
    if (value == "None") {
846
        newField.selectedIndex = 0;
847
    } else if (value == "Theme") {
848
        newField.selectedIndex = 1;
849
    } else if (value == "Place") {
850
        newField.selectedIndex = 2;
851
    } else if (value == "Stratum") {
852
        newField.selectedIndex = 3;
853
    }else if (value == "Temporal") {
854
        newField.selectedIndex = 4;
855
    } else if (value == "Taxonomic") {
856
        newField.selectedIndex = 5;
857
    }
858
    return newField;
859
}
860

    
861
var basicInfoBit = 1;
862
var submitterBit = 1;
863
var dsoBit = 1;
864
var apBit = 1;
865
var abstractBit = 1;
866
var keywordBit = 1;
867
var temporalBit = 1;
868
var spatialBit = 1;
869
var taxonomicBit = 1;
870
var methodBit = 1;
871
var dscBit = 1;
872
var distBit = 1;
873
var uploadBit = 1;
874

    
875
function swap(evt, _node, nodeBit) {
876
    evt = (evt) ? evt : ((window.event) ? window.event : null);
877
    if (evt) {
878
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
879
        
880
        // hack so that this works on safari...
881
        if (elem.nodeName != 'A') {
882
            elem = elem.parentNode;
883
        }
884
        elem.removeChild(elem.firstChild);
885
        var node = document.getElementById(_node);
886
        if (nodeBit) {
887
            elem.appendChild(document.createTextNode("Show"));
888
            node.className="hide";
889
            return 0;
890
        } else {
891
            elem.appendChild(document.createTextNode("Hide"));
892
            node.className="tables";
893
            return 1;
894
        }
895
    }        
896
}
897

    
898
function handleOther(enable, node) {
899
    var textBox = document.getElementById(node);
900
    if (enable) {
901
        textBox.removeAttribute("disabled");   
902
    } else {
903
        textBox.value="";
904
        textBox.disabled = "true";   
905
    }
906
}
907

    
908
function copyContact() {
909
    var checkBox = document.getElementById("copyCheckBox");
910
    if (checkBox.checked == true)
911
    {
912
        var cnf = document.getElementById("contactNameFirst");
913
        var onf = document.getElementById("origNameFirst");
914
        cnf.value = onf.value;
915
        cnf.disabled = "true";
916

    
917
        var cnl = document.getElementById("contactNameLast");
918
        var onl = document.getElementById("origNameLast");
919
        cnl.value = onl.value;
920
        cnl.disabled = "true";
921

    
922
        var cno = document.getElementById("contactNameOrg");
923
        var ono = document.getElementById("origNameOrg");
924
        cno.value = ono.value;
925
        cno.disabled = "true";
926

    
927
        var ce = document.getElementById("contactEmail");
928
        var oe = document.getElementById("origEmail");
929
        ce.value = oe.value;
930
        ce.disabled = "true";
931

    
932
        var cp = document.getElementById("contactPhone");
933
        var op = document.getElementById("origPhone");
934
        cp.value = op.value;
935
        cp.disabled = "true";
936

    
937
        var cf = document.getElementById("contactFAX");
938
        var of = document.getElementById("origFAX");
939
        cf.value = of.value;
940
        cf.disabled = "true";
941

    
942
        var cd = document.getElementById("contactDelivery");
943
        var od = document.getElementById("origDelivery");
944
        cd.value = od.value;
945
        cd.disabled = "true";
946

    
947
        var cc = document.getElementById("contactCity");
948
        var oc = document.getElementById("origCity");
949
        cc.value = oc.value;
950
        cc.disabled = "true";
951

    
952
        var cs = document.getElementById("contactState");
953
        var os = document.getElementById("origState");
954
        cs.options[os.selectedIndex].selected = true;
955
        cs.disabled = "true";           
956

    
957
        var cso = document.getElementById("contactStateOther");
958
        var oso = document.getElementById("origStateOther");
959
        cso.value = oso.value;
960
        cso.disabled = "true";
961

    
962
        var cz = document.getElementById("contactZip");
963
        var oz = document.getElementById("origZip");
964
        cz.value = oz.value;
965
        cz.disabled = "true";
966

    
967
        var cC = document.getElementById("contactCountry");
968
        var oC = document.getElementById("origCountry");
969
        cC.value = oC.value;
970
        cC.disabled = "true";
971
    } else {
972
        var cnf = document.getElementById("contactNameFirst");
973
        cnf.value = "";
974
        cnf.removeAttribute("disabled");
975

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

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

    
984
        var ce = document.getElementById("contactEmail");
985
        ce.value = "";
986
        ce.removeAttribute("disabled");
987

    
988
        var cp = document.getElementById("contactPhone");
989
        cp.value = "";
990
        cp.removeAttribute("disabled");
991

    
992
        var cf = document.getElementById("contactFAX");
993
        cf.value = "";
994
        cf.removeAttribute("disabled");
995

    
996
        var cd = document.getElementById("contactDelivery");
997
        cd.value = "";
998
        cd.removeAttribute("disabled");
999

    
1000
        var cc = document.getElementById("contactCity");
1001
        cc.value = "";
1002
        cc.removeAttribute("disabled");
1003

    
1004
        var cs = document.getElementById("contactState");
1005
              cs.options[0].selected = true;
1006
        cs.removeAttribute("disabled");
1007

    
1008
        var cso = document.getElementById("contactStateOther");
1009
        cso.value = "";
1010
        cso.removeAttribute("disabled");
1011

    
1012
        var cz = document.getElementById("contactZip");
1013
        cz.value = "";
1014
        cz.removeAttribute("disabled");
1015

    
1016
        var cC = document.getElementById("contactCountry");
1017
        cC.value = "";
1018
        cC.removeAttribute("disabled");
1019
    }
1020
}
1021

    
1022
// include source for Multiple file uploader:
1023
// http://the-stickman.com/web-development/javascript/
1024

    
1025
function MultiSelector(list_target, max) {
1026

    
1027
    this.list_target = list_target;
1028
    this.count = 0;
1029
    this.id = 0;
1030
    var ucount =  document.getElementById("upCount");
1031
    var fcount =  document.getElementById("fileCount");
1032
    if (fcount.value > 0) {
1033
        this.id = fcount.value;
1034
    } else {
1035
        // upCount contains pre-existing uploads, check this for editing existing packages
1036
        if (ucount != null && ucount.value > 0) {
1037
            this.id = ucount.value;
1038
        }
1039
    }
1040

    
1041
    if (max) {
1042
        this.max = max;
1043
    } else {
1044
      this.max = -1;
1045
    };
1046

    
1047
    /**
1048
     * Add a new file input element
1049
     */
1050
    this.addElement = function( element ) {
1051

    
1052
        // Make sure it's a file input element
1053
        if (element.tagName == 'INPUT' && element.type == 'file' ) {
1054
            // Element name -- what number am I?
1055
            element.name = 'file_' + this.id++;
1056

    
1057
            // Add reference to this object
1058
            element.multi_selector = this;
1059

    
1060
            // What to do when a file is selected
1061
            element.onchange = function() {
1062
                // Increment file counter
1063
                var fileCount = incrementCount("fileCount");
1064
                // If pre-existing uploads exist, make sure the fileCount is synced
1065
                if (ucount != null && ucount.value > 0) {
1066
                    fileCount += ucount.value;
1067
                    setCount("fileCount", fileCount);
1068
                }
1069

    
1070
                // Clean up file text
1071
                var comment_element = document.getElementById( 'file_comment' );
1072
                if (comment_element) {
1073
                    comment_element.parentNode.removeChild(comment_element);
1074
                }
1075

    
1076
                // New file input
1077
                var new_element = document.createElement( 'input' );
1078
                new_element.type = 'file';
1079

    
1080
                // Add new element
1081
                this.parentNode.insertBefore( new_element, this );
1082

    
1083
                // Apply 'update' to element
1084
                this.multi_selector.addElement( new_element );
1085

    
1086
                // Update list
1087
                this.multi_selector.addListRow( this );
1088

    
1089
                // Hide this: we can't use display:none because Safari doesn't like it
1090
                this.style.position = 'absolute';
1091
                this.style.left = '-1000px';
1092
            };
1093

    
1094
            // If we've reached maximum number, disable input element
1095
            if (this.max != -1 && this.count >= this.max ) {
1096
                element.disabled = true;
1097
            };
1098
            
1099
            // File element counter
1100
            this.count++;
1101

    
1102
            // Most recent element
1103
            this.current_element = element;
1104

    
1105
        } else {
1106
            // This can only be applied to file input elements!
1107
            alert( 'Error: not a file input element' );
1108
        };
1109
    };
1110

    
1111
    /**
1112
     * Add a new row to the list of files
1113
     */
1114
    this.addListRow = function( element ) {
1115
        // Row div
1116
        var new_row = document.createElement( 'div' );
1117

    
1118
        // Delete button
1119
        var new_row_button = document.createElement( 'input' );
1120
        new_row_button.type = 'button';
1121
        new_row_button.value = 'Delete';
1122

    
1123
        // Permissions check boxes
1124
        var radio_value_a = 'public';
1125
        var radio_value_b = 'private';
1126
        var new_radio_a = document.createElement('input');
1127
        var new_radio_b = document.createElement('input');
1128
        new_radio_a.type = new_radio_b.type = 'radio';
1129
        // get the file upload name, use the number to keep track of the file we're setting permissions on
1130
        new_radio_a.name = new_radio_b.name = 'uploadperm_' + element.name.split("_")[1];
1131
        new_radio_a.value = radio_value_a;
1132
        new_radio_b.value = radio_value_b;
1133
        new_radio_a.checked = false;
1134
        new_radio_b.checked = true; // when adding new files, default is private
1135
         
1136
        // References
1137
        new_row.element = element;
1138

    
1139
        // Delete function
1140
        new_row_button.onclick= function() {
1141
            // Remove element from form
1142
            this.parentNode.element.parentNode.removeChild( this.parentNode.element );
1143

    
1144
            // Remove this row from the list
1145
            this.parentNode.parentNode.removeChild( this.parentNode );
1146
            // Decrement counter
1147
            this.parentNode.element.multi_selector.count--;
1148

    
1149
            // Re-enable input element (if it's disabled)
1150
            this.parentNode.element.multi_selector.current_element.disabled = false;
1151

    
1152
            // Appease Safari
1153
            //    without it Safari wants to reload the browser window
1154
            //    which nixes your already queued uploads
1155
            return false;
1156
        };
1157
       
1158
        // filename may include path, show only file name itself
1159
        var name_pattern = element.value.replace(/.*[\/\\](.*)/, "$1");
1160

    
1161
        // Set row value
1162
        new_row.appendChild( document.createTextNode(name_pattern + " ") );
1163
        
1164
        // Add in radio buttons and their text
1165
        new_row.appendChild( new_radio_a );
1166
        new_row.appendChild( document.createTextNode(capitalize(radio_value_a) + " ") );
1167
        new_row.appendChild( new_radio_b );
1168
        new_row.appendChild( document.createTextNode(capitalize(radio_value_b) + " ") );
1169

    
1170
        // Add button
1171
        new_row.appendChild( new_row_button );
1172

    
1173
        // Add it to the list
1174
        this.list_target.appendChild( new_row );
1175
    };
1176

    
1177
};
1178

    
1179
// Append files to be deleted to an HTML array
1180
function deleteFile(evt, file) {
1181
    evt = (evt) ? evt : ((window.event) ? window.event : null);
1182
    if (evt) {
1183
        // equalize W3C/IE models to get event target reference
1184
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
1185
        var element = document.getElementById("file_element");
1186
        if (elem) {
1187
            try {
1188
                // Add a new hidden form element to delete exisiting files
1189
                var delete_existing = document.createElement( 'input' );
1190
                delete_existing.type = "hidden";
1191
                delete_existing.name = "deletefile"; // HTML array
1192
                delete_existing.value = file.name;
1193
                element.parentNode.appendChild( delete_existing );
1194

    
1195
                // Remove this row from the list
1196
                elem.parentNode.parentNode.removeChild( elem.parentNode );
1197
            } catch(e) {
1198
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
1199
                alert("Error:\n" + msg);
1200
                return;
1201
            }
1202
        }
1203
    }
1204
}
1205

    
1206
function capitalize(word) {
1207
    return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
1208
}
(3-3/10)