jQuery.getPlatformInfo = function(limits)
{
    var user_agent = navigator.userAgent.toLowerCase();
    var platform = null;
    var browser = null;
    var version = null;
    
    if (/macintosh/.test(user_agent))
    {
        platform = "mac";
    }
    else if (/windows/.test(user_agent))
    {
        platform = "windows";
    }
    else if (/linux/.test(user_agent))
    {
        platform = "linux";
    }
    else
    {
        platform = "unknown";
    }
    
    var version_match = null;
    if (/chrome/.test(user_agent) && !/chromeframe/.test(user_agent)) // We won't support chromeframe until it's out of beta.
    {
        browser = "Chrome";
        version_match = user_agent.match(/chrome\/(\d)/)
        version = (version_match !== null) ? version_match[1].replace('.', '') : "";
    }
    else if (/safari/.test(user_agent))
    {
        browser = "Safari";
        version_match = user_agent.match(/version\/(\d)/)
        version = (version_match !== null) ? version_match[1] : "";
    }
    else if (/firefox/.test(user_agent))
    {
        browser = "Firefox";
        version_match = user_agent.match(/firefox\/(\d\.\d)/)
        version = (version_match !== null) ? version_match[1].replace('.', '') : "";
    }
    else if (/msie/.test(user_agent))
    {
        browser = "MSIE";
        version_match = user_agent.match(/msie\s(\d)/)
        version = (version_match !== null) ? version_match[1] : "";
    }
    else if (/opera/.test(user_agent))
    {
        browser = "Opera"
        version_match = user_agent.match(/opera[\/\s](\d)/)
        version = (version_match !== null) ? version_match[1] : "";
    }
    else
    {
        browser = "unknown";
        version = "";
    }
    
    if (limits !== undefined)
    {
        $.each(limits, function(name, limit)
        {
            if (browser == name)
            {
                if (parseInt(version, 10) > limit)
                {
                    version = limit;
                }
                return false;
            }
        });
    }
    
    return {platform: platform, browser: browser + version};
};

jQuery.setBodyPlatformClasses = function()
{
    var body = jQuery("body");
    eval("var limits = " + body.attr("browser_version_limits"));
    body.removeAttr("browser_version_limits");

    var info = jQuery.getPlatformInfo(limits);
    body.addClass(info.platform);
    body.addClass(info.browser);
};

jQuery(document).ready(jQuery.setBodyPlatformClasses);
