/*
 Language: JavaScript
 */

hljs.LANGUAGES.javascript = {
    defaultMode: {
        keywords: {
            'keyword': {
                'in': 1, 'if': 1, 'for': 1, 'while': 1, 'finally': 1, 'var': 1, 'new': 1, 'function': 1, 'do': 1,
                'return': 1, 'void': 1, 'else': 1, 'break': 1, 'catch': 1, 'instanceof': 1, 'with': 1, 'throw': 1,
                'case': 1, 'default': 1, 'try': 1, 'this': 1, 'switch': 1, 'continue': 1, 'typeof': 1, 'delete': 1
            },
            'literal': {'true': 1, 'false': 1, 'null': 1}
        },
        contains: [
            hljs.APOS_STRING_MODE,
            hljs.QUOTE_STRING_MODE,
            hljs.C_LINE_COMMENT_MODE,
            hljs.C_BLOCK_COMMENT_MODE,
            hljs.C_NUMBER_MODE,
            { // regexp container
                begin: '(' + hljs.RE_STARTERS_RE + '|case|return|throw)\\s*',
                keywords: {'return': 1, 'throw': 1, 'case': 1},
                contains: [
                    hljs.C_LINE_COMMENT_MODE,
                    hljs.C_BLOCK_COMMENT_MODE,
                    {
                        className: 'regexp',
                        begin: '/', end: '/[gim]*',
                        contains: [
                            {begin: '\\\\/'}
                        ]
                    }
                ],
                relevance: 0
            },
            {
                className: 'function',
                begin: '\\bfunction\\b', end: '{',
                keywords: {'function': 1},
                contains: [
                    {
                        className: 'title', begin: '[A-Za-z$_][0-9A-Za-z$_]*'
                    },
                    {
                        className: 'params',
                        begin: '\\(', end: '\\)',
                        contains: [
                            hljs.APOS_STRING_MODE,
                            hljs.QUOTE_STRING_MODE,
                            hljs.C_LINE_COMMENT_MODE,
                            hljs.C_BLOCK_COMMENT_MODE
                        ]
                    }
                ]
            }
        ]
    }
};
