var infraTreePanels = new Array;
var searchstr = "";

function InfraIsVisible(element) {
	if (element.style.display != "none") {
		if (element.parentElement)
			return InfraIsVisible(element.parentElement);
		else
			return true;
	} else return false;
}

function Infra_setCookie(name, value) {
  var curCookie = name + "=" + escape(value);
  document.cookie = curCookie;
}

function Infra_getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

function Infra_ConvertChars(src) {
	dst = "";
	for (var i=0;i < src.length;i++) {
		if (src.charCodeAt(i) > 160)
			dst += "&#"+ src.charCodeAt(i).toString() + ";";
		else
			dst += src.charAt(i);
	}	
	return dst;
}

function InfraMenu_Hover(menuid, itemid, bhover) {
	if (bhover) {
		var item = igmenu_getItemById(itemid);
		var tip = item.getTag();
		var url = item.getTargetUrl();
		if (tip) item.Element.title = tip;
		if (url) window.status = url; else window.status = "";
	}
}

function InfraTree_Do_Submit(target) {
	document.forms["frmMain"].action = target;
	__doPostBack("", "");
	return false
}

function InfraTree_window_onload() {
	HideSearchDialog();
}

function InfraTree_ClearSearch(orgSrchStr) {
	if (orgSrchStr == searchstr) {
		searchstr = "";
		window.status = "lokaliserer: ";
	}
}

function checkKeys() {
	if (event.keyCode==8 || (event.altLeft==true && event.keyCode==37))
		event.returnValue = false;
}

function InfraTree_SetPanelNames(pnlname) {
	infraTreePanels[infraTreePanels.length] = pnlname;
}

function InfraTree_GetPanelName(pnlno) {
	return infraTreePanels[parseInt(pnlno)];
}

function InfraTree_AfterNodeSelectionChange(treeId, nodeId){
	//Add code to handle your event here
	//var tree = igtree_getTreeById(treeId);
	var node = igtree_getNodeById(nodeId);
	//tree.setSelectedNode(node);
	InfraTree_HideSearchDialog();
	//InfraTree_saveFocus(treeId);
	if (node.getTargetUrl()) {
		Infra_setCookie("INFRA_TREE",treeId)
		Infra_setCookie("INFRA_NDSEL",nodeId)
	}
	//return false;

	//if (node.getTargetFrame()== "_self") {
		//eval(node.getTargetUrl());
	//}
}

function InfraTree_BeforeNodeSelectionChange(treeId, oldNodeId, newNodeId){
	//Add code to handle your event here
	//var tree = igtree_getTreeById(treeId);
	//var node = igtree_getNodeById(newNodeId);
	//return false;
}

function InfraTree_NodeClick(treeId, nodeId){
	//Add code to handle your event here
	var tree = igtree_getTreeById(treeId);
	var node = igtree_getNodeById(nodeId);
	var node2 = tree.getSelectedNode();
	InfraTree_HideSearchDialog();
	InfraTree_saveFocus(treeId);
	Infra_setCookie("INFRA_NDSEL",null)
	searchstr = "";	
	//return false;
}

function InfraTree_HideSearchDialog() {
	for (var i=0;i<infraTreePanels.length;i++) {
		eval(infraTreePanels[i]+'.style.display = "none"');
	}
}

function InfraTree_ShowSearchDialog(treeId){
	//Add code to handle your event here.
/*	InfraTree_HideSearchDialog();
	searchstr = "";	
	var tree = igtree_getTreeById(treeId);
	if (!tree) return;

	var node = tree.getSelectedNode();
	var pnlname = InfraTree_GetPanelName(tree.Events.AfterBeginNodeEdit[0]);
	if (node == null) return;
	if (node.getTag() == -1)
	{
		var htmlobj = node.getElement();
		eval(pnlname+".style.top = htmlobj.offsetTop + tree.Element.offsetTop");
		eval(pnlname+".style.left = htmlobj.offsetLeft + tree.Element.offsetLeft");
		eval(pnlname+".style.width = htmlobj.offsetWidth");
		eval(pnlname+".style.height = htmlobj.offsetHeight");
		eval(pnlname+'.style.display = "block"');
*/
/*				TextBox1.focus(); */
/*				s = "";
		for (var prop1 in htmlobj) {
			s += prop1 + "=[" + eval("htmlobj."+prop1)+"] ";
		}
		alert(s);*/
/*	} */
}

function InfraTree_KeyDown(treeId, keyCode){
	if (keyCode == 8) {
		event.returnValue = false;
		if (searchstr.length > 0) searchstr = searchstr.substr(0,searchstr.length-1);
		window.status = "lokaliserer: " + searchstr;
		return false;
	}
}

// Catch keys to do a localize 
// global var searchstr is the store for what to localize
var actndx; // Global between the next two rutines
function InfraTree_KeyUp(treeId, keyCode){
	//Add code to handle your event here.
	var tree = igtree_getTreeById(treeId);
	var node = tree.getSelectedNode();

	var chldrn;
	
	if (keyCode != 32 && keyCode !=  192 && keyCode !=  221 && keyCode !=  222 && keyCode != 46 &&
		(keyCode < 65 || keyCode > 90))
	{
		return;
	}

	if (keyCode == 46) { // "." but also press on delete button.
		if (searchstr.length > 0) searchstr = searchstr.substr(0,searchstr.length-1);
	}
	else {	
		searchstr +=  String.fromCharCode(keyCode).toLowerCase();
	}
	window.status = "lokaliserer: " + searchstr;
	window.setTimeout("InfraTree_ClearSearch(\""+searchstr+"\");",1000);

	// fill array with nodes
	var nodeArray = new Array;
	actndx = -1;
	InfraTree_FillNodeArray(nodeArray, tree.getNodes(), node);
	
/*	if (node != null)
	{
		node = node.getParent();
		if (node != null)
			chldrn = node.getChildNodes();
		else
			chldrn = tree.getNodes();
	}
	else
		chldrn = tree.getNodes();

	for (var ndx = 0; ndx<nodeArray.length; ndx++)
	{
		if (chldrn[ndx] == node) {actndx = ndx;	break;}
	}
*/
	ndx = actndx+1;	
	if (ndx >= nodeArray.length) ndx = 0;
	while (ndx != actndx)
	{
		if (actndx == -1) actndx = 0; // Ensure that loop stops even when no actual node
		if (nodeArray[ndx].getText().substring(searchstr.length,0).toLowerCase() == searchstr)
		{
			tree.setSelectedNode(nodeArray[ndx]);
			return;
		}
		ndx++;
		if (ndx >= nodeArray.length) ndx = 0;
	}
}

function InfraTree_FillNodeArray(nodeArray, nodes, actnode) {
	for (var ndx = 0; ndx<nodes.length; ndx++)
	{
		nodeArray.push(nodes[ndx]);
		if (nodes[ndx] == actnode) actndx = nodeArray.length-1;
		if (nodes[ndx].getExpanded()) 
			InfraTree_FillNodeArray(nodeArray, nodes[ndx].getChildNodes(), actnode);
	}
}

function InfraTree_InitializeTree(treeId, keyCode){
	if (infraTreePanels.length > 0)	InfraTree_ShowSearchDialog(treeId);
}

function InfraTree_saveFocus(controlid) {
	var control = document.getElementById("__refocus");
	if( control != null ){control.value = controlid;}
}

function InfraTree_setFocus(control) {
	var treeid = Infra_getCookie("INFRA_TREE");
	if (treeid){
		var tree = igtree_getTreeById(treeid);
		if (tree && InfraIsVisible(tree.Element)) {
			tree.Element.focus();
			var nodeid = Infra_getCookie("INFRA_NDSEL");
			if (nodeid) {
				var node = igtree_getNodeById(nodeid);
				if (node){
					tree.setSelectedNode(node);
				}
			}
		} 
//		var focuscontrol = document.getElementById(control.value);
//		if (focuscontrol != null && InfraIsVisible(focuscontrol)) {
//			eval(focuscontrol.id+".focus();");
//		}
	}
}

function InfraTree_NodeCollapse(treeId, nodeId){
	//Add code to handle your event here
	var node = igtree_getNodeById(nodeId);
	Infra_setCookie("INFRA_TREE",null)
	Infra_setCookie("INFRA_NDSEL",null)
	InfraTree_CollapseNodes(node.getChildNodes());
}

function InfraTree_CollapseNodes(nodes) {
	for (var ndx=0; ndx < nodes.length; ndx++) {
		if (nodes[ndx].getExpanded()) {
			//InfraTree_CollapseNodes(nodes[ndx].getChildNodes()); // not needed because collapse event is fired
			nodes[ndx].setExpanded(false);
		}
	}
}

function InfraTree_DragStart(oTree, oNode, oDataTransfer, oEvent) {
	oDataTransfer.dataTransfer.setData("Text", oNode.getDataKey());
	oDataTransfer.dataTransfer.effectAllowed = "move";
}

function InfraTree_Drop(oTree, oNode, oDataTransfer, oEvent) {

}

// Hack used to overcome a problem with זרו conversion when editing a node
function InfraTree_BeforeEndNodeEdit(oTree, oNode, newValue) {
	igtree_editControl.value = Infra_ConvertChars(unescape(newValue));
}

function InfraTree_ConfirmNodeDelete(treeid, question) {
	var tree = igtree_getTreeById(treeid)
	if (!tree) return false;
	var node = tree.getSelectedNode();
	if (!node) return false;
	if (node.hasChildren()) {
		return confirm(question); }
	else
		return true;
}

function InfraTab_AfterSelectedTabChange(oWebTab, oTab, oEvent) {
// Check to see if tab should be changed
	Infra_setCookie("INFRA_TREE",null)
	Infra_setCookie("INFRA_NDSEL",null)
	if (oTab && oTab.Key && oTab.Key != "") {
		InfraTree_Do_Submit(oTab.Key);
	}
}
