(function() {
	var nodes = [];
	var nodeIndex;

	function treeInit() {
		buildTaskNodeTree();

	}

	//Function  creates the tree
    function buildTaskNodeTree() {
		//instantiate the tree:
  	    tree.setDynamicLoad(loadNodeData, 0);

		var rootNode = tree.getRoot();
		rootNode.levelid = 0;
		loadNodeData(rootNode,callbackFinished);

       // Trees with TextNodes will fire an event for when the label is clicked:
       tree.subscribe("labelClick", function(node) {
			  uncheckAll();
			  hideDiv('showOddsErrorMessage');
			  // show odds will be permitted when a player click football and horse racing nodes 
			  if( node.id != 1 &&node.id!=24&&node.parent.id!=24){
              	visitOddstable(node.id);
              }
              if( node.parent.id==24 && node.hasChildren()){
              	showNodeOdds(node);
              }
           });

       // Trees with TaskNodes will fire an event for when a check box is clicked
       tree.subscribe("checkClick", function(node) {
			  if( node.levelid == 2 & node.checkState == 2 ){
				  node.expandAndCheck = 1;
				  node.expand();
			  }
           });
		//The tree is not created in the DOM until this method is called:
		hideDiv('showOddsErrorMessage');
        tree.draw();
    }

	var callback = null;
	function callbackFinished(){
		tree.draw();
		afterLeftMenuLoaded();
	}
	

    function uncheckAll() {
        var topNodes = tree.getRoot().children;
        for(var i=0; i<topNodes.length; ++i) {
	        var childrenNodes = topNodes[i].children ;
			for(var j=0; j<childrenNodes.length; ++j) {
            	childrenNodes[j].uncheck();
			}
        }
    }

    function checkNode(node) {
        var topNodes = node.children;
		for(var j=0; j<topNodes.length; ++j) {
           	topNodes[j].check();
		}
    }
    
	function loadNodeData(node, fnLoadComplete)  {
		//We'll create child nodes based on what we get back when we
		//use Connection Manager to pass the text label of the
		//Search "related suggestions" API.  Here, we're at the
		//first part of the request -- we'll make the request to the
		//server.  In our Connection Manager success handler, we'll build our new children
		//and then return fnLoadComplete back to the tree.

		//Get the node's label and urlencode it; this is the word/s
		//on which we'll search for related words:
		var nodeLabel = encodeURI(node.label);
		//prepare URL for XHR request:

    		
		var sUrl ="";
		if(nodeLabel=="undefined"){
		  sUrl = "/oddsmenu.do?levelid="+node.levelid;
		}else{
		  sUrl = "/oddsmenu.do?levelid="+node.levelid+"&id="+node.id;
		}
		var currentLevelId;
		if( node.levelid == 1 ){
			currentLevelId = 2;
		}else if( node.levelid == 2 ){
			currentLevelId = 3;
		}else if( node.levelid == 0 ){
			currentLevelId = 1;
		}else{
		}


		var callback = {

			success: function(oResponse) {
				var myobj="";

				if( oResponse.responseText =='' || oResponse.responseText == null || oResponse.responseText == 'null' || oResponse.responseText.length<3){
    				alert("The system can not get any odds, please contact the administrator!!!");
				} else if( oResponse.responseText.length==3 ){
	    			alert("The odds are not available at present. Please wait a moment and refresh again!");
				} else if( oResponse.responseText =='null'){
    				alert("No odds available, please contact the administrator!!!");
    			} else {    
					
					var result = oResponse.responseText;
					var flag = result.indexOf("ResultSet");
					if( flag == -1 ){
						  //alert(oResponse.responseText);
					}else{
						var oResults = YAHOO.lang.JSON.parse(result);
						var tempNode;
						var tempStr="";
						var tempId;
						setHourValue(oResults.h2,oResults.h4);
						if((oResults.ResultSet.Result) && (oResults.ResultSet.Result.length)) {
							if(YAHOO.lang.isArray(oResults.ResultSet.Result)) {
								for (var i=0, j=oResults.ResultSet.Result.length; i<j; i = i + 3) {
									 tempId = oResults.ResultSet.Result[i];
									 tempStr = oResults.ResultSet.Result[i+1] ;
									 num = oResults.ResultSet.Result[i+2] ;
									 
									//0162992 start: Hide horse racing from odds menu for all operators except someones	
									if (currentLevelId == 1 && tempId == 24) {
										if (!isHorseRacingOn) {
											continue;
										}
									}
									//0162992 end
										
									if( currentLevelId == 3 ){
										myobj = { label: tempStr};

										tempNode = new YAHOO.widget.TaskNode(myobj, node, false);
										tempNode.iconMode=1;
										tempNode.isLeaf = true;
										tempNode.style = "LevelThreeRow";
										tempNode.num =num;
										tempNode.isCount="true";
									}else if( currentLevelId == 1){
										myobj = { label: tempStr};

										tempNode = new YAHOO.widget.TextNode(myobj, node, false);	
										tempNode.style = "LevelOneRow";
										tempNode.hoverStyle="LevelOneRowActive";
										tempNode.num =num;
										tempNode.isCount="true";

										//alert("tempNode.id="+tempNode.id+"tempNode.hoverStyle="+tempNode.hoverStyle);
									}else{
										myobj = { label: tempStr};
										tempNode = new YAHOO.widget.TaskNode(myobj, node, false);
										tempNode.style = "LevelTwoRow";
										tempNode.num =num;
										tempNode.isCount="true";

									}
									tempNode.levelid = currentLevelId;
									tempNode.id = tempId;

							}
						} else {
							var tempNode = new YAHOO.widget.TaskNode(oResults.ResultSet.Result, node, false)
							tempNode.style = "BACKGROUND-COLOR: red;";

							}
						}

						if( currentLevelId == 3 && tempNode.parent.parent.id==24 ){
							//alert(tempNode.parent.id);
							//checkNode(tempNode.parent);
							showNodeOdds(tempNode.parent);
							
							}
							
						if( node.expandAndCheck==1 ){
							var childrenNodes = node.children;

							for(var j=0; j<childrenNodes.length; ++j) {
								childrenNodes[j	].check();
							}
							node.expandAndCheck = 0 ;
						}
					}
				//When we're done creating child nodes, we execute the node's
				//loadComplete callback method which comes in via the argument
				//in the response object (we could also access it at node.loadComplete,
				//if necessary):
					oResponse.argument.fnLoadComplete();
				}

			},

			//if our XHR call is not successful, we want to
			//fire the TreeView callback and let the Tree
			//proceed with its business.
			failure: function(oResponse) {
				alert("The network is temporary interupted, please try again later."+oResponse, "info", "example");
				oResponse.argument.fnLoadComplete();
			},

			//our handlers for the XHR response will need the same
			//argument information we got to loadNodeData, so
			//we'll pass those along:
			argument: {
				"node": node,
				"fnLoadComplete": fnLoadComplete
			},

			//timeout -- if more than 7 seconds go by, we'll abort
			//the transaction and assume there are no children:
			timeout: 30000
		};

		//With our callback object ready, it's now time to
		//make our XHR call using Connection Manager's
		YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
	}
	YAHOO.util.Event.onDOMReady(treeInit);

})();

	//for override
	function afterLeftMenuLoaded() {
		
	}
