public ActionResult EditAd(AdvertiseViewData model)
        {
            JsonViewData viewData = Validate <JsonViewData>(
                new Validation(() => CurrentUser.CanModerate() == false, "Nie masz praw do wykonowania tej operacji."),
                new Validation(() => string.IsNullOrEmpty(model.RecommendationLink.NullSafe()), "Link rekomendacji nie może być pusty."),
                new Validation(() => string.IsNullOrEmpty(model.RecommendationTitle.NullSafe()), "Tytuł rekomendacji nie może być pusty."),
                new Validation(() => string.IsNullOrEmpty(model.ImageLink.NullSafe()), "Link obrazka nie może być pusty."),
                new Validation(() => string.IsNullOrEmpty(model.ImageTitle.NullSafe()), "Tytuł obrazka nie może być pusty."),
                new Validation(() => model.StartTime >= model.EndTime, "Data zakończenia reklamy musi być większa od daty początkowej"),
                new Validation(() => string.IsNullOrEmpty(model.Email), "Adres e-mail nie może być pusty."),
                new Validation(() => !model.Email.NullSafe().IsEmail(), "Niepoprawny adres e-mail.")
                );

            var bannerType = string.IsNullOrWhiteSpace(model.IsBanner) == false;

            if (viewData == null)
            {
                try
                {
                    if (bannerType)
                    {
                        var request  = WebRequest.Create(Server.MapPath(string.Format("/Assets/Images/{0}", model.ImageLink)));
                        var response = request.GetResponse();
                        var image    = Image.FromStream(response.GetResponseStream());

                        if (image.Width != 960)
                        {
                            viewData = new JsonViewData {
                                errorMessage = string.Format("Oczekiwana szerokość banera to 960px, twoja to: {0}", image.Width)
                            };
                            return(Json(viewData));
                        }
                    }
                    using (IUnitOfWork unitOfWork = UnitOfWork.Begin())
                    {
                        if (model.Id == null || model.Id.IsEmpty())
                        {
                            IRecommendation recommendation = _factory.CreateRecommendation(
                                model.RecommendationLink.Trim(),
                                model.RecommendationTitle.Trim(),
                                model.ImageLink.Trim(),
                                model.ImageTitle.Trim(),
                                model.StartTime,
                                model.EndTime,
                                model.Email,
                                model.Position,
                                model.NotificationIsSent,
                                bannerType);
                            _recommendationRepository.Add(recommendation);

                            unitOfWork.Commit();

                            Log.Info("Recommendation registered: {0}", recommendation.RecommendationTitle);

                            viewData = new JsonViewData {
                                isSuccessful = true
                            };
                        }
                        else
                        {
                            IRecommendation recommendation = _recommendationRepository.FindById(model.Id.ToGuid());

                            if (recommendation == null)
                            {
                                viewData = new JsonViewData {
                                    errorMessage = "Podana reklama nie istnieje."
                                };
                            }
                            else
                            {
                                _recommendationRepository.EditAd(
                                    recommendation,
                                    model.RecommendationLink.NullSafe(),
                                    model.RecommendationTitle.NullSafe(),
                                    model.ImageLink.NullSafe(),
                                    model.ImageTitle.NullSafe(),
                                    model.StartTime,
                                    model.EndTime,
                                    model.Email,
                                    model.Position,
                                    model.NotificationIsSent,
                                    bannerType);

                                unitOfWork.Commit();

                                viewData = new JsonViewData {
                                    isSuccessful = true
                                };
                            }
                        }
                    }
                }
                catch (ArgumentException argument)
                {
                    viewData = new JsonViewData {
                        errorMessage = argument.Message
                    };
                }
                catch (WebException e)
                {
                    viewData = new JsonViewData {
                        errorMessage = "Podany link do zdjęcia jest nieprawidłowy"
                    };
                }
                catch (Exception e)
                {
                    Log.Exception(e);

                    viewData = new JsonViewData {
                        errorMessage = FormatStrings.UnknownError.FormatWith("")
                    };
                }
            }

            return(Json(viewData));
        }