/**
 * =Construction de l'arbre cpv
 *
 *
 */

	var tree;
	var tnstate = [];
	var rpcUrl = '/rpc/cpvChild';

	YAHOO.util.Event.addListener(window, "load", makeTreeDynLoad);

	function getRpc(){
		var postArg = 'data='+JSON.stringify({action: 'getChildrenYUI', node: 'nodeId'});
		var cObj = YAHOO.util.Connect.asyncRequest('POST',rpcUrl,RpcCallBack,postArg);
	}

	var RpcCallBack = {
		success:function(o){
			//handle Succes
			if(o.responseText !== undefined){
				var data = JSON.parse(o.responseText);
				//alert(data[1]);
			}
		},
		failure:function (o){
			//handle Failure
			//alert('RPC Failure'+o.status);
		},
		argument:['foo','bar']

	};

	/**
	 *Recupere les children par RPC
	 */
	function loadNodeData(node, fnLoadComplete) {
		var postArg = 'data='+JSON.stringify({action: 'getChildrenYUI', nodeId: node.data.id});
		var cObj = YAHOO.util.Connect.asyncRequest(
			'POST',
			rpcUrl,
			{
				success:function(o){
					//Ajout des nodes
					if(o.responseText !== undefined){
						var data = JSON.parse(o.responseText);
						//console.dir(data);
						makeChild(data,o.argument[0]);
						//alert(data.action);
						fnLoadComplete();
					}
				},
				failure:function (o){
					//handle Failure
					alert('RPC Failure while loading child :'+o.status+', '+o.statusText);
				},
				argument:[node]

			},
			postArg

		);

	}

	function makeTreeDynLoad() {
		tree = new YAHOO.widget.TreeView(treeDiv);
		tree.setDynamicLoad(loadNodeData, 1);
		if(dataTree == null)  return;
			try{
				makeChild(dataTree,tree.getRoot());
				//tree.subscribe("checkClick", onCheckClick);
				//tree.subscribe("expand", onExpand);
				//tree.subscribe("collapse", onCollapse);
				tree.draw();
				//fillInput();

			} catch (e) {
				showError("e:"+e+" ERROR MAKING TREE FAIL");
			}
	}

	function makeTree() {

		tree = new YAHOO.widget.TreeView(treeDiv);
		/*
		if(dataTree == null || dataTree == undefined)
			return false;
		*/
		makeChild(dataTree,tree.getRoot());
		tree.subscribe("checkClick", onCheckClick);
		tree.subscribe("expand", onExpand);
		tree.subscribe("collapse", onCollapse);

		tree.draw();
		fillInput();

	}

	function makeChild(data,parentNode){
		if(data == null){
			return data;
		}
		var l = data.length;
		var tmpstate = parentNode.checkState;
		var tmpChildNode = new YAHOO.widget.TaskNode({id:'tmpchild'}, parentNode, false,false);
		for(var i=0;i<l;i++) {
			var child = data[i];
			var childNodeObj = {label: child.label/*+' '+child.id*/, id: "tn_" + child.id};


//			console.log(parentNode.checkState+' '+child.checked);
			/*
			if(parentNode.checkState == 2){
				console.log('from parent'+parentNode.data.id+' '+' '+child.id);
				//var checked = true;
			} else {
			*/
			var	checked = (child.checked==2)?true:false;
			//}

			var childNode = new YAHOO.widget.TaskNode(childNodeObj, parentNode, child.expanded,checked);
			if(child.checked == 1){
				childNode.setCheckState(1);
			}
			makeChild(child.children,childNode);
		}
		tree.removeNode(tmpChildNode);
		if(tmpstate == 2){
				parentNode.check();
		}
	}

	function onCheckClick(node) {
		var newObj = new Array(node.data.id,node.expanded,node.checkState)

		for(var i=0;i<tnstate.length;i++) {
			if(tnstate[i][0] == newObj[0]) {
				tnstate[i] = newObj;
				break;
			}
		}
		fillInput();
	}

	function onExpand(node) {
		var newObj = new Array(node.data.id,1,node.checkState)

		for(var i=0;i<tnstate.length;i++) {
			if(tnstate[i][0] == newObj[0]) {
				tnstate[i] = newObj;
				break;
			}
		}
		fillInput();

	}

	function onCollapse(node) {
		var newObj = new Array(node.data.id,0,node.checkState)
		for(var i=0;i<tnstate.length;i++) {
			if(tnstate[i][0] == newObj[0]) {
				tnstate[i] = newObj;
				break;
			}
		}
		fillInput();
	}

	function checkAll() {
		var topNodes = tree.getRoot().children;
		for(var i=0; i<topNodes.length; ++i) {
			topNodes[i].check();
		}
		fillInput();
	}

	function uncheckAll() {
		var topNodes = tree.getRoot().children;
		for(var i=0; i<topNodes.length; ++i) {
			topNodes[i].uncheck();
		}
		fillInput();
	}

	function fillStateR(nodes){
		if(nodes === null || nodes.lentgh == 0){
			return new Array();
		}
		var arr= new Array();
		for(var i=0; i<nodes.length; i++) {
			if(nodes[i].checkState ===2){
				arr.push(nodes[i].data.id);
			}
			arr = arr.concat(fillStateR(nodes[i].children));
		}
		return arr;
	}

	/**
	 * Remplit le champs des etats de l'arbre
	 */
	function makeStateCpv(){
		var topNodes = tree.getRoot().children;
		var tr = topNodes[0];
		var fr = topNodes[1];
		var sr = topNodes[2];


		//travaux
		var input = document.getElementById('tn_tr');

		var tri = new Array();
		input.value = '';
		//console.dir(input);
		$(input).html('');
		if(tr.checkState === 2){
			tri.push(tr.data.id);
		}

		tri = tri.concat(fillStateR(tr.children));
		input.value = JSON.stringify(tri);


		//fournitures
		input = document.getElementById('tn_fr');
		var fri = new Array();
		input.value = '';
		if(fr.checkState === 2){
			fri.push(fr.data.id);
		}
		fri = fri.concat(fillStateR(fr.children));
		input.value = JSON.stringify(fri);


		//services
		input = document.getElementById('tn_sr');
		var sri = new Array();
		input.value = '';
		if(sr.checkState === 2){
			sri.push(sr.data.id);
		}
		sri = sri.concat(fillStateR(sr.children));
		input.value = JSON.stringify(sri);

	}



	/**
	 * Enregistrement des états dans le champ du formulaire
	 */
	function fillInput() {
		var input = document.getElementById('tnStateId');
		//input.value = JSON.stringify(tnstate);
	}

	function showError(message) {
		console.log(message);
	}

	function submitForm(e){

		//console.log('blha');
		//console.log(document.getElementById('tn_tr').value);

		makeStateCpv();
		//$("#form").submit();return;
		document.getElementById('form').submit();
	}


