var modelID = "model";
var nodeLines;
var nodes;
var route;

function getEl(id) {
	return document.getElementById(id);
}

function synchronize() {
	try {
		var l = response.length;
		nodes = new Array(l);
		nodeLines = new Array(l);

		for (var i = 0; i < l; i++)
			nodeLines[i] = response[i];

		processNode(0);
	} catch(e) {
		//alert(e.message);
	}
}

function receiveNetwork(str) {	
	try {
	    nodeLines = str.split("#");

	    nodes = new Array(nodeLines.length);

	    processNode(0);
	} catch(e) {
		//alert(e.message);
	}
}

function switchMode() {
	if (getEl("switchMode").value == "Network Design Mode") {
		getEl("switchMode").value = "Network Test Mode";
		getEl(modelID).setNodeEventIn("S", "designMode", getNodesString());
//		getEl("loadNetwork").disabled = false;
	} else {
		getEl("switchMode").value = "Network Design Mode";
		getEl(modelID).setNodeEventIn("S", "simulationMode", "");
//		getEl("loadNetwork").disabled = true;
	}
}

function processNode(nodeIndex) {
	try {
	    var fields = nodeLines[nodeIndex].split("|");
	    var children = fields[2].split(" ");

	    nodes[nodeIndex] = new Node(fields[0], fields[1], children, fields[3]);

	    var temp = children[0] + "";
    	
	    if (temp.length > 0) {
		    for (var i = 0; i < children.length; i++) {
			    processNode(parseInt(children[i]));
		    }
	    }
	} catch(e) {
		//alert("Error at node index " + nodeIndex + ":" + e.message);
	}
}

function getRoute(nodeIndex) {
	route = "";

	traverseNode(nodeIndex);

	getEl(modelID).setNodeEventIn("S", "sendSignal", route);
}

function traverseNode(nodeIndex) {
	try {
	    route = nodeIndex + " " + route;

	    if (nodeIndex == 0)
		    return;

	    traverseNode(nodes[nodeIndex].getParent());
	} catch(e) { 
		//alert("Error at node index " + nodeIndex + ":" + e.message);
	}
}

function transmittingCompleted() {
}


function getNodesString() {
    try {
	    var str = "";
	    for (var i = 0; i < nodes.length; i++) {
		    str += (nodes[i].getIndex() + "|" + nodes[i].getLocation() + "|" + nodes[i].getChildren() + "|" + nodes[i].getParent() + "#");
	    }
	    return str;
	} catch(e) { 
		//alert("Error at node index "+ i + ":" + e.message + "/n" + str);
	}
}


function loadNetwork() {
	try {
		synchronize();
		getEl(modelID).setNodeEventIn("S", "designMode", getNodesString());
		getEl("switchMode").disabled = false;
		getEl("loadNetwork").disabled = true;
	} catch(e) { 
		//alert(e.message);
	}
}

function debug() {
	var str = "";

	for (i = 0; i < nodes.length; i++)
		str += (nodes[i].getIndex() + "|" + nodes[i].getLocation() + 
		"|" + nodes[i].getChildren() + "|" + nodes[i].getParent() + "#<br />");

	getEl("text").innerHTML = str;
}

function echo(str) {
	var s = getEl("text").innerHTML;
	s += ("<br />" + str);
	getEl("text").innerHTML = s;
}





function Node(index, location, children, parent) {
    this.index = index;
    this.location = location;
    this.children = children;
    this.parent = parent;

    this.getIndex = function() {
	    return this.index;
    }

    this.getLocation = function() {
	    return this.location;
    }

    this.getChildren = function() {
	    var temp = "";
	    for (var i = 0; i < this.children.length - 1; i++)
		    temp += (this.children[i] + " ");

	    temp += this.children[this.children.length - 1];

	    return temp;
    }

    this.getParent = function() {
	    return this.parent;
    }
}



