/// <summary>
        /// Gets an object from the user's OneDrive directory
        /// </summary>
        /// <param name="path">The path to the object</param>
        /// <returns></returns>
        public static async Task<OneDriveObject> GetObject(string path)
        {
            try
            {
                //Create a new One Drive Object
                OneDriveObject curObject = new OneDriveObject();

                LiveConnectClient connect = new LiveConnectClient(Session.CurSession);
                LiveOperationResult operationResult = await connect.GetAsync(path);
                dynamic result = operationResult.Result;
                if (result != null)
                {
                    //Create a new One Drive object from the results
                    curObject = new OneDriveObject(result.name, result.description, result.id, result.parent_id,
                                                    result.type, result.size, result.created_time, result.updated_time);
                }

                //Return our object
                return curObject;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return null;
            }
        }
        /// <summary>
        /// Clear the selection for both the myfiles and shared files lists
        /// </summary>
        private void ClearSelection()
        {
            //Clear myFiles list
            if (lstMyFiles.ItemsSource != null)
            {
                foreach (OneDriveObject item in lstMyFiles.ItemsSource)
                {
                    item.TextColor = new SolidColorBrush(Colors.White);
                }
            }

            //Clear sharedFiles list
            if (lstSharedFiles.ItemsSource != null)
            {
                foreach (OneDriveObject item in lstSharedFiles.ItemsSource)
                {
                    item.TextColor = new SolidColorBrush(Colors.White);
                }
            }

            //Clear list selections
            lstSharedFiles.SelectedItem = null;
            lstMyFiles.SelectedItem = null;

            //Clear "current" variables
            myCurFile = null;
            myCurListItem = null;
            sharedCurFile = null;
            sharedCurListItem = null;
            Session.SharedFile = null;
        }
        /// <summary>
        /// Handle the back key navigation
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
        {
            try
            {
                //Stop playing the preview
                StopMedia();

                //Disable the play, share, and save buttons
                appBarMediaButton.IsEnabled = false;
                appBarSaveButton.IsEnabled = false;
                appBarShareButton.IsEnabled = false;

                //Clear curfile
                myCurFile = null;
                sharedCurFile = null;

                //Determine what list the user is currently viewing
                switch (ringtonePanorama.SelectedIndex)
                {
                    case MyFiles:
                        if (myCurDirectory != null && myCurDirectory.ParentID != null)
                        {
                            //Cancel navigating away from this page
                            e.Cancel = true;

                            //Load the previous directory
                            myFilesList = await FetchDirectory(string.Concat(myCurDirectory.ParentID, "/files"));
                            lstMyFiles.ItemsSource = myFilesList;
                            //Set the current directory
                            myCurDirectory = await OneDriveObject.GetObject(myCurDirectory.ParentID);
                        }
                        break;
                    case SharedFiles:
                        if (sharedCurDirectory != null && sharedCurDirectory.ParentID != null)
                        {
                            //Cancel navigating away from this page
                            e.Cancel = true;

                            //Load the previous directory
                            sharedFilesList = await FetchDirectory(string.Concat(sharedCurDirectory.ParentID, "/files"));
                            lstSharedFiles.ItemsSource = sharedFilesList;
                            //Set the current directory
                            sharedCurDirectory = await OneDriveObject.GetObject(sharedCurDirectory.ParentID);
                        }
                        break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Highlight the selected item in the list
        /// </summary>
        /// <param name="selectedItem"></param>
        /// <param name="itemList"></param>
        private void HighlightSelection(OneDriveObject selectedItem, ObservableCollection<OneDriveObject> itemList)
        {
            //Clear existing selection
            foreach (OneDriveObject item in itemList)
            {
                item.TextColor = new SolidColorBrush(Colors.White);
            }

            //Highlight selected item
            selectedItem.TextColor = new SolidColorBrush(Session.AccentColor);
        }
        /// <summary>
        /// The user selected an item in the OneDrive list
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void lstSharedDrive_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //Exit if the selected item is null
            if (lstSharedFiles.SelectedItem == null) return;

            //If the selected item is the same as the current item, exit
            if (lstSharedFiles.SelectedItem == sharedCurListItem) return;

            //Clear the my files list selection
            ClearSelectionForList(myFilesList, lstMyFiles);
            //Get a referenc to the current list item
            sharedCurListItem = lstSharedFiles.SelectedItem;

            //Highlight the selected item
            HighlightSelection((OneDriveObject)sharedCurListItem, sharedFilesList);

            //Stop playing the preview
            StopMedia();

            //Disable the play, save, and share buttons
            DisableButtons();

            //Get the one drive object
            OneDriveObject selectedItem = (OneDriveObject)sharedCurListItem;

            //Take action based on the type of item selected
            switch (selectedItem.ObjectType)
            {
                case "folder":
                    //Navigate to the folder
                    sharedFilesList = await FetchDirectory(string.Concat(selectedItem.ID, "/files"));
                    lstSharedFiles.ItemsSource = sharedFilesList;
                    //Set the current object
                    sharedCurDirectory = await OneDriveObject.GetObject(selectedItem.ID);
                    break;
                case "audio":
                    //Set the current object
                    sharedCurFile = await OneDriveObject.GetObject(selectedItem.ID);
                    DownloadFile(selectedItem.ID, selectedItem.Name);
                    break;
            }
        }
        /// <summary>
        /// Download the selected file to local storage
        /// </summary>
        /// <param name="path"></param>
        /// <param name="fileName"></param>
        private async void DownloadFile(string path, string fileName)
        {
            try
            {
                //Get a reference to the list item
                OneDriveObject lstItem = new OneDriveObject();

                switch(ringtonePanorama.SelectedIndex)
                {
                    case MyFiles:
                        lstItem = (OneDriveObject)lstMyFiles.SelectedItem;
                        break;
                    case SharedFiles:
                        lstItem = (OneDriveObject)lstSharedFiles.SelectedItem;
                        break;
                }
                
                Progress<LiveOperationProgress> downloadProgress = new Progress<LiveOperationProgress>(
                    (p) =>
                    {
                        if (lstItem != null)
                        {
                            lstItem.DownloadProgress = p.ProgressPercentage;
                        }
                    });

                //Fetch the file from the user's One Drive account
                LiveConnectClient downloadClient = new LiveConnectClient(Session.CurSession);
                LiveDownloadOperationResult downloadResult = await downloadClient.DownloadAsync(
                        string.Concat(path, "/content"), CancellationToken.None, downloadProgress );
                
                //Move the file to the apps local storage
                Stream fileStream = downloadResult.Stream;
                using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    using (IsolatedStorageFileStream fileToSave = storage.OpenFile(fileName, FileMode.Create, FileAccess.ReadWrite))
                    {
                        fileStream.CopyTo(fileToSave);
                        fileStream.Flush();
                        fileStream.Close();                      
                    }                   

                    using (Stream isoStream = storage.OpenFile(fileName, FileMode.Open))
                    {
                        mediaPlayer.SetSource(isoStream);
                    }
                }

                //Clear the download progress
                lstItem.DownloadProgress = 0;

                //Enable the save and share buttons
                appBarSaveButton.IsEnabled = true;
                appBarShareButton.IsEnabled = true;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }