(function($) {

    /* ON DOM READY
     * ============ */

    $(function() {
        if (!isMobile()) {
            loadLwcSlider(); // load slider plugin
        } else {
            changeLwcUrls(); // or change href on all anchors with class .lwc-link
            if (doAutoload()) {
                window.location.href = $("a.lwc-link").first().attr("href");
            }
        }
    });

    /* PRIVATE METHODS
     * =============== */

    // load LWC-Slider plugin from remote (path is defined in PLUGIN_ROOT)
    function loadLwcSlider() {
        // path to plugin directory
        var PLUGIN_ROOT = "http://ostermann.imageserver.laudert.de/LaudertWebCatalog/lwc-slider-plugin/";
        // lwc-slider-plugin settings
        var PLUGIN_SETTINGS = {
            gaId: "UA-22684604-1", // google analytics id
            pluginRoot: PLUGIN_ROOT, // absolute path to plugin root directory
            autoload: doAutoload(), // autoload first catalog
            tabTextOpen: 'Prospekt anzeigen', // text for tab
            tabTextClose: 'Prospekt schließen', // text for tab if slider is opened
            tabHeight: 15, // tab width
            tabWidth: 120,  // tab height
            width: "80%", // slider width, use px or %
            height: "90%", // slider height, use px or %
            mask: true, // soften background
            maskColor: '#fff' // soften background-color
        };

        $('head').append($('<link>').attr({type: 'text/css', rel: 'stylesheet', href: PLUGIN_ROOT + 'css/global.css'})); // load global stylesheet
        $.getScript(PLUGIN_ROOT + 'js/lwc-slider.js', function() { // load global lwc-slider plugin
            $(function() { // initialise slider on success and DOM ready
                $.lwcSlider(PLUGIN_SETTINGS);
            });
        });
    }

    // autoload / open first catalog
    function doAutoload() {
        var urls = [];
        $("a.lwc-link").each(function() {
            var url = $(this).attr("href");
            if ($.inArray(url, urls) < 0) {
                urls.push(url);
            }
        });
        log("lwc-links found", urls);
        return urls.length == 1;
    }

    // check for mobile devices
    function isMobile() {
        var browser = _detectBrowser();
        return /mobile-safari|android|unknown/.test(browser.current);
    }

    // change url of all lwc-links
    function changeLwcUrls() {
        $("a.lwc-link").each(function() {
            var a = $(this), url = a.attr("data-url");
            if (url) {
                a.attr({href: url});
            }
        });
    }

    // detect browser
    function _detectBrowser(userAgent, language) {
        var version, webkitVersion, browser = {};
        userAgent = (userAgent || navigator.userAgent).toLowerCase();
        language = language || navigator.language || navigator.browserLanguage;
        version = browser.version = (userAgent.match(/.*(?:rv|chrome|webkit|opera|ie)[\/: ](.+?)([ \);]|$)/) || [])[1];
        webkitVersion = (userAgent.match(/webkit\/(.+?) /) || [])[1];
        browser.windows = browser.isWindows = !!/windows/.test(userAgent);
        browser.mac = browser.isMac = !!/macintosh/.test(userAgent) || (/mac os x/.test(userAgent) && !/like mac os x/.test(userAgent));
        browser.iPhone = browser.isiPhone = !!/iphone/.test(userAgent);
        browser.iPod = browser.isiPod = !!/ipod/.test(userAgent);
        browser.iPad = browser.isiPad = !!/ipad/.test(userAgent);
        browser.iOS = browser.isiOS = browser.iPhone || browser.iPod || browser.iPad;
        browser.android = browser.isAndroid = !!/android/.test(userAgent);
        browser.opera = /opera/.test(userAgent) ? version : 0;
        browser.isOpera = !!browser.opera;
        browser.msie = /msie/.test(userAgent) && !browser.opera ? version : 0;
        browser.isIE = !!browser.msie;
        browser.mozilla = /mozilla/.test(userAgent) && !/(compatible|webkit|msie)/.test(userAgent) ? version : 0;
        browser.isMozilla = !!browser.mozilla;
        browser.webkit = /webkit/.test(userAgent) ? webkitVersion : 0;
        browser.isWebkit = !!browser.webkit;
        browser.chrome = /chrome/.test(userAgent) ? version : 0;
        browser.isChrome = !!browser.chrome;
        browser.mobileSafari = /apple.*mobile/.test(userAgent) && browser.iOS ? webkitVersion : 0;
        browser.isMobileSafari = !!browser.mobileSafari;
        browser.safari = browser.webkit && !browser.chrome && !browser.iOS && !browser.android ? webkitVersion : 0;
        browser.isSafari = !!browser.safari;
        browser.language = language.split("-", 1)[0];
        browser.current = browser.msie ? "msie" : browser.mozilla ? "mozilla" : browser.chrome ? "chrome" : browser.safari ? "safari" : browser.opera ? "opera" : browser.mobileSafari ? "mobile-safari" : browser.android ? "android" : "unknown";
        return browser
    }

    // Public log method
    // usage: log('inside coolFunc', this, arguments);
    // paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
    window.log = function() {
        log.history = log.history || [];   // store logs to an array for reference
        log.history.push(arguments);
        if (this.console) {
            arguments.callee = arguments.callee.caller;
            var newarr = [].slice.call(arguments);
            (typeof console.log === 'object' ? log.apply.call(console.log, console, newarr) : console.log.apply(console, newarr));
        }
    };
})(jQuery);
