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="span8";
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("class", "btn"); 
48
    button.setAttribute("value", "Add Paragraph to Method Description"); 
49
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
50
        button.attachEvent("onclick", new Function("addParagraph("+ index + ", '" + buttonId + "')"));
51
    } else {
52
        button.setAttribute("onclick", "addParagraph("+ index +", '" + buttonId + "')"); 
53
    }
54
    TD.appendChild(button);
55
    TR.appendChild(labelTD);
56
    TR.appendChild(TD);
57
    return TR;
58
}
59

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

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

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

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

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

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

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

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

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

    
126
    return TR;
127
}
128

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

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

    
139
    return hrTR;
140
}
141

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

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

    
163

    
164
function sortTagWithAttributeName(tag, afterTag, parentTag) {
165
    var elem = document.getElementById(afterTag);
166
   
167
    elem = elem.nextSibling.nextSibling;
168
    while (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
/** 
220
 * Deprecated in favor of createIconLink() method
221
 * 
222
function createImageLink(imgSrc, imgAlt, imgOnClick, cursor) {
223
    var link = document.createElement("a");
224
    var img = document.createElement("img");
225
    img.setAttribute("src", imgSrc);
226
    img.setAttribute("alt", imgAlt);
227
    if (navigator.userAgent.toLowerCase().indexOf('msie')!= -1 && document.all) {
228
        link.style.setAttribute("cursor", cursor);
229
        img.attachEvent("onclick", new Function(imgOnClick));
230
    } else {
231
        link.setAttribute("style", "cursor:"+cursor);
232
        img.setAttribute("onClick", imgOnClick);
233
    }
234
    img.setAttribute("border", "0");
235
    link.appendChild(img);        
236
    return link;
237
}
238
*/
239

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

    
256

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

    
270

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

    
274
    var bro = startTag.nextSibling;       
275

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

    
290
}
291

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
533
    return newField;
534
}
535

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

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

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

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

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

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

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

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

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

    
603
function taxonEditRow(evt, num,  taxonName ,  taxonRank) {
604
    evt = (evt) ? evt : ((window.event) ? window.event : null);
605
    if (evt) {
606
        // equalize W3C/IE models to get event target reference
607
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
608
        if (elem && elem.nodeName == "TD") {
609
            try {
610
                var table = elem.parentNode;
611
                if (num == 0) {
612
                    table.removeChild(elem);
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, 1, \"" + taxonName
616
                                       + "\",\"" + taxonRank  + "\")"));
617
                    } else {
618
                        TD.setAttribute("onClick","taxonEditRow(event, 1, \"" + taxonName
619
                                        + "\",\"" + taxonRank  + "\")");
620
                    }
621
          
622
                    TD.appendChild(document.createTextNode("Rank: "));
623
                    TD.appendChild(createTextField("taxonName", 15, taxonName));
624
                    TD.appendChild(document.createTextNode(" Name: "));
625
                    TD.appendChild(createTextField("taxonRank", 15, taxonRank));
626
                    table.appendChild(TD);
627
                } else {
628
                    var child = elem.childNodes;
629
                    taxonName = child.item(1).value;
630
                    taxonRank = child.item(3).value;
631
                    table.removeChild(elem);
632

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

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

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

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

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

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

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

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

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

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

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

    
799
function createKeyThSelect(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("GCMD");
808
    option2.appendChild(text2);
809
    newField.appendChild(option2);
810

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1026
function MultiSelector(list_target, max) {
1027

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1119
        // Delete button
1120
        var new_row_button = document.createElement( 'input' );
1121
        new_row_button.type = 'button';
1122
        new_row_button.setAttribute("class", "btn"); 
1123
        new_row_button.value = 'Delete';
1124

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

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

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

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

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

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

    
1172
        // Add button
1173
        new_row.appendChild( new_row_button );
1174

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

    
1179
};
1180

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

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

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