/**
 * SyntaxHighlighter
 * http://alexgorbatchev.com/
 *
 * SyntaxHighlighter is donationware. If you are using it, please donate.
 * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
 *
 * @version
 * 2.1.364 (October 15 2009)
 * 
 * @copyright
 * Copyright (C) 2004-2009 Alex Gorbatchev.
 *
 * @license
 * This file is part of SyntaxHighlighter.
 * 
 * SyntaxHighlighter is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * SyntaxHighlighter is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with SyntaxHighlighter.  If not, see <http://www.gnu.org/copyleft/lesser.html>.
 */
var dp = {
    SyntaxHighlighter : {}
};

dp.SyntaxHighlighter = {
    parseParams: function(
                        input,
                        showGutter,
                        showControls,
                        collapseAll,
                        firstLine,
                        showColumns
                        )
    {
        function getValue(list, name)
        {
            var regex = new XRegExp('^' + name + '\\[(?<value>\\w+)\\]$', 'gi'),
                match = null
                ;

            for (var i = 0; i < list.length; i++)
                if ((match = regex.exec(list[i])) != null)
                    return match.value;

            return null;
        };

        function defaultValue(value, def)
        {
            return value != null ? value : def;
        };

        function asString(value)
        {
            return value != null ? value.toString() : null;
        };

        var parts = input.split(':'),
            brushName = parts[0],
            options = {},
            straight = { 'true' : 'true' }
            reverse = { 'true' : 'false' },
            result = null,
            defaults = SyntaxHighlighter.defaults
            ;

        for (var i in parts)
            options[parts[i]] = 'true';

        showGutter = asString(defaultValue(showGutter, defaults.gutter));
        showControls = asString(defaultValue(showControls, defaults.toolbar));
        collapseAll = asString(defaultValue(collapseAll, defaults.collapse));
        showColumns = asString(defaultValue(showColumns, defaults.ruler));
        firstLine = asString(defaultValue(firstLine, defaults['first-line']));

        result = {
            brush            : brushName,
            gutter            : defaultValue(reverse[options.nogutter], showGutter),
            toolbar            : defaultValue(reverse[options.nocontrols], showControls),
            collapse        : defaultValue(straight[options.collapse], collapseAll),
            ruler            : defaultValue(straight[options.showcolumns], showColumns),
            'first-line'    : defaultValue(getValue(parts, 'firstline'), firstLine)
        };

        return result;
    },

    HighlightAll: function(
                        name,
                        showGutter /* optional */,
                        showControls /* optional */,
                        collapseAll /* optional */,
                        firstLine /* optional */,
                        showColumns /* optional */
                        )
    {
        function findValue()
        {
            var a = arguments;

            for (var i = 0; i < a.length; i++)
            {
                if (a[i] === null)
                    continue;

                if (typeof(a[i]) == 'string' && a[i] != '')
                    return a[i] + '';

                if (typeof(a[i]) == 'object' && a[i].value != '')
                    return a[i].value + '';
            }

            return null;
        };

        function findTagsByName(list, name, tagName)
        {
            var tags = document.getElementsByTagName(tagName);

            for (var i = 0; i < tags.length; i++)
                if (tags[i].getAttribute('name') == name)
                    list.push(tags[i]);
        }

        var elements = [],
            highlighter = null,
            registered = {},
            propertyName = 'innerHTML'
            ;

        // for some reason IE doesn't find <pre/> by name, however it does see them just fine by tag name...
        findTagsByName(elements, name, 'pre');
        findTagsByName(elements, name, 'textarea');

        if (elements.length === 0)
            return;

        for (var i = 0; i < elements.length; i++)
        {
            var element = elements[i],
                params = findValue(
                    element.attributes['class'], element.className,
                    element.attributes['language'], element.language
                    ),
                language = ''
                ;

            if (params === null)
                continue;

            params = dp.SyntaxHighlighter.parseParams(
                params,
                showGutter,
                showControls,
                collapseAll,
                firstLine,
                showColumns
                );

            SyntaxHighlighter.highlight(params, element);
        }
    }
};

