function setIds(form, contentNodeID, contentObjectID) {
	//alert("contentNodeID: " + contentNodeID);
	//alert("contentObjectID: " + contentObjectID);
	if (form.elements['ContentNodeID']) {
		form.elements['ContentNodeID'].value = contentNodeID;
	} else {
		addField (form, 'hidden', 'ContentNodeID', contentNodeID);
	}
	if (form.elements['ContentObjectID']) {
		form.elements['ContentObjectID'].value = contentObjectID;
	} else {
		addField (form, 'hidden', 'ContentObjectID', contentObjectID);
	}
	return true;	
}

function moveUp(form, currNodeId, totalNodes, pageLimit, offset) {
	return moveNode( form, currNodeId, totalNodes, pageLimit, offset, -1);
}

function moveDown(form, currNodeId, totalNodes, pageLimit, offset) {
	return moveNode( form, currNodeId, totalNodes, pageLimit, offset, 1);
}

function moveNode(form, currNodeId, totalNodes, pageLimit, offset, direction) {
	//form = document.forms['sortForm'];
	//alert(form.elements['PriorityID[]'].length);
	var numNodes = form.elements['PriorityID[]'].length;
	var currNode, otherNode, oldValue, nodeID;

	if (!numNodes) { 
		numNodes = 1; // there's only one element, so it's not an array 
	}

	// Note: Priority[] and PriorityID[] are parallel arrays.
	// - don't move if we're at the top or bottom of the total resultset
	// - otherwise swap the two positions
    for( var i=0; i<numNodes; i++ ) {
    	if (numNodes == 1) {
    		nodeID = form.elements['PriorityID[]'];
    	} else {
    		nodeID = form.elements['PriorityID[]'][i];
    	}
    	// Find the selected node ID
    	if (nodeID.value == currNodeId) {
			if (offset > 0) {
				offset -= 1; // decrement for prev page node
			}
	    	var targetPosition = (i + direction) + (offset);
	
	    	if (numNodes == 1) {
	    		currNode = form.elements['Priority[]'];
	    	} else {
	    		currNode = form.elements['Priority[]'][i];
	    	}
    		if (numNodes > 1 && targetPosition >= 0 && targetPosition < totalNodes) { // check array bounds
	        	otherNode = form.elements['Priority[]'][i + direction];
			} else {
	        	return false;
	        }
	        form = sortNodes(form, offset, numNodes);
	        
	        // swap the values
	    	oldValue = currNode.value;
	        currNode.value = otherNode.value;
	        otherNode.value = oldValue;
	        
	        // set the redirect url to the offset for the current page (if results are paginated)
	        // anything below pageLimit will go to the base RedirectURI 
			if (targetPosition >= pageLimit) {
				var newOffset = parseInt(targetPosition/pageLimit) * pageLimit;
		 		form.elements['RedirectURI'].value = form.elements['RedirectURI'].value + "/(offset)/" + newOffset;
			}
        	return true;
    	}
	}
	return false;
}

// Resort all the nodes so there aren't any holes or duplicates
function sortNodes(form, offset, numNodes) {
	if (numNodes == 1) {
		form.elements['Priority[]'].value = offset;
	} else {
	    for( var i=0; i<numNodes; i++ ) {
			form.elements['Priority[]'][i].value = i+offset;
		}	
	}
	return form;
}

function addField (form, fieldType, fieldName, fieldValue) {
  if (document.getElementById) {
    var input = document.createElement('INPUT');
      if (document.all) { // what follows should work 
                          // with NN6 but doesn't in M14
        input.type = fieldType;
        input.name = fieldName;
        input.value = fieldValue;
      }
      else if (document.getElementById) { // so here is the
                                          // NN6 workaround
        input.setAttribute('type', fieldType);
        input.setAttribute('name', fieldName);
        input.setAttribute('value', fieldValue);
      }
    form.appendChild(input);
  }
}