DRY out common functionality
ensure all showing/hiding happens before width and margins are locked in