/**
* @author Bob Hanson hansonr@stolaf.edu

*/

searchList = "&"+document.location.search.substring(1)+"&"
function getField(sfield, defValue){
	var s = "&"+sfield+"="
	if (searchList.indexOf(s) < 0 && defValue)return defValue
	return unescape((searchList+s+"&").split(s)[1].split("&")[0])
}

dosetautocomplete=false
recoverFilter=0
recoverCatStr=0
recoverPrinStr=0

function doInit() {
  setNodes()
  if(dosetautocomplete) setAutoComplete("search_text","search_suggests")
  if(recoverFilter!=0) recoverSearch(recoverFilter,recoverCatStr,recoverPrinStr);
} window.onload = doInit

Concepts = new Array()
IdToNode = new Array()
TopConcepts = new Array()

Principles = new Array()
PrincipleIndex = new Array()
nPrinciples = 0
nTop = 0
nAuthors = 0
TOPLEVEL = 1

function setNodes(){
     var vals = document.search_form["new_cat_vals[]"]
     var nCat = vals.length
     for (var i=0; i < nCat; i++) {
       var chkBox = vals[i]
       if (chkBox.checked)IdToNode[chkBox.value].checked = true
     }
}

CatCounts = [];
PrinCounts = [];

function countCat(id, count) {
	CatCounts[id] = count
}

function countPrin(id,count) {
	PrinCounts[id] = count
}

function addCat(category, category_id, category_principle_id, id2, parent_id) {
	if (!CatCounts[category_id])
      CatCounts[category_id] = 0
	var n = CatCounts[category_id]
	if (!n)
      n = 0
	addConcept2(parent_id, category_id, category, n);
}

function addPrin(principle_id,principle,principle_note) {
	var P = Principles[principle_id] = new Array()
	PrincipleIndex[principle] = principle_id
	P.title = principle
	P.id = principle_id
	P.count = PrinCounts[principle_id]
	if (!P.count)P.count = 0
	P.checked = false;
	P.explanation = principle_note
}

function addConcept(){}

function newP(iPrinciple,count,title,explanation) {
}

function addPrinciple(iPrinciple,count,title,explanation) {
}

function addConcept2(parentid, id, name, count) {
  if (parentid != 0 && count == 0) return
  id = "" + id
  parentid = "" + parentid
  var node = Concepts[id]
  var parent = Concepts[parentid]
  if (!node){
	  node = Concepts[id] = new Array()
	  node.nNodes = 0
  }
  node.checked = false;
  node.count = (count ? count : 0)
  node.id = parentid + "-" + id
  node.name = name
  node.level = (parentid == "0" ? 1 : 2)
  IdToNode[node.id] = node
  if (parentid == "0"){
    TopConcepts[nTop++] = node
    node.BooLEAN = false;
    node.displayCheck = function(bool){
      //checks if children should be displayed checked or not
      if (node.BooLEAN == node.checked) return node.DisplayCategory(node.n,!!bool);
      else {
        node.getCategoryTree(node);
        node.DisplayCategory(node.n);
        node.BooLEAN = !node.BooLEAN;}
    }
    node.DisplayCategory = function(n,bool){
      //check if hidden or not
      isOpen = (document.getElementById("SubCategory"+n).style.display == "block")
      document.getElementById("SubCategory"+n).innerHTML = node.getCategoryTree(TopConcepts[node.n])
      if (bool){
        document.getElementById("SubCategory"+n).style.display = (isOpen) ? "none" : "block";
        document.getElementById("CategoryImage"+n).src =  (isOpen ? BoxPlus.src : BoxMinus.src)
      }
      }
    node.getCategoryTree = function(node){
      //generates the children display recursively; get this node's li element and then print any underneath
      var n =  node.nodes ? -1 : node.count;
      var s = (node.level == 1 ? "" :
      getBox(node.id, "Level"+node.level, node.id, fixName(node), node.checked, n))  
      if (node.nodes) {
        for (var i = 0; i < node.nNodes; i++) 
          s += getCategoryTree(node.nodes[i])
      }
      return s;
    }
    return;
	}
  if (!parent){
  	parent = Concepts[parentid] = new Array()
  }
  if (!parent.nodes){
 	  parent.nodes = new Array()
	  parent.nNodes = 0
  }
  parent.nodes[parent.nNodes++] = node
  node.parent = parent
  return node
}

function sortNodes() {
  for (var i in Concepts)
    if(Concepts[i].nodes)
     	Concepts[i].nodes = Concepts[i].nodes.sort(sortConcepts)    
  TopConcepts = TopConcepts.sort(sortConcepts)
}

function sortConcepts(a,b) {
  if (a.number == 0)return (a.name > b.name ? 1 : a.name < b.name ? -1 : 0)
	var sa = fixName(a, 1)
  var sb = fixName(b, 1)
	return (sa > sb ? 1 : sa < sb ? -1 : 0)
}  
  
function fixName(node, indexNumber) {
  var i = -2 - node.name.indexOf("(")
  var s = (i < 0 ? node.name : node.name.substring(0, i))
  if (!node.number)
    return s
  if (indexNumber) {
    var sn = "_0" + node.number
    s = sn.substring(sn.length - 2, sn.length) + " " + s 
  } else {
    s = node.number + " " + s
  }
  return '#' + s
}

function newTerm(term,explanation) {
 var T = Terms[++nTerms] = new Array();
 T.title = title;
 T.explanation = explanation;
}

