/*
 * $Id: browser.js 21272 2007-04-30 20:25:33Z rsimpson $
 * $URL: https://build/subversion/DestinationSearch/ds-core-web/tags/ds-core-web-2.0.115/src/main/webapp/js/browser.js $
 */
if( typeof LMI === 'undefined' ) {
    window.LMI = {};
}
/**
 * provide access to information about the browser
 * @class LMI.Browser
 */
LMI.Browser = (function() {
    // NOTE: this is not written as an object so everything
    //       gets garbage collected except the browser info
    var B = {}, versionSearchString,
        dataOS =  [
        {
            string: navigator.platform,
            subString: "Win",
            identity: "Windows"
        },
        {
            string: navigator.platform,
            subString: "Mac",
            identity: "Mac"
        },
        {
            string: navigator.platform,
            subString: "Linux",
            identity: "Linux"
        }
    ],
    dataBrowser = [
        { 	string: navigator.userAgent,
            subString: "OmniWeb",
            versionSearch: "OmniWeb/",
            identity: "OmniWeb"
        },
        {
            string: navigator.vendor,
            subString: "Apple",
            identity: "Safari"
        },
        {
            prop: window.opera,
            identity: "Opera"
        },
        {
            string: navigator.vendor,
            subString: "iCab",
            identity: "iCab"
        },
        {
            string: navigator.vendor,
            subString: "KDE",
            identity: "Konqueror"
        },
        {
            string: navigator.userAgent,
            subString: "Firefox",
            identity: "Firefox"
        },
        {
            string: navigator.vendor,
            subString: "Camino",
            identity: "Camino"
        },
        {		// for newer Netscapes (6+)
            string: navigator.userAgent,
            subString: "Netscape",
            identity: "Netscape"
        },
        {
            string: navigator.userAgent,
            subString: "MSIE",
            identity: "Explorer",
            versionSearch: "MSIE"
        },
        {
            string: navigator.userAgent,
            subString: "Gecko",
            identity: "Mozilla",
            versionSearch: "rv"
        },
        { 		// for older Netscapes (4-)
            string: navigator.userAgent,
            subString: "Mozilla",
            identity: "Netscape",
            versionSearch: "Mozilla"
        }
    ];
    function searchVersion( dataString ) {
        var index = dataString.indexOf( versionSearchString );
        if( index === -1 ) {
            return null;
        }
        return parseFloat( dataString.substring( index + versionSearchString.length + 1 ) );
    }
    function searchString( data ) {
        for( var i = 0; i < data.length; ++i )	{
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) !== -1) {
                    return data[i].identity;
                }
            } else if( dataProp ) {
                return data[i].identity;
            }
        }
        return null;
    }

    B.toString = function() {
        return "LMI.Browser{ browser='" + B.browser + "'; version='" + B.version + "'; OS='" + B.OS + "' }";
    };

    B.browser = searchString( dataBrowser ) || "An unknown browser";
    B.version = searchVersion( navigator.userAgent ) ||
                searchVersion( navigator.appVersion ) ||
                "an unknown version";
    B.OS = searchString( dataOS ) || "an unknown OS";
    return B;
})();
