protected void LoadView()
        {
            string ImageFile = "";

            if (ProductId > 0)
            {
                decimal minPrice, maxPrice;
                Product product = ProductController.GetProductById(ProductId, null, out minPrice, out maxPrice);
                txtProductName.Text = product.ProductName;
                txtProductCode.Text = product.ProductCode;
                txtProductNum.Text  = product.ProductNum.ToString();
                ImageFile           = Snoopi.core.MediaUtility.GetImagePath("Product", product.ProductImage, 0, 64, 64);
                if (ImageFile.ToLower().Contains(".jpg") || ImageFile.ToLower().Contains(".jpeg") || ImageFile.ToLower().Contains(".png"))
                {
                    ImageFileHandler(fuImage, imgImage, btnDeleteImage, ImageFile);
                }
                txtProductAmount.Text      = product.Amount;
                txtProductDescription.Text = product.Description;
                txtRecomendedPrice.Text    = product.RecomendedPrice.ToString();
            }

            LoadItems(ProductId);
            //TODO
            //ImageFileHandler(fuImage, imgImage, btnDeleteImage, MediaUtility.GetAdminImageFileUrl(ProductId, MediaUtility.SUBFOLDER_PRODUCTS, ImageFile, 64, 64));

            AnimalCollection animalList = AnimalCollection.FetchAll();
            int index = 0;

            foreach (var item in animalList)
            {
                ddlAnimalType.Items.Add(new ListItem(item.AnimalName, item.AnimalId.ToString()));
                if (ProductAnimal.FetchByID(ProductId, item.AnimalId) != null)
                {
                    ddlAnimalType.Items[index].Selected = true;
                }
                index++;
            }

            FillDdlCategory(ProductId);
            FillDdlSubCategory(ProductId, Convert.ToInt64(ddlCategory.SelectedItem.Value));
        }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid)
            {
                return;
            }

            Product product = null;

            if (IsNewMode)
            {
                product = new Product();
                product.SendSupplier = cbxIsSendSupplier.Checked;
                product.IsDeleted    = false;
            }
            else
            {
                product = Product.FetchByID(ProductId);
            }
            Product p = Product.FetchByCode(txtProductCode.Text);

            if (p != null && p.ProductId != ProductId)
            {
                Master.MessageCenter.DisplayErrorMessage(ProductsStrings.GetText(@"ProductCodeAlreadyExists"));
                return;
            }
            if (txtProductNum.Text != "")
            {
                Product p1 = Product.FetchByProductNum(Convert.ToInt64(txtProductNum.Text));
                if (p1 != null && p1.ProductId != ProductId)
                {
                    Master.MessageCenter.DisplayErrorMessage(ProductsStrings.GetText(@"ProductNumAlreadyExists"));
                    return;
                }
                else
                {
                    product.ProductNum = Convert.ToInt64(txtProductNum.Text);
                }
            }
            else
            {
                product.ProductNum = null;
            }
            product.ProductName     = txtProductName.Text;
            product.ProductCode     = txtProductCode.Text;
            product.Amount          = txtProductAmount.Text;
            product.Description     = txtProductDescription.Text;
            product.CategoryId      = Convert.ToInt64(ddlCategory.SelectedValue);
            product.SubCategoryId   = Convert.ToInt64(ddlSubCategory.SelectedValue);
            product.RecomendedPrice = txtRecomendedPrice.Text.Trim() != "" ? Convert.ToDecimal(txtRecomendedPrice.Text.Trim()) : 0;
            if (fuImage.HasFile)
            {
                if (!IsNewMode)
                {
                    MediaUtility.DeleteImageFilePath("Product", product.ProductImage, 64, 64, 0);
                }
                string fn = MediaUtility.SaveFile(fuImage.PostedFile, "Product", 0);
                product.ProductImage = fn;
                imgImage.ImageUrl    = Snoopi.core.MediaUtility.GetImagePath("Product", product.ProductImage, 0, 64, 64);
                ImageFileHandler(fuImage, imgImage, btnDeleteImage, imgImage.ImageUrl);
            }
            else if (product.ProductImage != "" && fuImage.Visible)
            {
                MediaUtility.DeleteImageFilePath("Product", product.ProductImage, 64, 64, 0);
                product.ProductImage = "";
            }

            product.Save();
            ProductId = product.ProductId;
            int count = 0;

            foreach (ListItem item in ddlAnimalType.Items)
            {
                if (item.Selected)
                {
                    count++;
                    ProductAnimal productAnimal = ProductAnimal.FetchByID(ProductId, Convert.ToInt64(item.Value));
                    if (productAnimal == null)
                    {
                        productAnimal           = new ProductAnimal();
                        productAnimal.ProductId = ProductId;
                        productAnimal.AnimalId  = Convert.ToInt64(item.Value);
                        productAnimal.Save();
                    }
                }
                else
                {
                    ProductAnimal.Delete(ProductId, Convert.ToInt64(item.Value));
                }
            }
            int index = 0;

            //save filters
            foreach (GridViewRow row in gvFilters.Rows)
            {
                Int64        FilterId = Int64.Parse(gvFilters.DataKeys[index].Value.ToString());
                CheckBoxList lsbx     = (CheckBoxList)row.FindControl("ddlSubFilter");

                foreach (ListItem item in lsbx.Items)
                {
                    ProductFilter productFilter = ProductFilter.FetchByID(ProductId, FilterId, Convert.ToInt64(item.Value));
                    if (productFilter == null && item.Selected)
                    {
                        productFilter             = new ProductFilter();
                        productFilter.ProductId   = ProductId;
                        productFilter.FilterId    = FilterId;
                        productFilter.SubFilterId = Convert.ToInt64(item.Value);
                        productFilter.Save();
                    }
                    else if (productFilter != null && !item.Selected)
                    {
                        (new Query(ProductFilter.TableSchema).Where(ProductFilter.Columns.ProductId, productFilter.ProductId)
                         .AddWhere(ProductFilter.Columns.FilterId, productFilter.FilterId)
                         .AddWhere(ProductFilter.Columns.SubFilterId, productFilter.SubFilterId).Delete()).Execute();
                    }
                }
                index++;
            }

            if (IsNewMode)
            {
                if (cbxIsSendSupplier.Checked)
                {
                    EmailMessagingService.SendEmailNewProductToSupplier(product);
                }
                string successMessage = ProductsStrings.GetText(@"MessageProductCreated");
                string url            = @"EditProduct.aspx?ProductId=" + ProductId;
                url += @"&message-success=" + Server.UrlEncode(successMessage);
                Response.Redirect(url, true);
            }
            else
            {
                string successMessage = ProductsStrings.GetText(@"MessageProductSaved");
                Master.MessageCenter.DisplaySuccessMessage(successMessage);
            }
        }