// GET: Products
        public ActionResult Index(int? id, int? complianceformID, int? compid)
        {
            var viewModel = new ProductIndexData();
            if (compid != null)
            {
                int? updprodid = id;
                int? upcompid = compid;
                AddComplianceProduct(updprodid, upcompid, 1);
            }

            viewModel.Products = db.Products
                .Include(i => i.ComplianceForms.Select(c => c.ComplianceCategory))
                .Where(i=>i.ProductListingID==id.Value)
                .OrderBy(i => i.ProductName);

            if (id != null)
            {
                ViewBag.ProductID = id.Value;
                viewModel.ComplianceForms = viewModel.Products.Where(
                    i => i.ProductListingID == id.Value).Single().ComplianceForms;
            }

            if (complianceformID != null)
            {
                ViewBag.complianceformID = complianceformID.Value;
                // Lazy loading
                //viewModel.Enrollments = viewModel.Courses.Where(
                //    x => x.CourseID == courseID).Single().Enrollments;
                // Explicit loading
                var selectedcomplianceform = viewModel.ComplianceForms.Where(x => x.ComplianceFormID == complianceformID).Single();
                db.Entry(selectedcomplianceform).Collection(x => x.Compliances).Load();
                foreach (Compliance compliance in selectedcomplianceform.Compliances)
                {
                    db.Entry(compliance).Reference(x => x.ComplianceItem).Load();
                }

                viewModel.Compliances = selectedcomplianceform.Compliances;
            }
            var productcomp = (from p in db.ProductCompliance where p.ProductListingID == id select p);
            ViewBag.productcp = productcomp.ToList();

            var proditems = from a in db.ProductCompliance select a;
            ViewBag.ProdItems = new SelectList(proditems, "ProductListingID", "ProductName");

            return View(viewModel);
        }
        // GET: Products
        public ActionResult Index(int? id, int? complianceformID, int? compid, bool? enditem, int? compidsub)
        {
            var viewModel = new ProductIndexData();
            if (compid != null)
            {
                int? updprodid = id;
                int? upcompid = compid;

                AddComplianceProduct(updprodid, upcompid, 1,enditem);
            }

            viewModel.Products = db.Products
                .Include(i => i.ComplianceForms.Select(c => c.ComplianceCategory))
                .Where(i=>i.ProductListingID==id.Value)
                .OrderBy(i => i.ProductName);

            if (id != null)
            {
                int idval = 0;
                idval =  id.GetValueOrDefault();

                if (CheckRelProductComplianceForms(idval) > 0)
                {
                    ViewBag.ProductID = id.Value;
                    viewModel.ComplianceForms = viewModel.Products.Where(
                        i => i.ProductListingID == id.Value).FirstOrDefault().ComplianceForms;
                }
                else
                {
                    try
                    {
                        ViewBag.ProductID = id.Value;
                        viewModel.ComplianceForms = viewModel.Products.Where(i => i.ProductListingID == id.Value).FirstOrDefault().ComplianceForms;
                    }
                    catch(Exception ex)
                    {

                    }
                }

            }

            if (complianceformID != null)
            {
                ViewBag.complianceformID = complianceformID.Value;
                // Lazy loading
                //viewModel.Enrollments = viewModel.Courses.Where(
                //    x => x.CourseID == courseID).Single().Enrollments;
                // Explicit loading
                var selectedcomplianceform = viewModel.ComplianceForms.Where(x => x.ComplianceFormID == complianceformID).Single();
                db.Entry(selectedcomplianceform).Collection(x => x.Compliances).Load();
                foreach (Compliance compliance in selectedcomplianceform.Compliances)
                {
                    db.Entry(compliance).Reference(x => x.ComplianceItem).Load();
                }

                viewModel.Compliances = selectedcomplianceform.Compliances.OrderBy(x=>x.Order);
            }
            //Product compliance items
            var productcomp = (from p in db.ProductCompliance where p.ProductListingID == id select p);
            ViewBag.productcp = productcomp.ToList();

            //Section to handle subordinate items
            var productSubItem = from a in db.ComplianceItems
                                 join s in db.ComplianceItemSubItems on a.ComplianceItemsID equals s.SubItemTo
                                // join p in db.ProductCompliance on s.SubItemTo equals p.ComplianceItemsID
                                 //select new SubItemsViewModel { SubItemTo = s.SubItemTo, ItemName = a.ItemName, ComplianceItemsID = s.ComplianceItemID, Checked = p.Checked };
                                 select new SubItemsViewModel { SubItemTo = s.SubItemTo, ItemName = a.ItemName, ComplianceItemsID = s.ComplianceItemID };
            if (productSubItem.Count()>1)
            {
                ViewBag.productSubItem = productSubItem.ToList();
            }

            //check if subordinate item is in the product compliances
            //will end up here as another item
            var subproductcomp = (from p in db.ProductCompliance
                                  join s in db.ComplianceItemSubItems on p.ComplianceItemsID equals s.SubItemTo
                                  //where p.ProductListingID == id
                                  select new SubItemsProductCompliance { ComplianceItemsID = s.ComplianceItemID, SubItemTo = s.SubItemTo, ProductListingID = p.ProductListingID, Checked = p.Checked });

            ViewBag.productcpsub = subproductcomp.ToList();

            //end section to handle subordinate itesm
            var proditems = from a in db.ProductCompliance select a;
            ViewBag.ProdItems = new SelectList(proditems, "ProductListingID", "ProductName");

            return View(viewModel);
        }