public VehicleInfoWindow(VehicleAdminObject vehicle, VehicleInfoWindowTabs startTab)
        {
            InitializeComponent();
            _vehicle = vehicle ?? CreateNewDefaultVehicleObject();

            propertyPanels.Add(BasicVehicleControlPropertyPanel);
            propertyPanels.Add(ManageVehicleTasksControlPropertyPanel);
            propertyPanels.Add(PurchaseInfoControlPropertyPanel);
            propertyPanels.Add(SaleInfoControlPropertyPanel);

            ApplyUiMode();
            ApplyActiveUserPermissions();

            LoadPanel(_vehicle);
            CacheManager.ActiveUser.OpenedPages.Add(this);

            if (startTab == VehicleInfoWindowTabs.Tasks)
            {
                foreach (var tabItem in VehicleInfoTabControl.Items)
                {
                    if (tabItem.ToString().ToLower().Contains("tasks"))
                    {
                        ((TabItem) tabItem).IsSelected = true;
                        break;
                    }
                }
            }
        }
        private VehicleAdminObject CreateNewDefaultVehicleObject()
        {
            int lastId = GetNextFolderId();

            DirectoryInfo newDirectory = Directory.CreateDirectory(Settings.VehiclePath + "\\" + (lastId + 1));
            FileStream newfile = File.Create(newDirectory.FullName + "\\" + Settings.VehicleInfoFileName);
            string fileName = newfile.Name;
            newfile.Close();

            File.WriteAllText(fileName, Settings.VehicleInfoDefaultFileText);

            VehicleAdminObject vehicle = new VehicleAdminObject(fileName);
            vehicle.SetValue(PropertyId.PurchaseDate, ((DateTime)DateTime.Now).ToString("d"));

            VehicleTask processVehicleTask = new VehicleTask();
            processVehicleTask.Id = "Process Vehicle";
            processVehicleTask.TaskVehicleId = vehicle.Id;
            processVehicleTask.CreatedDate = DateTime.Today.Date.ToString("d");
            processVehicleTask.Status = VehicleTask.StatusTypes.NotStarted.ToString();
            processVehicleTask.AssignedTo = "Mathew Toma";
            processVehicleTask.Category = VehicleTask.TaskCategoryTypes.Documentation.ToString();
            processVehicleTask.CreatedBy = CacheManager.ActiveUser.Name;
            vehicle.VehicleTasks.Add(processVehicleTask);

            VehicleTask emissionVehicleTask = new VehicleTask();
            emissionVehicleTask.Id = "Emission test";
            emissionVehicleTask.TaskVehicleId = vehicle.Id;
            emissionVehicleTask.CreatedDate = DateTime.Today.Date.ToString("d");
            emissionVehicleTask.Status = VehicleTask.StatusTypes.NotStarted.ToString();
            emissionVehicleTask.AssignedTo = "Filip Mitrofanov";
            emissionVehicleTask.Category = VehicleTask.TaskCategoryTypes.Documentation.ToString();
            emissionVehicleTask.CreatedBy = CacheManager.ActiveUser.Name;
            vehicle.VehicleTasks.Add(emissionVehicleTask);

            VehicleTask newVehicleClean = new VehicleTask();
            newVehicleClean.Id = Strings.NEWCARCLEANINGTASK;
            newVehicleClean.TaskVehicleId = vehicle.Id;
            newVehicleClean.CreatedDate = DateTime.Today.Date.ToString("d");
            newVehicleClean.Status = VehicleTask.StatusTypes.NotStarted.ToString();
            newVehicleClean.AssignedTo = "Mike Wilson";
            newVehicleClean.Category = VehicleTask.TaskCategoryTypes.Detail.ToString();
            newVehicleClean.CreatedBy = CacheManager.ActiveUser.Name;
            vehicle.VehicleTasks.Add(newVehicleClean);

            VehicleTask newVehicleOilChange = new VehicleTask();
            newVehicleOilChange.Id = Strings.NEWCAROILCHANGETASK;
            newVehicleOilChange.TaskVehicleId = vehicle.Id;
            newVehicleOilChange.CreatedDate = DateTime.Today.Date.ToString("d");
            newVehicleOilChange.Status = VehicleTask.StatusTypes.NotStarted.ToString();
            newVehicleOilChange.AssignedTo = "Jordan McKinnon";
            newVehicleOilChange.Category = VehicleTask.TaskCategoryTypes.Other.ToString();
            newVehicleOilChange.CreatedBy = CacheManager.ActiveUser.Name;
            vehicle.VehicleTasks.Add(newVehicleOilChange);

            vehicle.SetValue(PropertyId.Tasks, vehicle.VehicleTasks);
            vehicle.Save(null);

            vehicle.Cache = CacheManager.AllVehicleCache;
            CacheManager.AllVehicleCache.Add(vehicle);

            return vehicle;

            //TODO: add this vehicle to some cache.
        }
        /// <summary>
        /// Return bool determines of cancellation of closing should occur
        /// True means cancel close
        /// false means continue with close
        /// </summary>
        /// <returns></returns>
        bool _parentTabControl_TabClosing()
        {
            MessageBoxResult result;
            if (_vehicle.GetValue(PropertyId.IsDeleted) == true.ToString())
            {
                return false;
            }

            bool requirementsMet = VerifyMinimumRequirements();
            if (!requirementsMet)
            {
                result = MessageBox.Show(Strings.PAGES_VEHICLEINFOPAGE_MISSINGINFO_CONFIRMDELETE,
                Strings.PAGES_VEHICLEINFOPAGE_ERROR, MessageBoxButton.YesNo);

                if (result == MessageBoxResult.No)
                {
                    return true;
                }
                else
                {
                    DeleteVehicle();
                }
                return false;
            }

            VehicleAdminObject origionalVehicle = new VehicleAdminObject(_vehicle.ObjectId);

            bool same = _vehicle.Equals(origionalVehicle);

            if (same)
                return false;

            if (_vehicle.FileVersion == "0")
            {
                result = MessageBoxResult.Yes;
            }
            else
            {
                result = MessageBox.Show(Strings.PAGES_VEHICLEINFOPAGE_ONCLOSING_WARNING,
                    Strings.PAGES_VEHICLEINFOPAGE_ONCLOSING_WARNING_TITLE, MessageBoxButton.YesNoCancel);
            }

            if (result == MessageBoxResult.Yes)
            {
                bool successfulSave = _vehicle.Save(this);
                if (!successfulSave)
                {
                    MessageBox.Show(Strings.PAGES_VEHICLEINFOPAGE_ONCLOSING_UNABLETOSAVE,
                                    Strings.PAGES_VEHICLEINFOPAGE_ERROR, MessageBoxButton.OK);
                    return true;
                }
            }
            else if (result == MessageBoxResult.Cancel)
            {
                return true;
            }

            if (_vehicle != null && _vehicle.Cache != null)
            {
                _vehicle.Cache.ModifyItem(_vehicle);
            }

            return false;
        }
        private void btnRefresh_Click(object sender, RoutedEventArgs e)
        {
            if (sender == null)
            {
                LoadPanel(_vehicle);
                return;
            }
            VehicleCache cache = _vehicle.Cache as VehicleCache;
            if (cache != null)
            {
                cache.Remove(_vehicle);
                _vehicle = new VehicleAdminObject(_vehicle.ObjectId);
                cache.Add(_vehicle);
                _vehicle.Cache = cache;
            }

            if (CacheManager.AllVehicleCache != null)
            {
                CacheManager.AllVehicleCache.RemoveItem(_vehicle.ObjectId);
                VehicleAdminObject temp = new VehicleAdminObject(_vehicle.ObjectId);
                temp.Cache = CacheManager.AllVehicleCache;
                CacheManager.AllVehicleCache.Add(temp);
            }

            LoadPanel(_vehicle);
        }