//FUNCTION FOR STAIR
        public void StairSelector(string activityDescription)
        {
            string             caTegory;
            List <ElementData> TempListofSafetyIssues = new List <ElementData>();
            ElementData        eachElementData        = new ElementData();
            Operate            elementOperate         = new Operate();
            string             elementID;

            DateTime tempDateTime = new DateTime();

            eachElementData.EleStartDate  = new DateTime();
            eachElementData.EleEndDate    = new DateTime();
            eachElementData.ProtStartDate = new DateTime();
            eachElementData.ProtEndDate   = new DateTime();

            SlabResult stairwallResult    = new SlabResult();
            SlabResult stairrailingResult = new SlabResult();

            foreach (Nw.ModelItem modelAncestors in modelItem.AncestorsAndSelf)
            {
                Nw.PropertyCategoryCollection familypropCatCollection = modelAncestors.PropertyCategories;
                foreach (Nw.PropertyCategory familypropCat in familypropCatCollection)
                {
                    if (familypropCat.DisplayName.ToString() == "Element" &&
                        null != familypropCat.Properties.FindPropertyByDisplayName("Category"))
                    {
                        caTegory = familypropCat.Properties.FindPropertyByDisplayName("Category").Value.ToString();
                        caTegory = caTegory.Substring(caTegory.IndexOf(":") + 1);

                        //if element is stair
                        if (caTegory == "Stairs")
                        {
                            //get start date of edge walls and railings
                            foreach (Nw.PropertyCategory innerpropCat in familypropCatCollection)
                            {
                                if (innerpropCat.DisplayName.ToString() == "Element ID" &&
                                    null != innerpropCat.Properties.FindPropertyByDisplayName("Value"))
                                {
                                    elementID          = innerpropCat.Properties.FindPropertyByDisplayName("Value").Value.ToString();
                                    elementID          = elementID.Substring(elementID.IndexOf(":") + 1);
                                    stairwallResult    = elementOperate.RoofOperations(elementID);
                                    stairrailingResult = elementOperate.RailingOperations(elementID);
                                    break;
                                }
                            }

                            //get element start date and end date
                            foreach (Nw.PropertyCategory innerpropCat in familypropCatCollection)
                            {
                                if (innerpropCat.DisplayName.ToString() == "TimeLiner" &&
                                    null != innerpropCat.Properties.FindPropertyByDisplayName("Contained in Task Start (Planned):1") &&
                                    null != innerpropCat.Properties.FindPropertyByDisplayName("Contained in Task End (Planned):1"))
                                {
                                    tempDateTime = (DateTime)innerpropCat.Properties
                                                   .FindPropertyByDisplayName("Contained in Task Start (Planned):1").Value.ToDateTime();
                                    eachElementData.ProtStartDate = (DateTime)innerpropCat.Properties
                                                                    .FindPropertyByDisplayName("Contained in Task End (Planned):1").Value.ToDateTime();
                                    break;
                                }
                            }

                            //get element level and elevation
                            foreach (Nw.PropertyCategory innerpropCat in familypropCatCollection)
                            {
                                if (innerpropCat.DisplayName.ToString() == "Top Level" &&
                                    null != innerpropCat.Properties.FindPropertyByDisplayName("Elevation") &&
                                    null != innerpropCat.Properties.FindPropertyByDisplayName("Name"))
                                {
                                    //elevation is returned in feet and not as double
                                    elevation = innerpropCat.Properties.FindPropertyByDisplayName("Elevation").Value.ToDoubleLength();
                                    elevation = elevation * (double)0.3048;

                                    eachElementData.Elevation = elevation;
                                    eachElementData.Level     = innerpropCat.Properties.FindPropertyByDisplayName("Name").Value.ToString();
                                    eachElementData.Level     = eachElementData.Level.Substring(eachElementData.Level.IndexOf(":") + 1);
                                    break;
                                }
                            }

                            //in case of walls along the stair edges
                            if (stairwallResult.stairstartDate.ToShortDateString() != "01-01-0001")
                            {
                                eachElementData.ProtEndDate = stairwallResult.stairstartDate;
                                eachElementData.Hazard      = "Unprotected Stairs";
                                eachElementData.Protection  = "Provide edge protection along the stair walls are to be built";
                                TempListofSafetyIssues.Add(eachElementData);
                            }

                            //in case of railings along the stair edges
                            if (stairrailingResult.stairstartDate.ToShortDateString() != "01-01-0001")
                            {
                                eachElementData.ProtEndDate = stairrailingResult.stairstartDate;
                                eachElementData.Hazard      = "Unprotected Stairs";
                                eachElementData.Protection  = "Provide edge protection along the stair where railings are to be built";
                                TempListofSafetyIssues.Add(eachElementData);
                            }
                            eachElementData.EleStartDate  = tempDateTime;
                            eachElementData.EleEndDate    = eachElementData.ProtStartDate;
                            eachElementData.ProtStartDate = eachElementData.EleEndDate;
                            eachElementData.ProtEndDate   = eachElementData.EleEndDate;
                            eachElementData.ActivityName  = activityDescription;
                            eachElementData.ElementType   = "Stair";
                            eachElementData.Hazard        = "Working at height";
                            eachElementData.Protection    = "See general guidelines for Construction of stairs";
                            TempListofSafetyIssues.Add(eachElementData);

                            Result.ListofSafetyIssues.AddRange(TempListofSafetyIssues);
                        }
                    }
                }
            }
        }
        //FUNCTION FOR ROOF
        public void RoofSelector(string activityDescription)
        {
            Nw.ModelItem       modelParent    = modelItem.Parent;
            Operate            elementOperate = new Operate();
            string             elementID;
            List <ElementData> TempListofSafetyIssues = new List <ElementData>();
            ElementData        eachElementData        = new ElementData();

            DateTime tempDateTime = new DateTime();

            eachElementData.EleStartDate  = new DateTime();
            eachElementData.EleEndDate    = new DateTime();
            eachElementData.ProtStartDate = new DateTime();
            eachElementData.ProtEndDate   = new DateTime();

            SlabResult slabwallResult    = new SlabResult();
            SlabResult slabrailingResult = new SlabResult();

            Nw.PropertyCategoryCollection innerpropCatCollection = modelParent.PropertyCategories;

            //get element start date and end date
            foreach (Nw.PropertyCategory innerpropCat in innerpropCatCollection)
            {
                if (innerpropCat.DisplayName.ToString() == "TimeLiner" &&
                    null != innerpropCat.Properties.FindPropertyByDisplayName("Attached to Task Start (Planned):1") &&
                    null != innerpropCat.Properties.FindPropertyByDisplayName("Attached to Task End (Planned):1"))
                {
                    tempDateTime = (DateTime)innerpropCat.Properties
                                   .FindPropertyByDisplayName("Attached to Task Start (Planned):1").Value.ToDateTime();
                    eachElementData.ProtStartDate = (DateTime)innerpropCat.Properties
                                                    .FindPropertyByDisplayName("Attached to Task End (Planned):1").Value.ToDateTime();
                    break;
                }
            }


            //get element level and elevation
            foreach (Nw.PropertyCategory innerpropCat in innerpropCatCollection)
            {
                if (innerpropCat.DisplayName.ToString() == "Base Level" &&
                    null != innerpropCat.Properties.FindPropertyByDisplayName("Elevation") &&
                    null != innerpropCat.Properties.FindPropertyByDisplayName("Name"))
                {
                    //elevation is returned in feet and not as double
                    elevation = innerpropCat.Properties.FindPropertyByDisplayName("Elevation").Value.ToDoubleLength();
                    elevation = elevation * (double)0.3048;

                    eachElementData.Elevation = elevation;
                    eachElementData.Level     = innerpropCat.Properties.FindPropertyByDisplayName("Name").Value.ToString();
                    eachElementData.Level     = eachElementData.Level.Substring(eachElementData.Level.IndexOf(":") + 1);
                    break;
                }
            }

            //get start date of edge walls and railings
            foreach (Nw.PropertyCategory innerpropCat in innerpropCatCollection)
            {
                if (innerpropCat.DisplayName.ToString() == "Element ID" &&
                    null != innerpropCat.Properties.FindPropertyByDisplayName("Value"))
                {
                    elementID         = innerpropCat.Properties.FindPropertyByDisplayName("Value").Value.ToString();
                    elementID         = elementID.Substring(elementID.IndexOf(":") + 1);
                    slabwallResult    = elementOperate.RoofOperations(elementID);
                    slabrailingResult = elementOperate.RailingOperations(elementID);
                    break;
                }
            }

            //in case of walls along the boundaries
            if (slabwallResult.edgestartDate.ToShortDateString() != "01-01-0001")
            {
                eachElementData.ProtEndDate = slabwallResult.edgestartDate;
                eachElementData.Hazard      = "Unprotected Slab Edges";
                eachElementData.Protection  = "Provide edge protection along the slab edges where exterior walls are to be built";
                TempListofSafetyIssues.Add(eachElementData);
            }

            //in case of railings along the boundaries
            if (slabrailingResult.edgestartDate.ToShortDateString() != "01-01-0001")
            {
                eachElementData.ProtEndDate = slabrailingResult.edgestartDate;
                eachElementData.Hazard      = "Unprotected Edges of Slab";
                eachElementData.Protection  = "Provide edge protection along the edges of the slab where railings are to be built";
                TempListofSafetyIssues.Add(eachElementData);
            }

            //in case of walls along openings
            if (slabwallResult.openingstartDate.ToShortDateString() != "01-01-0001")
            {
                eachElementData.ProtEndDate = slabwallResult.openingstartDate;
                eachElementData.Hazard      = "Unprotected Openings in slab";
                eachElementData.Protection  = "Provide edge protection along the opening edges where walls are to be built";
                TempListofSafetyIssues.Add(eachElementData);
            }

            //in case of railings along openings
            if (slabrailingResult.openingstartDate.ToShortDateString() != "01-01-0001")
            {
                eachElementData.ProtEndDate = slabrailingResult.openingstartDate;
                eachElementData.Hazard      = "Unprotected Openings in slab";
                eachElementData.Protection  = "Provide edge protection along the edges of openings where railings are to be built";
                TempListofSafetyIssues.Add(eachElementData);
            }


            eachElementData.EleStartDate  = tempDateTime;
            eachElementData.EleEndDate    = eachElementData.ProtStartDate;
            eachElementData.ProtStartDate = eachElementData.EleEndDate;
            eachElementData.ProtEndDate   = eachElementData.EleEndDate;
            eachElementData.ActivityName  = activityDescription;
            eachElementData.ElementType   = "Roof";
            eachElementData.Hazard        = "Unprotected Edges of Slab and slab openings";
            eachElementData.Protection    = "See general guidelines for Construction of slabs at height";
            TempListofSafetyIssues.Add(eachElementData);

            Result.ListofSafetyIssues.AddRange(TempListofSafetyIssues);
        }