/** ********************************************************************
 ** ユーザーエージェント取得オブジェクト 
 ** *******************************************************************/
function Glue_userAgent( debug )
{
    if(debug) this._debug = debug;

    this._platform =
           this._searchString(this._platforms)
        || 'Unknown OS';
    this._browser =
           this._searchString(this._browsers)
        || 'Unknown browser';
    this._version =
           this._searchVersion(navigator.userAgent)
        || this._searchVersion(navigator.appVersion)
        || 'Unknown version';
}

Glue_userAgent.prototype =
{
    _debug: false,

    _platform: null,
    _browser: null,
    _version: null,

    _search_key: '',

    _platforms: [
        {
            trigger: navigator.platform,
            subString: 'Win',
            identity: 'WindowsOS'
        },
        {
            trigger: navigator.platform,
            subString: 'Mac',
            identity: 'MacOS'
        },
        {
            trigger: navigator.platform,
            subString: 'Linux',
            identity: 'LinuxOS'
        }
    ],
    _browsers: [
        {
            trigger: navigator.userAgent,
            subString: 'MSIE',
            identity: 'MSIE',
            versionSearch: 'MSIE'
        },
        {
            trigger: navigator.vendor,
            subString: 'Apple',
            identity: 'Safari',
            versionSearch: 'Version'
        },
        {
            trigger: navigator.userAgent,
            subString: 'Firefox',
            identity: 'Firefox'
        },
        {
            trigger: navigator.userAgent,
            subString: 'Gecko',
            identity: 'Mozilla',
            versionSearch: 'rv'
        },
        {
            prop: window.opera,
            identity: 'Opera'
        },
        {
            // for newer Netscapes(6+)
            trigger: navigator.userAgent,
            subString: 'Netscape',
            identity: 'Netscape'
        },
        {
            // for older Netscapes(4-)
            trigger: navigator.userAgent,
            subString: 'Mozilla',
            identity: 'Netscape',
            versionSearch: 'Mozilla'
        },
        {
            trigger: navigator.vendor,
            subString: 'Camino',
            identity: 'Camino'
        },
        {
            trigger: navigator.vendor,
            subString: 'KDE',
            identity: 'Konqueror'
        },
        {
            trigger: navigator.vendor,
            subString: 'iCab',
            identity: 'iCab'
        },
        {
            trigger: navigator.userAgent,
            subString: 'OmniWeb',
            identity: 'OmniWeb',
            versionSearch: 'OmniWeb/'
        }
    ],

    getPlatform: function()
    {
        return this._platform;
    },
    getBrowser: function()
    {
        return this._browser;
    },
    getVersion: function()
    {
        return this._version;
    },
    _searchString: function( list )
    {
        for( var i = 0; i < list.length; i++ ){
            var trigger = list[i].trigger;//alert(trigger);
            var prop = list[i].prop;
            this._search_key = list[i].versionSearch || list[i].identity;
            if(trigger){
                if( trigger.indexOf(list[i].subString) != -1 ){
                    return list[i].identity;
                }
            }else if(prop){
                return list[i].identity;
            }
        }
        return '';
    },
    _searchVersion: function( trigger )
    {
        var index = trigger.indexOf(this._search_key);
        if( index == -1 ) return;
        return parseFloat( trigger.substring( index + this._search_key.length + 1 ));
    },
}
var ua = new Glue_userAgent();