/// <summary>
 /// Handles a token being deleted, either unzips the token or the entire token collection
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void OnItemDeleting(object sender, EventArgs e)
 {
     var item = Event.ExtractParameter<Item>(e, 0);
     if (item == null) return;
     if (item.Template.IsDerived(new ID(Constants.TokenTemplateBaseId)))
     {
         var parent = item.Parent;
         while (parent != null &&
                 !TemplateManager.GetTemplate(parent).IsDerived(new ID(Constants.TokenCollectionTemplateBaseId)))
         {
             parent = parent.Parent;
         }
         if (parent == null) return;
         var collection =
             TokenKeeper.CurrentKeeper.GetTokenCollections().FirstOrDefault(x => x.GetBackingItemId() == parent.ID);
         if (collection == null) return;
         var token = collection.GetTokens().FirstOrDefault(x => x.GetBackingItemId() == item.ID);
         if (token != null)
         {
             TokenUnzipper unzipper = new TokenUnzipper("{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}",
                 collection.GetCollectionLabel(), token.Token, true);
             unzipper.Unzip();
             collection.RemoveToken(token.Token);
         }
         else
         {
             collection.ResetTokenCache();
         }
     }
     else if (item.Template.IsDerived(new ID(Constants.TokenCollectionTemplateBaseId)))
     {
         var sitecoreTokenCollection =
             TokenKeeper.CurrentKeeper.GetTokenCollections().FirstOrDefault(x => x.GetBackingItemId() == item.ID);
         if (sitecoreTokenCollection == null) return;
         var tokens = sitecoreTokenCollection.GetTokens().ToList();
         foreach (var token in tokens)
         {
             TokenUnzipper unzipper = new TokenUnzipper("{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}",sitecoreTokenCollection.GetCollectionLabel(), token.Token, true);
             unzipper.Unzip();
         }
         TokenKeeper.CurrentKeeper.RemoveCollection(sitecoreTokenCollection.GetCollectionLabel());
     }
 }
 /// <summary>
 /// unzip request
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 private static object UnzipToken(HttpContextBase context)
 {
     var data = GetPostData(context);
     var unzipper = new TokenUnzipper(data.root, data.category, data.token, data.replaceWithValue);
     return unzipper.Unzip(data.preview);
 }