Project

General

Profile

1 7867 leinfelder
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 7972 leinfelder
    newParaWidget.className="span8";
13 7867 leinfelder
    newParaWidget.setAttribute("name", "methodPara");
14
15
    var TR = document.createElement("tr");
16
    TR.className='sectbody';
17 7920 leinfelder
    var TD = createTD("1","left");
18 7867 leinfelder
    var emptyTD = createTD("","right");
19
    TD.appendChild(newParaWidget);
20 7920 leinfelder
    //TR.appendChild(emptyTD);
21 7867 leinfelder
    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 7966 leinfelder
    button.setAttribute("type", "button");
47
    button.setAttribute("class", "btn");
48 7867 leinfelder
    button.setAttribute("value", "Add Paragraph to Method Description");
49
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
50
        button.attachEvent("onclick", new Function("addParagraph("+ index + ", '" + buttonId + "')"));
51
    } else {
52
        button.setAttribute("onclick", "addParagraph("+ index +", '" + buttonId + "')");
53
    }
54
    TD.appendChild(button);
55
    TR.appendChild(labelTD);
56
    TR.appendChild(TD);
57
    return TR;
58
}
59
60
function  addMethodTitle() {
61
    var TR = document.createElement("tr");
62
    TR.className='sectbody';
63
    var labelTD = createTD("","right");
64
    labelTD.appendChild(document.createTextNode("Method Title"));
65
    var TD = createTD("5","left");
66
    var textField = document.createElement("input");
67
    textField.setAttribute("type", "text");
68
    textField.setAttribute("name", "methodTitle");
69
    textField.className="longwidth";
70
    TD.appendChild(textField);
71
    TR.appendChild(labelTD);
72
    TR.appendChild(TD);
73
    return TR;
74
}
75
76
function  addMethodDescription(index) {
77
    var TR = document.createElement("tr");
78
    TR.className='sectbody';
79
    var labelTD = createTD("","right");
80
    labelTD.setAttribute("vAlign","top");
81
    labelTD.appendChild(document.createTextNode("Method Description"));
82
    var TD = createTD("5","left");
83
    var textArea = document.createElement("textarea");
84
    textArea.setAttribute("name", "methodPara"+index);
85
    textArea.setAttribute("rows", 6);
86 7972 leinfelder
    textArea.className="span8";
87 7867 leinfelder
    TD.appendChild(textArea);
88
    TR.appendChild(labelTD);
89
    TR.appendChild(TD);
90
    return TR;
91
}
92
93
function createTextField(name, size, value) {
94
    var newField = document.createElement("input");
95
    newField.setAttribute("type", "text");
96
    newField.setAttribute("name", name);
97
    newField.setAttribute("size", size);
98
    newField.value = value;
99
    return newField;
100
}
101
102
function createTextRow(count, varName, labelText, value) {
103
    var textField = createTextField(varName + count, "30", value);
104
    var row = createRow(count, textField, labelText);
105
    return row;
106
}
107
108
function createRow(count, elem, labelText) {
109
    var textTD = createTD("5");
110
    textTD.appendChild(elem);
111
112
    var labelTD = createTD("","right");
113
114
    var labelSpan = document.createElement("span");
115
    labelSpan.className = 'label';
116
117
    var label = document.createTextNode(labelText);
118
    labelSpan.appendChild(label);
119
    labelTD.appendChild(labelSpan);
120
121
    var TR = document.createElement("tr");
122
    TR.className='sectbody';
123
    TR.appendChild(labelTD);
124
    TR.appendChild(textTD);
125
126
    return TR;
127
}
128
129
function createHRRow() {
130
    var hrCell = createTD("6");
131
    var hr = document.createElement("hr");
132
    hr.setAttribute("width", "85%");
133
    hrCell.appendChild(hr);
134
135
    var hrTR = document.createElement("tr");
136
    hrTR.className = 'sectbody';
137
    hrTR.appendChild(hrCell);
138
139
    return hrTR;
140
}
141
142
function createHiddenInput(name, value) {
143
    var elem = document.createElement("input");
144
    elem.setAttribute("type", "hidden");
145
    elem.setAttribute("name", name);
146
    elem.setAttribute("value", value);
147
    return elem
148
}
149
150
function sortInputTags() {
151
    sortTagWithAttributeName("aoFirstName", "addAssociatedParty");
152
    sortTagWithAttributeName("aoLastName", "addAssociatedParty");
153
    sortTagWithAttributeName("aoRole", "addAssociatedParty", "select");
154
155
    sortTagWithAttributeName("taxonName", "addTaxon");
156
    sortTagWithAttributeName("taxonRank", "addTaxon");
157
158
    sortTagWithAttributeName("keyword", "addKeyword");
159
    sortTagWithAttributeName("keywordType", "addKeyword");
160
    sortTagWithAttributeName("keywordTh", "addKeyword");
161
}
162
163
164
function sortTagWithAttributeName(tag, afterTag, parentTag) {
165
    var elem = document.getElementById(afterTag);
166 8728 walker
167
    elem = elem.nextSibling;
168
169
    while (elem && elem.nodeName == "TR") {
170 7867 leinfelder
    var nodes = elem.getElementsByTagName("input");
171
        for(var i = 0; i < nodes.length; i++) {
172
            var node = nodes.item(i);
173
            if (node.getAttribute("name")==tag) {
174
                    var parent = node.parentNode;
175
                    var clone = node.cloneNode(true);
176
                    parent.removeChild(node);
177
                    parent.appendChild(clone);
178
            }
179
        }
180
        if (parentTag != null) {
181
            var nodes = elem.getElementsByTagName(parentTag);
182
            for(var i = 0; i < nodes.length; i++) {
183
                var node = nodes.item(i);
184
                if (node.getAttribute("name")==tag) {
185
                        var parent = node.parentNode;
186
                        var clone = node.cloneNode(true);
187
                        clone.value = node.value;
188
                        parent.removeChild(node);
189
                        parent.appendChild(clone);
190
                }
191
            }
192
        }
193
        elem = elem.nextSibling;
194
    }
195
}
196
197
function incrementCount(_count) {
198
    var countField = document.getElementById(_count);
199
    var count = countField.getAttribute("value");
200
    count++;
201
    countField.setAttribute("value", count);
202
    return count;
203
}
204
205
function decrementCount(_count) {
206
    var countField = document.getElementById(_count);
207
    var count = countField.getAttribute("value");
208
    count--;
209
    countField.setAttribute("value", count);
210
    return count;
211
}
212
213
function setCount(_count, val) {
214
    var countField = document.getElementById(_count);
215
    var count = countField.getAttribute("value");
216
    countField.setAttribute("value", val);
217
    return count;
218
}
219
220 7964 leinfelder
/**
221
 * Deprecated in favor of createIconLink() method
222
 *
223 7867 leinfelder
function createImageLink(imgSrc, imgAlt, imgOnClick, cursor) {
224
    var link = document.createElement("a");
225
    var img = document.createElement("img");
226
    img.setAttribute("src", imgSrc);
227
    img.setAttribute("alt", imgAlt);
228
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
229
        link.style.setAttribute("cursor", cursor);
230
        img.attachEvent("onclick", new Function(imgOnClick));
231
    } else {
232
        link.setAttribute("style", "cursor:"+cursor);
233
        img.setAttribute("onClick", imgOnClick);
234
    }
235
    img.setAttribute("border", "0");
236
    link.appendChild(img);
237
    return link;
238
}
239 7964 leinfelder
*/
240 7867 leinfelder
241 7959 leinfelder
function createIconLink(iconClass, iconAlt, iconOnClick, cursor) {
242
    var link = document.createElement("a");
243
    var icon = document.createElement("i");
244
    icon.setAttribute("class", iconClass);
245
    icon.setAttribute("alt", iconAlt);
246
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
247
        link.style.setAttribute("cursor", cursor);
248
        icon.attachEvent("onclick", new Function(iconOnClick));
249
    } else {
250
        link.setAttribute("style", "cursor:"+cursor);
251
        icon.setAttribute("onClick", iconOnClick);
252
    }
253
    link.appendChild(icon);
254
    return link;
255
}
256 7867 leinfelder
257 7959 leinfelder
258 7867 leinfelder
function createTD(colSpan, align, cursor) {
259
    var td = document.createElement("td");
260
    if (colSpan != "")
261
        td.setAttribute("colSpan", colSpan);
262
    td.setAttribute("align", align);
263
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
264
        td.style.setAttribute("cursor", cursor);
265
    } else {
266
        td.setAttribute("style", "cursor:"+cursor);
267
    }
268
    return td;
269
}
270
271
272
function cleanTextNodes(startTagId, endTagId) {
273
    var startTag = document.getElementById(startTagId);
274
275
    var bro = startTag.nextSibling;
276
277
    while(bro) {
278
        if (bro.nodeName == "#text") {
279
            var temp = bro.nextSibling;
280
            bro.parentNode.removeChild(bro);
281
            bro = temp;
282
        } else {
283
            var id = bro.getAttribute("id");
284
            if (id == endTagId) {
285
              return;
286
            }
287
            bro = bro.nextSibling;
288
        }
289
    }
290
291
}
292
293
function delRow(evt) {
294
    evt = (evt) ? evt : ((window.event) ? window.event : null);
295
    if (evt) {
296
        // equalize W3C/IE models to get event target reference
297
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
298
        if (elem) {
299
            try {
300
                var table = elem.parentNode.parentNode.parentNode.parentNode;
301
                var row = elem.parentNode.parentNode.parentNode;
302
303
                table.removeChild(row);
304
            }
305
            catch(e) {
306
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
307
                alert("Error:\n" + msg);
308
                return;
309
            }
310
        }
311
    }
312
}
313
314
function moveUpRow(evt) {
315
    evt = (evt) ? evt : ((window.event) ? window.event : null);
316
    if (evt) {
317
        // equalize W3C/IE models to get event target reference
318
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
319
        if (elem) {
320
            try {
321
                var table = elem.parentNode.parentNode.parentNode.parentNode;
322
                var row = elem.parentNode.parentNode.parentNode;
323
324
                var bro = row.previousSibling;
325
                if (bro != null && bro.previousSibling.nodeName =="TR") {
326
                    clone = row.cloneNode(true);
327
                    table.insertBefore(clone, bro);
328
                    table.removeChild(row);
329
                }
330
            }
331
            catch(e) {
332
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
333
                alert("Error:\n" + msg);
334
                return;
335
            }
336
        }
337
    }
338
}
339
340
function moveDownRow(evt, lastTR) {
341
    evt = (evt) ? evt : ((window.event) ? window.event : null);
342
    if (evt) {
343
        // equalize W3C/IE models to get event target reference
344
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
345
        if (elem) {
346
            try {
347
                var table = elem.parentNode.parentNode.parentNode.parentNode;
348
                var row = elem.parentNode.parentNode.parentNode;
349
350
                var _test = row.nextSibling;
351
                if (_test.getAttribute("id") == lastTR) {
352
                    return;
353
                }
354
                var bro = row.nextSibling.nextSibling;
355
                if (bro != null && bro.nodeName =="TR") {
356
                    clone = row.cloneNode(true);
357
                    table.insertBefore(clone, bro);
358
                    table.removeChild(row);
359
                }
360
            }
361
            catch(e) {
362
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
363
                alert("Error:\n" + msg);
364
                return;
365
            }
366
        }
367
    }
368
}
369
370
function addAssociatedParty() {
371
    var AOLN   = document.getElementById("AONameLast");
372
    var AOFN   = document.getElementById("AONameFirst");
373
    var AORole = document.getElementById("AORole");
374
375
    if (AOLN.value != "") {
376
        var aoCount = incrementCount("aoCount");
377
378
        try {
379
            var aoRow = createAORow(aoCount, AOLN.value, AOFN.value, AORole.options[AORole.selectedIndex].text);
380
        } catch(e) {
381
            var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
382
            alert("Error:\n" + msg);
383
            return;
384
        }
385
386
        var aoRowMarker = document.getElementById("addaorow");
387
        var parent = aoRowMarker.parentNode;
388
389
        var aoHR = document.getElementById("aoHRRow");
390
        if (aoHR == null) {
391
            var aoHRRow = createHRRow();
392
            aoHRRow.setAttribute("id", "aoHRRow");
393
            parent.insertBefore(aoHRRow, aoRowMarker);
394
        }
395
396
        parent.insertBefore(aoRow, aoRowMarker);
397
398
        AOFN.value = "";
399
        AOLN.value = "";
400
        AORole.selectedIndex = 0;
401
    } else {
402
        alert("Enter the last name of the associated party");
403
    }
404
}
405
406
function createAORow(aoCount, AOLN, AOFN, AORole){
407
    var TR = document.createElement("tr");
408
    TR.className='sectbody';
409
    var labelTD = createTD("5","left", "pointer");
410
411
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
412
        labelTD.attachEvent("onclick", new Function("aoEditRow(event, 0, \"" + AOFN  + "\",\""
413
                         + AOLN  + "\",\"" + AORole + "\")"));
414
    } else {
415
        labelTD.setAttribute("onClick","aoEditRow(event, 0, \"" + AOFN  + "\",\""
416
                         + AOLN  + "\",\"" + AORole + "\")");
417
    }
418
419
    var text   = AOFN + " " + AOLN + " (Role: " + AORole + ")";
420
    var label = document.createTextNode(text);
421
422
    labelTD.appendChild(label);
423
    labelTD.appendChild(createHiddenInput("aoFirstName", AOFN));
424
    labelTD.appendChild(createHiddenInput("aoLastName", AOLN));
425
    labelTD.appendChild(createHiddenInput("aoRole", AORole));
426
427
    var imgTD = createTD("","right");
428
    imgTD.className = 'rightCol';
429
430 7959 leinfelder
    imgTD.appendChild(createIconLink("icon-arrow-up",
431 7867 leinfelder
                                      "Move Up","moveUpRow(event)","pointer"));
432
    imgTD.appendChild(document.createTextNode(" "));
433 7959 leinfelder
    imgTD.appendChild(createIconLink("icon-arrow-down",
434 7867 leinfelder
                                      "Move Down", "moveDownRow(event, \"addaorow\")",
435
                                      "pointer"));
436
    imgTD.appendChild(document.createTextNode(" "));
437 7959 leinfelder
    imgTD.appendChild(createIconLink("icon-remove-sign",
438 7867 leinfelder
                                      "Delete", "delRow(event)",
439
                                      "pointer"));
440
441
    TR.appendChild(imgTD);
442
    TR.appendChild(labelTD);
443
444
    return TR;
445
}
446
447
function aoEditRow(evt, num,  AOFN ,  AOLN ,  AORole) {
448
    evt = (evt) ? evt : ((window.event) ? window.event : null);
449
    if (evt) {
450
        // equalize W3C/IE models to get event target reference
451
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
452
        if (elem && elem.nodeName == "TD") {
453
            try {
454
                var table = elem.parentNode;
455
                if (num == 0) {
456
                    table.removeChild(elem);
457
                    var TD = createTD("5","left", "pointer");
458
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
459
                        TD.attachEvent("onclick", new Function("aoEditRow(event, 1, \"" + AOFN  + "\",\""
460
                                                    + AOLN  + "\",\"" + AORole + "\")"));
461
                    } else {
462
                        TD.setAttribute("onClick","aoEditRow(event, 1, \"" + AOFN  + "\",\""
463
                                             + AOLN  + "\",\"" + AORole + "\")");
464
                    }
465
                    TD.appendChild(createTextField("aoFirstName", 15, AOFN));
466
                    TD.appendChild(document.createTextNode(" "));
467
                    TD.appendChild(createTextField("aoLastName", 15, AOLN));
468
                    TD.appendChild(document.createTextNode(" Role: "));
469
                    TD.appendChild(createAORoleTypeSelect("aoRole", AORole));
470
                    table.appendChild(TD);
471
                } else {
472
                    var child = elem.childNodes;
473
                    AOFN = child.item(0).value;
474
                    AOLN = child.item(2).value;
475
                    var _AORole = child.item(4);
476
                    AORole = _AORole.options[_AORole.selectedIndex].text;
477
                    table.removeChild(elem);
478
479
                    var TD = createTD("5","left", "pointer");
480
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
481
                        TD.attachEvent("onclick", new Function("aoEditRow(event, 0, \"" + AOFN  + "\",\""
482
                                                    + AOLN  + "\",\"" + AORole + "\")"));
483
                    } else {
484
                        TD.setAttribute("onClick","aoEditRow(event, 0, \"" + AOFN  + "\",\""
485
                                             + AOLN  + "\",\"" + AORole + "\")");
486
                    }
487
                    var text   = AOFN + " " + AOLN + " (Role: " + AORole + ")";
488
                    var label = document.createTextNode(text);
489
                    TD.appendChild(label);
490
                    TD.appendChild(createHiddenInput("aoFirstName", AOFN));
491
                    TD.appendChild(createHiddenInput("aoLastName", AOLN));
492
                    TD.appendChild(createHiddenInput("aoRole", AORole));
493
                    table.appendChild(TD);
494
                }
495
            } catch(e) {
496
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
497
                alert("Error:\n" + msg);
498
                return;
499
            }
500
        }
501
    }
502
}
503
504
function createAORoleTypeSelect(name, value) {
505
    var newField = document.createElement("select");
506
    newField.setAttribute("name", name);
507
    var option1 = document.createElement("option");
508
    var text1 = document.createTextNode("Co-owner");
509
    option1.appendChild(text1);
510
    newField.appendChild(option1);
511
    var option2 = document.createElement("option");
512
    var text2 = document.createTextNode("Custodian/Steward");
513
    option2.appendChild(text2);
514
    newField.appendChild(option2);
515
    var option3 = document.createElement("option");
516
    var text3 = document.createTextNode("Metadata Provider");
517
    option3.appendChild(text3);
518
    newField.appendChild(option3)
519
    var option4 = document.createElement("option");
520
    var text4 = document.createTextNode("User");
521
    option4.appendChild(text4);
522
    newField.appendChild(option4);
523
524
    if (value == "Co-owner") {
525
        newField.selectedIndex = 0;
526
    } else if (value == "Custodian/Steward") {
527
        newField.selectedIndex = 1;
528
    } else if (value == "Metadata Provider") {
529
        newField.selectedIndex = 2;
530
    } else if (value == "User") {
531
        newField.selectedIndex = 3;
532
    }
533
534
    return newField;
535
}
536
537
function addTaxon() {
538
    var taxonRank   = document.getElementById("taxonRank");
539
    var taxonName   = document.getElementById("taxonName");
540
541
    if (taxonRank.value !="" && taxonName.value != "") {
542
        var taxonCount = incrementCount("taxaCount");
543
        var row = createTaxonRow(taxonCount, taxonRank.value, taxonName.value);
544
        var taxonRowMarker = document.getElementById("addtaxarow");
545
        var parent = taxonRowMarker.parentNode;
546
547
        var taxonHR = document.getElementById("taxonHRRow");
548
        if (taxonHR == null) {
549
            var taxonHRRow = createHRRow();
550
            taxonHRRow.setAttribute("id", "taxonHRRow");
551
            parent.insertBefore(taxonHRRow, taxonRowMarker);
552
        }
553
554
        parent.insertBefore(row, taxonRowMarker);
555
556
        taxonRank.value = "";
557
        taxonName.value = "";
558
    } else {
559
        alert("Enter complete taxonomic information");
560
    }
561
}
562
563
function createTaxonRow(taxonCount, taxonRank, taxonName){
564
    var TR = document.createElement("tr");
565
    TR.className='sectbody';
566
567
    var labelTD = createTD("5","left", "pointer");
568
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
569
        labelTD.attachEvent("onclick",new Function("taxonEditRow(event, 0, \"" + taxonName
570
                         + "\",\"" + taxonRank  + "\")"));
571
    } else {
572
        labelTD.setAttribute("onClick","taxonEditRow(event, 0, \"" + taxonName
573
                         + "\",\"" + taxonRank  + "\")");
574
    }
575
576
    var text = "Rank: " + taxonRank + ", Name: " + taxonName;
577
    var label = document.createTextNode(text);
578
579
    labelTD.appendChild(label);
580
    labelTD.appendChild(createHiddenInput("taxonName", taxonName));
581
    labelTD.appendChild(createHiddenInput("taxonRank", taxonRank));
582
583
    var imgTD = createTD("","right");
584
    imgTD.className = 'rightCol';
585
586 7960 leinfelder
    imgTD.appendChild(createIconLink("icon-arrow-up",
587 7867 leinfelder
                                      "Move Up", "moveUpRow(event)",
588
                                      "pointer"));
589
    imgTD.appendChild(document.createTextNode(" "));
590 7960 leinfelder
    imgTD.appendChild(createIconLink("icon-arrow-down",
591 7867 leinfelder
                                      "Move Down", "moveDownRow(event, 'addtaxarow')",
592
                                      "pointer"));
593
    imgTD.appendChild(document.createTextNode(" "));
594 7960 leinfelder
    imgTD.appendChild(createIconLink("icon-remove-sign",
595 7867 leinfelder
                                      "Delete", "delRow(event)",
596
                                      "pointer"));
597
598
    TR.appendChild(imgTD);
599
    TR.appendChild(labelTD);
600
601
    return TR;
602
}
603
604
function taxonEditRow(evt, num,  taxonName ,  taxonRank) {
605
    evt = (evt) ? evt : ((window.event) ? window.event : null);
606
    if (evt) {
607
        // equalize W3C/IE models to get event target reference
608
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
609
        if (elem && elem.nodeName == "TD") {
610
            try {
611
                var table = elem.parentNode;
612
                if (num == 0) {
613
                    table.removeChild(elem);
614
                    var TD = createTD("5","left", "pointer");
615
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
616
                        TD.attachEvent("onclick",new Function("taxonEditRow(event, 1, \"" + taxonName
617
                                       + "\",\"" + taxonRank  + "\")"));
618
                    } else {
619
                        TD.setAttribute("onClick","taxonEditRow(event, 1, \"" + taxonName
620
                                        + "\",\"" + taxonRank  + "\")");
621
                    }
622
623
                    TD.appendChild(document.createTextNode("Rank: "));
624
                    TD.appendChild(createTextField("taxonName", 15, taxonName));
625
                    TD.appendChild(document.createTextNode(" Name: "));
626
                    TD.appendChild(createTextField("taxonRank", 15, taxonRank));
627
                    table.appendChild(TD);
628
                } else {
629
                    var child = elem.childNodes;
630
                    taxonName = child.item(1).value;
631
                    taxonRank = child.item(3).value;
632
                    table.removeChild(elem);
633
634
                    var TD = createTD("5","left", "pointer");
635
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
636
                        TD.attachEvent("onclick",new Function("taxonEditRow(event, 0, \"" + taxonName
637
                                       + "\",\"" + taxonRank  + "\")"));
638
                    } else {
639
                        TD.setAttribute("onClick","taxonEditRow(event, 0, \"" + taxonName
640
                                        + "\",\"" + taxonRank  + "\")");
641
                    }
642
                    var text = "Rank: " + taxonName + ", Name: " + taxonRank;
643
                    var label = document.createTextNode(text);
644
                    TD.appendChild(label);
645
                    TD.appendChild(createHiddenInput("taxonName", taxonName));
646
                    TD.appendChild(createHiddenInput("taxonRank", taxonRank));
647
                    table.appendChild(TD);
648
                }
649
            } catch(e) {
650
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
651
                alert("Error:\n" + msg);
652
                return;
653
            }
654
        }
655
    }
656
}
657
658
function addKeyword() {
659
    var keyword   = document.getElementById("keyword");
660
    var keywordType   = document.getElementById("keywordType");
661
    var keywordTh = document.getElementById("keywordTh");
662
663
    if (keyword.value !="") {
664
        var keyCount = incrementCount("keyCount");
665
        var keyRow = createKeywordRow(keyCount, keyword.value,
666
                                      keywordType.options[keywordType.selectedIndex].text,
667
                                      keywordTh.options[keywordTh.selectedIndex].text);
668
        var keyRowMarker = document.getElementById("addkeyrow");
669
        var parent = keyRowMarker.parentNode;
670
671
        var keyHR = document.getElementById("keywordHRRow");
672
        if (keyHR == null) {
673
            var keyHRRow = createHRRow();
674
            keyHRRow.setAttribute("id", "keywordHRRow");
675
            parent.insertBefore(keyHRRow, keyRowMarker);
676
        }
677
678
        parent.insertBefore(keyRow, keyRowMarker);
679
680
        keyword.value = "";
681
        keywordType.selectedIndex = 0;
682
        keywordTh.selectedIndex = 0;
683
    } else {
684
        alert("Enter keyword");
685
    }
686
}
687
688
function createKeywordRow(keyCount, keyword, keywordType, keywordTh){
689
    var TR = document.createElement("tr");
690
    TR.className='sectbody';
691
692
    var labelTD = createTD("5","left", "pointer");
693
694
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
695
        labelTD.attachEvent("onclick", new Function("keywordEditRow(event, 0, \"" + keyword
696
            + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
697
    } else {
698
        labelTD.setAttribute("onClick","keywordEditRow(event, 0, \"" + keyword
699
            + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
700
    }
701
702
    var text   = keyword + " (Type: " + keywordType + ", Thesaurus: " + keywordTh + ")";
703
    var label = document.createTextNode(text);
704
705
    labelTD.appendChild(label);
706
    labelTD.appendChild(createHiddenInput("keyword", keyword));
707
    labelTD.appendChild(createHiddenInput("keywordType", keywordType));
708
    labelTD.appendChild(createHiddenInput("keywordTh", keywordTh));
709
710
    var imgTD = createTD("","right");
711
    imgTD.className = 'rightCol';
712
713 7964 leinfelder
    imgTD.appendChild(createIconLink("icon-arrow-up",
714 7867 leinfelder
                                      "Move Up", "moveUpRow(event)",
715
                                      "pointer"));
716
    imgTD.appendChild(document.createTextNode(" "));
717 7960 leinfelder
    imgTD.appendChild(createIconLink("icon-arrow-down",
718 7867 leinfelder
                                      "Move Down", "moveDownRow(event, 'addkeyrow')",
719
                                      "pointer"));
720
    imgTD.appendChild(document.createTextNode(" "));
721 7960 leinfelder
    imgTD.appendChild(createIconLink("icon-remove-sign",
722 7867 leinfelder
                                      "Delete", "delRow(event)",
723
                                      "pointer"));
724
725
    TR.appendChild(imgTD);
726
    TR.appendChild(labelTD);
727
728
    return TR;
729
}
730
731
function keywordEditRow(evt, num,  keyword,  keywordType, keywordTh) {
732
    evt = (evt) ? evt : ((window.event) ? window.event : null);
733
    if (evt) {
734
        // equalize W3C/IE models to get event target reference
735
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
736
        if (elem && elem.nodeName == "TD") {
737
            try {
738
                var table = elem.parentNode;
739
                if (num == 0) {
740
                    table.removeChild(elem);
741
                    var TD = createTD("5","left", "pointer");
742
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
743
                        TD.attachEvent("onclick", new Function("keywordEditRow(event, 1, \"" + keyword
744
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
745
                    } else {
746
                        TD.setAttribute("onClick","keywordEditRow(event, 1, \"" + keyword
747
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
748
                    }
749
750
                    TD.appendChild(createTextField("keyword", 15, keyword));
751
                    TD.appendChild(document.createTextNode(" Type: "));
752
                    TD.appendChild(createKeyTypeSelect("keywordType", keywordType));
753
                    TD.appendChild(document.createTextNode(" Thesaurus: "));
754
                    TD.appendChild(createKeyThSelect("keywordTh", keywordTh));
755
                    table.appendChild(TD);
756
                } else {
757
                    var child = elem.childNodes;
758
                    keyword = child.item(0).value;
759
                    var _keywordType = child.item(2);
760
                    keywordType = _keywordType.options[_keywordType.selectedIndex].text;
761
                    var _keywordTh = child.item(4);
762
                    keywordTh = _keywordTh.options[_keywordTh.selectedIndex].text;
763
                    table.removeChild(elem);
764
765
                    var TD = createTD("5","left", "pointer");
766
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
767
                        TD.attachEvent("onclick", new Function("keywordEditRow(event, 0, \"" + keyword
768
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
769
                    } else {
770
                        TD.setAttribute("onClick","keywordEditRow(event, 0, \"" + keyword
771
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
772
                    }
773
774
                    var text   = keyword + " (Type: " + keywordType + ", Thesaurus: " + keywordTh + ")";
775
                    var label = document.createTextNode(text);
776
                    TD.appendChild(label);
777
                    TD.appendChild(createHiddenInput("keyword", keyword));
778
                    TD.appendChild(createHiddenInput("keywordType", keywordType));
779
                    TD.appendChild(createHiddenInput("keywordTh", keywordTh));
780
                    table.appendChild(TD);
781
                }
782
            } catch(e) {
783
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
784
                alert("Error:\n" + msg);
785
                return;
786
            }
787
        }
788
    }
789
}
790
791
function createKeywordThesaurusRow(name) {
792
    var keyRowTemplate = document.getElementById("keyThRow");
793
    var newField =  keyRowTemplate.cloneNode(true);
794
    var nodes = newField.getElementsByTagName("input");
795
    nodes.item(0).setAttribute("name", name);
796
    nodes.item(1).setAttribute("name", name);
797
    return newField;
798
}
799
800
function createKeyThSelect(name, value) {
801
    var newField = document.createElement("select");
802
    newField.setAttribute("name", name);
803
    var option1 = document.createElement("option");
804
    var text1 = document.createTextNode("None");
805
    option1.appendChild(text1);
806
    newField.appendChild(option1);
807
    var option2 = document.createElement("option");
808
    var text2 = document.createTextNode("GCMD");
809
    option2.appendChild(text2);
810
    newField.appendChild(option2);
811
812
    if (value == "None") {
813
        newField.selectedIndex = 0;
814
    } else if (value == "GCMD") {
815
        newField.selectedIndex = 1;
816
    }
817
    return newField;
818
}
819
820
function createKeyTypeSelect(name, value) {
821
    var newField = document.createElement("select");
822
    newField.setAttribute("name", name);
823
    var option1 = document.createElement("option");
824
    var text1 = document.createTextNode("None");
825
    option1.appendChild(text1);
826
    newField.appendChild(option1);
827
    var option2 = document.createElement("option");
828
    var text2 = document.createTextNode("Theme");
829
    option2.appendChild(text2);
830
    newField.appendChild(option2);
831
    var option3 = document.createElement("option");
832
    var text3 = document.createTextNode("Place");
833
    option3.appendChild(text3);
834
    newField.appendChild(option3)
835
    var option4 = document.createElement("option");
836
    var text4 = document.createTextNode("Stratum");
837
    option4.appendChild(text4);
838
    newField.appendChild(option4);
839
    var option5 = document.createElement("option");
840
    var text5 = document.createTextNode("Temporal");
841
    option5.appendChild(text5);
842
    newField.appendChild(option5);
843
    var option6 = document.createElement("option");
844
    var text6 = document.createTextNode("Taxonomic");
845
    option6.appendChild(text6);
846
    newField.appendChild(option6);
847
    if (value == "None") {
848
        newField.selectedIndex = 0;
849
    } else if (value == "Theme") {
850
        newField.selectedIndex = 1;
851
    } else if (value == "Place") {
852
        newField.selectedIndex = 2;
853
    } else if (value == "Stratum") {
854
        newField.selectedIndex = 3;
855
    }else if (value == "Temporal") {
856
        newField.selectedIndex = 4;
857
    } else if (value == "Taxonomic") {
858
        newField.selectedIndex = 5;
859
    }
860
    return newField;
861
}
862
863
var basicInfoBit = 1;
864
var submitterBit = 1;
865
var dsoBit = 1;
866
var apBit = 1;
867
var abstractBit = 1;
868
var keywordBit = 1;
869
var temporalBit = 1;
870
var spatialBit = 1;
871
var taxonomicBit = 1;
872
var methodBit = 1;
873
var dscBit = 1;
874
var distBit = 1;
875
var uploadBit = 1;
876
877
function swap(evt, _node, nodeBit) {
878
    evt = (evt) ? evt : ((window.event) ? window.event : null);
879
    if (evt) {
880
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
881
882
        // hack so that this works on safari...
883
        if (elem.nodeName != 'A') {
884
            elem = elem.parentNode;
885
        }
886
        elem.removeChild(elem.firstChild);
887
        var node = document.getElementById(_node);
888
        if (nodeBit) {
889
            elem.appendChild(document.createTextNode("Show"));
890
            node.className="hide";
891
            return 0;
892
        } else {
893
            elem.appendChild(document.createTextNode("Hide"));
894
            node.className="tables";
895
            return 1;
896
        }
897
    }
898
}
899
900
function handleOther(enable, node) {
901
    var textBox = document.getElementById(node);
902
    if (enable) {
903
        textBox.removeAttribute("disabled");
904
    } else {
905
        textBox.value="";
906
        textBox.disabled = "true";
907
    }
908
}
909
910
function copyContact() {
911
    var checkBox = document.getElementById("copyCheckBox");
912
    if (checkBox.checked == true)
913
    {
914
        var cnf = document.getElementById("contactNameFirst");
915
        var onf = document.getElementById("origNameFirst");
916
        cnf.value = onf.value;
917
        cnf.disabled = "true";
918
919
        var cnl = document.getElementById("contactNameLast");
920
        var onl = document.getElementById("origNameLast");
921
        cnl.value = onl.value;
922
        cnl.disabled = "true";
923
924
        var cno = document.getElementById("contactNameOrg");
925
        var ono = document.getElementById("origNameOrg");
926
        cno.value = ono.value;
927
        cno.disabled = "true";
928
929
        var ce = document.getElementById("contactEmail");
930
        var oe = document.getElementById("origEmail");
931
        ce.value = oe.value;
932
        ce.disabled = "true";
933
934
        var cp = document.getElementById("contactPhone");
935
        var op = document.getElementById("origPhone");
936
        cp.value = op.value;
937
        cp.disabled = "true";
938
939
        var cf = document.getElementById("contactFAX");
940
        var of = document.getElementById("origFAX");
941
        cf.value = of.value;
942
        cf.disabled = "true";
943
944
        var cd = document.getElementById("contactDelivery");
945
        var od = document.getElementById("origDelivery");
946
        cd.value = od.value;
947
        cd.disabled = "true";
948
949
        var cc = document.getElementById("contactCity");
950
        var oc = document.getElementById("origCity");
951
        cc.value = oc.value;
952
        cc.disabled = "true";
953
954
        var cs = document.getElementById("contactState");
955
        var os = document.getElementById("origState");
956
        cs.options[os.selectedIndex].selected = true;
957
        cs.disabled = "true";
958
959
        var cso = document.getElementById("contactStateOther");
960
        var oso = document.getElementById("origStateOther");
961
        cso.value = oso.value;
962
        cso.disabled = "true";
963
964
        var cz = document.getElementById("contactZip");
965
        var oz = document.getElementById("origZip");
966
        cz.value = oz.value;
967
        cz.disabled = "true";
968
969
        var cC = document.getElementById("contactCountry");
970
        var oC = document.getElementById("origCountry");
971
        cC.value = oC.value;
972
        cC.disabled = "true";
973
    } else {
974
        var cnf = document.getElementById("contactNameFirst");
975
        cnf.value = "";
976
        cnf.removeAttribute("disabled");
977
978
        var cnl = document.getElementById("contactNameLast");
979
        cnl.value = "";
980
        cnl.removeAttribute("disabled");
981
982
        var cno = document.getElementById("contactNameOrg");
983
        cno.value = "";
984
        cno.removeAttribute("disabled");
985
986
        var ce = document.getElementById("contactEmail");
987
        ce.value = "";
988
        ce.removeAttribute("disabled");
989
990
        var cp = document.getElementById("contactPhone");
991
        cp.value = "";
992
        cp.removeAttribute("disabled");
993
994
        var cf = document.getElementById("contactFAX");
995
        cf.value = "";
996
        cf.removeAttribute("disabled");
997
998
        var cd = document.getElementById("contactDelivery");
999
        cd.value = "";
1000
        cd.removeAttribute("disabled");
1001
1002
        var cc = document.getElementById("contactCity");
1003
        cc.value = "";
1004
        cc.removeAttribute("disabled");
1005
1006
        var cs = document.getElementById("contactState");
1007
              cs.options[0].selected = true;
1008
        cs.removeAttribute("disabled");
1009
1010
        var cso = document.getElementById("contactStateOther");
1011
        cso.value = "";
1012
        cso.removeAttribute("disabled");
1013
1014
        var cz = document.getElementById("contactZip");
1015
        cz.value = "";
1016
        cz.removeAttribute("disabled");
1017
1018
        var cC = document.getElementById("contactCountry");
1019
        cC.value = "";
1020
        cC.removeAttribute("disabled");
1021
    }
1022
}
1023
1024
// include source for Multiple file uploader:
1025
// http://the-stickman.com/web-development/javascript/
1026
1027
function MultiSelector(list_target, max) {
1028
1029
    this.list_target = list_target;
1030
    this.count = 0;
1031
    this.id = 0;
1032
    var ucount =  document.getElementById("upCount");
1033
    var fcount =  document.getElementById("fileCount");
1034
    if (fcount.value > 0) {
1035
        this.id = fcount.value;
1036
    } else {
1037
        // upCount contains pre-existing uploads, check this for editing existing packages
1038
        if (ucount != null && ucount.value > 0) {
1039
            this.id = ucount.value;
1040
        }
1041
    }
1042
1043
    if (max) {
1044
        this.max = max;
1045
    } else {
1046
      this.max = -1;
1047
    };
1048
1049
    /**
1050
     * Add a new file input element
1051
     */
1052
    this.addElement = function( element ) {
1053
1054
        // Make sure it's a file input element
1055
        if (element.tagName == 'INPUT' && element.type == 'file' ) {
1056
            // Element name -- what number am I?
1057
            element.name = 'file_' + this.id++;
1058
1059
            // Add reference to this object
1060
            element.multi_selector = this;
1061
1062
            // What to do when a file is selected
1063
            element.onchange = function() {
1064
                // Increment file counter
1065
                var fileCount = incrementCount("fileCount");
1066
                // If pre-existing uploads exist, make sure the fileCount is synced
1067
                if (ucount != null && ucount.value > 0) {
1068
                    fileCount += ucount.value;
1069
                    setCount("fileCount", fileCount);
1070
                }
1071
1072
                // Clean up file text
1073
                var comment_element = document.getElementById( 'file_comment' );
1074
                if (comment_element) {
1075
                    comment_element.parentNode.removeChild(comment_element);
1076
                }
1077
1078
                // New file input
1079
                var new_element = document.createElement( 'input' );
1080
                new_element.type = 'file';
1081
1082
                // Add new element
1083
                this.parentNode.insertBefore( new_element, this );
1084
1085
                // Apply 'update' to element
1086
                this.multi_selector.addElement( new_element );
1087
1088
                // Update list
1089
                this.multi_selector.addListRow( this );
1090
1091
                // Hide this: we can't use display:none because Safari doesn't like it
1092
                this.style.position = 'absolute';
1093
                this.style.left = '-1000px';
1094
            };
1095
1096
            // If we've reached maximum number, disable input element
1097
            if (this.max != -1 && this.count >= this.max ) {
1098
                element.disabled = true;
1099
            };
1100
1101
            // File element counter
1102
            this.count++;
1103
1104
            // Most recent element
1105
            this.current_element = element;
1106
1107
        } else {
1108
            // This can only be applied to file input elements!
1109
            alert( 'Error: not a file input element' );
1110
        };
1111
    };
1112
1113
    /**
1114
     * Add a new row to the list of files
1115
     */
1116
    this.addListRow = function( element ) {
1117
        // Row div
1118
        var new_row = document.createElement( 'div' );
1119
1120
        // Delete button
1121
        var new_row_button = document.createElement( 'input' );
1122
        new_row_button.type = 'button';
1123 7966 leinfelder
        new_row_button.setAttribute("class", "btn");
1124 7867 leinfelder
        new_row_button.value = 'Delete';
1125
1126
        // Permissions check boxes
1127
        var radio_value_a = 'public';
1128
        var radio_value_b = 'private';
1129
        var new_radio_a = document.createElement('input');
1130
        var new_radio_b = document.createElement('input');
1131
        new_radio_a.type = new_radio_b.type = 'radio';
1132
        // get the file upload name, use the number to keep track of the file we're setting permissions on
1133
        new_radio_a.name = new_radio_b.name = 'uploadperm_' + element.name.split("_")[1];
1134
        new_radio_a.value = radio_value_a;
1135
        new_radio_b.value = radio_value_b;
1136
        new_radio_a.checked = false;
1137
        new_radio_b.checked = true; // when adding new files, default is private
1138
1139
        // References
1140
        new_row.element = element;
1141
1142
        // Delete function
1143
        new_row_button.onclick= function() {
1144
            // Remove element from form
1145
            this.parentNode.element.parentNode.removeChild( this.parentNode.element );
1146
1147
            // Remove this row from the list
1148
            this.parentNode.parentNode.removeChild( this.parentNode );
1149
            // Decrement counter
1150
            this.parentNode.element.multi_selector.count--;
1151
1152
            // Re-enable input element (if it's disabled)
1153
            this.parentNode.element.multi_selector.current_element.disabled = false;
1154
1155
            // Appease Safari
1156
            //    without it Safari wants to reload the browser window
1157
            //    which nixes your already queued uploads
1158
            return false;
1159
        };
1160
1161
        // filename may include path, show only file name itself
1162
        var name_pattern = element.value.replace(/.*[\/\\](.*)/, "$1");
1163
1164
        // Set row value
1165
        new_row.appendChild( document.createTextNode(name_pattern + " ") );
1166
1167
        // Add in radio buttons and their text
1168
        new_row.appendChild( new_radio_a );
1169
        new_row.appendChild( document.createTextNode(capitalize(radio_value_a) + " ") );
1170
        new_row.appendChild( new_radio_b );
1171
        new_row.appendChild( document.createTextNode(capitalize(radio_value_b) + " ") );
1172
1173
        // Add button
1174
        new_row.appendChild( new_row_button );
1175
1176
        // Add it to the list
1177
        this.list_target.appendChild( new_row );
1178
    };
1179
1180
};
1181
1182
// Append files to be deleted to an HTML array
1183
function deleteFile(evt, file) {
1184
    evt = (evt) ? evt : ((window.event) ? window.event : null);
1185
    if (evt) {
1186
        // equalize W3C/IE models to get event target reference
1187
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
1188
        var element = document.getElementById("file_element");
1189
        if (elem) {
1190
            try {
1191
                // Add a new hidden form element to delete exisiting files
1192
                var delete_existing = document.createElement( 'input' );
1193
                delete_existing.type = "hidden";
1194
                delete_existing.name = "deletefile"; // HTML array
1195
                delete_existing.value = file.name;
1196
                element.parentNode.appendChild( delete_existing );
1197
1198
                // Remove this row from the list
1199
                elem.parentNode.parentNode.removeChild( elem.parentNode );
1200
            } catch(e) {
1201
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
1202
                alert("Error:\n" + msg);
1203
                return;
1204
            }
1205
        }
1206
    }
1207
}
1208
1209
function capitalize(word) {
1210
    return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
1211
}