Project

General

Profile

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
125
    return TR;
126
}
127

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

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

    
138
    return hrTR;
139
}
140

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

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

    
162

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

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

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

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

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

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

    
251

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

    
265

    
266
function cleanTextNodes(startTagId, endTagId) {
267
    var startTag = document.getElementById(startTagId);
268

    
269
    var bro = startTag.nextSibling;       
270

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

    
285
}
286

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

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

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

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

    
364
function addAssociatedParty() {
365
    var AOLN   = document.getElementById("AONameLast");
366
    var AOFN   = document.getElementById("AONameFirst");
367
    var AORole = document.getElementById("AORole");
368

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

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

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

    
413
    var text   = AOFN + " " + AOLN + " (Role: " + AORole + ")";
414
    var label = document.createTextNode(text);
415

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

    
435
    TR.appendChild(imgTD);
436
    TR.appendChild(labelTD);
437
    
438
    return TR;
439
}
440

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

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

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

    
528
    return newField;
529
}
530

    
531
function addTaxon() {   
532
    var taxonRank   = document.getElementById("taxonRank");
533
    var taxonName   = document.getElementById("taxonName");
534

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

    
550
        taxonRank.value = "";
551
        taxonName.value = "";
552
    } else {
553
        alert("Enter complete taxonomic information");
554
    }
555
}
556

    
557
function createTaxonRow(taxonCount, taxonRank, taxonName){    
558
    var TR = document.createElement("tr");
559
    TR.className='sectbody';
560

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

    
570
    var text = "Rank: " + taxonRank + ", Name: " + taxonName;
571
    var label = document.createTextNode(text);
572

    
573
    labelTD.appendChild(label);
574
    labelTD.appendChild(createHiddenInput("taxonName", taxonName));
575
    labelTD.appendChild(createHiddenInput("taxonRank", taxonRank));
576
    
577
    var imgTD = createTD("","right");
578
    imgTD.className = 'rightCol';
579

    
580
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/previous.gif",
581
                                      "Move Up", "moveUpRow(event)",
582
                                      "pointer"));
583
    imgTD.appendChild(document.createTextNode(" "));
584
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/next.gif",
585
                                      "Move Down", "moveDownRow(event, 'addtaxarow')",
586
                                      "pointer"));
587
    imgTD.appendChild(document.createTextNode(" "));
588
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/delete.gif",
589
                                      "Delete", "delRow(event)",
590
                                      "pointer"));
591

    
592
    TR.appendChild(imgTD);
593
    TR.appendChild(labelTD);
594
    
595
    return TR;
596
}
597

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

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

    
652
function addKeyword() {
653
    var keyword   = document.getElementById("keyword");
654
    var keywordType   = document.getElementById("keywordType");
655
    var keywordTh = document.getElementById("keywordTh");
656

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

    
682
function createKeywordRow(keyCount, keyword, keywordType, keywordTh){    
683
    var TR = document.createElement("tr");
684
    TR.className='sectbody';
685

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

    
699
    labelTD.appendChild(label);
700
    labelTD.appendChild(createHiddenInput("keyword", keyword));
701
    labelTD.appendChild(createHiddenInput("keywordType", keywordType));
702
    labelTD.appendChild(createHiddenInput("keywordTh", keywordTh));
703
    
704
    var imgTD = createTD("","right");
705
    imgTD.className = 'rightCol';
706

    
707
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/previous.gif",
708
                                      "Move Up", "moveUpRow(event)",
709
                                      "pointer"));
710
    imgTD.appendChild(document.createTextNode(" "));
711
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/next.gif",
712
                                      "Move Down", "moveDownRow(event, 'addkeyrow')",
713
                                      "pointer"));
714
    imgTD.appendChild(document.createTextNode(" "));
715
    imgTD.appendChild(createImageLink(contextUrl + "/style/images/delete.gif",
716
                                      "Delete", "delRow(event)",
717
                                      "pointer"));
718

    
719
    TR.appendChild(imgTD);
720
    TR.appendChild(labelTD);
721
    
722
    return TR;
723
}
724

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

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

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

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

    
806
    if (value == "None") {
807
        newField.selectedIndex = 0;
808
    } else if (value == "GCMD") {
809
        newField.selectedIndex = 1;
810
    }
811
    return newField;
812
}
813

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

    
857
var basicInfoBit = 1;
858
var submitterBit = 1;
859
var dsoBit = 1;
860
var apBit = 1;
861
var abstractBit = 1;
862
var keywordBit = 1;
863
var temporalBit = 1;
864
var spatialBit = 1;
865
var taxonomicBit = 1;
866
var methodBit = 1;
867
var dscBit = 1;
868
var distBit = 1;
869
var uploadBit = 1;
870

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

    
894
function handleOther(enable, node) {
895
    var textBox = document.getElementById(node);
896
    if (enable) {
897
        textBox.removeAttribute("disabled");   
898
    } else {
899
        textBox.value="";
900
        textBox.disabled = "true";   
901
    }
902
}
903

    
904
function copyContact() {
905
    var checkBox = document.getElementById("copyCheckBox");
906
    if (checkBox.checked == true)
907
    {
908
        var cnf = document.getElementById("contactNameFirst");
909
        var onf = document.getElementById("origNameFirst");
910
        cnf.value = onf.value;
911
        cnf.disabled = "true";
912

    
913
        var cnl = document.getElementById("contactNameLast");
914
        var onl = document.getElementById("origNameLast");
915
        cnl.value = onl.value;
916
        cnl.disabled = "true";
917

    
918
        var cno = document.getElementById("contactNameOrg");
919
        var ono = document.getElementById("origNameOrg");
920
        cno.value = ono.value;
921
        cno.disabled = "true";
922

    
923
        var ce = document.getElementById("contactEmail");
924
        var oe = document.getElementById("origEmail");
925
        ce.value = oe.value;
926
        ce.disabled = "true";
927

    
928
        var cp = document.getElementById("contactPhone");
929
        var op = document.getElementById("origPhone");
930
        cp.value = op.value;
931
        cp.disabled = "true";
932

    
933
        var cf = document.getElementById("contactFAX");
934
        var of = document.getElementById("origFAX");
935
        cf.value = of.value;
936
        cf.disabled = "true";
937

    
938
        var cd = document.getElementById("contactDelivery");
939
        var od = document.getElementById("origDelivery");
940
        cd.value = od.value;
941
        cd.disabled = "true";
942

    
943
        var cc = document.getElementById("contactCity");
944
        var oc = document.getElementById("origCity");
945
        cc.value = oc.value;
946
        cc.disabled = "true";
947

    
948
        var cs = document.getElementById("contactState");
949
        var os = document.getElementById("origState");
950
        cs.options[os.selectedIndex].selected = true;
951
        cs.disabled = "true";           
952

    
953
        var cso = document.getElementById("contactStateOther");
954
        var oso = document.getElementById("origStateOther");
955
        cso.value = oso.value;
956
        cso.disabled = "true";
957

    
958
        var cz = document.getElementById("contactZip");
959
        var oz = document.getElementById("origZip");
960
        cz.value = oz.value;
961
        cz.disabled = "true";
962

    
963
        var cC = document.getElementById("contactCountry");
964
        var oC = document.getElementById("origCountry");
965
        cC.value = oC.value;
966
        cC.disabled = "true";
967
    } else {
968
        var cnf = document.getElementById("contactNameFirst");
969
        cnf.value = "";
970
        cnf.removeAttribute("disabled");
971

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

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

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

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

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

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

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

    
1000
        var cs = document.getElementById("contactState");
1001
              cs.options[0].selected = true;
1002
        cs.removeAttribute("disabled");
1003

    
1004
        var cso = document.getElementById("contactStateOther");
1005
        cso.value = "";
1006
        cso.removeAttribute("disabled");
1007

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

    
1012
        var cC = document.getElementById("contactCountry");
1013
        cC.value = "";
1014
        cC.removeAttribute("disabled");
1015
    }
1016
}
1017

    
1018
// include source for Multiple file uploader:
1019
// http://the-stickman.com/web-development/javascript/
1020

    
1021
function MultiSelector(list_target, max) {
1022

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

    
1037
    if (max) {
1038
        this.max = max;
1039
    } else {
1040
      this.max = -1;
1041
    };
1042

    
1043
    /**
1044
     * Add a new file input element
1045
     */
1046
    this.addElement = function( element ) {
1047

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

    
1053
            // Add reference to this object
1054
            element.multi_selector = this;
1055

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

    
1066
                // Clean up file text
1067
                var comment_element = document.getElementById( 'file_comment' );
1068
                if (comment_element) {
1069
                    comment_element.parentNode.removeChild(comment_element);
1070
                }
1071

    
1072
                // New file input
1073
                var new_element = document.createElement( 'input' );
1074
                new_element.type = 'file';
1075

    
1076
                // Add new element
1077
                this.parentNode.insertBefore( new_element, this );
1078

    
1079
                // Apply 'update' to element
1080
                this.multi_selector.addElement( new_element );
1081

    
1082
                // Update list
1083
                this.multi_selector.addListRow( this );
1084

    
1085
                // Hide this: we can't use display:none because Safari doesn't like it
1086
                this.style.position = 'absolute';
1087
                this.style.left = '-1000px';
1088
            };
1089

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

    
1098
            // Most recent element
1099
            this.current_element = element;
1100

    
1101
        } else {
1102
            // This can only be applied to file input elements!
1103
            alert( 'Error: not a file input element' );
1104
        };
1105
    };
1106

    
1107
    /**
1108
     * Add a new row to the list of files
1109
     */
1110
    this.addListRow = function( element ) {
1111
        // Row div
1112
        var new_row = document.createElement( 'div' );
1113

    
1114
        // Delete button
1115
        var new_row_button = document.createElement( 'input' );
1116
        new_row_button.type = 'button';
1117
        new_row_button.value = 'Delete';
1118

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

    
1135
        // Delete function
1136
        new_row_button.onclick= function() {
1137
            // Remove element from form
1138
            this.parentNode.element.parentNode.removeChild( this.parentNode.element );
1139

    
1140
            // Remove this row from the list
1141
            this.parentNode.parentNode.removeChild( this.parentNode );
1142
            // Decrement counter
1143
            this.parentNode.element.multi_selector.count--;
1144

    
1145
            // Re-enable input element (if it's disabled)
1146
            this.parentNode.element.multi_selector.current_element.disabled = false;
1147

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

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

    
1166
        // Add button
1167
        new_row.appendChild( new_row_button );
1168

    
1169
        // Add it to the list
1170
        this.list_target.appendChild( new_row );
1171
    };
1172

    
1173
};
1174

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

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

    
1202
function capitalize(word) {
1203
    return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
1204
}
(3-3/10)