//var tkv_emit = new Object();

function tk_changeStyle(targetObj, attrArray, valueArray) {
	var tgt = document.getElementById(targetObj);
	for(i=0;i<attrArray.length;i++) {
		tgt.style[attrArray[i]] = valueArray[i];
	}
}

function tk_doAlert(msg) {
	alert(msg);
}

function tk_doHide(compId, type) {
	var comp = document.getElementById(compId);
	if(type == "display")
		comp.style.display = "none";
	else if(type == "visibility");
		comp.style.visibility = "hidden";
}

function tk_doShow(compId, type) {
	var comp = document.getElementById(compId);
	if(type == "display") {
		comp.style.display = "";
		comp.style.visibility = "visible";
	}
	else if(type == "visibility")
		comp.style.visibility = "visible";
}

function tk_doPost(formName) {
	var myForm = document.getElementById(formName);
	myForm.submit();
}

function tk_doSubmit(compId) {
	var myForm = document.getElementById(compId);
	myForm.submit();
}
function tk_doLink(link) {
	window.location = link;
}

function tk_addRow(compId, newRowHTMLidx) {
	compId = compId + "_inner";
	var myTable = document.getElementById(compId);
	myTable.insertRow(myTable.rows.length);
	myTable.rows[myTable.rows.length-1].innerHTML = tk_addrow_html[newRowHTMLidx];
}

function tk_removeRow(compId, rowIdx) {
	compId = compId + "_inner";
	var myTable = document.getElementById(compId);
	if(rowIdx == -1) {	// remove last row
		myTable.deleteRow(myTable.rows.length-1);
	}
	else {
		myTable.deleteRow(rowIdx);
	}
}

function tk_switchTab(compId, newTabId) {
	var newTabLabel = document.getElementById("tab_"+newTabId);
	var oldTabLabel = document.getElementById("tab_"+tk_oldTabIds[compId]);
	oldTabLabel.className = "tab";
	newTabLabel.className = "activeTab";
	var newTab = document.getElementById(newTabId);
	var oldTab = document.getElementById(tk_oldTabIds[compId]);
	oldTab.style.display = "none";
	newTab.style.display = "block";
	tk_oldTabIds[compId] = newTabId;
}

function tk_setSrc(compId, src) {
	var myIframe = document.getElementById(compId);
	myIframe.src = src;
}

function tk_doSWATPost(formName) {
	var myForm = document.getElementById(formName);
	myForm.submit();
}

function tk_doChangeText(compId, newText) {
	var comp = document.getElementById(compId + "_obj");
	if(comp == null) {
		comp = document.getElementById(compId);
	}
	comp.innerHTML = newText;
}

function tk_doEmit(tkv_emitter) {
	tkv_emitter();
}

function tk_doToggleNext(tkv_toggle_idx, tkv_toggle_states) {
	tkv_toggle_states[this[""+tkv_toggle_idx]]();
	if(this[""+tkv_toggle_idx] == tkv_toggle_states.length - 1) {
		this[""+tkv_toggle_idx] = 0;
	}
	else {
		this[""+tkv_toggle_idx] = this[""+tkv_toggle_idx] + 1;
	}
}

function tk_doSwitchTab(tkv_tab_idx, tkv_new_tab, oldtabhandle, oldclass,
			newtabhandle, newclass) {
	var oldTab = document.getElementById(this[""+tkv_tab_idx] + "_tab");
	var newTab = document.getElementById(tkv_new_tab + "_tab");
	var nthandle = document.getElementById(newtabhandle);
//	alert("Old tab handle: " + oldtabhandle + ", " + this[""+oldtabhandle]);
	var othandle = document.getElementById(this[""+oldtabhandle]);
//	alert("othandle: " + othandle);
	oldTab.style.display = 'none';
	othandle.className = oldclass;
	newTab.style.display = '';
	nthandle.className = newclass;
	this[""+tkv_tab_idx] = tkv_new_tab;
	this[""+oldtabhandle] = newtabhandle;
}

function tk_doSelect(newIdx, oldIdx, selActions, deselActions) {
	if(this[""+deselActions] != null && this[""+deselActions][this[""+oldIdx]] != null) {
		var deselFunc = this[""+deselActions][this[""+oldIdx]];
		if(deselFunc != null)
			deselFunc();
	}
	if(this[""+selActions] != null && this[""+selActions][newIdx] != null) {
		var selFunc = this[""+selActions][newIdx];
		if(selFunc != null)
			selFunc();
	}
	this[""+oldIdx] = newIdx;
}

function tk_toggleDisplay(itemId, nodeId, collapseClass, expandClass) {
	var item = document.getElementById(itemId);
	var node = document.getElementById(nodeId);
	if(item.style.display == 'none') {
		item.style.display = '';
		node.className = collapseClass;
	}
	else {
		item.style.display= 'none';
		node.className = expandClass;
	}
}

function tk_collapseTree(treeId, expandClass) {
	for(i in this["tkv_listids_" + treeId]) {
		var node = document.getElementById(this["tkv_listids_" + treeId][i]);
		node.style.display = 'none';
	}
	for(i in this["tkv_bulletids_" + treeId]) {
		var bullet = document.getElementById(this["tkv_bulletids_" + treeId][i]);
		bullet.className = expandClass;
	}
}

function tk_expandTree(treeId, collapseClass) {
	for(i in this["tkv_listids_" + treeId]) {
		var node = document.getElementById(this["tkv_listids_" + treeId][i]);
		node.style.display = '';
	}
	for(i in this["tkv_bulletids_" + treeId]) {
		var bullet = document.getElementById(this["tkv_bulletids_" + treeId][i]);
		bullet.className = collapseClass;
	}
}

function tk_collapseNode(treeId, nodeId, expandClass) {
	var node = document.getElementById("list_" + nodeId);
	var bullet = document.getElementById("bullet_" + nodeId);
	node.style.display = 'none';
	bullet.className = expandClass;
}

function tk_expandNode(treeId, nodeId, collapseClass) {
	var node = document.getElementById("list_" + nodeId);
	var bullet = document.getElementById("bullet_" + nodeId);
	for(i in this["tkv_disabled_nodes_" + treeId]) {
		if(i == nodeId)
			return;
	}
	node.style.display = '';
	bullet.className = collapseClass;
}

function tk_disableNode(treeId, nodeId, expandClass) {
	tk_toggleDisplay(treeId, nodeId, expandClass);
	this["tkv_disabled_nodes_" + treeId].push(nodeId);
}

function tk_enableNode(treeId, nodeId) {
	for(var i = 0; i < this["tkv_disabled_nodes_" + treeId].length; i++) {
		if(this["tkv_disabled_nodes_" + treeId][i] == nodeId) {
			this["tkv_disabled_nodes_" + treeId].splice(i, 1);
			return;
		}
	}
}

function toggleNode(tableId, nodeArrayId, nodeStatusArrayId, nodeId) {
	var show = 0;
	if(window[nodeStatusArrayId][nodeId] == 0)
		show = 1;
	changeNode(tableId, nodeArrayId, nodeStatusArrayId, nodeId, show);
}
			
function changeNode(tableId, nodeArrayId, nodeStatusArrayId, nodeId, show) {
	var table = document.getElementById(tableId);
	var tArray = window[nodeArrayId];
	// we want to hide this node, and change its status to hidden,
	//   and hide its children, but not change their status
	window[nodeStatusArrayId][nodeId] = show;
	var nd = document.getElementById("node" + nodeId + "_bullet");
	if(show == 0)
		nd.className = "plus";
	else
		nd.className = "minus";
	changeSubtree(table, tArray, window[nodeStatusArrayId], nodeId, show,
				window.showNode, window.hideNode);
	fixColors(tableId, nodeStatusArrayId, 'oddRow', 'evenRow');
}
			
function changeSubtree(table, nodeArray, nodeStatusArray, nodeId, show,
							showAction, hideAction) {
	var i = 0;
	
	for(i = nodeId + 1; i < nodeArray.length; i++) {
		if(nodeArray[i] != nodeId)
			continue;
		if(show == 1) showAction(table, i + 1);
		else hideAction(table, i + 1);
		if(show == 0 || nodeStatusArray[i] == 1)
			changeSubtree(table, nodeArray, nodeStatusArray, i, show,
						showAction, hideAction);
	}
}

function hideNode(table, node) {
	table.rows[node].style.display = 'none';
}

function showNode(table, node) {
	table.rows[node].style.display = '';
}

function fixColors(tableId, stateArray, oddClass, evenClass) {
	var table = document.getElementById(tableId);
	var i;
	var isOdd = 1;
	for(i = 1; i < table.rows.length; i++) {
		if(window[stateArray][i-1] == 1) {
			if(isOdd == 1) {
				table.rows[i].className = oddClass;
				isOdd = 0;
			}
			else {
				table.rows[i].className = evenClass;
				isOdd = 1;
			}
		}
	}
}

function tk_hidePopup(popupId) {
	if(popupId == -1)
		return;
	window['tkv_popups'] = -1;
	var popup = document.getElementById(popupId);
	popup.style.display = 'none';
}

function tk_showPopup(popupId) {
	tk_hidePopup(window['tkv_popups']);
	window['tkv_popups'] = popupId;
	var popup = document.getElementById(popupId);
	popup.style.display = '';
}

function tk_togglePopup(popupId) {
	if(window['tkv_popups'] == popupId)
		tk_hidePopup(popupId);
	else
		tk_showPopup(popupId);
}
