     @start = null #not used ...
     @parts = []
     @args  = []
-    # #/abc/dsa/ => ["#", "abc", "dsa"]
+    # #/abc/dsa/ => ["#", "abc", "dsa"] or ["", "abc", "dsa"]
     parts = route.replace(/\/$/, "").split("/")
 
     # mark, this route not have a length and end

  _plain_route: (url) ->
    url.toString().indexOf("/") == 0

  #
  # @param routes [Object] object with routes
  # @param fn [Function] callback, which will be called, after routes will be defined

      Sirius.Application.adapter.bind(selector, event_name, handler)

    # for cache change obj[k, v] to array [[k,v]]
    array_of_routes = for url, action of routes when @_hash_route(url)
      url    = new Sirius.RoutePart(url)
      action = if Sirius.Utils.is_function(action) then action else new Sirius.ControlFlow(action)
      [url, action]

    plain_routes = for url, action of routes when @_plain_route(url)
      url    = new Sirius.RoutePart(url)
      action = if Sirius.Utils.is_function(action) then action else new Sirius.ControlFlow(action)
      [url, action]

    dispatcher = (e) ->
      c 111111
      prev = current
      result = false
      arr = null

      if event.type == "hashchange"
        # hashchange
        arr = array_of_routes
        current = window.location.hash
      else
        #plain
        arr = plain_routes
        href = e.target.href # TODO the same for hashchange
        history.pushState({href: href}, "#{href}", href)
        pathname = window.location.pathname
        pathname = "/" if pathname == ""
        e.preventDefault()
        current = pathname

      Sirius.Application.logger("Url change to: #{current}")
      Sirius.Application.adapter.fire(document, "application:urlchange", current, prev)

      for part in arr
        f = part[0]
        r = f.match(current)
        if r && !result
