//anonymous function wraps the remainder of the logic:

function makeBranch(parent,nodes) {
	for (var node in nodes) {
		if ((typeof nodes[node] == "object") && (nodes[node]['l'])) {
			var tmpNode;
			if (typeof nodes[node]['h'] == "undefined"){
				var tmpObject = {label:nodes[node]['l'],nodeId:nodes[node]['nI']};
			}else{
				var tmpObject = {label:nodes[node]['l'],nodeId:nodes[node]['nI'], highlightState:nodes[node]['h']};
			}
			tmpNode = new YAHOO.widget.TextNode(tmpObject, parent, nodes[node]['x']);
			if (nodes[node]['c']) {
				makeBranch(tmpNode,nodes[node]['c']);
			}
		}
	}
}

function getSelectedRadio(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";

}


function drawCountryTree(div) {

    // Define the callbacks for the asyncRequest
    var callbacks = {

        success : function (o) {
            // Process the JSON data returned from the server
            var nodes = [];
            try {
                nodes = YAHOO.lang.JSON.parse(o.responseText);
                treeInit(div,nodes['data']);

            }
            catch (x) {
                alert("JSON Parse failed!");
                return;
            }

            // The returned data was parsed into an array of objects.
            // Add a P element for each received message
        },

        failure : function (o) {
            if (!YAHOO.util.Connect.isCallInProgress(o)) {
//                alert("Async call failed!");
            }
        },

        timeout : 10000
    }

    // Make the call to the server for JSON data
        YAHOO.util.Connect.asyncRequest('GET',"/action/getCountryOptions", callbacks);
}


function drawSelectionTree(div) {

    // Define the callbacks for the asyncRequest
    var callbacks = {

        success : function (o) {
            // Process the JSON data returned from the server
            var nodes = [];
            try {
                nodes = YAHOO.lang.JSON.parse(o.responseText);
		treeInit(div,nodes['data']);
		
            }
            catch (x) {
                alert("JSON Parse failed!");
                return;
            }

            // The returned data was parsed into an array of objects.
            // Add a P element for each received message
        },

        failure : function (o) {
            if (!YAHOO.util.Connect.isCallInProgress(o)) {
//                alert("Async call failed!");
            }
        },

        timeout : 10000
    }

    // Make the call to the server for JSON data
	selected=getSelectedRadio(YAHOO.util.Dom.get("report_form").elements['type']);
	YAHOO.util.Connect.asyncRequest('GET',"/action/getReportOptions?type="+selected, callbacks);
}

	function treeInit(div, nodes) {
		tree1 = new YAHOO.widget.TreeView(div);
		makeBranch(tree1.getRoot(), nodes);
		tree1.setNodesProperty('propagateHighlightUp',true);
		tree1.setNodesProperty('propagateHighlightDown',true);
		tree1.subscribe('clickEvent',tree1.onEventToggleHighlight);		
		tree1.render();

		YAHOO.util.Event.on('logHilit','click',function() {
			var hiLit = tree1.getNodesByProperty('highlightState',1);
			if (YAHOO.lang.isNull(hiLit)) { 
				YAHOO.log("None selected");
			} else {
				var labels = [];
				for (var i = 0; i < hiLit.length; i++) {
					labels.push(hiLit[i].label);
				}
				YAHOO.log("Highlighted nodes:\n" + labels.join("\n"), "info", "example");
			}
		});

	};

	//Add an onDOMReady handler to build the tree when the document is ready

	function getSelectedTree(tree) {
		var hiLit = tree.getNodesByProperty('highlightState',1);
		if (YAHOO.lang.isNull(hiLit)) {
			return ""; 
		} else {
			var selected = "";
			for (var i = 0; i < hiLit.length; i++) {
				selected += hiLit[i].data['nodeId']+",";
			}
			return selected;
		}
	}


