@inherits umbraco.MacroEngines.DynamicNodeContext

@{    
    @* Walk up the tree from the current page to get the root node *@
    var rootNode = Model.AncestorOrself(1);
}

@*Render the sitemap by passing the root node to the traverse helper*@
<div class="sitemap"> 
    @traverse(@Model.AncestorOrSelf())
</div>



@*Helper method to travers through all descendants*@
@helper traverse(dynamic node){

@*If a MaxLevelForSitemap parameter is passed to the macro, otherwise default to 4 levels*@
var maxLevelForSitemap = String.IsNullOrEmpty(Parameter.MaxLevelForSitemap) ? 4 : int.Parse(Parameter.MaxLevelForSitemap); 

@*Select visible children *@
var items = node.Children.Where("Visible").Where("Level <= " + maxLevelForSitemap);


@*If any items are returned, render a list *@
if (items.Any()) { 
   <ul>
            @foreach (var item in items) {
          <li class="level-@item.Level">
					<a href="@item.Url">@item.Name</a>

             @*Run the traverse helper again *@
					@traverse(item)
                </li>
            }
   </ul>
    }
}