function SpokeContainer( authorizationToken ) {
  var publix = {}, encode = C5.Request.encode, request = C5.Request.request;
  
  function headers(o) {
    if ( authorizationToken ) o['Authorization-Spoke'] = authorizationToken;
    return o;
  } 
    
  var list = publix.list = function( parent, f /*( t - html containing comments )*/ ) {
    request('GET', null, headers({}), '/spoke/api/in/' + parent + '.hcomment', f );
  }

  var post = publix.post = function( parent, user, email, title, message, handler ) {
    request('POST',encode({'authorInfo[name]':user,'authorInfo[email]':email,
            title:title,'content.textContent':message}), 
            headers({Accept:'application/json'}), '/spoke/api/posts/' + parent + '/create', handler );
  }

  var updateState = publix.updateState = function( key, newState, handler ) {
    request('POST',encode({state:newState}),headers({Accept:'application/json'}),'/spoke/api/state/'+key, handler);
  }

  var find = publix.find = function( states, f ) {
    request('GET', null, headers({Accept:'application/json'}), '/spoke/api/find.json?'+encode(states), f);
  }

  var ancestry = publix.ancestry = function( ids, f ) {
    request('GET', null, headers({Accept:'application/json'}), '/spoke/api/ancestry.json?'+encode({id:ids}), f);
  }

  return publix;
}

