... whatever I said in the precedent post, at least VS9 let us extend it and create macros as well.
Unfortunately, I could not create a macro in C# so I had to use a language that I do not like at all, Visual Basic, and the result is an alpha macro that allows us to create "more clever" 
regions and 
outline for brackets as well.
More clever regions
There is another macro that goes around since Visual Studio 2005 but it has some bug and/or problem with nested regions plus it does not allow us to write directly in the region what the region is about
//#region whatever
...
//#endregion
--- to obtain
//#region whatever[...]
--- instead of
// another "boring" comment over the region
[...]
At the same time that macro put every region, nested or not, at the beginning of the line. It is not such a big problem, but I prefer this version.
Brackets outline
This is absolutely experimental and there are hundreds of problems, but for a couple of files it is doing its job.
What's next
Christmas, holidays, relax, if it is possible, and a better parser (a char by char via VB, I cannot even imagine me doing it!!!) so be patience please, and enjoy this alpha release :)
' JavaScript macro for bits and bops alpha version
' by Andrea Giammarchi - WebReflection.blogspot.com
Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports System.Collections
Public Module JSMacros
    Sub OutlineBrackets()
        Outline("Brackets")
    End Sub
    Sub OutlineRegions()
        Outline("Regions")
    End Sub
    Private Function Outline(ByVal what As String)
        Dim REGION_START As String = "//#region"
        Dim REGION_END As String = "//#endregion"
        If what = "Brackets" Then
            REGION_START = "{"
            REGION_END = "}"
        ElseIf what = "Regions" Then
            REGION_START = "//#region"
            REGION_END = "//#endregion"
        End If
        Dim selection As EnvDTE.TextSelection = DTE.ActiveDocument.Selection
        Dim selections As ArrayList = New ArrayList
        Dim regions As Stack
        Dim current As Stack
        Dim endIndex As Integer
        Dim startIndex As Integer
        Dim text As String
        selection.StartOfDocument()
        selection.SelectAll()
        text = selection.Text
        If text.Chars(text.Length - 1) <> vbCr Then
            selection.EndOfDocument()
            selection.Insert(vbCr)
            text += vbCr
        End If
        regions = FindRegions(text, REGION_START, REGION_END)
        If what = "Brackets" Then
            OutlineBracketsLoop(REGION_START, REGION_END, regions, selections, text, 0, 0, 0, regions.Count(), New Stack)
        ElseIf what = "Regions" Then
            OutlineRegionsLoop(REGION_START, REGION_END, regions, selections, text, 0, 0, 0, regions.Count(), New Stack)
        End If
        SetOutline(selection, selections)
        selection.StartOfDocument()
    End Function
    Private Function CalcLineNumber(ByRef text As String, ByVal i As Integer)
        Dim lineNumber As Integer = 1
        While 0 < i
            i -= 1
            If text.Chars(i) = vbCr Then
                lineNumber += 1
            End If
        End While
        Return lineNumber
    End Function
    Private Function FindPosition(ByRef text As String, ByVal i As Integer)
        Dim position As Integer = 0
        While 0 < i
            i -= 1
            position += 1
            If i = 0 Or text.Chars(i) = vbCr Then
                Exit While
            End If
        End While
        Return position
    End Function
    Private Function FindRegions(ByRef text As String, ByRef REGION_START As String, ByRef REGION_END As String)
        Dim result As Stack = New Stack()
        Dim pos As Stack = New Stack(2)
        Dim startIndex As Integer = 0
        Dim endIndex As Integer
        Dim index As Integer = 0
        Dim subValue As String = ""
        Do
            startIndex = text.IndexOf(REGION_START, startIndex)
            If startIndex = -1 Then
                Exit Do
            End If
            pos.Push(startIndex)
            startIndex = startIndex + REGION_START.Length
            index = startIndex
            endIndex = text.IndexOf(REGION_END, startIndex)
            If endIndex = -1 Then
                MsgBox("Endless Region")
                Exit Do
            End If
            Do
                index = text.IndexOf(REGION_START, index)
                If index = -1 Or endIndex < index Then
                    pos.Push(endIndex)
                    result.Push(pos)
                    pos = New Stack(2)
                    Exit Do
                Else
                    endIndex = text.IndexOf(REGION_END, endIndex + REGION_END.Length)
                    index = index + REGION_START.Length
                End If
            Loop
        Loop
        Return result
    End Function
    Private Function OutlineBracketsLoop(ByRef REGION_START As String, ByRef REGION_END As String, ByRef regions As Stack, ByRef selections As ArrayList, ByRef text As String, ByVal startIndex As Integer, ByVal endIndex As Integer, ByVal i As Integer, ByVal length As Integer, ByVal current As Stack)
        Dim startLine As Integer
        Dim endLine As Integer
        While i < length
            current = regions.Pop
            endIndex = current.Pop
            startIndex = current.Pop
            startLine = CalcLineNumber(text, startIndex)
            endLine = CalcLineNumber(text, endIndex)
            If startLine < endLine Then
                selections.Add(startLine)
                selections.Add(FindPosition(text, startIndex) - 1)
                selections.Add(endLine)
                selections.Add(FindPosition(text, endIndex))
            End If
            i += 1
        End While
    End Function
    Private Function OutlineRegionsLoop(ByRef REGION_START As String, ByRef REGION_END As String, ByRef regions As Stack, ByRef selections As ArrayList, ByRef text As String, ByVal startIndex As Integer, ByVal endIndex As Integer, ByVal i As Integer, ByVal length As Integer, ByVal current As Stack)
        Dim tmpIndex As Integer
        While i < length
            current = regions.Pop
            endIndex = current.Pop
            startIndex = current.Pop
            tmpIndex = startIndex + REGION_START.Length
            selections.Add(CalcLineNumber(text, startIndex))
            selections.Add(1 + FindPosition(text, startIndex) + REGION_START.Length + text.Substring(tmpIndex, text.IndexOf(vbCr, startIndex) - tmpIndex).Length)
            selections.Add(CalcLineNumber(text, endIndex) + 1)
            selections.Add(1)
            i += 1
        End While
    End Function
    Private Function SetOutline(ByRef selection As EnvDTE.TextSelection, ByRef selections As ArrayList)
        Dim i As Integer = 0
        Dim length As Integer = selections.Count()
        While i < length
            selection.MoveToLineAndOffset(selections.Item(i), selections.Item(i + 1))
            selection.MoveToLineAndOffset(selections.Item(i + 2), selections.Item(i + 3), True)
            selection.OutlineSection()
            i += 4
        End While
    End Function
End Module