(function () {
    var applicationMode = readCookie();
    if (applicationMode && applicationMode.MobilePreference) {
        if (applicationMode.Owner === 'Server') {
            getDeviceTypeAndRedirectIfRequired(applicationMode);
        }
    } else {
        getDeviceTypeAndRedirectIfRequired(applicationMode);
    }
})();

function getDeviceTypeAndRedirectIfRequired(applicationMode) {
    return $.ajax({
        url: "//wurfl.io/wurfl.js",
        dataType: "script",
        success: function () {
            var isMobile = false;
            if (WURFL != undefined && WURFL !== null) {
                isMobile = (WURFL.form_factor == 'Smartphone');
            }
            redirectIfCriteriaIsMet(applicationMode, isMobile);
        }
    });
}

function redirectIfCriteriaIsMet(applicationMode, isMobilePerClientDetection) {
    if (!((applicationMode.MobilePreference === 'Mobile') === isMobilePerClientDetection)) {
        redirectPerClientDetection(isMobilePerClientDetection);
    }
}

function redirectPerClientDetection(isMobilePerClientDetection) {
    var mobileQueryStringParams = "Preference=Mobile&Owner=Client";
    var desktopQueryStringParams = "Preference=Desktop&Owner=Client";
    var requestUrl = appendToRequestUrl(document.URL);
    if (isMobilePerClientDetection) {
        window.location.href = requestUrl + mobileQueryStringParams;
    } else {
        window.location.href = requestUrl + desktopQueryStringParams;
    }
}

function appendToRequestUrl(requestUrl) {
    if (requestUrl.indexOf("?") === -1) return requestUrl + "?";
    return requestUrl + "&";
}

function readCookie() {
    return { MobilePreference: getValue("MobilePreference"), Owner: getValue("Owner") };
}

function getValue(key) {
    var inputCookie = "";
    var preferenceCookie = getCookie("Preference");
    var mobilepreferenceCookie = getCookie("MobilePreference");
    if (preferenceCookie !== "")
    {
        inputCookie = preferenceCookie;
    }
    else if (mobilepreferenceCookie !== "")
    {
        inputCookie = mobilepreferenceCookie;
    }
    if (inputCookie !== "") {
        var values = inputCookie.split("&");
        if (values !== undefined) {
            for (var i = 0; i < values.length; i++) {
                var splitValues = values[i].split("=");
                if (splitValues[0] === key) return splitValues[1];
            }
        }
    }
    return "";
}

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) === ' ') c = c.substring(1);
        if (c.indexOf(name) === 0) { return c.substring(name.length, c.length); }
    }
    return "";
};
