Project

General

Profile

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
125
    return TR;
126
}
127

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

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

    
138
    return hrTR;
139
}
140

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

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

    
162

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

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

    
204
function decrementCount(_count) {
205
    var countField = document.getElementById(_count);
206
    var count = countField.getAttribute("value");
207
    count--;
208
    countField.setAttribute("value", count);
209
    return count;
210
}
211

    
212
function setCount(_count, val) {
213
    var countField = document.getElementById(_count);
214
    var count = countField.getAttribute("value");
215
    countField.setAttribute("value", val);
216
    return count;
217
}
218

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

    
236

    
237
function createTD(colSpan, align, cursor) {
238
    var td = document.createElement("td");
239
    if (colSpan != "")
240
        td.setAttribute("colSpan", colSpan);
241
    td.setAttribute("align", align);
242
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
243
        td.style.setAttribute("cursor", cursor);
244
    } else {
245
        td.setAttribute("style", "cursor:"+cursor);
246
    }
247
    return td;
248
}
249

    
250

    
251
function cleanTextNodes(startTagId, endTagId) {
252
    var startTag = document.getElementById(startTagId);
253

    
254
    var bro = startTag.nextSibling;       
255

    
256
    while(bro) {
257
        if (bro.nodeName == "#text") {
258
            var temp = bro.nextSibling;
259
            bro.parentNode.removeChild(bro);
260
            bro = temp;
261
        } else {
262
            var id = bro.getAttribute("id");
263
            if (id == endTagId) {
264
              return;
265
            }
266
            bro = bro.nextSibling;
267
        }
268
    }
269

    
270
}
271

    
272
function delRow(evt) {
273
    evt = (evt) ? evt : ((window.event) ? window.event : null);
274
    if (evt) {
275
        // equalize W3C/IE models to get event target reference
276
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
277
        if (elem) {
278
            try {
279
                var table = elem.parentNode.parentNode.parentNode.parentNode;
280
                var row = elem.parentNode.parentNode.parentNode;
281

    
282
                table.removeChild(row);
283
            }
284
            catch(e) {
285
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
286
                alert("Error:\n" + msg);
287
                return;
288
            }
289
        }
290
    }
291
}
292

    
293
function moveUpRow(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
                var bro = row.previousSibling;
304
                if (bro != null && bro.previousSibling.nodeName =="TR") {
305
                    clone = row.cloneNode(true);
306
                    table.insertBefore(clone, bro);
307
                    table.removeChild(row);
308
                }
309
            }
310
            catch(e) {
311
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
312
                alert("Error:\n" + msg);
313
                return;
314
            }
315
        }
316
    }
317
}
318

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

    
349
function addAssociatedParty() {
350
    var AOLN   = document.getElementById("AONameLast");
351
    var AOFN   = document.getElementById("AONameFirst");
352
    var AORole = document.getElementById("AORole");
353

    
354
    if (AOLN.value != "") {
355
        var aoCount = incrementCount("aoCount");
356
        
357
        try {
358
            var aoRow = createAORow(aoCount, AOLN.value, AOFN.value, AORole.options[AORole.selectedIndex].text);
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
        var aoRowMarker = document.getElementById("addaorow");
366
        var parent = aoRowMarker.parentNode;
367
        
368
        var aoHR = document.getElementById("aoHRRow");
369
        if (aoHR == null) {
370
            var aoHRRow = createHRRow();
371
            aoHRRow.setAttribute("id", "aoHRRow");
372
            parent.insertBefore(aoHRRow, aoRowMarker);
373
        }
374
        
375
        parent.insertBefore(aoRow, aoRowMarker);
376
    
377
        AOFN.value = "";
378
        AOLN.value = "";
379
        AORole.selectedIndex = 0;
380
    } else {
381
        alert("Enter the last name of the associated party");
382
    }
383
}
384

    
385
function createAORow(aoCount, AOLN, AOFN, AORole){    
386
    var TR = document.createElement("tr");
387
    TR.className='sectbody';
388
    var labelTD = createTD("5","left", "pointer");
389
    
390
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
391
        labelTD.attachEvent("onclick", new Function("aoEditRow(event, 0, \"" + AOFN  + "\",\""
392
                         + AOLN  + "\",\"" + AORole + "\")"));
393
    } else {
394
        labelTD.setAttribute("onClick","aoEditRow(event, 0, \"" + AOFN  + "\",\""
395
                         + AOLN  + "\",\"" + AORole + "\")");
396
    }
397

    
398
    var text   = AOFN + " " + AOLN + " (Role: " + AORole + ")";
399
    var label = document.createTextNode(text);
400

    
401
    labelTD.appendChild(label);
402
    labelTD.appendChild(createHiddenInput("aoFirstName", AOFN));
403
    labelTD.appendChild(createHiddenInput("aoLastName", AOLN));
404
    labelTD.appendChild(createHiddenInput("aoRole", AORole));
405
    
406
    var imgTD = createTD("","right");
407
    imgTD.className = 'rightCol';
408
        
409
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/previous.gif",
410
                                      "Move Up","moveUpRow(event)","pointer"));
411
    imgTD.appendChild(document.createTextNode(" "));
412
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/next.gif",
413
                                      "Move Down", "moveDownRow(event, \"addaorow\")",
414
                                      "pointer"));
415
    imgTD.appendChild(document.createTextNode(" "));
416
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/delete.gif",
417
                                      "Delete", "delRow(event)",
418
                                      "pointer"));
419

    
420
    TR.appendChild(imgTD);
421
    TR.appendChild(labelTD);
422
    
423
    return TR;
424
}
425

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

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

    
483
function createAORoleTypeSelect(name, value) {
484
    var newField = document.createElement("select");
485
    newField.setAttribute("name", name);
486
    var option1 = document.createElement("option");
487
    var text1 = document.createTextNode("Co-owner");
488
    option1.appendChild(text1);
489
    newField.appendChild(option1);
490
    var option2 = document.createElement("option");
491
    var text2 = document.createTextNode("Custodian/Steward");
492
    option2.appendChild(text2);
493
    newField.appendChild(option2);
494
    var option3 = document.createElement("option");
495
    var text3 = document.createTextNode("Metadata Provider");
496
    option3.appendChild(text3);
497
    newField.appendChild(option3)
498
    var option4 = document.createElement("option");
499
    var text4 = document.createTextNode("User");
500
    option4.appendChild(text4);
501
    newField.appendChild(option4);
502
        
503
    if (value == "Co-owner") {
504
        newField.selectedIndex = 0;
505
    } else if (value == "Custodian/Steward") {
506
        newField.selectedIndex = 1;
507
    } else if (value == "Metadata Provider") {
508
        newField.selectedIndex = 2;
509
    } else if (value == "User") {
510
        newField.selectedIndex = 3;
511
    }
512

    
513
    return newField;
514
}
515

    
516
function addTaxon() {   
517
    var taxonRank   = document.getElementById("taxonRank");
518
    var taxonName   = document.getElementById("taxonName");
519

    
520
    if (taxonRank.value !="" && taxonName.value != "") {
521
        var taxonCount = incrementCount("taxaCount");
522
        var row = createTaxonRow(taxonCount, taxonRank.value, taxonName.value);
523
        var taxonRowMarker = document.getElementById("addtaxarow");
524
        var parent = taxonRowMarker.parentNode;
525
        
526
        var taxonHR = document.getElementById("taxonHRRow");
527
        if (taxonHR == null) {
528
            var taxonHRRow = createHRRow();
529
            taxonHRRow.setAttribute("id", "taxonHRRow");
530
            parent.insertBefore(taxonHRRow, taxonRowMarker);
531
        }
532
        
533
        parent.insertBefore(row, taxonRowMarker);
534

    
535
        taxonRank.value = "";
536
        taxonName.value = "";
537
    } else {
538
        alert("Enter complete taxonomic information");
539
    }
540
}
541

    
542
function createTaxonRow(taxonCount, taxonRank, taxonName){    
543
    var TR = document.createElement("tr");
544
    TR.className='sectbody';
545

    
546
    var labelTD = createTD("5","left", "pointer");
547
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
548
        labelTD.attachEvent("onclick",new Function("taxonEditRow(event, 0, \"" + taxonName
549
                         + "\",\"" + taxonRank  + "\")"));
550
    } else {
551
        labelTD.setAttribute("onClick","taxonEditRow(event, 0, \"" + taxonName
552
                         + "\",\"" + taxonRank  + "\")");
553
    }
554

    
555
    var text = "Rank: " + taxonRank + ", Name: " + taxonName;
556
    var label = document.createTextNode(text);
557

    
558
    labelTD.appendChild(label);
559
    labelTD.appendChild(createHiddenInput("taxonName", taxonName));
560
    labelTD.appendChild(createHiddenInput("taxonRank", taxonRank));
561
    
562
    var imgTD = createTD("","right");
563
    imgTD.className = 'rightCol';
564

    
565
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/previous.gif",
566
                                      "Move Up", "moveUpRow(event)",
567
                                      "pointer"));
568
    imgTD.appendChild(document.createTextNode(" "));
569
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/next.gif",
570
                                      "Move Down", "moveDownRow(event, 'addtaxarow')",
571
                                      "pointer"));
572
    imgTD.appendChild(document.createTextNode(" "));
573
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/delete.gif",
574
                                      "Delete", "delRow(event)",
575
                                      "pointer"));
576

    
577
    TR.appendChild(imgTD);
578
    TR.appendChild(labelTD);
579
    
580
    return TR;
581
}
582

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

    
613
                    var TD = createTD("5","left", "pointer");
614
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
615
                        TD.attachEvent("onclick",new Function("taxonEditRow(event, 0, \"" + taxonName
616
                                       + "\",\"" + taxonRank  + "\")"));
617
                    } else {
618
                        TD.setAttribute("onClick","taxonEditRow(event, 0, \"" + taxonName
619
                                        + "\",\"" + taxonRank  + "\")");
620
                    }                        
621
                    var text = "Rank: " + taxonName + ", Name: " + taxonRank;
622
                    var label = document.createTextNode(text);
623
                    TD.appendChild(label);
624
                    TD.appendChild(createHiddenInput("taxonName", taxonName));
625
                    TD.appendChild(createHiddenInput("taxonRank", taxonRank));
626
                    table.appendChild(TD);
627
                }
628
            } catch(e) {
629
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
630
                alert("Error:\n" + msg);
631
                return;
632
            }
633
        }
634
    }
635
}
636

    
637
function addKeyword() {
638
    var keyword   = document.getElementById("keyword");
639
    var keywordType   = document.getElementById("keywordType");
640
    var keywordTh = document.getElementById("keywordTh");
641

    
642
    if (keyword.value !="") {
643
        var keyCount = incrementCount("keyCount");
644
        var keyRow = createKeywordRow(keyCount, keyword.value, 
645
                                      keywordType.options[keywordType.selectedIndex].text, 
646
                                      keywordTh.options[keywordTh.selectedIndex].text);
647
        var keyRowMarker = document.getElementById("addkeyrow");
648
        var parent = keyRowMarker.parentNode;
649
        
650
        var keyHR = document.getElementById("keywordHRRow");
651
        if (keyHR == null) {
652
            var keyHRRow = createHRRow();
653
            keyHRRow.setAttribute("id", "keywordHRRow");
654
            parent.insertBefore(keyHRRow, keyRowMarker);
655
        }
656
        
657
        parent.insertBefore(keyRow, keyRowMarker);
658
    
659
        keyword.value = "";
660
        keywordType.selectedIndex = 0;
661
        keywordTh.selectedIndex = 0;
662
    } else {
663
        alert("Enter keyword");
664
    }
665
}
666

    
667
function createKeywordRow(keyCount, keyword, keywordType, keywordTh){    
668
    var TR = document.createElement("tr");
669
    TR.className='sectbody';
670

    
671
    var labelTD = createTD("5","left", "pointer");
672
    
673
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
674
        labelTD.attachEvent("onclick", new Function("keywordEditRow(event, 0, \"" + keyword
675
            + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
676
    } else {
677
        labelTD.setAttribute("onClick","keywordEditRow(event, 0, \"" + keyword
678
            + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
679
    }
680
              
681
    var text   = keyword + " (Type: " + keywordType + ", Thesaurus: " + keywordTh + ")";
682
    var label = document.createTextNode(text);
683

    
684
    labelTD.appendChild(label);
685
    labelTD.appendChild(createHiddenInput("keyword", keyword));
686
    labelTD.appendChild(createHiddenInput("keywordType", keywordType));
687
    labelTD.appendChild(createHiddenInput("keywordTh", keywordTh));
688
    
689
    var imgTD = createTD("","right");
690
    imgTD.className = 'rightCol';
691

    
692
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/previous.gif",
693
                                      "Move Up", "moveUpRow(event)",
694
                                      "pointer"));
695
    imgTD.appendChild(document.createTextNode(" "));
696
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/next.gif",
697
                                      "Move Down", "moveDownRow(event, 'addkeyrow')",
698
                                      "pointer"));
699
    imgTD.appendChild(document.createTextNode(" "));
700
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/delete.gif",
701
                                      "Delete", "delRow(event)",
702
                                      "pointer"));
703

    
704
    TR.appendChild(imgTD);
705
    TR.appendChild(labelTD);
706
    
707
    return TR;
708
}
709

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

    
744
                    var TD = createTD("5","left", "pointer");
745
                    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
746
                        TD.attachEvent("onclick", new Function("keywordEditRow(event, 0, \"" + keyword
747
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")"));
748
                    } else {
749
                        TD.setAttribute("onClick","keywordEditRow(event, 0, \"" + keyword
750
                        + "\",\"" + keywordType + "\",\"" + keywordTh  + "\")");
751
                    }
752
                
753
                    var text   = keyword + " (Type: " + keywordType + ", Thesaurus: " + keywordTh + ")";
754
                    var label = document.createTextNode(text);
755
                    TD.appendChild(label);
756
                    TD.appendChild(createHiddenInput("keyword", keyword));
757
                    TD.appendChild(createHiddenInput("keywordType", keywordType));
758
                    TD.appendChild(createHiddenInput("keywordTh", keywordTh));
759
                    table.appendChild(TD);
760
                }
761
            } catch(e) {
762
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
763
                alert("Error:\n" + msg);
764
                return;
765
            }
766
        }
767
    }
768
}
769

    
770
function createKeywordThesaurusRow(name) {        
771
    var keyRowTemplate = document.getElementById("keyThRow");
772
    var newField =  keyRowTemplate.cloneNode(true);
773
    var nodes = newField.getElementsByTagName("input");
774
    nodes.item(0).setAttribute("name", name);
775
    nodes.item(1).setAttribute("name", name);
776
    return newField;
777
}
778

    
779
function createKeyThSelect(name, value) {
780
    var newField = document.createElement("select");
781
    newField.setAttribute("name", name);
782
    var option1 = document.createElement("option");
783
    var text1 = document.createTextNode("None");
784
    option1.appendChild(text1);
785
    newField.appendChild(option1);
786
    var option2 = document.createElement("option");
787
    var text2 = document.createTextNode("GCMD");
788
    option2.appendChild(text2);
789
    newField.appendChild(option2);
790

    
791
    if (value == "None") {
792
        newField.selectedIndex = 0;
793
    } else if (value == "GCMD") {
794
        newField.selectedIndex = 1;
795
    }
796
    return newField;
797
}
798

    
799
function createKeyTypeSelect(name, value) {
800
    var newField = document.createElement("select");
801
    newField.setAttribute("name", name);
802
    var option1 = document.createElement("option");
803
    var text1 = document.createTextNode("None");
804
    option1.appendChild(text1);
805
    newField.appendChild(option1);
806
    var option2 = document.createElement("option");
807
    var text2 = document.createTextNode("Theme");
808
    option2.appendChild(text2);
809
    newField.appendChild(option2);
810
    var option3 = document.createElement("option");
811
    var text3 = document.createTextNode("Place");
812
    option3.appendChild(text3);
813
    newField.appendChild(option3)
814
    var option4 = document.createElement("option");
815
    var text4 = document.createTextNode("Stratum");
816
    option4.appendChild(text4);
817
    newField.appendChild(option4);
818
    var option5 = document.createElement("option");
819
    var text5 = document.createTextNode("Temporal");
820
    option5.appendChild(text5);
821
    newField.appendChild(option5);
822
    var option6 = document.createElement("option");
823
    var text6 = document.createTextNode("Taxonomic");
824
    option6.appendChild(text6);
825
    newField.appendChild(option6);        
826
    if (value == "None") {
827
        newField.selectedIndex = 0;
828
    } else if (value == "Theme") {
829
        newField.selectedIndex = 1;
830
    } else if (value == "Place") {
831
        newField.selectedIndex = 2;
832
    } else if (value == "Stratum") {
833
        newField.selectedIndex = 3;
834
    }else if (value == "Temporal") {
835
        newField.selectedIndex = 4;
836
    } else if (value == "Taxonomic") {
837
        newField.selectedIndex = 5;
838
    }
839
    return newField;
840
}
841

    
842
var basicInfoBit = 1;
843
var submitterBit = 1;
844
var dsoBit = 1;
845
var apBit = 1;
846
var abstractBit = 1;
847
var keywordBit = 1;
848
var temporalBit = 1;
849
var spatialBit = 1;
850
var taxonomicBit = 1;
851
var methodBit = 1;
852
var dscBit = 1;
853
var distBit = 1;
854
var uploadBit = 1;
855

    
856
function swap(evt, _node, nodeBit) {
857
    evt = (evt) ? evt : ((window.event) ? window.event : null);
858
    if (evt) {
859
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
860
        
861
        // hack so that this works on safari...
862
        if (elem.nodeName != 'A') {
863
            elem = elem.parentNode;
864
        }
865
        elem.removeChild(elem.firstChild);
866
        var node = document.getElementById(_node);
867
        if (nodeBit) {
868
            elem.appendChild(document.createTextNode("Show"));
869
            node.className="hide";
870
            return 0;
871
        } else {
872
            elem.appendChild(document.createTextNode("Hide"));
873
            node.className="tables";
874
            return 1;
875
        }
876
    }        
877
}
878

    
879
function handleOther(enable, node) {
880
    var textBox = document.getElementById(node);
881
    if (enable) {
882
        textBox.removeAttribute("disabled");   
883
    } else {
884
        textBox.value="";
885
        textBox.disabled = "true";   
886
    }
887
}
888

    
889
function copyContact() {
890
    var checkBox = document.getElementById("copyCheckBox");
891
    if (checkBox.checked == true)
892
    {
893
        var cnf = document.getElementById("contactNameFirst");
894
        var onf = document.getElementById("origNameFirst");
895
        cnf.value = onf.value;
896
        cnf.disabled = "true";
897

    
898
        var cnl = document.getElementById("contactNameLast");
899
        var onl = document.getElementById("origNameLast");
900
        cnl.value = onl.value;
901
        cnl.disabled = "true";
902

    
903
        var cno = document.getElementById("contactNameOrg");
904
        var ono = document.getElementById("origNameOrg");
905
        cno.value = ono.value;
906
        cno.disabled = "true";
907

    
908
        var ce = document.getElementById("contactEmail");
909
        var oe = document.getElementById("origEmail");
910
        ce.value = oe.value;
911
        ce.disabled = "true";
912

    
913
        var cp = document.getElementById("contactPhone");
914
        var op = document.getElementById("origPhone");
915
        cp.value = op.value;
916
        cp.disabled = "true";
917

    
918
        var cf = document.getElementById("contactFAX");
919
        var of = document.getElementById("origFAX");
920
        cf.value = of.value;
921
        cf.disabled = "true";
922

    
923
        var cd = document.getElementById("contactDelivery");
924
        var od = document.getElementById("origDelivery");
925
        cd.value = od.value;
926
        cd.disabled = "true";
927

    
928
        var cc = document.getElementById("contactCity");
929
        var oc = document.getElementById("origCity");
930
        cc.value = oc.value;
931
        cc.disabled = "true";
932

    
933
        var cs = document.getElementById("contactState");
934
        var os = document.getElementById("origState");
935
        cs.options[os.selectedIndex].selected = true;
936
        cs.disabled = "true";           
937

    
938
        var cso = document.getElementById("contactStateOther");
939
        var oso = document.getElementById("origStateOther");
940
        cso.value = oso.value;
941
        cso.disabled = "true";
942

    
943
        var cz = document.getElementById("contactZip");
944
        var oz = document.getElementById("origZip");
945
        cz.value = oz.value;
946
        cz.disabled = "true";
947

    
948
        var cC = document.getElementById("contactCountry");
949
        var oC = document.getElementById("origCountry");
950
        cC.value = oC.value;
951
        cC.disabled = "true";
952
    } else {
953
        var cnf = document.getElementById("contactNameFirst");
954
        cnf.value = "";
955
        cnf.removeAttribute("disabled");
956

    
957
        var cnl = document.getElementById("contactNameLast");
958
        cnl.value = "";
959
        cnl.removeAttribute("disabled");
960

    
961
        var cno = document.getElementById("contactNameOrg");
962
        cno.value = "";
963
        cno.removeAttribute("disabled");
964

    
965
        var ce = document.getElementById("contactEmail");
966
        ce.value = "";
967
        ce.removeAttribute("disabled");
968

    
969
        var cp = document.getElementById("contactPhone");
970
        cp.value = "";
971
        cp.removeAttribute("disabled");
972

    
973
        var cf = document.getElementById("contactFAX");
974
        cf.value = "";
975
        cf.removeAttribute("disabled");
976

    
977
        var cd = document.getElementById("contactDelivery");
978
        cd.value = "";
979
        cd.removeAttribute("disabled");
980

    
981
        var cc = document.getElementById("contactCity");
982
        cc.value = "";
983
        cc.removeAttribute("disabled");
984

    
985
        var cs = document.getElementById("contactState");
986
              cs.options[0].selected = true;
987
        cs.removeAttribute("disabled");
988

    
989
        var cso = document.getElementById("contactStateOther");
990
        cso.value = "";
991
        cso.removeAttribute("disabled");
992

    
993
        var cz = document.getElementById("contactZip");
994
        cz.value = "";
995
        cz.removeAttribute("disabled");
996

    
997
        var cC = document.getElementById("contactCountry");
998
        cC.value = "";
999
        cC.removeAttribute("disabled");
1000
    }
1001
}
1002

    
1003
// include source for Multiple file uploader:
1004
// http://the-stickman.com/web-development/javascript/
1005

    
1006
function MultiSelector(list_target, max) {
1007

    
1008
    this.list_target = list_target;
1009
    this.count = 0;
1010
    this.id = 0;
1011
    var ucount =  document.getElementById("upCount");
1012
    var fcount =  document.getElementById("fileCount");
1013
    if (fcount.value > 0) {
1014
        this.id = fcount.value;
1015
    } else {
1016
        // upCount contains pre-existing uploads, check this for editing existing packages
1017
        if (ucount != null && ucount.value > 0) {
1018
            this.id = ucount.value;
1019
        }
1020
    }
1021

    
1022
    if (max) {
1023
        this.max = max;
1024
    } else {
1025
      this.max = -1;
1026
    };
1027

    
1028
    /**
1029
     * Add a new file input element
1030
     */
1031
    this.addElement = function( element ) {
1032

    
1033
        // Make sure it's a file input element
1034
        if (element.tagName == 'INPUT' && element.type == 'file' ) {
1035
            // Element name -- what number am I?
1036
            element.name = 'file_' + this.id++;
1037

    
1038
            // Add reference to this object
1039
            element.multi_selector = this;
1040

    
1041
            // What to do when a file is selected
1042
            element.onchange = function() {
1043
                // Increment file counter
1044
                var fileCount = incrementCount("fileCount");
1045
                // If pre-existing uploads exist, make sure the fileCount is synced
1046
                if (ucount != null && ucount.value > 0) {
1047
                    fileCount += ucount.value;
1048
                    setCount("fileCount", fileCount);
1049
                }
1050

    
1051
                // Clean up file text
1052
                var comment_element = document.getElementById( 'file_comment' );
1053
                if (comment_element) {
1054
                    comment_element.parentNode.removeChild(comment_element);
1055
                }
1056

    
1057
                // New file input
1058
                var new_element = document.createElement( 'input' );
1059
                new_element.type = 'file';
1060

    
1061
                // Add new element
1062
                this.parentNode.insertBefore( new_element, this );
1063

    
1064
                // Apply 'update' to element
1065
                this.multi_selector.addElement( new_element );
1066

    
1067
                // Update list
1068
                this.multi_selector.addListRow( this );
1069

    
1070
                // Hide this: we can't use display:none because Safari doesn't like it
1071
                this.style.position = 'absolute';
1072
                this.style.left = '-1000px';
1073
            };
1074

    
1075
            // If we've reached maximum number, disable input element
1076
            if (this.max != -1 && this.count >= this.max ) {
1077
                element.disabled = true;
1078
            };
1079
            
1080
            // File element counter
1081
            this.count++;
1082

    
1083
            // Most recent element
1084
            this.current_element = element;
1085

    
1086
        } else {
1087
            // This can only be applied to file input elements!
1088
            alert( 'Error: not a file input element' );
1089
        };
1090
    };
1091

    
1092
    /**
1093
     * Add a new row to the list of files
1094
     */
1095
    this.addListRow = function( element ) {
1096
        // Row div
1097
        var new_row = document.createElement( 'div' );
1098

    
1099
        // Delete button
1100
        var new_row_button = document.createElement( 'input' );
1101
        new_row_button.type = 'button';
1102
        new_row_button.value = 'Delete';
1103

    
1104
        // Permissions check boxes
1105
        var radio_value_a = 'public';
1106
        var radio_value_b = 'private';
1107
        var new_radio_a = document.createElement('input');
1108
        var new_radio_b = document.createElement('input');
1109
        new_radio_a.type = new_radio_b.type = 'radio';
1110
        // get the file upload name, use the number to keep track of the file we're setting permissions on
1111
        new_radio_a.name = new_radio_b.name = 'uploadperm_' + element.name.split("_")[1];
1112
        new_radio_a.value = radio_value_a;
1113
        new_radio_b.value = radio_value_b;
1114
        new_radio_a.checked = false;
1115
        new_radio_b.checked = true; // when adding new files, default is private
1116
         
1117
        // References
1118
        new_row.element = element;
1119

    
1120
        // Delete function
1121
        new_row_button.onclick= function() {
1122
            // Remove element from form
1123
            this.parentNode.element.parentNode.removeChild( this.parentNode.element );
1124

    
1125
            // Remove this row from the list
1126
            this.parentNode.parentNode.removeChild( this.parentNode );
1127
            // Decrement counter
1128
            this.parentNode.element.multi_selector.count--;
1129

    
1130
            // Re-enable input element (if it's disabled)
1131
            this.parentNode.element.multi_selector.current_element.disabled = false;
1132

    
1133
            // Appease Safari
1134
            //    without it Safari wants to reload the browser window
1135
            //    which nixes your already queued uploads
1136
            return false;
1137
        };
1138
       
1139
        // filename may include path, show only file name itself
1140
        var name_pattern = element.value.replace(/.*[\/\\](.*)/, "$1");
1141

    
1142
        // Set row value
1143
        new_row.appendChild( document.createTextNode(name_pattern + " ") );
1144
        
1145
        // Add in radio buttons and their text
1146
        new_row.appendChild( new_radio_a );
1147
        new_row.appendChild( document.createTextNode(capitalize(radio_value_a) + " ") );
1148
        new_row.appendChild( new_radio_b );
1149
        new_row.appendChild( document.createTextNode(capitalize(radio_value_b) + " ") );
1150

    
1151
        // Add button
1152
        new_row.appendChild( new_row_button );
1153

    
1154
        // Add it to the list
1155
        this.list_target.appendChild( new_row );
1156
    };
1157

    
1158
};
1159

    
1160
// Append files to be deleted to an HTML array
1161
function deleteFile(evt, file) {
1162
    evt = (evt) ? evt : ((window.event) ? window.event : null);
1163
    if (evt) {
1164
        // equalize W3C/IE models to get event target reference
1165
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
1166
        var element = document.getElementById("file_element");
1167
        if (elem) {
1168
            try {
1169
                // Add a new hidden form element to delete exisiting files
1170
                var delete_existing = document.createElement( 'input' );
1171
                delete_existing.type = "hidden";
1172
                delete_existing.name = "deletefile"; // HTML array
1173
                delete_existing.value = file.name;
1174
                element.parentNode.appendChild( delete_existing );
1175

    
1176
                // Remove this row from the list
1177
                elem.parentNode.parentNode.removeChild( elem.parentNode );
1178
            } catch(e) {
1179
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
1180
                alert("Error:\n" + msg);
1181
                return;
1182
            }
1183
        }
1184
    }
1185
}
1186

    
1187
function capitalize(word) {
1188
    return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
1189
}
(3-3/30)