/*
* Copyright (c) 2002-2009 Resalt, Inc. <diodes [at] resalt [dot] ru>
* v. 2.2.0 - 2009.07.07
*/



var userAgent = new RiniX_UA_UserAgent('windows-1251');

function RiniX_UA_UserAgent( /*string*/ charset )
	{
	/*string*/
	var type;
	
	/*string*/
	var version;
	
	/*string*/
	var jsRoot;
	
	/*string[]*/
	var files;
	
	var This = this;
	
	
	
	
	
	function __eria( m, a ) { throw new Error(_e = 'RiniX_UA_UserAgent' + (m != null ? '.' + m : '') + ': Illegal argument "' + a + '"', _e); }
	
	function __construct()
		{
			if( charset != null && !(typeof charset == 'string' && charset != '') )
			__err(null, 'Illegal argument "charset"');
		
		var REs = {/*порядок важен!*/
			chrome: /Chrome\x2f([0-9\.]+)/,
			safari: /Version\x2f([0-9\.]+) Safari\x2f[0-9\.]+/,
			firefox: /Firefox\x2f([0-9\.]+)/,
			opera: /Opera[ \x2f]([0-9\.]+)/,
			mozilla: /rv:([0-9\.]+)\) Gecko/,
			msie: /MSIE ([0-9\.]+)/
			};
		
		var ua = navigator.userAgent;
		var ms;
			for( var n in REs )
				if( (ms = ua.match(REs[n])) != null )
				{
				type = n;
				version = ms[1];
				break;
				}
		
		files = [];
		}
	
	
	
	
	
	/*string*/
	this.getType = function ()
		{
		return type;
		}
	
	
	/*boolean*/
	this.is = function ( /*string*/ vendor )
		{
			if( typeof vendor != 'string' || vendor == '' )
			__eria('is', 'vendor');
		
		return type == vendor.toLowerCase();
		}
	
	
	/*string*/
	this.getVersion = function ()
		{
		return version;
		}
	
	
	
	
	
	/*string*/
	this.getJSRoot = function ()
		{
			if( jsRoot == null )
			jsRoot = _searhJsRoot();
		return jsRoot;
		}
	
	/*string*/
	function _searhJsRoot()
		{
		var es = document.getElementsByTagName('script');
		var src, j;
			for( var i = 0 ; i < es.length ; i++ )
				if( (src = es[i].getAttribute('src')) != null &&
					(j = src.toLowerCase().indexOf('rinix/ua/useragent.js')) != -1 )
				{
				var b = src.substring(0, j);
					if( b.substring(0, 2) == './' )
					b = b.substring(2);
				b = b.replace(/\x2f\.\x2f/g, '/');
					if( b.indexOf('://') != -1 )
					return b;
				var a = location.pathname;
				a = a.substring(0, a.lastIndexOf('/') + 1);
					while( b.substring(0, 3) == '../' )
					{
					b = b.substring(3);
						if( a == '' ) return;
					
					a = a.substring(0, a.length - 1);
					a = a.substring(0, a.lastIndexOf('/') + 1);
					}
				return a + b;
				}
		}
	
	/*string*/
	this.getRoot = function ( /*string*/ jsPath )
		{
			if( jsPath != null && typeof jsPath != 'string' )
			__err('getRoot', 'Illegal argument "jsPath"');
		
		var r = This.getJSRoot();
			if( jsPath == '' )
			return r;
		
			if( jsPath == null )
			jsPath = '_js';
		
		var n1 = r.length;
		var n2 = jsPath.length;
			if( n1 <= n2 + 1 || r.charAt(n1 - 1) != '/' || r.substring(n1 - n2 - 1, n1 - 1) != jsPath )
			__err('getRoot', 'Illegal argument "jsPath"');
		
		return r.substring(0, n1 - n2 - 1);
		}
	
	
	
	
	
	/*void*/
	this.load = function ( /*string*/ pointer, /*string[]*/ types )
		{
			if( typeof pointer != 'string' || pointer.search(/^[a-z0-9_\.]+$/gi) == -1 )
			__eria('load', 'pointer');
		
		var r = This.getJSRoot();
			if( r != null )
			This.loadFile(r + pointer.replace(/[_\.]/gi, '/') + '.js', types);
		}
	
	
	/*void*/
	this.loadFile = function ( /*string*/ url, /*string[]*/ types )
		{
			if( typeof url != 'string' || url.substring(url.length - 3) != '.js' )
			__eria('loadFile', 'url');
			if( types != null && !(typeof types == 'object' && types.length != null) )
			__eria('loadFile', 'types');
		
			if( types != null )
			{
			var base = url.substring(0, url.length - 3);
			var ua = type + Math.floor(10*parseFloat(version));
			url = null;
			var exists = false;
				for( var i = 0 ; i < types.length ; i++ )
				{
					if( types[i] == type )
					exists = true;
					else
					if( types[i] == ua )
					{
					url = base + '.' + ua + '.js';
					break;
					}
				}
				if( url == null && exists )
				url = base + '.' + type + '.js';
				if( url == null )
				return;
			}
		
			for( var i = 0 ; i < files.length ; i++ )
				if( files[i] == url )
				return;
		
		document.write('<script type="text/javascript"' +
						(charset != null ? ' charset="' + charset + '"' : '') +' src="' + url + '"></script>');/*так быстрее*/
		files.push(url);
		}
	
	
	
	
	
	__construct();
	}
