public ActionResult createHeadline(headlineViewModel model, HttpPostedFileBase headlineHeader)
        {
            bool hasError = false;
            if(model.fileSummary == "" || model.fileSummary == null)
            {
                ModelState.AddModelError("", "The file summary is required");
                hasError = true;
            }
            if (model.headlinev.numberOfUsers < 1)
            {
                ModelState.AddModelError("", "The number of users needs to a real number");
                hasError = true;
            }
            if (model.headlinev.numberOfUsers > 25)
            {
                ModelState.AddModelError("", "The maximum number of users at one time is 25");
                hasError = true;
            }
            if (User.Identity.IsAuthenticated == false)
            {
                ModelState.AddModelError("", "You must be logged in to change this");
                hasError = true;
            }
            string annotateError = uHline.checkAnnotation(headlineHeader, model.fileTypeDefined);
            if (annotateError != "")
            {
                hasError = true;
                ModelState.AddModelError("", annotateError);
            }
            if (hasError)
            {
                return View(new headlineViewModel());
            }
            if (ModelState.IsValid && hasError == false)
            {
                if ((from title in user.headlines
                     where title.title == model.headlinev.title
                     select title).Count() >= 1)
                {
                    ModelState.AddModelError("", "Try the title again");
                    return View(new headlineViewModel());
                }

                else
                {
                    try
                    {                        
                        headlineView newHeadline = new headlineView
                        {
                            numberOfUsers = model.headlinev.numberOfUsers,
                            followingCount = 1,
                            title = model.headlinev.title,
                            accessLevel = model.headlinev.accessLevel,
                            adminId = (from usershere in user.UserProfiles
                                       where usershere.UserId == WebSecurity.CurrentUserId
                                       select usershere).FirstOrDefault(),
                        };
                        user.headlines.Add(newHeadline);
                        string description = model.fileDescription;
                        if (model.fileTypeDefined == 1)
                        {
                            model.fileDescription = files.updateImage(headlineHeader, model.headlinev.title, "HeadlineHeader");
                            //files.updateImage(headlineHeader, model.headlinev.title, "HeadlineHeader");
                            description = "image";
                        }

                        var personConnectingDefined = (from users in user.UserProfiles
                                                       where users.UserId == WebSecurity.CurrentUserId
                                                       select users).FirstOrDefault();
                        var permissionDefined = (from perms in user.permissions
                                                 where perms.ID < 4
                                                 where perms.ID > 0
                                                 orderby perms.ID ascending
                                                 select perms).ToList();
                        user.SaveChanges();
                        foreach (var item in permissionDefined)
                        {
                            var newGroup = new group
                            {
                                forPeople = false,
                                groupName = model.headlinev.title + item.permissionName,
                            };
                            var sourceDefined = (from headlines in user.headlines
                                                 where headlines.title == model.headlinev.title
                                                 select headlines.headlineDefinedId).First();
                            user.SaveChanges();
                            user.permissionsToGroup.Add(
                            new permissionToGroup
                                {
                                    defineGroup = newGroup,
                                    defineSource = "Headline",
                                    permissionDefined = item,
                                    sourceID = sourceDefined,
                                    personConnecting = personConnectingDefined
                                });
                        }
                        var followingPerson = (from users in user.UserProfiles
                                               join user2 in user.userDefinition
                                               on users equals user2.usernameFK
                                               where users.UserId == WebSecurity.CurrentUserId
                                               select user2).First();
                        followingPerson.following += 1;
                        user.highlightsComputedMessages.Add(new highlightsComputedMessage
                        {
                            createdUserID = WebSecurity.CurrentUserId,
                            sourceDefinition = model.headlinev.title,
                            highlightID = (from highlights in user.highlightsPerType
                                           where highlights.highlightMethod == "headlineCreate"
                                           select highlights).First()
                        });
                        user.headlineToUsers.Add(
                           new headlineToUser
                           {
                               personID = (from ytu in user.UserProfiles
                                           where ytu.UserId == WebSecurity.CurrentUserId
                                           select ytu).FirstOrDefault(),
                               headlineID = (from headlines in user.headlines
                                             where headlines.title == model.headlinev.title
                                             orderby headlines.headlineDefinedId
                                             select headlines).First(),
                           });
                        user.SaveChanges();
                        uHline.addAnnotation(model.fileDescription, model.fileTypeDefined, newHeadline, model.fileSummary);

                    }
                    catch (Exception e)
                    {
                        ModelState.AddModelError("", e.Message.ToString());
                        return View(new headlineViewModel());
                    }
                    return Redirect("/headlines/editHeadline/" + model.headlinev.title);
                }
            }
            else
            {
                ModelState.AddModelError("", "Unknown error");
                return View(new headlineViewModel());
            }
        }
        public ActionResult editHeadline(headlineView model, string id, HttpPostedFileBase headlineHeader)
        {
            var thistitle = model.title;
            if (User.Identity.IsAuthenticated == false)
            {
                ModelState.AddModelError("editHeadline", "You must be logged in to change this");
                return Redirect("/headlines/editHeadline/" + thistitle);
            }
            if (WebSecurity.CurrentUserId != (from headlines in user.headlines
                                              where headlines.title == id
                                              select headlines.adminId.UserId).FirstOrDefault())
            {
                ModelState.AddModelError("editHeadline", "You are not authenticated to make a change here, please contact"
                    + WebSecurity.CurrentUserName + "to gain access to the group");
                return Redirect("/headlines/editHeadline/" + thistitle);
            }

            using (var db = new UsersContext())
            {
                files.updateImage(headlineHeader, id, "HeadlineHeader");
                headlineView headlineToEdit = db.headlines.FirstOrDefault(m => m.title == id);
                headlineToEdit.title = thistitle;
                headlineToEdit.accessLevel = model.accessLevel;
                db.SaveChanges();
            }
            return Redirect("/headlines/editHeadline/" + thistitle);
        }
        public PartialViewResult _joinedStatus(headlineView model)
        {
            var backgroundColor = mem.getSetting("backgroundColor");
            var highlightColor = mem.getSetting("fontColor");
            ViewBag.styling = "border-width:0px;color:" + highlightColor + ";background-color:" + backgroundColor + "";
            ViewBag.title = model.title;
            var title = model.title;
            //}
            var joined = (from headlines in user.headlineToUsers
                          where headlines.headlineID.title == title
                          where headlines.personID.UserId == WebSecurity.CurrentUserId
                          select headlines).Count();
            if (User.Identity.IsAuthenticated == false)
            {
                //They cannot join, they shouldn't have got it anyway, but I don't want them seeing an error
                return PartialView("_joinedStatus");
            }
            else
            {
                headlineView headlinecount = user.headlines.FirstOrDefault(m => m.title == title);
                List<string> permsGranted = new List<string>();
                permsGranted.Add("view");
                if (headlinecount.accessLevel > 1)
                {
                    permsGranted.Add("edit");
                }
                if (headlinecount.accessLevel > 2)
                {
                    permsGranted.Add("insert");
                }
                if (joined == 0)
                {

                    headlinecount.followingCount = headlinecount.followingCount + 1;
                    userDefinition usercount = user.userDefinition.FirstOrDefault
                        (m => m.usernameFK.UserId == WebSecurity.CurrentUserId);
                    usercount.joinedNumber = usercount.joinedNumber + 1;
                    foreach (var permission in permsGranted)
                    {
                        permissionToGroup permToAdd = new permissionToGroup
                        {
                            sourceID = (from headlines in user.headlines
                                        where headlines.title == model.title
                                        select headlines.headlineDefinedId).FirstOrDefault(),
                            defineSource = "Headline",
                            defineGroup = (from groups in user.groups
                                           where groups.groupName == title + permission
                                           select groups).FirstOrDefault(),
                            permissionDefined = (from perms in user.permissions
                                                 where perms.permissionName == permission
                                                 select perms).FirstOrDefault(),
                            personConnecting = (from users in user.UserProfiles
                                                where users.UserId == WebSecurity.CurrentUserId
                                                select users).FirstOrDefault()
                        };


                        user.permissionsToGroup.Add(permToAdd);
                    }
                    headlineToUser userToAdd = new headlineToUser
                        {
                            personID = (from ytu in user.UserProfiles
                                        where ytu.UserId == WebSecurity.CurrentUserId
                                        select ytu).FirstOrDefault(),
                            headlineID = (from ytu in user.headlines
                                          where ytu.title == title
                                          select ytu).FirstOrDefault(),
                        };
                    user.headlineToUsers.Add(userToAdd);

                    user.SaveChanges();
                    ViewBag.yourStatus = headlineq.getCountLink(title);
                    return PartialView("_joinedStatus");
                }
                else
                {
                    headlinecount.followingCount = headlinecount.followingCount - 1;
                    userDefinition usercount = user.userDefinition.FirstOrDefault(m => m.usernameFK.UserId == WebSecurity.CurrentUserId);
                    usercount.joinedNumber = usercount.joinedNumber - 1;
                    headlineToUser headlineshere = (from huse in user.headlineToUsers
                                                    where huse.headlineID.title == title
                                                    where huse.personID.UserId == WebSecurity.CurrentUserId
                                                    select huse).First();
                    user.headlineToUsers.Remove(headlineshere);
                    int nullcountheadline = user.headlineToUsers.Count(m => m.headlineToUserID == null);
                    int nullcountperson = user.headlineToUsers.Count(m => m.personID == null);
                    if (nullcountperson + nullcountheadline > 0)
                    {
                        headlineToUser headlinestoremove = user.headlineToUsers.FirstOrDefault(m => m.headlineID.headlineDefinedId == null || m.personID.UserId == null);
                        user.headlineToUsers.Remove(headlinestoremove);
                    }
                    foreach (var item in permsGranted)
                    {
                        permissionToGroup groupRemove = user.permissionsToGroup.FirstOrDefault(m => m.personConnecting ==
                            (from users in user.UserProfiles
                             where users.UserId == WebSecurity.CurrentUserId
                             select users).FirstOrDefault() && m.sourceID ==
                             (from headlines in user.headlines
                              where headlines.title == title
                              select headlines.headlineDefinedId).FirstOrDefault()
                              && m.permissionDefined.permissionName == item);
                        user.permissionsToGroup.Remove(groupRemove);
                    }
                    user.SaveChanges();
                    ViewBag.yourStatus = headlineq.getCountLink(title);
                    return PartialView("_joinedStatus");
                    //m => m.personID.UserId == WebSecurity.CurrentUserId
                }
            }
            //The user is not authenticated and the count to join is failing here, this is unreachable           
        }
        public ActionResult viewHeadline(headlineView model, string id)
        {
            int permissionCount = headlineq.permissionCount(id, "view");

            ViewBag.Title = id;
            ViewBag.headlineTitle = id;
            if (permissionCount == 0)
            {
                ViewBag.viewerror = "You do not have permission to view, though you might be able to edit";
            }
            else
            {
                ViewBag.viewerror = "";
            }
            ViewBag.yourStatus = headlineq.getCountLink(model.title);
            if (id == "" || id == null)
            {
                return RedirectToAction("searchHeadlines", "Headlines");
            }
            ViewBag.headlineTags = getTags(id);

            return View();


        }