
/* Merged Plone Javascript file
 * This file is dynamically assembled from separate parts.
 * Some of these parts have 3rd party licenses or copyright information attached
 * Such information is valid for that section,
 * not for the entire composite file
 * originating files are separated by - filename.js -
 */

/* - ++resource++ucam.falcon.js/sequence.js - */
// http://www.hist.cam.ac.uk/portal_javascripts/++resource++ucam.falcon.js/sequence.js?original=1
function createNamedElement(name){var element=null;try{element=document.createElement('<input name="'+name+'">')} catch(e){}
if(!element||element.nodeName!='INPUT'){element=document.createElement('input');element.name=name}
return element}
function rebuildValues(field_id){var counter=0;found=document.getElementById('value.'+counter+'.'+field_id);while(found!=null){found.parentNode.removeChild(found);counter++;found=document.getElementById('value.'+counter+'.'+field_id)}
var select=document.getElementById('select.'+field_id);var source=document.getElementById(field_id);var sourceParent=source.parentNode;for(var x=0;x<select.options.length;x++){copy=createNamedElement(field_id);copy.setAttribute('type','hidden');copy.setAttribute('id','value.'+x+'.'+field_id);copy.setAttribute('value',select.options[x].value);sourceParent.insertBefore(copy,source)}}
function sequenceAddItem(field_id){var input=document.getElementById('input.'+field_id);if(input.value.length>0){var select=document.getElementById('select.'+field_id);var item=new Option(input.value,input.value);select.options[select.length]=item;rebuildValues(field_id)}
input.value=''}
function sequenceRemoveItem(field_id){var select=document.getElementById('select.'+field_id);if(select.selectedIndex>=0){select.remove(select.selectedIndex);rebuildValues(field_id)}}
function sequenceMoveItem(field_id,direction){var select=document.getElementById('select.'+field_id);var old_position=select.selectedIndex;var new_position=old_position+direction;if(new_position<0||new_position>=select.length)
return;var array=new Array();for(var i=0;i<select.options.length;i++)
array.push(new Option(select.options[i].text,select.options[i].value));for(var i=0;i<array.length;i++){if(i==old_position) select.options[i]=array[new_position];else if(i==new_position) select.options[i]=array[old_position];else select.options[i]=array[i]}
rebuildValues(field_id);select.options[new_position].selected=true}
function tidyinput(field_id){if(document.getElementByID('field_id')=="Click here to add an item"){this.value=''}}

/* - ++resource++ucam.falcon.js/linkbox.js - */
// http://www.hist.cam.ac.uk/portal_javascripts/++resource++ucam.falcon.js/linkbox.js?original=1
if(!String.prototype.strip){String.prototype.strip=function(){return this.replace(/^\s*(\S*(?:\s+\S+)*)\s*$/,"$1")}}
function log(msg){}
function moveUp(obj){log("moveUp called");moveLine(obj,-1)}
function moveDown(obj){log("moveDown called");moveLine(obj,1)}
function moveLine(obj,dir){var current=obj.parentNode.parentNode;var target;log("moveLine called");if(dir>0){target=current.nextSibling;log("target="+target);while(target!=null&&target!=undefined&&target.nodeName!='DIV'){log("target.nextSibling="+target);target=target.nextSibling}} else{target=current.previousSibling;while(target!=null&&target!=undefined&&target.nodeName!='DIV'){target=target.previousSibling}}
log("current="+current+" target="+target);var currentInputs=current.getElementsByTagName('INPUT');var targetInputs=target.getElementsByTagName('INPUT');var targetUrl=targetInputs[0].value;var targetDesc=targetInputs[1].value;var targetHidden=targetInputs[2].value;log("targetUrl=",targetUrl+" targetDesc=",targetDesc);var temp;targetInputs[0].value=currentInputs[0].value;targetInputs[1].value=currentInputs[1].value;targetInputs[2].value=currentInputs[2].value;currentInputs[0].value=targetUrl;currentInputs[1].value=targetDesc;currentInputs[2].value=targetHidden;refreshList();return}
function delLine(obj){var parent=obj.parentNode.parentNode;var inputs=parent.getElementsByTagName('INPUT');var url=inputs[0];var desc=inputs[1];var urlId=url.id;var descId=desc.id;log("delLine obj parent^2="+parent);log("urlId="+urlId+"descId="+descId);log("Deleting line "+url.value+" == "+desc.value,null);divnode=url.parentNode;var nextNode=divnode.nextSibling;divnode.parentNode.removeChild(divnode);refreshList()}
function createLine(){var div=document.createElement('div');var inputUrl=document.createElement('input');var inputDesc=document.createElement('input');var inputHidden=document.createElement('input');var br=document.createElement('br');var space=document.createTextNode("\n");inputUrl.setAttribute('type','text');inputUrl.setAttribute('name','form.url_list');inputUrl.setAttribute('size',25);inputUrl.setAttribute('value',"Click here to enter a URL");inputUrl.setAttribute('onClick','tidyInput(this)');inputUrl.setAttribute('onChange','refreshList()');inputDesc.setAttribute('type','text');inputDesc.setAttribute('name','form.desc_list');inputDesc.setAttribute('size',25);inputDesc.setAttribute('value',"Click here to enter a description");inputDesc.setAttribute('onClick','tidyInput(this)');inputDesc.setAttribute('onChange','refreshList()');inputHidden.setAttribute('type','hidden');inputHidden.setAttribute('name','form.item_list');div.appendChild(inputUrl);div.appendChild(space);div.appendChild(inputDesc);div.appendChild(inputHidden);refreshList();return(div)}
function arrowsEtc(upOk,downOk){var span=document.createElement('span');var inputUrl=document.createElement('input');var inputDesc=document.createElement('input');var itemListHidden=document.createElement('input');var upLink=document.createElement('a');var downLink=document.createElement('a');var delLink=document.createElement('a');var br=document.createElement('br');var nbsp=document.createTextNode("\u00A0");inputUrl.setAttribute('type','text');inputUrl.setAttribute('name','form.url_list');inputUrl.setAttribute('id','value.99.form.url_list');inputUrl.setAttribute('size',25);inputUrl.setAttribute('value',"Click here to enter a URL");inputUrl.onClick='tidyInput(this)';inputDesc.setAttribute('type','text');inputDesc.setAttribute('name','form.desc_list');inputDesc.setAttribute('id','value.99.form.desc_list');inputDesc.setAttribute('size',25);inputDesc.setAttribute('value',"Click here to enter a description");inputDesc.onClick='tidyInput(this)';itemListHidden.setAttribute('type','hidden');itemListHidden.setAttribute('name','form.item_list');itemListHidden.value=url.value.strip()+' '+desc.value.strip()
if(upOk){upLink.appendChild(document.createTextNode("\u2191"));upLink.href='javascript:void(0)';upLink.setAttribute('onclick',"moveUp(this)");upLink.onClick='modeUp(this)'} else{upLink=nbsp.cloneNode(true)}
if(downOk){downLink.href='javascript:void(0)';downLink.appendChild(document.createTextNode("\u2193"));downLink.setAttribute('onclick',"moveDown(this)");downLink.onClick='moveDown(this)'} else{downLink=nbsp.cloneNode(true)}
delLink.appendChild(document.createTextNode('del'));delLink.href='javascript:void(0)';delLink.setAttribute('onclick',"delLine(this)");span.appendChild(nbsp.cloneNode(true));span.appendChild(upLink);span.appendChild(nbsp.cloneNode(true));span.appendChild(downLink);span.appendChild(nbsp);span.appendChild(delLink);span.appendChild(br);return span}
function addLine(){log("addLine called");var newElement=createLine();marker=document.getElementById("form.item_list");marker.appendChild(newElement);refreshList()}
function tidyInput(obj){if(obj.value=="Click here to enter a URL"||obj.value=="Click here to enter a description"){obj.value='';unchanged=0}}
function refreshList(){var marker=document.getElementById("form.item_list");var divs=marker.getElementsByTagName('DIV');for(var i=0;i<divs.length;i++){div=divs[i];inputs=div.getElementsByTagName('INPUT');log("#inputs="+inputs.length);url=inputs[0];desc=inputs[1];hidden=inputs[2];hidden.value=url.value.strip()+' '+desc.value.strip()
log("refresh: url="+url.value+" desc="+desc.value);newspan=arrowsEtc(i!=0,i!=(divs.length-1));spans=div.getElementsByTagName('SPAN');log("refresh - div#"+i+" #spans="+spans.length);log("#spans="+spans.length);if(spans.length==0){if(hidden){log("inserting span before "+hidden.nextSibling);div.insertBefore(newspan,hidden.nextSibling)}
else{log("inserting span at end of <div> (no next sibling)");div.appendChild(newspan)}} else{spans[0].parentNode.replaceChild(newspan,spans[0]);log("assigned replacement span for div#"+i)}}}


