/* controller logic for navigation panes */

function getNavpaneRows() {
  // count open navpanes
  var openNavpanes = 0;
  for (var i = 0; i < navpanes.length; i++) {
	if (navpanes[i].open)
	  openNavpanes++;
  }
  // determine relative size for each navpane
  var openNavpaneSize = Math.ceil(100/openNavpanes)+"%";
  rowsArray = new Array();
  for (var i = 0; i < navpanes.length; i++) {
	rowsArray[rowsArray.length] = navpaneHeaderSize;
	rowsArray[rowsArray.length] = navpanes[i].open ? openNavpaneSize : navpanes[i].minSize;
  }
  var navpanePaddingSize = openNavpanes > 0 ? "0" : "*";
  rowsArray[rowsArray.length] = navpanePaddingSize;
  var rows = rowsArray.join(",");
  return rows;
}

function adjustNavpanes() {
  var rows = getNavpaneRows();
  var navpaneFrameset = document.getElementById(navpaneFramesetId);
  navpaneFrameset.rows = rows;
}

function getNavpane(name) {
  for (var i = 0; i < navpanes.length; i++) {
	if (navpanes[i].name == name) {
	  return navpanes[i];
	}
  }
}

function setNavpaneState( sName, bOpen ) {
	var tv = getNavpane(sName);
	tv.open = bOpen;
	adjustNavpanes();
}

function toggleNavpaneState(name) {
	var tv = getNavpane(name);
	tv.open = !tv.open;
	adjustNavpanes();
}

function isNavpaneOpen(name) {
  var tv = getNavpane(name);
  return tv.open;
}

/* called from tree views to notify about changes */
function onTreeviewChange(p) {
  if (!p || !p.event) return;
  switch (p.event) {
	case "select":
	  // unfocus other treeviews
	  for (var i = 0; i < navpanes.length; i++) {
		var navpaneFrame = window.frames[navpanes[i].name]; 
		if (navpaneFrame != p.window && navpaneFrame.setFocus) {
		  navpaneFrame.setFocus(false);
		}
	  }
	  break;
  }
}
