code: function PageClientState($this, events) {
  		var oldState = null;
  		var newState = {};
  		
  		return {
  			init : init,
  			get : get,
  			set : set,
  			updateState : updateState
  		}
  		
  		function init(members) {
  			$(window).hashchange(onHashChange(members));
  			onHashChange(members)();			
  		}
  		
  		function get(member) {
  			var value = $.bbq.getState()[member.name];
  			value = value === undefined
  				? member.defaultValue ? member.defaultValue : null
  				: value;
  			if (value !== undefined && value !== null) { value = value.toString(); }
  			return value;
  		}
  		
  		function set(member, value) {
  			newState[member.name] = value.toString();
  		}
  		
  		function updateState() {
  			$.bbq.pushState(newState);
  			newState = {};
  		}
  		
  		function onHashChange(members) {
  			return function() {
  				for(var name in members) {
  					var member = members[name];
  					if (member !== undefined) {
  						var newValue = get(member);
  						if (oldState == null || oldState[name] == undefined || newValue !== oldState[name]) {
  							events.stateUpdated({ 
  								member : member,
  								oldValue : oldState == null ? null : oldState[name],
  								newValue : newValue
  							});
  							if (oldState === null) { oldState = {}; }
  							oldState[name] = newValue;
  						}
  					}
  				}
  			};
  		}
  	}
docs: /* State Types