
/**
 * Detect current language by user's browser/system language, and redirect him.
 * Will set a cookie, to prevent redirect once the user has changed the language itself
 * or the redirection is done.
 *
 * @param  {object} window    The window object of the browser.
 * @param  {object} document  The document object of the browser.
 * @param  {undefined} undefined Just undefined
 *
 * @author Daniel Siepmann <d.siepmann@web-vision.de>
 * @author Yannick Hermes <y.hermes@web-vision.de>
 */
;
(function(window, document) {
    // Fallback is language key on HTML Tag (set by TYPO3)
    var cookieNameToPreventLanguageRedirect = 'noLangRedirect',
        cookieNameToDetectRedirection = 'successfulRedirection',
        noRedirect = (document.cookie.indexOf(cookieNameToPreventLanguageRedirect) !== -1),
        redirected = (document.cookie.indexOf(cookieNameToDetectRedirection) !== -1),
        currentPageLanguage = document.getElementsByTagName('html')[0].getAttribute('lang'),
        langLinkIndex = 0,
        languageLinks = document.querySelectorAll('.nav-language a'),
        browserLanguage = (
            navigator.language ||
            navigator.browserLanguage ||
            navigator.userLanguage ||
            navigator.systemLanguage ||
            currentPageLanguage).substring(0, 2);

    // Display redirection notice and unset redirection Cookie
    if (redirected) {
        document.getElementById('language-redirect').style.display = 'block';
        document.getElementById('wrapper').className += ' js-language-redirect';

        document.cookie = cookieNameToDetectRedirection +
            '=;Path=/;Expires=Thu, 01 Jan 1970 00:00:01 UTC;';
    }

    do {
        // Redirected and Cookie is set
        if (noRedirect) {
            break;
        }

        // Set preventRedirection-Cookie if languages are equal
        if (browserLanguage === currentPageLanguage) {
            document.cookie = cookieNameToPreventLanguageRedirect + '=1;Path=/;';
            break;
        }

        // Redirect to url from language menu
        for (langLinkIndex = 0; langLinkIndex < languageLinks.length; langLinkIndex++) {
            if (languageLinks[langLinkIndex].dataset.lang === browserLanguage) {
                document.cookie = cookieNameToDetectRedirection + '=1;Path=/;';
                location.href = languageLinks[langLinkIndex].getAttribute('href');

                // Do nothing else, just redirect
                return;
            }
        }
    } while (false);
})(window, document);


			// decrypt helper function
		function decryptCharcode(n,start,end,offset) {
			n = n + offset;
			if (offset > 0 && n > end) {
				n = start + (n - end - 1);
			} else if (offset < 0 && n < start) {
				n = end - (start - n - 1);
			}
			return String.fromCharCode(n);
		}
			// decrypt string
		function decryptString(enc,offset) {
			var dec = "";
			var len = enc.length;
			for(var i=0; i < len; i++) {
				var n = enc.charCodeAt(i);
				if (n >= 0x2B && n <= 0x3A) {
					dec += decryptCharcode(n,0x2B,0x3A,offset);	// 0-9 . , - + / :
				} else if (n >= 0x40 && n <= 0x5A) {
					dec += decryptCharcode(n,0x40,0x5A,offset);	// A-Z @
				} else if (n >= 0x61 && n <= 0x7A) {
					dec += decryptCharcode(n,0x61,0x7A,offset);	// a-z
				} else {
					dec += enc.charAt(i);
				}
			}
			return dec;
		}
			// decrypt spam-protected emails
		function linkTo_UnCryptMailto(s) {
			location.href = decryptString(s,-1);
		}
		