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;
168
    
169
    while (elem && elem.nodeName == "TR") {
170
    var nodes = elem.getElementsByTagName("input");
171
        for(var i = 0; i < nodes.length; i++) {
172
            var node = nodes.item(i); 
173
            if (node.getAttribute("name")==tag) {
174
                    var parent = node.parentNode;
175
                    var clone = node.cloneNode(true);
176
                    parent.removeChild(node);
177
                    parent.appendChild(clone);
178
            }
179
        }
180
        if (parentTag != null) {
181
            var nodes = elem.getElementsByTagName(parentTag);
182
            for(var i = 0; i < nodes.length; i++) {
183
                var node = nodes.item(i); 
184
                if (node.getAttribute("name")==tag) {
185
                        var parent = node.parentNode;
186
                        var clone = node.cloneNode(true);
187
                        clone.value = node.value;
188
                        parent.removeChild(node);
189
                        parent.appendChild(clone);
190
                }
191
            }
192
        }
193
        elem = elem.nextSibling;
194
    }
195
}
196

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

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

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

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

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

    
257

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

    
271

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

    
275
    var bro = startTag.nextSibling;       
276

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

    
291
}
292

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
534
    return newField;
535
}
536

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1027
function MultiSelector(list_target, max) {
1028

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1180
};
1181

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

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

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