var jpxBrowserSniffer = {
	    init: function () {
	        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
	        this.version = this.searchVersion(navigator.userAgent)
	            || this.searchVersion(navigator.appVersion)
	            || "an unknown version";
	        this.OS = this.searchString(this.dataOS) || "an unknown OS";
	    },
	    searchString: function (data) {
	        for (var i=0;i<data.length;i++) {
	            var dataString = data[i].string;
	            var dataProp = data[i].prop;
	            this.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;
	        }
	    },
	    searchVersion: function (dataString) {
	        var index = dataString.indexOf(this.versionSearchString);
	        if (index == -1) return;
	        return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	    },
	    dataBrowser: [
	        {
	            string: navigator.userAgent,
	            subString: "Chrome",
	            identity: "Chrome"
	        },
	        {   string: navigator.userAgent,
	            subString: "OmniWeb",
	            versionSearch: "OmniWeb/",
	            identity: "OmniWeb"
	        },
	        {
	            string: navigator.vendor,
	            subString: "Apple",
	            identity: "Safari",
	            versionSearch: "Version"
	        },
	        {
	            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"
	        }
	    ],
	    dataOS : [
	        {
	            string: navigator.platform,
	            subString: "Win",
	            identity: "Windows"
	        },
	        {
	            string: navigator.platform,
	            subString: "Mac",
	            identity: "Mac"
	        },
	        {
	               string: navigator.userAgent,
	               subString: "iPhone",
	               identity: "iPhone/iPod"
	        },
	        {
	            string: navigator.platform,
	            subString: "Linux",
	            identity: "Linux"
	        }
	    ]
	};
	jpxBrowserSniffer.init();

////////////////////////////////////////////////////////////////////////////////
//        ********************            jpxBrowser           *****************
//        ********************      (KK - chatventure (R))     *****************
////////////////////////////////////////////////////////////////////////////////

/**
 * Base class for the for all jpx browser implementations.
 * When there is no specific version for the OS or Browser
 * available, this one will be used.
 */
var jpxBrowserAbstract = function () {};
jpxBrowserAbstract.prototype.errorMessage         = 'warning_os';
jpxBrowserAbstract.prototype.isCompatibleVar      = false;
jpxBrowserAbstract.prototype.setTimeOutAutloadInt = 0;
jpxBrowserAbstract.prototype.swfobject            = {};
jpxBrowserAbstract.prototype.sniffer              = {};

jpxBrowserAbstract.prototype.isCompatible = function ()
{
    return this.isCompatibleVar;
}
jpxBrowserAbstract.prototype.getErrorMessage = function ()
{
    return this.errorMessage;
}
jpxBrowserAbstract.prototype.preFilter = function ()
{
    return true;
}
     
//////////////////////////////////  init jpxBrowserAbstract ////////////////////////////
/**
 * Set the initialization of the jpxBrowserAbstract.Object
 * For time being if not OS windows then no support
 */
if (jpxBrowserSniffer.OS != 'Windows')
{
    var jpxBrowser = new jpxBrowserAbstract();
}
else 
{
    switch (jpxBrowserSniffer.browser) {
        case "Firefox":
            var jpxBrowser = new jpxFireFoxLauncher(); 
            break;
        case "Explorer":
            var jpxBrowser = new jpxIELauncher(); 
            break;
        default:
            var jpxBrowser = new jpxBrowserAbstract();
            jpxBrowser.isCompatibleVar = false;
            jpxBrowser.errorMessage    = 'notcompatible_Browser';
            break;
    }
}

jpxBrowser.sniffer = {
    browser: jpxBrowserSniffer.browser,
    version: jpxBrowserSniffer.version,
    OS:      jpxBrowserSniffer.OS
}
         
/**
 * Set the swfobject object
 */
jpxBrowser.swfobject = swfobject;
if (!jpxBrowser.isCompatibleVar)
{
    jpxBrowser.errorMessage= ( jpxBrowser.errorMessage == '') ? 'notcompatible_Browser': jpxBrowser.errorMessage;
}