/**
  *
  *	Check the browser version and type
  *	Created by Coloss
  *
  */

function UserAgent() {
    var code = navigator.userAgent;
    var isCached = false;
    var data = {
        "agent": code
    };
    var parts = [];
	
    if (typeof Cache !== 'undefined') {
        var temp;
        temp = Cache.GetData('UA');
        if (temp !== null && temp.agent == code) {
            data = temp;
            isCached = true;
        }
    }
	
    this.isMacintosh = function() {
        return (typeof data.Macintosh !== 'undefined' ? true : false);
    };
	
    this.isWindows = function() {
        return (typeof data.Windows !== 'undefined' ? true : false);
    };
	
    this.isLinux = function() {
        return (typeof data.Linux !== 'undefined' ? true : false);
    };
	
    this.isIE = function() {
        return (typeof data.MSIE !== 'undefined' ? true : false);
    };
	
    this.isFirefox = function() {
        return (typeof data.Firefox !== 'undefined' ? true : false);
    };
	
    this.isNetscape = function() {
        return (typeof data.Netscape !== 'undefined' ? true : false);
    };
	
    this.isFlock = function() {
        return (typeof data.Flock !== 'undefined' ? true : false);
    };
	
    this.isSafari = function() {
        return (typeof data.Safari !== 'undefined' ? true : false);
    };
	
    this.isOpera = function() {
        return (typeof data.Opera !== 'undefined' ? true : false);
    };
	
    this.isChrome = function() {
        return (typeof data.Chrome !== 'undefined' ? true : false);
    };
	
    this.GetVersion = function(_type) {
        if (typeof _type === 'undefined') {
            _type = 'default';
        }

        switch(_type) {
            case 'float':
                return parseFloat(data.version);
                break;

            case 'int':
                return parseInt(data.version, 10);
                break;

            default:
                return data.version;
                break;
        }
		
    };
	
    this.Get = function(index) {
        if (eval('typeof data.' + index) !== 'undefined') {
            return eval('data.' + index);
        } else {
            return null;
        }
    };
	
    function CheckCompatible(tmp) {
        if (tmp.toLowerCase() === 'compatible') {
            data.compatible = true;
            return true;
        }
		
        return false;
    }
	
    function CheckSecurity(tmp) {
        if (tmp === 'U' || tmp === 'I' || tmp === 'N') {
			
            switch(tmp) {
                case 'U':
                    data.Security = 2;
                    break;
				
                case 'I':
                    data.Security = 1;
                    break;
				
                default:
                    data.Security = 0;
                    break;
            }
			
            return true;
        }
		
        return false;
    }
	
    function CheckSystem(tmp) {
		
        if (tmp === 'X11') {
            data.XWindowsSystem = true;
            data.Linux = true;
            return true;
        } else if (tmp === 'Linux') {
            data.Linux = true;
            return true;
        } else if (tmp === 'Windows') {
            data.Windows = true;
            return true;
        } else if (tmp === 'Macintosh') {
            data.Macintosh = true;
            return true;
        }
		
        return false;
    }
	
    function CheckSystemVersion(tmp) {
		
        if (tmp.indexOf(' ') > -1) {
            tmp = tmp.split(' ');
            if (tmp[1] === 'NT') {
                data.WindowsNT = true;
                if (typeof tmp[2] !== 'undefined') {
                    data.SystemVersion = tmp[2];
                } else {
                    data.SystemVersion = tmp[1];
                }
            } else {
                data.SystemVersion = tmp[tmp.length - 1];
            }
            return true;
        } else {
            data.SystemVersion = tmp;
            return true;
        }
        return false;
    }
	
    if (!isCached) {
        var i,tmp,tmp2;
		
        parts[0] = code.match(/\(([^\)]+)\)/)[1].replace(/; /g,';').split(';');
        parts[1] = code.replace(/\(([^\)]+)\)/g,'').replace(/ {2}/g,' ').split(' ');

        //check the broswer is Internet Explorer
        if ( tmp = code.match(/MSIE ([0-9]+\.[0-9]+[a-z,A-Z]{0,1}[0-9]*)[;,\)]{1}/) ) {
            data.MSIE = true;
            data.name = 'MSIE';
            data.version = tmp[1];
			
        //check the browser is Netscape
        } else if (tmp = code.match(/Navigator\/([0-9]+\.[0-9]+[\.,a-z,A-Z]*[0-9]*[\.]*[0-9]*)/)) {
            data.Netscape = true;
            data.name = 'Netscape';
            data.version = tmp[1];
		
        //check the browser is Netscape
        } else if (tmp = code.match(/Netscape\/([0-9]+\.[0-9]+[\.,a-z,A-Z]*[0-9]*[\.]*[0-9]*)/)) {
            data.Netscape = true;
            data.name = 'Netscape';
            data.version = tmp[1];
			
        //check the browser is Flock
        } else if (tmp = code.match(/Flock\/([0-9]+\.[0-9]+[\.,a-z,A-Z]*[0-9]*)/)) {
            data.Flock = true;
            data.name = 'Flock';
            data.version = tmp[1];
					
        //check the broswer is Firefox
        } else if (tmp = code.match(/Firefox\/([0-9]+\.[0-9]+[\.]{0,1}[a-z]{0,1}[0-9]*[a-z]*)/)) {
            data.Firefox = true;
            data.name = 'Firefox';
            data.version = tmp[1];
			
        //check the browser is Chrome
        } else if (tmp = code.match(/Chrome\/([0-9]+\.[0-9]+[\.]{0,1}[0-9]*[\.]{0,1}[0-9]*)/)) {
            data.Chrome = true;
            data.name = 'Chrome';
            data.version = tmp[1];
			
        //check the browser is Safari
        } else if (tmp = code.match(/Safari\/([0-9]+\.[0-9]+[\.]{0,1}[0-9]*[\.]{0,1}[0-9]*)/)) {
            data.Safari = true;
            data.name = 'Safari';
            data.BrowserBuild = tmp[1];
            tmp = code.match(/Version\/([0-9]+\.[0-9]+[\.]*[0-9]*)/);
            data.version = tmp[1];
			
        //check the browser is Opera
        } else if (tmp = code.match(/Opera\/([0-9]+\.[0-9]+)/)) {
            data.Opera = true;
            data.name = 'Opera';
            data.version = tmp[1];
        }
        
        switch(data.name) {
            case 'MSIE':
                data.RenderEngine = 'MSIE';
                for(i = 0; i < parts[0].length; i++) {
                    tmp = parts[0][i];
                    if (tmp.indexOf('MSIE') < 0) {
                        if (CheckCompatible(tmp)) {
                            continue;
                        } else if (CheckSecurity(tmp)) {
                            continue;
                        } else if (tmp.indexOf('Windows') >= 0 && CheckSystemVersion(tmp)) {
                            continue;
                        } else {
                            if (tmp.indexOf(' ') >= 0) {
                                tmp = tmp.split(' ');
								
                                if (tmp.length > 2) {
                                    tmp2 = tmp[tmp.length - 1];
                                    delete tmp[tmp.length - 1];
                                    tmp = tmp.join('_');
                                    tmp = tmp.substr(0,tmp.length - 1).replace(".","");
                                    if (eval('typeof data.' + tmp) === 'undefined') {
                                        eval('data.' + tmp + ' = tmp2;');
                                    } else {
                                        if (eval('typeof data.' + tmp + '[0]') === 'undefined') {
                                            eval('data.' + tmp + ' = [data.' + tmp + '];');
                                        }
                                        eval('data.' + tmp + '[data.' + tmp + '.length] = tmp2;');
                                    }
									
                                } else {
                                    eval('data.' + tmp[0] + ' = tmp[1];');
                                }
								
                            } else if (tmp.indexOf('/') >= 0) {
                                tmp = tmp.split('/');
                                eval('data.' + tmp[0] + ' = tmp[1];');
                            } else if (tmp.indexOf('.') >= 0) {
                                tmp = tmp.split('.');
                                eval('data.' + tmp[0] + ' = tmp[1];');
                            } else {
                                eval('data.' + tmp + ' = true;');
                            }
                        }
                    }
                }
                break;
			
            case 'Firefox':
                CheckSecurity(parts[0][1]);
                CheckSystem(parts[0][0]);
                CheckSystemVersion(parts[0][2]);
                data.Language = parts[0][3];
                data.RenderEngine = 'Firefox';
				
                for(i = 0; i < parts[1].length; i++) {
                    tmp = parts[1][i].split('/');
                    if (tmp[0].replace(/ /,"") != "") switch(tmp[0]) {
						
                        case 'Mozilla':
                            data.MozillaBase = tmp[1];
                            break;
						
                        case 'Firefox':
                            continue;
                            break;
						
                        default:
                            if (typeof tmp[1] === 'undefined') {
                                tmp[1] = true;
                            }
                            eval('data.' + tmp[0] + ' = tmp[1];');
                            break;
                    }
                }
				
                break;
			
            case 'Flock':
                CheckSystem(parts[0][0]);
                CheckSecurity(parts[0][1]);
                CheckSystemVersion(parts[0][2]);
                data.Language = parts[0][3];
                for(i = 0; i < parts[1].length; i++) {
                    tmp = parts[1][i].split('/');
                    if (tmp[0].replace(/ /,"") != "") switch(tmp[0]) {
						
                        case 'Flock':
                            continue;
                            break;
						
                        case 'Mozilla':
                            data.MozillaBase = tmp[1];
                            break;
						
                        case 'Firefox':
                            data.RenderEngine = 'Firefox';
                            data.FirefoxBase = tmp[1];
                            break;
						
                        default:
                            if (typeof tmp[1] === 'undefined') {
                                tmp[1] = true;
                            }
                            eval('data.' + tmp[0] + ' = tmp[1];');
                            break;
                    }
                }
                break;
			
            case 'Netscape':
                CheckSystem(parts[0][0]);
                CheckSecurity(parts[0][1]);
                CheckSystemVersion(parts[0][2]);
                data.Language = parts[0][3];
                for(i = 0; i < parts[1].length; i++) {
                    tmp = parts[1][i].split('/');
                    if (tmp[0].replace(/ /,"") != "") switch(tmp[0]) {
						
                        case 'Navigator':
                            continue;
                            break;
						
                        case 'Mozilla':
                            data.MozillaBase = tmp[1];
                            break;
						
                        case 'Firefox':
                            data.RenderEngine = 'Firefox';
                            data.FirefoxBase = tmp[1];
                            break;
						
                        case 'Netscape':
                            data.RenderEngine = 'Netscape';
                            break;
						
                        default:
                            if (typeof tmp[1] === 'undefined') {
                                tmp[1] = true;
                            }
                            eval('data.' + tmp[0] + ' = tmp[1];');
                            break;
                    }
                }
                break;
			
            case 'Chrome':
                CheckSecurity(parts[0][1]);
                CheckSystem(parts[0][0]);
                CheckSystemVersion(parts[0][2]);
                data.Language = parts[0][3];
                data.RenderEngine = 'Safari';
                for(i = 0; i < parts[1].length; i++) {
                    tmp = parts[1][i].split('/');
                    if (tmp[0].replace(/ /,"") != "") switch(tmp[0]) {
						
                        case 'Chrome':
                            continue;
                            break;
						
                        case 'Mozilla':
                            data.MozillaBase = tmp[1];
                            break;
						
                        case 'Safari':
                            data.SafariBase = tmp[1];
                            break;
						
                        default:
                            if (typeof tmp[1] === 'undefined') {
                                tmp[1] = true;
                            }
                            eval('data.' + tmp[0] + ' = tmp[1];');
                            break;
                    }
                }
                break;
			
            case 'Safari':
                CheckSecurity(parts[0][1]);
                CheckSystem(parts[0][0]);
                CheckSystemVersion(parts[0][2]);
                data.Language = parts[0][3];
                data.RenderEngine = 'Safari';
                for(i = 0; i < parts[1].length; i++) {
                    tmp = parts[1][i].split('/');
                    if (tmp[0].replace(/ /,"") != "") switch(tmp[0]) {
						
                        case 'Mozilla':
                            data.MozillaBase = tmp[1];
                            break;
						
                        case 'Safari':
                        case 'Version':
                            continue;
                            break;
						
                        default:
                            if (typeof tmp[1] === 'undefined') {
                                tmp[1] = true;
                            }
                            eval('data.' + tmp[0] + ' = tmp[1];');
                            break;
                    }
                }
                break;
			
            case 'Opera':
                if (parts[0][0] === 'X11') {
                    CheckSystem(parts[0][0]);
                    CheckSystemVersion(parts[0][1]);
                    CheckSecurity(parts[0][2]);
                    data.Language = parts[0][3];
                } else if (parts[0][0] === 'compatible') {
                    CheckSystemVersion(parts[0][2]);
                    data.Windows = true;
                    data.Language = parts[0][3];
                    data.RenderEngine = 'MSIE';
                } else {
                    CheckSystem(parts[0][0]);
                    CheckSecurity(parts[0][2]);
                    data.Language = parts[0][3];
                }
				
                for(i = 0; i < parts[1].length; i++) {
                    tmp = parts[1][i].split('/');
                    if (tmp[0].replace(/ /,"") != "") switch(tmp[0]) {
						
                        case 'Mozilla':
                            data.MozillaBase = tmp[1];
                            break;
						
                        case 'Firefox':
                            data.RenderEngine = 'Firefox';
                            break;
						
                        case 'Presto':
                            data.RenderEngine = tmp[0];
                            data.Presto = tmp[1];
                            break;
						
                        case 'Opera':
                            continue;
                            break;
						
                        default:
                            if (typeof tmp[1] === 'undefined') {
                                tmp[1] = true;
                            }
                            eval('data.' + tmp[0] + ' = tmp[1];');
                            break;
                    }
                }
                break;
			
        }
		
        if (typeof Cache !== 'undefined') {
            Cache.SetData('UA',data);
        }
    }
}

UserAgent.FireFox = 'Firefox';
UserAgent.MSIE = 'MSIE';
UserAgent.Safari = 'Safari';
UserAgent.Chrome = 'Chrome';
UserAgent.Opera = 'Opera';

var UA = new UserAgent();