var openImg = new Image();
openImg.src = "/iepdt/resources/images/mlastnode.gif";
var closedImg = new Image();
closedImg.src = "/iepdt/resources/images/pnode.gif";
var loadImg = new Image();
loadImg.src = "/iepdt/resources/images/circle-anim.gif";
var loadWideImg = new Image();
loadWideImg.src = "/iepdt/resources/images/wide-anim.gif";

//move this function to util file or common file
function trim(str) {
   return str.replace(/^\s*|\s*$/g,"");
}

function showAll(id) {
  //get element by id
  element = get_element(id)
  //call showBranch for every branch node in id
  for(i=0;i<element.childNodes.length;i++) {
    for(k=0;k<element.childNodes[i].childNodes.length;k++) {
      if(element.childNodes[i].childNodes[k].className == 'branch') {
        showBranch(element.childNodes[i].childNodes[k].id)
        swapFolder(element.childNodes[i].childNodes[k].id.replace("Branch","Folder"))
        //alert(element.childNodes[i].childNodes[k].id);
      }
    }
  }
}

function showBranch(branch){
  //document.ssgtHiddenForm.hiddenOpenNodes.value += branch+"~";
  if(document.getElementById(branch)) {
  var objBranch = document.getElementById(branch);
  var objBranchStyle = objBranch.style;
  if(objBranchStyle.display == "none"){
    // add to open list
    if(document.ssgtHiddenForm.hiddenOpenNodes.value.indexOf(branch)==-1) {
      if(document.ssgtHiddenForm.hiddenOpenNodes.value.length > 0)
        document.ssgtHiddenForm.hiddenOpenNodes.value += "~";
      document.ssgtHiddenForm.hiddenOpenNodes.value +=  branch;
    }
    // remove from closed list
    if(document.ssgtHiddenForm.hiddenClosedNodes.value.indexOf(branch)!=-1) {
      var str = document.ssgtHiddenForm.hiddenClosedNodes.value
      //str = str.substr(0,str.indexOf(branch))+str.substr(str.indexOf(branch)+branch.length+1,str.length);
      if(str.charAt(0) == '~')
        str = str.substring(1,str.length);
      else if (str.charAt(str.length-1)=="~")
        str = str.substring(0,str.length-2);
      else
        str = str.replace("~~","~");
      document.ssgtHiddenForm.hiddenClosedNodes.value = str;
    }
    objBranchStyle.display="block";
  } else { // assume block display if no style -- if(objBranchStyle.display=="block") {
    // remove from open list
    if(document.ssgtHiddenForm.hiddenOpenNodes.value.indexOf(branch)!=-1) {
      var str = document.ssgtHiddenForm.hiddenOpenNodes.value
      //str = str.substr(0,str.indexOf(branch))+str.substr(str.indexOf(branch)+branch.length+1,str.length);
      str = str.replace(branch,"");
      if(str.charAt(0) == '~')
        str = str.substring(1,str.length);
      else if (str.charAt(str.length-1)=="~")
        str = str.substring(0,str.length-2);
      else
        str = str.replace("~~","~");
      document.ssgtHiddenForm.hiddenOpenNodes.value = str;
    }
    // add to closed list
    if(document.ssgtHiddenForm.hiddenClosedNodes.value.indexOf(branch)==-1) {
      if(document.ssgtHiddenForm.hiddenClosedNodes.value.length > 0)
        document.ssgtHiddenForm.hiddenClosedNodes.value += "~";
      document.ssgtHiddenForm.hiddenClosedNodes.value +=  branch;
    }
    objBranchStyle.display="none";
  }
  // check if has two different displays that need to be switched
  if(branch.indexOf('search')>-1 || 
       branch.indexOf('propertyObjectTypeTree')>-1 || branch.indexOf('propertySubjectTypeTree')>-1 ||
       (getParentRootLevel(branch).indexOf("0_0_0")<0 && 
         (branch.indexOf('SubjectTypeTree')>-1 || branch.indexOf('ObjectTypeTree')>-1 ||
         branch.indexOf('ParentsTree')>-1 || branch.indexOf('ChildrenTree')>-1)
       )
    ) 
     showType(branch);
  
  }
}

function showType(branch) {
  var branch_type = "TypeDisplay"+branch.substring(branch.indexOf("_"), branch.length);
  //branch_type = "TypeDisplay"+branch_type;
  var branch_type2 = branch_type+"2";
  
  var objBranchStyle = document.getElementById(branch_type).style;
  var objBranchStyle2 = document.getElementById(branch_type2).style;
  
  if(objBranchStyle.display=="block"){
    
    //objBranchStyle.display="none";
    objBranchStyle2.display="none";
  } else if(objBranchStyle.display=="none") {
  
    objBranchStyle2.display="block";
    //objBranchStyle.display="block";
  } else {
    //hopefully dont get here
  }
  //document.write("branches: "+branch_type+" "+branch_type2);
  
}

function openBranch(branch) {
  var objBranch;
  
  //look into updating this...
  if (document.getElementById(branch)) {
  	objBranch = document.getElementById(branch).style;
  } else if (document.getElementById(branch + "_children")) {
  	objBranch = document.getElementById(branch + "_children").style;
  }
  
  if(objBranch) {
	  // add to open list
	  if(document.ssgtHiddenForm.hiddenOpenNodes.value.indexOf(branch)==-1) {
	    if(document.ssgtHiddenForm.hiddenOpenNodes.value.length > 0)
	      document.ssgtHiddenForm.hiddenOpenNodes.value += "~";
	    document.ssgtHiddenForm.hiddenOpenNodes.value +=  branch;
	  }
	  
	  // remove from closed list
	  if(document.ssgtHiddenForm.hiddenClosedNodes.value.indexOf(branch)!=-1) {
	    var str = document.ssgtHiddenForm.hiddenClosedNodes.value
	    //str = str.substr(0,str.indexOf(branch))+str.substr(str.indexOf(branch)+branch.length+1,str.length);
	    if(str.charAt(0) == '~')
	      str = str.substring(1,str.length);
	    else if (str.charAt(str.length-1)=="~")
	      str = str.substring(0,str.length-2);
	    else
	      str = str.replace("~~","~");
	      document.ssgtHiddenForm.hiddenClosedNodes.value = str;
	  }
	  
	  objBranch.display="block";
  }
}

function closeBranch(branch) {
  var objBranch;
  
  //look into updating this...
  if (document.getElementById(branch)) {
  	objBranch = document.getElementById(branch).style;
  } else if (document.getElementById(branch + "_children")) {
  	objBranch = document.getElementById(branch + "_children").style;
  }
  
  if(objBranch) {
	  // remove from open list
	  if(document.ssgtHiddenForm.hiddenOpenNodes.value.indexOf(branch)!=-1) {
	    var str = document.ssgtHiddenForm.hiddenOpenNodes.value
	    //str = str.substr(0,str.indexOf(branch))+str.substr(str.indexOf(branch)+branch.length+1,str.length);
	    str = str.replace(branch,"");
	    if(str.charAt(0) == '~')
	      str = str.substring(1,str.length);
	    else if (str.charAt(str.length-1)=="~")
	      str = str.substring(0,str.length-2);
	    else
	      str = str.replace("~~","~");
	    document.ssgtHiddenForm.hiddenOpenNodes.value = str;
	  }
	  
	  // add to closed list
	  if(document.ssgtHiddenForm.hiddenClosedNodes.value.indexOf(branch)==-1) {
	    if(document.ssgtHiddenForm.hiddenClosedNodes.value.length > 0)
	      document.ssgtHiddenForm.hiddenClosedNodes.value += "~";
	    document.ssgtHiddenForm.hiddenClosedNodes.value +=  branch;
	  }
	  objBranch.display="none";
  }
}

// boolean to set open or closed
function setbranch(branch,open) {
  if(open) 
    openBranch(branch);
  else
    closeBranch(branch);
}

function getXMLHttpRequest() {
	var request = false;

	try {
		request = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP");
	   	} catch (othermicrosoft) {
	   		try {
	      		request = new ActiveXObject("Microsoft.XMLHTTP");
	   		} catch (failed) {
	      		request = false;
	   		}  
	   	}
	}
	
	if (!request) {
		//how do we want to handle this?
		alert("JavaScript error. Please refresh the page.");
	}
	
	return request;
}

function getBranch(branch) {
	var request;
	var childrenDiv = document.getElementById(branch + "_children");
	var typeSpan = document.getElementById(branch + "_typeSpan");
	var aElement = document.getElementById(branch + "_link");
	var ahref;
	
	//if children have not been loaded into page, send request for children. Otherwise, show/hide children.
	if (trim(childrenDiv.innerHTML).length == 0) {				
		request = getXMLHttpRequest();
		loadImage(branch);
		ahref = aElement.href;
		aElement.href = "javascript:;";
		document.ssgtHiddenForm.hiddenRequestNode.value = branch;
		
		if(document.ssgtHiddenForm.hiddenOpenNodes.value.indexOf(branch) == -1) {
	    	if(document.ssgtHiddenForm.hiddenOpenNodes.value.length > 0) {
	      		document.ssgtHiddenForm.hiddenOpenNodes.value += "~";
	      	}
	      	
	    	document.ssgtHiddenForm.hiddenOpenNodes.value +=  branch;
	 	}
	 	
		var url = "SSGT-GetNode.do?hiddenRequestNode=" + branch;
		url += "&hiddenOpenNodes=" + document.ssgtHiddenForm.hiddenOpenNodes.value;
		url += "&hiddenClosedNodes=" + document.ssgtHiddenForm.hiddenClosedNodes.value;
		
		request.open("GET", url, true);
		request.onreadystatechange = getBranchCallBack;
		request.send(null);
	} else {
		if (childrenDiv.style.display == "none") {
			openBranch(branch);
			var typeSpanChildren = document.getElementById(branch + "_typeSpanChildren");
			if (typeSpanChildren) {
				typeSpan.style.display = "none";
			}
		} else {
			closeBranch(branch);
			typeSpan.style.display = "inline";
		}
	}
	
	function getBranchCallBack() {
		if(request.readyState == 4) {
			if (request.status == 200) {
				var response = request.responseText;
				
				childrenDiv.innerHTML = response;
				aElement.href = ahref;
				var typeSpanChildren = document.getElementById(branch + "_typeSpanChildren");
				if (typeSpanChildren) {
					typeSpan.style.display = "none";
				}
				loadedImage(branch);
			}
		}
	}
}


function showHideInherited(id) {
    var request;
	var inheritedDiv = document.getElementById(id + "_inherited");
	var showInheritedSpan = document.getElementById(id + "_show_inherited");
	var ahref;
	
	if (trim(inheritedDiv.innerHTML).length == 0) {				
		request = getXMLHttpRequest();

		var url = "SSGT-GetInherited.do?node=" + id;
		
		request.open("GET", url, true);
		request.onreadystatechange = getInheritedCallBack;
		request.send(null);
		
		showInheritedSpan.innerHTML = "<a href=\"javascript:;\"><img src=\""+loadWideImg.src+"\"/></a>";
		
	} else {
		if (inheritedDiv.style.display == "none") {
		    inheritedDiv.style.display = "inline";
		    showInheritedSpan.innerHTML = '<a href="javascript:showHideInherited(\''+id+'\');">hide inheritance</a>';
		} else {
			inheritedDiv.style.display = "none";
			showInheritedSpan.innerHTML = '<a href="javascript:showHideInherited(\''+id+'\');">show inheritance</a>';
		}
	}
	
	function getInheritedCallBack() {
		if(request.readyState == 4) {
			if (request.status == 200) {
				var response = request.responseText;
				
				inheritedDiv.innerHTML = response;
				
				showInheritedSpan.innerHTML = '<a href="javascript:showHideInherited(\''+id+'\');">hide inheritance</a>';
			}
		}
	}
}

function swapFolder(img){
  objImg = document.getElementById(img);
  if(objImg.src.indexOf('pnode.gif')>-1)
    objImg.src = openImg.src;
  else
    objImg.src = closedImg.src;
}

function loadImage(branch) {
  img = branch.replace(/Branch/,"Folder")
  objImg = document.getElementById(img);
  objImg.src = loadImg.src;
  document.body.style.cursor = "progress";
}

function loadedImage(branch) {
  img = branch.replace(/Branch/,"Folder")
  objImg = document.getElementById(img);
  objImg.src = openImg.src;
  document.body.style.cursor = "auto";
}

// check all button
function getParentRootLevelElement(elm) {
  return getParentRootLevel(elm.name);
}

function getParentRootLevel(str) {
  var strArray = str.split("_");
  var parentRootLevel = strArray[2]+"_"+strArray[3]+"_"+strArray[4];
  return parentRootLevel;
}

function checkUncheckAll(box) {
  var currEl, currForm = box.form, c = 0;
  for (c; currForm.length > c; ++c) {
    currEl = currForm[c];
    if (currEl == box) {
      while (currForm[++c].name != box.name) { 
        if(currForm[c].type == 'checkbox'){ if (getParentRootLevelElement(box) == getParentRootLevelElement(currForm[c]) ) {
          currForm[c].checked = box.checked;
        }}
      }
    break;
    }
  }
}

function submit(form) {
  form.submit();
}