public Controls_PageView(string PageName)
    {
        XmlUtil x_util = new XmlUtil();
        Util util = new Util();
        //get page image
        Hashtable State = (Hashtable)HttpRuntime.Cache[Session.SessionID];
        PageImage.ImageUrl = util.GetAppPageImage(State, State["PageViewAppID"].ToString(), PageName);
        PageImage.ID = PageName + "_PageImage";
        PageImage.Attributes.Add("onclick", "goToPage('" + PageName + "');");
        PageImage.Attributes.Add("onmouseover", "this.style.cursor='pointer';");
        PageImage.Attributes.Add("onmouseout", "this.style.cursor='arrow';");
        if (State["UseFullPageImage"] != null)
        {
            PageImage.Width = 320;
            PageImage.Height = 460;
        }
        //get page fields
        XmlDocument doc = x_util.GetStagingAppXml(State);
        RadTreeNode PageRoot = new RadTreeNode(PageName);
        PageRoot.CssClass = "RadTreeView";
        PageRoot.ImageUrl = "../images/ascx.gif";
        PageRoot.Category = "page";
        PageRoot.Font.Size = FontUnit.Point(12);
        OnePageView.Nodes.Add(PageRoot);

        //do all fields
        XmlNode page = doc.SelectSingleNode("//pages/page/name[.  ='" + PageName + "']").ParentNode;
        XmlNode fields = page.SelectSingleNode("fields");

        if (fields != null)
        {
            //sort fields first
            SortedList list = new SortedList();
            SortableList<StoryBoardField> nameList = new SortableList<StoryBoardField>();

            foreach (XmlNode child in fields.ChildNodes)
            {
                Hashtable dict = new Hashtable();
                dict["field_type"] = child.Name;
                XmlNode id_node = child.SelectSingleNode("id");
                dict["id"] = id_node;
                string input_field = id_node.InnerText.Trim();
                if (child.SelectSingleNode("left") != null)
                    dict["left"] = child.SelectSingleNode("left").InnerText;
                else
                    dict["left"] = "0";

                if (child.SelectSingleNode("top") != null)
                    dict["top"] = child.SelectSingleNode("top").InnerText;
                else
                    dict["top"] = "0";

                dict["width"] = child.SelectSingleNode("width").InnerText;
                dict["height"] = child.SelectSingleNode("height").InnerText;
                string field_type = dict["field_type"].ToString();
                if (field_type == "button" ||
                    field_type == "image_button" ||
                    field_type == "table" ||
                    field_type == "switch")
                {
                    if(child.SelectSingleNode("submit") != null)
                        dict["submit"] = child.SelectSingleNode("submit").InnerText;
                }
                if (field_type == "table" )
                {
                    XmlNodeList sub_fields = child.SelectNodes("table_fields/table_field/name");
                    ArrayList table_list = new ArrayList();
                    foreach (XmlNode sub_field in sub_fields)
                    {
                        table_list.Add(sub_field.InnerText);
                    }
                    dict["sub_fields"] = table_list;
                }
                else if (field_type == "picker")
                {
                    XmlNodeList sub_fields = child.SelectNodes("picker_fields/picker_field/name");
                    ArrayList picker_list = new ArrayList();
                    foreach (XmlNode sub_field in sub_fields)
                    {
                        picker_list.Add(sub_field.InnerText);
                    }
                    dict["sub_fields"] = picker_list;
                }
                list[input_field] = dict;
                nameList.Add(new StoryBoardField(id_node.InnerText.Trim(), Convert.ToInt32(dict["top"].ToString()), Convert.ToInt32(dict["left"].ToString())));
            }

            nameList.Sort("Top", true);

            foreach (StoryBoardField input_field in nameList)
            {
                Hashtable dict = (Hashtable)list[input_field.FieldName];
                string field_type = dict["field_type"].ToString();
                RadTreeNode field_node = util.CreateFieldNode(PageRoot, input_field.FieldName, field_type);
                field_node.Value = "left:" +  dict["left"].ToString() + ";top:" + dict["top"].ToString() + ";width:" + dict["width"].ToString() + ";height:" + dict["height"].ToString() ;
                if (dict["submit"] != null && dict["submit"].ToString().Length > 0 && dict["submit"].ToString() != ";")
                {
                    field_node.BackColor = Color.PeachPuff;
                    string[] submit = dict["submit"].ToString().Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    string target_page_name = null;
                    //this code is compatible with both old and new syntax
                    if (submit[0].StartsWith("post") && (submit[0].Contains("response_page:") || submit[0].Contains("response_page~")))
                    {
                        target_page_name = submit[0].Substring(19);
                        field_node.Value += ";next_page:" + target_page_name;
                    }
                    else if (submit[0].StartsWith("next_page"))
                    {
                        if (submit[0].Contains("next_page:page~"))
                            target_page_name = submit[0].Substring(15);
                        else
                            target_page_name = submit[0].Substring(10);

                        field_node.Value += ";next_page:" + target_page_name;
                    }

                 }
                if (field_type == "table" ||
                    field_type == "picker")
                {
                    ArrayList sub_field_list = (ArrayList)dict["sub_fields"];
                    foreach (string sub_field_name in sub_field_list)
                    {
                        RadTreeNode sub_field_node = util.CreateFieldNode(field_node, sub_field_name, field_type);
                    }
                }
            }
        }
        OnePageView.ExpandAllNodes();
        OnePageView.OnClientMouseOver = "onPageViewMouseOver";
        OnePageView.OnClientMouseOut = "onPageViewMouseOut";
    }
    protected RadTreeNode CreateDeviceDataFieldNode(RadTreeNode PhoneDataFieldsRoot, string input_field, string field_type, Hashtable input_to_event_map)
    {
        Util util = new Util();
        RadTreeNode id = util.CreateFieldNode(PhoneDataFieldsRoot, input_field, field_type);
        if (input_to_event_map.ContainsKey(input_field))
        {
            id.Value = "page:" + PhoneDataFieldsRoot.Text +
                 ";event_field:" + input_to_event_map[input_field].ToString() +
                 ";input_field:" + input_field;
        }
        else
        {
            id.Value = "page:" + PhoneDataFieldsRoot.Text +
                ";input_field:" + input_field;
        }
        if (field_type == "gps_field" ||
            field_type == "table_field" ||
            field_type == "text_field" ||
            field_type == "label" ||
             field_type == "speech_reco" ||
              field_type == "hidden_field" ||
             field_type == "text_area" ||
            field_type == "picker_field")
        {
            id.BackColor = Color.FromArgb(153, 255, 185); //LIGHT GREEN
            id.Category = "request";
        }

        return id;
    }
    /******************************************* Web Service Functions *************************************/
    protected void BuildWebServiceDataTrees(string event_name)
    {
        string event_field = event_name;
        string button_id = event_name;
        RadComboBoxItem item = WebServiceEvents.Items.FindItemByText(event_name);
        WebServiceEvents.SelectedIndex = item.Index;
        if (event_name.Contains("->"))
        {
            DataMultiPage.SelectedIndex = 3;
            return;
        }
        Hashtable State = (Hashtable)HttpRuntime.Cache[Session.SessionID];
        string app = State["SelectedApp"].ToString();

        string[] page_names = item.Value.Split(":".ToCharArray());
        string from_page = page_names[0];
        string to_page = page_names[1];
        if (to_page == "_this_page")
            to_page = from_page;
        PhoneRequestTreeView.Nodes.Clear();
        WebServiceInputTreeView.Nodes.Clear();
        PhoneResponseTreeView.Nodes.Clear();
        WebServiceResponseTreeView.Nodes.Clear();

        RadTreeNode WebServiceInputRoot = new RadTreeNode(event_field);
        WebServiceInputRoot.CssClass = "RadTreeView";
        WebServiceInputRoot.ImageUrl = "~/images/editor_images/button.png";
        WebServiceInputTreeView.Nodes.Add(WebServiceInputRoot);

        RadTreeNode WebServiceResponseRoot = new RadTreeNode(event_field);
        WebServiceResponseRoot.CssClass = "RadTreeView";
        WebServiceResponseRoot.ImageUrl = "~/images/editor_images/button.png";
        WebServiceResponseTreeView.Nodes.Add(WebServiceResponseRoot);

        Util util = new Util();
        XmlUtil x_util = new XmlUtil();
        XmlDocument doc = util.GetStagingAppXml(State, app);
        XmlNode root = doc.SelectSingleNode("app_project");
        if (root == null)
            root = doc.SelectSingleNode("mobiflex_project");

        XmlNode phone_data_requests = doc.SelectSingleNode("//phone_data_requests");
        bool update_xml = false;
        if (phone_data_requests == null)
        {
             phone_data_requests = x_util.CreateNode(doc, root, "phone_data_requests");
             update_xml = true;
        }

        XmlNode web_service_data_responses = doc.SelectSingleNode("//web_service_data_responses");
        if (web_service_data_responses == null)
        {
            web_service_data_responses = x_util.CreateNode(doc, root, "web_service_data_responses");
            update_xml = true;
        }
        if (update_xml)
        {
            State["AppXmlDoc"] = doc;
            util.UpdateStagingAppXml(State);
        }

        Hashtable input_to_event_map = new Hashtable();

        XmlNodeList pages = doc.SelectNodes("//pages/page");
        foreach (XmlNode page in pages)
        {
            XmlNode page_name_node = page.SelectSingleNode("name");
            string page_name = page_name_node.InnerText;
            RadTreeNode PhoneRequestRoot = null;
            RadTreeNode PhoneResponseRoot = null;
            if (page_name == from_page || SeeAllPages.Checked)
            {
                PhoneRequestRoot = new RadTreeNode(page_name);
                PhoneRequestRoot.CssClass = "RadTreeView";
                PhoneRequestRoot.ImageUrl = "~/images/ascx.gif";
                PhoneRequestTreeView.Nodes.Add(PhoneRequestRoot);
            }
            if (page_name == to_page || SeeAllPages.Checked)
            {
                PhoneResponseRoot = new RadTreeNode(page_name);
                PhoneResponseRoot.CssClass = "RadTreeView";
                PhoneResponseRoot.ImageUrl = "~/images/ascx.gif";
                PhoneResponseTreeView.Nodes.Add(PhoneResponseRoot);
                PhoneResponseRoot.Category = "page";
            }

            if (page_name != from_page && page_name != to_page && !SeeAllPages.Checked)
                continue;

            //do inputs from phone
            XmlNodeList input_nodes = page.SelectNodes("fields/text_area | fields/label | fields/text_field | fields/hidden_field");

            foreach (XmlNode input_node in input_nodes)
            {
                // phone input field
                XmlNode id_node = input_node.SelectSingleNode("id");
                if (page_name == from_page || SeeAllPages.Checked)
                {
                    string input_field = id_node.InnerText.Trim();
                    CreateInputFieldNode(PhoneRequestRoot, input_field, input_node.Name, phone_data_requests, input_to_event_map);
                }
                else if (page_name == to_page || SeeAllPages.Checked)
                {
                    //phone output field
                    RadTreeNode id = util.CreateFieldNode(PhoneResponseRoot, id_node.InnerText, input_node.Name);
                    id.Category = "output";
                    id.BackColor = Color.FromArgb(250, 252, 156); //yellow

                    CreateWebResponseFieldNode(id, phone_data_requests);

                    AddStatusNodes(id, phone_data_requests, id.Text + "_status");
                }
            }

            if (page_name == from_page || SeeAllPages.Checked)
            {

                XmlNodeList gps_fields = page.SelectNodes("fields/gps");

                foreach (XmlNode gps_field in gps_fields)
                {
                    XmlNode id_node = gps_field.SelectSingleNode("id");
                    string input_field = id_node.InnerText.Trim();
                    RadTreeNode gps_node = CreateInputFieldNode(PhoneRequestRoot, input_field, "gps", phone_data_requests, input_to_event_map);

                    XmlNode part_node = gps_field.SelectSingleNode("latitude");
                    CreateInputFieldNode(gps_node, part_node.InnerText, "gps_field", phone_data_requests, input_to_event_map);
                    part_node = gps_field.SelectSingleNode("longitude");
                    CreateInputFieldNode(gps_node, part_node.InnerText, "gps_field", phone_data_requests, input_to_event_map);
                }
            }

            XmlNodeList pickers = page.SelectNodes("fields/picker");
            foreach (XmlNode picker in pickers)
            {
                XmlNode id_node = picker.SelectSingleNode("id");
                XmlNode fields = picker.SelectSingleNode("picker_fields");

                //picker fields are both inputs and outputs
                if (page_name == from_page || SeeAllPages.Checked)
                {
                    string input_field = id_node.InnerText.Trim();
                    RadTreeNode picker_node = CreateInputFieldNode(PhoneRequestRoot, input_field, "picker", phone_data_requests, input_to_event_map);
                    //picker itself is not an input - the fields are
                    picker_node.BackColor = Color.White;
                    picker_node.Category = "";

                    if (fields != null)
                    {
                        XmlNodeList field_list = fields.SelectNodes("picker_field");
                        foreach (XmlNode field_item in field_list)
                        {
                            XmlNode field_name = field_item.SelectSingleNode("name");

                            //table fields can be inputs too
                            input_field = field_name.InnerText.Trim();
                            CreateInputFieldNode(picker_node, input_field, "picker_field", phone_data_requests, input_to_event_map);
                        }
                    }
                    else // for time and date types
                    {
                             input_field = id_node.InnerText.Trim();
                            CreateInputFieldNode(picker_node, input_field, "picker_field", phone_data_requests, input_to_event_map);
                    }
                }
                else if (page_name == to_page || SeeAllPages.Checked)
                {
                    RadTreeNode id = util.CreateFieldNode(PhoneResponseRoot, id_node.InnerText, "picker");
                    id.Category = "picker";
                    if (fields != null)
                    {
                        XmlNodeList field_list = fields.SelectNodes("picker_field");
                        foreach (XmlNode field_item in field_list)
                        {
                            XmlNode field_name = field_item.SelectSingleNode("name");

                            RadTreeNode name_node = new RadTreeNode(field_name.InnerText);
                            name_node.CssClass = "RadTreeView";
                            name_node.ImageUrl = "~/images/target.gif";
                            name_node.Category = "output";
                            name_node.BackColor = Color.FromArgb(250, 252, 156); //yellow
                            id.Nodes.Add(name_node);

                            CreateWebResponseFieldNode(name_node, phone_data_requests);
                        }
                    }
                    else // for time and date types
                    {
                        RadTreeNode name_node = new RadTreeNode(id_node.InnerText);
                        name_node.CssClass = "RadTreeView";
                        name_node.ImageUrl = "~/images/target.gif";
                        name_node.Category = "output";
                        name_node.BackColor = Color.FromArgb(250, 252, 156); //yellow
                        id.Nodes.Add(name_node);

                        CreateWebResponseFieldNode(name_node, phone_data_requests);
                    }
                    AddStatusNodes(id, phone_data_requests, id.Text + "_status");
                }
            }

            //do responses to phone
            XmlNodeList tables = page.SelectNodes("fields/table");
            foreach (XmlNode table in tables)
            {
                XmlNode id_node = table.SelectSingleNode("id");
                XmlNode fields = table.SelectSingleNode("table_fields");
                XmlNodeList field_list = fields.SelectNodes("table_field");

                //table fields are both inputs and outputs
                if (page_name == from_page || SeeAllPages.Checked)
                {
                    string input_field = id_node.InnerText.Trim();
                    RadTreeNode table_node = CreateInputFieldNode(PhoneRequestRoot, input_field, "table", phone_data_requests, input_to_event_map);
                    //table itself is not an input
                    table_node.BackColor = Color.White;
                    table_node.Category = "";
                    foreach (XmlNode field_item in field_list)
                    {
                        XmlNode field_name = field_item.SelectSingleNode("name");

                        //table fields can be inputs too
                        input_field = field_name.InnerText.Trim();
                        CreateInputFieldNode(table_node, input_field, "table_field", phone_data_requests, input_to_event_map);
                    }
                }
                if (page_name == to_page || SeeAllPages.Checked)
                {
                    RadTreeNode id = util.CreateFieldNode(PhoneResponseRoot, id_node.InnerText, "table");
                    foreach (XmlNode field_item in field_list)
                    {
                        XmlNode field_name = field_item.SelectSingleNode("name");

                        RadTreeNode name_node = new RadTreeNode(field_name.InnerText);
                        name_node.CssClass = "RadTreeView";
                        name_node.ImageUrl = "~/images/target.gif";
                        name_node.Category = "output";
                        name_node.BackColor = Color.FromArgb(250, 252, 156); //yellow
                        id.Nodes.Add(name_node);

                        CreateWebResponseFieldNode(name_node, phone_data_requests);
                    }

                    AddStatusNodes(id, phone_data_requests, id.Text + "_status");
                }
            }

            if (page_name == to_page || SeeAllPages.Checked)
            {
                XmlNodeList field_list2 = page.SelectNodes("fields/alert | fields/web_view | fields/image");
                foreach (XmlNode field2 in field_list2)
                {
                    XmlNode id_node = field2.SelectSingleNode("id");

                    RadTreeNode id = util.CreateFieldNode(PhoneResponseRoot, id_node.InnerText, field2.Name);
                    id.Category = "output";
                    id.BackColor = Color.FromArgb(250, 252, 156); //yellow

                    CreateWebResponseFieldNode(id, phone_data_requests);

                    AddStatusNodes(id, phone_data_requests, id.Text + "_status");
                }
            }
        }

        string node_value = app + "~" + event_field + "~" + button_id;
        RadTreeNode url_node = new RadTreeNode();
        url_node.CssClass = "RadTreeView";
        url_node.ImageUrl = "~/images/function_call.gif";
        url_node.AllowEdit = true;
        url_node.Value = node_value;
        WebServiceInputRoot.Nodes.Add(url_node);
        if ( State[node_value] == null)
        {
            string default_label = "Click here twice to set the Web Service URL";
            string mapped_url = null;
            XmlNodeList mapped_page_requests = phone_data_requests.SelectNodes("//phone_data_request/event_field[.='" + event_field + "']");
            if (mapped_page_requests != null)
            {
                foreach (XmlNode mapped_page_request in mapped_page_requests)
                {
                    XmlNode mapped_event_field = mapped_page_request.ParentNode.SelectSingleNode("event_field[.='" + button_id + "']");
                    if (mapped_event_field != null)
                    {
                        XmlNode web_service = mapped_event_field.ParentNode.SelectSingleNode("web_service");
                        XmlNode method_node = mapped_event_field.ParentNode.SelectSingleNode("method");
                        if (web_service != null && method_node != null)
                        {
                            url_node.Text = web_service.InnerText;
                            mapped_url = web_service.InnerText;
                        }
                        else
                        {
                            XmlNode web_service_method = mapped_event_field.ParentNode.SelectSingleNode("web_service_method");
                            mapped_url = web_service_method.InnerText;
                            url_node.Text = mapped_url.Substring(0, mapped_url.LastIndexOf("/"));
                        }
                        InitWebServiceNodes(doc, event_field, url_node, WebServiceResponseRoot, phone_data_requests);
                        break;
                    }

                    if (mapped_url != null)
                        break;
                }
                if (mapped_url == null)
                    url_node.Text = default_label;
            }
            else
                url_node.Text = default_label;
        }
        else
        {
            url_node.Text =  State[node_value].ToString();
            InitWebServiceNodes(doc, event_field, url_node, WebServiceResponseRoot, phone_data_requests);
        }

        PhoneRequestTreeView.ExpandAllNodes();
        WebServiceInputTreeView.ExpandAllNodes();
        PhoneResponseTreeView.ExpandAllNodes();
    }
    protected RadTreeNode CreateInputFieldNode(RadTreeNode PhoneRequestRoot, string input_field, string field_type, XmlNode phone_data_requests, Hashtable input_to_event_map)
    {
        bool is_field_mapped = false;
        Util util = new Util();
        XmlNode mapped_node = phone_data_requests.SelectSingleNode("//phone_data_request/event_field[.='" + WebServiceEvents.SelectedItem.Text + "']");
        if (mapped_node != null)
        {
            mapped_node = mapped_node.ParentNode.SelectSingleNode("input_mapping/input_field[.='" + input_field + "']");
            if (mapped_node != null)
                is_field_mapped = true;
        }

        if (!is_field_mapped)
        {
            RadTreeNode id = util.CreateFieldNode(PhoneRequestRoot, input_field, field_type);
            if (input_to_event_map.ContainsKey(input_field))
            {
                id.Value = "page:" + PhoneRequestRoot.Text +
                     ";event_field:" + input_to_event_map[input_field].ToString() +
                     ";input_field:" + input_field;
            }
            else
            {
                id.Value = "page:" + PhoneRequestRoot.Text +
                    ";input_field:" + input_field;
            }
            //id.Style = "background-color:#99ffb9;";
            if (field_type == "gps_field" ||
                field_type == "table_field" ||
                field_type == "text_field" ||
                field_type == "label" ||
                 field_type == "speech_reco" ||
                  field_type == "hidden_field" ||
                 field_type == "text_area" ||
                field_type == "picker_field")
            {
                id.BackColor = Color.FromArgb(153, 255, 185); //LIGHT GREEN
                id.Category = "request";
            }

            return id;
        }
        else
        {
            return null;
        }
    }
    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();
        }
    }