//private void ShowDSTreeview_DFS(RadTreeView Tree,DataTable _dtTree, DataRow DrTra, string FeildValue, string FeildText,string FeildParent)
        //{
        //    try
        //    {
        //        RadTreeNode ItemTRa = new RadTreeNode();
        //        ItemTRa.Text = DrTra[FeildText].ToString();
        //        ItemTRa.Value = DrTra[FeildValue].ToString();
        //        ItemTRa.ImageUrl = "../images/drop-add.gif";
        //        //  ItemTRa.NavigateUrl = "javascript:void(0)";
        //        Tree.Nodes.Add(ItemTRa);
        //        DataTable dtQue = _dtTree.Clone();
        //        dtQue.ImportRow(DrTra);
        //        RadTreeNode NodeTra = default(RadTreeNode);
        //        while (dtQue.Rows.Count > 0)
        //        {
        //            NodeTra = SearchNode(_dtTree, dtQue.Rows[0][FeildValue].ToString(), Tree);
        //            DataTable dtBC = this.LayDSTKCon(_dtTree, Convert.ToInt32(dtQue.Rows[0][FeildValue]), FeildParent);
        //            int k = 0;
        //            if (dtBC.Rows.Count > 0)
        //            {
        //                for (int i = 0; i <= dtBC.Rows.Count - 1; i++)
        //                {
        //                    RadTreeNode Item = new RadTreeNode();
        //                    Item.Text = dtBC.Rows[i][FeildText].ToString();
        //                    Item.Value = dtBC.Rows[i][FeildValue].ToString();
        //                    // Item.SelectedImageIndex = 1;
        //                    //   Item.NavigateUrl = "javascript:void(0)";
        //                    // Item.SelectAction = TreeNodeSelectAction.None;
        //                    Item.ImageUrl = "../images/drop-yes.gif";
        //                    if ((NodeTra != null))
        //                    {
        //                        NodeTra.Nodes.Add(Item);
        //                    }
        //                    DataRow dr = dtQue.NewRow();
        //                    dr.ItemArray = dtBC.Rows[i].ItemArray;
        //                    if (dtQue.Rows[0][FeildValue].ToString().Trim() != dtBC.Rows[i][FeildValue].ToString().Trim())
        //                    {
        //                        dtQue.Rows.Add(dr);
        //                    }
        //                }
        //            }
        //            dtQue.Rows[0].Delete();
        //            dtQue.AcceptChanges();
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        //Interaction.MsgBox("coLoi");
        //    }
        //}
        //private RadTreeNode SearchNode( string IDTK, RadTreeView Tree)
        //{
        //    RadTreeNode ReNode = default(RadTreeNode);
        //    for (int j = 0; j <= Tree.Nodes.Count - 1; j++)
        //    {
        //        ReNode = SearchNodeDQ(Tree.Nodes[j], IDTK);
        //        if ((ReNode != null))
        //            break; // TODO: might not be correct. Was : Exit For
        //    }
        //    return ReNode;
        //}
        //private RadTreeNode SearchNodeDQ(RadTreeNode NodeTra, string IDTK)
        //{
        //    if (NodeTra == null)
        //    {
        //        return null;
        //    }
        //    else
        //    {
        //        if (NodeTra.Value.ToString() == IDTK)
        //            return NodeTra;
        //        if (NodeTra.Nodes.Count == 0)
        //            return null;
        //        for (int i = 0; i <= NodeTra.Nodes.Count - 1; i++)
        //        {
        //            if (NodeTra.Nodes[i].Value != IDTK)
        //            {
        //                SearchNodeDQ(NodeTra.Nodes[i], IDTK);
        //            }
        //            else
        //            {
        //                return NodeTra.Nodes[i];
        //            }
        //        }
        //        return null;
        //    }
        //}
        //private DataTable LayDSTKCon(DataTable _dtTree, int IDTra, string FeildParent)
        //{
        //    DataTable dt = _dtTree.Clone();
        //    DataRow[] _Row = _dtTree.Select(FeildParent + " = " + IDTra.ToString());
        //    if (_Row.Length > 0)
        //    {
        //        for (int i = 0; i <= _Row.Length - 1; i++)
        //        {
        //            dt.ImportRow(_Row[i]);
        //        }
        //    }
        //    return dt;
        //}
        ////
        private void DuyetDeCheckLaiChucNang(RadTreeNode currentNode)
        {
            try {
            //RadTreeNode objTreeNode = default(RadTreeNode);
            RadTreeNode objTemp = default(RadTreeNode);
            bool checkAll = true;

            objTemp = currentNode.Nodes[0];
            if (objTemp == null) {
            return;
            // menu thi hanh
            } else {
            while ((objTemp != null)) {
                DuyetDeCheckLaiChucNang(objTemp);
                objTemp = objTemp.Next;
            }
            currentNode.CollapseChildNodes();
            // xet tat ca cac nut con
            foreach(RadTreeNode objTreeNode in currentNode.Nodes)
            {
                if (!objTreeNode.Checked) {
                    checkAll = false;
                    break; // TODO: might not be correct. Was : Exit For
                }
            }
            if (checkAll)
                currentNode.Checked = true;
            }
            } catch (Exception ex) {

            }
        }
        private void CheckDepartmentTree(RadTreeNode currentNode, string[] sArrDe,ref bool OK)
        {
            try
            {
            //RadTreeNode objTreeNode = default(RadTreeNode);
            RadTreeNode objTemp = default(RadTreeNode);
            if (currentNode.Nodes.Count > 0)
            objTemp = currentNode.Nodes[0];
            else
            objTemp = null;
            if (objTemp == null)
            {
            return;
            // menu thi hanh
            }
            else
            {
            while ((objTemp != null))
            {
                CheckDepartmentTree(objTemp, sArrDe,ref OK);
                objTemp = objTemp.Next;
            }
            currentNode.CollapseChildNodes();

            foreach (RadTreeNode objTreeNode in currentNode.Nodes)
            {
                for (int k = 0; k < sArrDe.Length; k++)
                    if (sArrDe[k] == objTreeNode.Value.ToString())
                    {
                        objTreeNode.Checked = true;
                        OK = true;
                        break;
                    }
            }
            //if (OK)
            //    currentNode.Checked = true;
            }
            }
            catch (Exception ex)
            {

            }
        }
        private void CheckFunctionTree(RadTreeNode currentNode,DataTable _dt,ref bool OK)
        {
            try
            {
            //RadTreeNode objTreeNode = default(RadTreeNode);
            RadTreeNode objTemp =null;
            if (currentNode.Nodes.Count > 0)
            objTemp = currentNode.Nodes[0];
            else
            objTemp = null;
            if (objTemp == null)
            {
            return;
            // menu thi hanh
            }
            else
            {
            while ((objTemp != null))
            {
                CheckFunctionTree(objTemp, _dt,ref OK);
                objTemp = objTemp.Next;
            }
            currentNode.CollapseChildNodes();
            DataRow[] _Row = _dt.Select("MenuId = " + currentNode.Value.ToString());
            if (_Row.Length > 0)
            {
                currentNode.Checked = true;
                OK = true;
            }
            foreach (RadTreeNode objTreeNode in currentNode.Nodes)
            {
                DataRow[] _Row1 = _dt.Select("MenuId = " + objTreeNode.Value.ToString());
                if (_Row1.Length > 0)
                {
                    objTreeNode.Checked = true;
                    OK = true;
                }

            }

            }
            }
            catch (Exception ex)
            {

            }
        }
    protected void InitWebServiceNodes(XmlDocument doc, string event_field, RadTreeNode url_node,
        RadTreeNode WebServiceResponseRoot, XmlNode phone_data_requests)
    {
        string url = url_node.Text;
        url_node.ExpandParentNodes();
        url_node.CollapseChildNodes();
        Hashtable WebServiceMethodInputs = new Hashtable();
        Hashtable State = (Hashtable)HttpRuntime.Cache[Session.SessionID];
        State["WebServiceMethodInputs"] = WebServiceMethodInputs;
        RadTreeNode out_url = new RadTreeNode(url);
        out_url.CssClass = "RadTreeView";
        out_url.ImageUrl = "~/images/dialog.gif";
        WebServiceResponseRoot.Nodes.Add(out_url);

        Util util = new Util();

        if (!url.EndsWith("?WSDL"))
            url += "?WSDL";
        string xml = util.GetWebPage(url);
        if (xml == null)
        {
            SaveRequestMessage.Text = "Accessing " + url + " resulted in an error";
            return;
        }
        XmlDocument WebDoc = new XmlDocument();
        WebDoc.LoadXml(xml);
        XmlNamespaceManager nsmgr = new XmlNamespaceManager(WebDoc.NameTable);
        nsmgr.AddNamespace("s", "http://www.w3.org/2001/XMLSchema");

        XmlNodeList web_methods = WebDoc.SelectNodes("//s:schema/s:element", nsmgr);
        if (web_methods.Count == 0)
        {
            nsmgr.AddNamespace("wsdl", "http://schemas.xmlsoap.org/wsdl/");
            web_methods = WebDoc.SelectNodes("//wsdl:operation", nsmgr);
            if (web_methods.Count == 0)
            {
                SaveRequestMessage.Text = "Could not find any methods with URL: " + url;
                return;
            }
        }
        Hashtable used_names = new Hashtable();
        foreach (XmlNode web_method in web_methods)
        {
            //throw out certain methods with <s:any />
            if (web_method.InnerXml.Contains("s:any"))
                continue;
            string web_method_name = web_method.Attributes["name"].Value;
            if (used_names.ContainsKey(web_method_name))
                continue;
            used_names[web_method_name] = true;
            ArrayList MethodInputs = new ArrayList();
            string service_url = out_url.Text;
            if (out_url.Text.ToLower().EndsWith("?wsdl"))
                service_url = service_url.Remove(url.Length - 5);
            WebServiceMethodInputs[service_url + "/" + web_method_name] = MethodInputs;
            RadTreeNode in_method_node = new RadTreeNode(web_method_name);
            in_method_node.CssClass = "RadTreeView";
            in_method_node.ImageUrl = "~/images/forward_nav.gif";
            url_node.Nodes.Add(in_method_node);

            //response web methods
            XmlNode mapped_node = phone_data_requests.SelectSingleNode("//event_field[.='" + event_field + "']");
            RadTreeNode out_method_node = null;
            if (mapped_node != null &&  State["WebServiceTestDoc"] != null &&  State["WebServiceResponseTreeViewNodeText"] != null &&
                  State["WebServiceResponseTreeViewNodeText"].ToString() == web_method_name)
            {
                //make sure we are in the right event
                XmlNode method_node = mapped_node.ParentNode.SelectSingleNode("method");
                if (method_node != null && method_node.InnerText == web_method_name)
                {
                    XmlDocument TestDoc = (XmlDocument) State["WebServiceTestDoc"];
                    out_method_node = new RadTreeNode(web_method_name);
                     State["WebServiceResponseTreeViewMethodText"] = web_method_name;
                    out_method_node.CssClass = "RadTreeView";
                    out_method_node.ImageUrl = "~/images/backward_nav.gif";
                    out_method_node.Category = "method";
                    out_method_node.Value = service_url + ";" + web_method_name + ";";
                    out_url.Nodes.Add(out_method_node);
                    out_method_node.Value.Remove(out_method_node.Value.Length - 1, 1);
                    WebServiceResponseTreeView.ExpandAllNodes();

                    XmlToTreeViewNode(TestDoc.FirstChild.NextSibling, out_method_node, web_method_name);

                    out_method_node.ExpandParentNodes();

                    Session.Remove("WebServiceTestDoc");
                }
            }
            else if (mapped_node != null)
            {
                XmlNode web_service_node = mapped_node.ParentNode.SelectSingleNode("web_service[.='" + service_url + "']");
                XmlNode method_node = mapped_node.ParentNode.SelectSingleNode("method[.='" + web_method_name + "']");
                if (web_service_node != null && method_node != null)
                {
                    in_method_node.BackColor = Color.LightCoral;

                    out_method_node = new RadTreeNode(web_method_name);
                    out_method_node.CssClass = "RadTreeView";
                    out_method_node.ImageUrl = "~/images/backward_nav.gif";
                    out_method_node.Category = "method";
                    out_method_node.Value = service_url + ";" + web_method_name + ";";
                    out_url.Nodes.Add(out_method_node);
                    out_method_node.Value.Remove(out_method_node.Value.Length - 1, 1);
                    WebServiceResponseTreeView.ExpandAllNodes();
                }
            }

            XmlNodeList parms = web_method.SelectNodes("s:complexType/s:sequence/s:element", nsmgr);
            foreach (XmlNode parm in parms)
            {
                string parm_name = parm.Attributes["name"].Value;
                MethodInputs.Add(parm_name);
                if (out_method_node != null)
                    out_method_node.Value += parm_name + ",";
                RadTreeNode parm_node = new RadTreeNode(parm_name);
                parm_node.CssClass = "RadTreeView";
                parm_node.ImageUrl = "~/images/dot.gif";
                parm_node.Category = "input";
                parm_node.BackColor = Color.FromArgb(250, 252, 156);
                in_method_node.Nodes.Add(parm_node);

                if (mapped_node != null)
                {
                    XmlNode web_service_node = mapped_node.ParentNode.SelectSingleNode("web_service[.='" + service_url + "']");
                    XmlNode method_node = mapped_node.ParentNode.SelectSingleNode("method[.='" + web_method_name + "']");
                    if (web_service_node != null && method_node != null)
                    {
                        XmlNode web_service_method_input_node = mapped_node.ParentNode.SelectSingleNode("input_mapping/web_service_method_input[.='" + parm_name + "']");
                        if (web_service_method_input_node != null)
                        {
                            XmlNode input_field_node = web_service_method_input_node.ParentNode.SelectSingleNode("input_field");
                            if (input_field_node != null)
                            {
                                string request_name = input_field_node.InnerText;
                                XmlNode field_node = doc.SelectSingleNode("//id[.='" + request_name + "']");
                                RadTreeNode request_node = null;
                                if (field_node == null)

                                    request_node = util.CreateFieldNode(parm_node, request_name, "");
                                else
                                    request_node = util.CreateFieldNode(parm_node, request_name, field_node.ParentNode.Name);

                                request_node.Text = request_name;
                                request_node.Category = "request";
                                request_node.BackColor = Color.FromArgb(153, 255, 185); //LIGHT GREEN
                            }
                        }
                    }
                }
            }
            RadTreeNode save_method_node = new RadTreeNode("Save calling this method with 0 or more inputs mapped");
            save_method_node.CssClass = "RadTreeView";
            save_method_node.ImageUrl = "~/images/save.gif";
            save_method_node.Category = "save";
            in_method_node.Nodes.Add(save_method_node);

            RadTreeNode undo_method_inputs_node = new RadTreeNode("Undo mapping of device fields to this method");
            undo_method_inputs_node.CssClass = "RadTreeView";
            undo_method_inputs_node.ImageUrl = "~/images/cancel.png";
            undo_method_inputs_node.Category = "delete";
            in_method_node.Nodes.Add(undo_method_inputs_node);
            in_method_node.ExpandChildNodes();
        }
    }