         #
         #   @param          {Object}            [options]
         #   @param          {Boolean}           [options.trigger]
-        #
         ###
 
         navigate: ( fragment, options ) ->

        #   @method         _openPage
        #   @protected
        #
        #   @param          {Class}             View                    The targeted view class of the matched route.
        #   @param          {Object}            params                  A key-value mapping of the matched route's url pattern's parameters.
        ###

        _openPage: ( View, params ) ->

            divert  = undefined


            ##  dispatched.
            ##
            Backbone.history.start( options )

            return


        ###*
        #   Set the browsers url equal to the current fragment with the supplied parameters replaced.
        #
        #   Works by reconstructing the url from the route path for the supplied parameters combined with the ones
        #   saved, and then @navigate()ing to it.
        #
        #   @method         youAreHere
        #   @param          {Object}            paramsNew               The parameters you want changed.
        #   @param          {Object}            [options]               Options passed on to @navigate().
        ###

        youAreHere: ( paramsNew, options ) ->

            return unless @page?

            [ path, View, params ] = @page

            ##  Update the current fragments parameters,
            ##  And get a local handle on it.
            ##
            _( params ).extend( paramsNew )

            ##  Recreate a fragment url from the current fragment's route path pattern and the parameters
            ##
            fragment =
                path.replace(

                    ///                         #
                        (?:                     #   Group but don't capture
                            \(                  #   A mandatory opening bracket, and:
                            ( [^:\(\)]* )       #   Optional text (zero or more characters that cannot be ':' '(' or ')' ); capture this text as 'before'.
                        )?                      #   When the parameter is NOT optional, the preceding group won't be there, so make the group optional.
                                                #
                        [:*]                    #   A colon (':') or asterisk ('*') indicates a parameter, followed by:
                        ( \w+ )                 #   Its identifier (one or more alfanumeric characters); capture this identifier as 'key'.
                                                #
                        (?:                     #   Group but don't capture
                                                #   Again, when a parameter is optional, it may be followed by:
                            ( [^:\(\)]* )       #   Text (zero or more characters that cannot be ':' '(' or ')' ); capture this text as 'after'.
                            \)                  #   A closing bracket is a must.
                        )?                      #   Unless the parameter was NOT optional of course, in which case the preceding group won't be there.
                                                #
                    ///g                        #   Repeat

                    ( match, before, key, after ) ->

                        ##  Since the 'before' and 'after' are both optional in the regex, it must still be established
                        ##  that they either BOTH matched or opted-out.
                        ##  If only one matched, there's likely something wrong with the path pattern, and we will simply
                        ##  not touch what we've matched.

                        param = encodeURIComponent( params[ key ] )

                        return if before?
                            if after? then "#{before}#{param}#{after}" else match
                        else
                            if after? then match else param
                )

            @navigate( fragment, options )

            return

