﻿(function ($) {
    var $ciao = $.ciao = {
        glossaire:
        [
            { word: 'BNQ', definition: 'Bureau de normalisation du Qu&eacute;bec' },
            { word: 'DSQ', definition: 'Dossier Sant&eacute; Qu&eacute;bec' },
            { word: 'IIS', definition: '<span class="english" lang="en">Internet information server</span>' },
            { word: 'MSSS', definition: 'Minist&egrave;re de la Sant&eacute; et des Services sociaux' },
            { word: 'MRNF', definition: 'Minist&egrave;re des Ressources naturelles et de la Faune' },
            { word: 'MTQ', definition: 'Minist&egrave;re des Transports du Qu&eacute;bec' },
            { word: 'NVDA', definition: '<span class="english" lang="en">Non visual desk accessibility</span>' },
            { word: 'AOS', definition: 'Architecture orient&eacute;e services' },
            { word: 'SGQRI 008-01', definition: 'Standard sur l’accessibilité d’un site Web' },
            { word: 'SGQRI 008-02', definition: 'Standard sur l’accessibilité d’un document t&eacute;l&eacute;chargeable' },
            { word: 'SGQRI 008-03', definition: 'Standard sur l’accessibilité du multimédia dans un site Web' },
            { word: 'SOA', definition: '<span class="english" lang="en">Services-oriented architecture</span>' },
            { word: 'SQL', definition: '<span class="english" lang="en">Structured query language</span>' },
            { word: 'TI', definition: 'Technologies de l’information' },
            { word: 'UML', definition: '<span class="english" lang="en">Unified modeling language</span>' },
            { word: 'WCF', definition: '<span class="english" lang="en">Windows communication foundation</span>' },
            { word: 'FAQ', definition: 'Foire aux questions' },
            { word: 'a11yMTL', definition: 'Accessibilit&eacute; Montr&eacute;al' },
            { word: 'W3C', definition: '<span class="english" lang="en">World Wide Web Consortium</span>' },
            { word: 'MRQ', definition: 'Minist&egrave;re du revenu du Qu&eacute;bec' },
            { word: 'RAMQ', definition: 'R&eacute;gie de l\'assurance maladie du Qu&eacute;bec' },
            { word: 'LPRG Web', definition: 'Logiciel de production des rapports de gestion des &eacute;tablissements de la sant&eacute;' },
            { word: 'WCAG 2.0', definition: 'Web Content Accessibility Guidelines 2.0' }
        ],

        highlightedWords:
            [
                'CIAO'
            ]
    };

    $.fn.importantWords = function (options) {

        var settings = {
            globalSearch: true,
            ignoreCase: true,
            cssClass: ''
        };

        this.each(function () {

            if (options) { $.extend(settings, options); }

            for (var i = 0; i < $ciao.highlightedWords.length; i++) {
                var toReplace = $ciao.highlightedWords[i];
                var current = $(this).html();
                var pattern = new RegExp(toReplace, (settings.globalSearch ? 'g' : '') + (settings.ignoreCase ? 'i' : ''));
                $(this).html(current.replace(pattern, "<strong>" + toReplace + "</strong>"));
            }
        });
    };

    $.fn.accronyms = function (options) {

        var settings = {
            ignoreCase: false,
            defineFirst: true,
            applyLinks: true,
            replacePattern: '{1} ({0})',
            glossairePage: 'glossaire.aspx'
        };

        function replaceIndex(string, pattern, indexOfFirst, replFirst, replOthers) {
            return string.replace(pattern, function (match, index) {
            if (index === indexOfFirst && settings.defineFirst) return replFirst;
                else return replOthers;
            });
        }

        for (var i = 0; i < $ciao.glossaire.length; i++) {
            var first = true;

            this.each(function () {
                if (options) { $.extend(settings, options); }
                var item = $ciao.glossaire[i];
                var idHandle = item.word.replace( / /g , '_');
                var wordReplace = settings.applyLinks ? ('<a href="' + settings.glossairePage + '#' + idHandle + '">' + item.word + '</a>') : item.word;
                var regex = new RegExp('\\b' + item.word + '\\b', 'g' + (settings.ignoreCase ? 'i' : ''));
                var current = $(this).html();

                if (first) {
                    var indexOfFirst = current.search(regex);
                    if (indexOfFirst > -1) {
                        current = replaceIndex(current, regex, indexOfFirst, settings.replacePattern.replace('{0}', item.word).replace('{1}', item.definition), wordReplace);
                        first = false;
                    }
                }
                else
                    current = current.replace(regex, wordReplace);

                $(this).html(current);
            });
        }
    };
})(jQuery);
