var $j = jQuery.noConflict();

$j(function(){
	
	var data_locality_tree = [
		{ attributes : { "id" : "z_1" }, data : "Maramures", state : "closed" },
		{ attributes : { "id" : "z_2" }, data : "Moldova", state : "closed" },
		{ attributes : { "id" : "z_3" }, data : "Bucovina", state : "closed" },
		{ attributes : { "id" : "z_4" }, data : "Banat", state : "closed" },
		{ attributes : { "id" : "z_5" }, data : "Crisana", state : "closed" },
		{ attributes : { "id" : "z_6" }, data : "Oltenia", state : "closed" },
		{ attributes : { "id" : "z_7" }, data : "Transilvania", state : "closed" },
		{ attributes : { "id" : "z_8" }, data : "Bucuresti - Ilfov", state : "closed" },
		{ attributes : { "id" : "z_9" }, data : "Dobrogea", state : "closed" },
		{ attributes : { "id" : "z_10" }, data : "Muntenia", state : "closed" }
	]; 

	$j("#treeLocality").tree({
		data: {
			type: "json",
			async: true,
			opts: {
				method: "GET"
			}
		},
		types: {
			"default" : {
				draggable	: false,
				renameable	: false,
				deletable	: false
			}
		},
		callback: {
			beforedata: function(node, tree) {
				if (node == false) {
					tree.settings.data.opts.static = data_locality_tree; 
				}
				else {
					tree.settings.data.opts.static = false;
					var value = tree.get_node(node)[0].id.substring(2);
					
					switch (tree.get_node(node)[0].id.substring(0, 1)) {
						// zone
						case "z" : {
							tree.settings.data.opts.url = "http://www.rovoyage.com/locality/ajax-get-locality-by-tree/code_zone/" + value;
							break;
						}
						// county
						case "c" : {
							tree.settings.data.opts.url = "http://www.rovoyage.com/locality/ajax-get-locality-by-tree/code_county/" + value;
							break;
						}
						// locality
						case "l" : {
							tree.settings.data.opts.url = "http://www.rovoyage.com/locality/ajax-get-locality-by-tree/code_locality/" + value;
							break;
						}
					}
				}
			},
			onselect: function(node, tree) {
				if ($j(node).hasClass('leaf')) {
					$j.load($j(node).children('a')[0].href);
				}
				else 
					$j.tree.focused().open_branch('#' + node.id);
			},
			onload: function(tree) {
				var nodes = $j.cookie('tree_locality');
				
				var openZone = function(aZone, aCounty, aLocality) {
					for (var i = 0; i < aZone.length; i++) {
						$j.tree.focused().open_branch('#' + aZone[i]);
					}
				}
				
				if (nodes) {
					var aNodes = nodes.split(',');
					var aZone = new Array();
					var aCounty = new Array();
					var aLocality = new Array();
					
					for (var i = 0; i < aNodes.length; i++) {
						switch (aNodes[i].substring(0, 1)) {
							case 'z' : {
								aZone.push(aNodes[i]);
								break;
							}
							case 'c' : {
								aCounty.push(aNodes[i]);
								break;
							}
							case 'l' : {
								aLocality.push(aNodes[i]);
								break;
							}
						}
					}
					openZone(aZone, aCounty, aLocality);
				}
			},
			onopen: function(node, tree) {
				var nodes = $j.cookie('tree_locality');
				var newNode = node.id;
				
				var openLocality = function(aLocality) {
					var aNodes = nodes.split(',');
					for (var i = 0; i < aNodes.length; i++) {
						if (aNodes[i].substring(0, 1) == 'l') {
							$j.tree.focused().open_branch('#' + aNodes[i]);
						}
					} 
				}
				
				var openCounty = function(nodes) {
					var aNodes = nodes.split(',');
					for (var i = 0; i < aNodes.length; i++) {
						if (aNodes[i].substring(0, 1) == 'c') {
							$j.tree.focused().open_branch('#' + aNodes[i]);
						}
					}
				}
				
				if (nodes) {
					switch (newNode.substring(0, 1)) {
						case 'z' : {
							openCounty(nodes);
							break;
						}
						case 'c' : {
							openLocality(nodes);
							break;
						}
					}
				
					var aNodes = nodes.split(',');
					
					for (var i = 0; i < aNodes.length; i++) {
						if (aNodes[i] == newNode) {
							return;
						}
					}
					newNode = nodes + ',' + node.id;
				}
				$j.cookie('tree_locality', newNode, {path: '/'});
				
				var parentNode = $j.tree.focused().parent(node);
				var aChildren =  tree.children(parentNode);
				for (var k = 0; k < aChildren.length; k++) {
					if (aChildren[k].id != node.id) {
						$j.tree.focused(). close_branch('#' + aChildren[k].id);
					}
				}
			},
			onclose: function(node, tree) {
				var nodes = $j.cookie('tree_locality');
				var newNode = node.id;
				
				if (nodes) {
					var aNodes = nodes.split(',');
					var result = new Array();
					
					for (var i = 0; i < aNodes.length; i++) {
						if (aNodes[i] == newNode) {
							continue;
						}
						result.push(aNodes[i]);
					}
					newNode = result.join(',');
				}
				$j.cookie('tree_locality', newNode, {path: '/'});
			}
		},
		ui: {
			theme_name: 'themeroller'
		}
	});	
});
