////////  This file to move rows in the bride view of PWP - Blair 020906 /////////////

<!--//
var prevNode;

function copyDropDowns(oldTR, newTR){
	newElms = newTR.getElementsByTagName("SELECT");
	oldElms = oldTR.getElementsByTagName("SELECT");
	for (i =0; i < newElms.length; i++){
		newElms[i].options[oldElms[i].selectedIndex].selected = true;
	}
}

function setRadioValues(oldTR, newTR){
	var vals = new Array(5);
	newElms = newTR.getElementsByTagName("INPUT");
	oldElms = oldTR.getElementsByTagName("INPUT");
	for (i =0; i < newElms.length; i++){
		if (oldElms[i].type == 'radio' ){
			vals[i] = oldElms[i].checked;
		}
	}
	return vals;
}

function setRadio(newTR, vals){
	newElms = newTR.getElementsByTagName("INPUT");
	for (i =0; i < newElms.length; i++){
		if (newElms[i].type == 'radio' ){
			newElms[i].checked = vals[i];
		}
	}
	return vals;
}

function moveUp(node) {
	var newNode = node.cloneNode("false");
	newNode.setAttribute("position", (newNode.getAttribute("position") - 1));
	var prevRow = node_before(node);
	var prevRowNode = prevRow.cloneNode("true");
	prevRowNode.setAttribute("position", (parseInt(prevRowNode.getAttribute("position")) + 1.0));
	var tableNode = node.parentNode;
	
	copyDropDowns(node, newNode);
	copyDropDowns(prevRow, prevRowNode);
	nodeVal = setRadioValues(node, newNode);
	prevVal = setRadioValues(prevRow, prevRowNode);
	var reattachee = tableNode.replaceChild( newNode, prevRow);
	var reattachee = tableNode.replaceChild(prevRowNode, node);
	setRadio(newNode, nodeVal);
	setRadio(prevRowNode, prevVal);
	rebuild();
}

function moveDown(node) {
	var newNode = node.cloneNode("false");
	newNode.setAttribute("position", (parseInt(newNode.getAttribute("position")) + 1.0));
	var nextRow = node_after(node);
	var nextRowNode = nextRow.cloneNode("true");
	nextRowNode.setAttribute("position", (nextRowNode.getAttribute("position") - 1));
	var tableNode = node.parentNode;

	copyDropDowns(node, newNode);
	copyDropDowns(nextRow, nextRowNode);	
	
	nodeVals = setRadioValues(node, newNode);
	nextVals = setRadioValues(nextRow, nextRowNode);
	
	var reattachee = tableNode.replaceChild( newNode, nextRow);
	var reattachee = tableNode.replaceChild(nextRowNode, node);
	setRadio(newNode, nodeVals);
	setRadio(nextRowNode, nextVals);
	rebuild();
}

function rebuild() {
	
	var tasks = document.getElementsByTagName("TR");
	var numtasks = tasks.length - 1;
	var count =0;
	var movedown = "<span onclick='moveDown(this.parentNode.parentNode);'> <img src='http://images.della.com/images/wedding_website/edit/buttons/down_button.gif'></span>";  
	var moveup = "<span onclick='moveUp(this.parentNode.parentNode);'> <img src='http://images.della.com/images/wedding_website/edit/buttons/up_button.gif'></span>";
	var thenode;
	var prevbutton;
	var tasks = document.getElementsByTagName("TR");
	for(var i=0; i<tasks.length;i++) {

		thenode = tasks.item(i);
		//alert("node is " + thenode.getAttribute("position") + "\n");
		//alert("Row " + i + " " + thenode.getAttribute("position") + " now, after " + thenode.getAttribute("origposition") + "\n");
		if(thenode.getAttribute("position")) {
		count++;
		downbutton = node_after(first_child(thenode));
		var addbutton = downbutton.innerHTML;
		upbutton = node_after(downbutton);
		//dump(upbutton);
		if(count == 1) {
			upbutton.innerHTML=moveup;
			
			
		} else {
			if(upbutton!= null){
				upbutton.innerHTML = moveup;
			}
		}
		if(count  == numtasks) {
	
			downbutton.innerHTML=movedown;
		} else {
	
			downbutton.innerHTML = addbutton;
		}
	}
	}
	updateMasterList();
}

function updateMasterList() {
	var taskidlist= new Array(1);
	var tasks = document.getElementsByTagName("TR");
	var count = 0;
	for(var i=0; i<tasks.length;i++) {
		thenode = tasks.item(i);
		if(thenode.getAttribute("taskid")) {
		taskidlist[count] =  thenode.getAttribute("taskid");
		count++;
		}
	}
	for(var i = 0; i<taskidlist.length; i++){
	r = parseInt(taskidlist[i]);
	document.wwsForm.elements["eventViewBean["+(r)+"].sequenceNumber"].value =i;
	}
}

/**
 * Throughout, whitespace is defined as one of the characters
 *  "\t" TAB \u0009
 *  "\n" LF  \u000A
 *  "\r" CR  \u000D
 *  " "  SPC \u0020
 *
 * This does not use Javascript's "\s" because that includes non-breaking
 * spaces (and also some other characters).
 */


/**
 * Determine whether a node's text content is entirely whitespace.
 *
 * @param nod  A node implementing the |CharacterData| interface (i.e.,
 *             a |Text|, |Comment|, or |CDATASection| node
 * @return     True if all of the text content of |nod| is whitespace,
 *             otherwise false.
 */
function is_all_ws( nod )
{
  // Use ECMA-262 Edition 3 String and RegExp features
  return !(/[^\t\n\r ]/.test(nod.data));
}

function node_before( sib )
{

  while ((sib = sib.previousSibling)) {
    if (!is_ignorable(sib)) return sib;
  }
  return null;
}

function node_after( sib )
{
	
	
  while ((sib = sib.nextSibling)) {
    if (!is_ignorable(sib)) return sib;
  }
  return null;
}

function is_ignorable( nod )
{
  return ( nod.nodeType == 8) || // A comment node
         ( (nod.nodeType == 3) && is_all_ws(nod) ); // a text node, all ws
}

function first_child( par )
{
  var res=par.firstChild;
  while (res) {
    if (!is_ignorable(res)) return res;
    res = res.nextSibling;
  }
  return null;
}

 //-->

