diff --git a/system/libraries/User_agent.php b/system/libraries/User_agent.php
new file mode 100644
index 0000000..33e8451
--- /dev/null
+++ b/system/libraries/User_agent.php
@@ -0,0 +1,645 @@
+<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
+/**
+ * Code Igniter
+ *
+ * An open source application development framework for PHP 4.3.2 or newer
+ *
+ * @package		CodeIgniter
+ * @author		Rick Ellis
+ * @copyright	Copyright (c) 2006, pMachine, Inc.
+ * @license		http://www.codeignitor.com/user_guide/license.html 
+ * @link		http://www.codeigniter.com
+ * @since		Version 1.0
+ * @filesource
+ */
+ 
+// ------------------------------------------------------------------------
+
+/**
+ * User Agent Class
+ * 
+ * Identifies the platform, browser, robot, or mobile devise of the browsing agent
+ *
+ * @package		CodeIgniter
+ * @subpackage	Libraries
+ * @category	User Agent
+ * @author		Rick Ellis
+ * @link		http://www.codeigniter.com/user_guide/libraries/uri.html
+ */
+class CI_User_agent {
+
+	var $agent		= NULL;
+	
+	var $is_browser	= FALSE;
+	var $is_robot	= FALSE;
+	var $is_mobile	= FALSE;
+	
+	var $platform	= '';
+	var $browser	= '';
+	var $version	= '';
+	var $moble		= '';
+	var $robot		= '';
+
+
+	var $platforms = array (
+							'windows nt 6.0'	=> 'Windows Longhorn',
+							'windows nt 5.2'	=> 'Windows 2003',
+							'windows nt 5.0'	=> 'Windows 2000',
+							'windows nt 5.1'	=> 'Windows XP',
+							'windows nt 4.0'	=> 'Windows NT 4.0',
+							'winnt4.0'			=> 'Windows NT 4.0',
+							'winnt 4.0'			=> 'Windows NT',
+							'winnt'				=> 'Windows NT',
+							'windows 98'		=> 'Windows 98',
+							'win98'				=> 'Windows 98',
+							'windows 95'		=> 'Windows 95',
+							'win95'				=> 'Windows 95',
+							'windows'			=> 'Unknown Windows OS',
+							'mac os x'			=> 'Mac OS X',
+							'freebsd'			=> 'FreeBSD',
+							'ppc'				=> 'Macintosh',
+							'sunos'				=> 'Sun Solaris',
+							'linux'				=> 'Linux',
+							'debian'			=> 'Debian',
+							'beos'				=> 'BeOS',
+							'apachebench'		=> 'ApacheBench',
+							'aix'				=> 'AIX',
+							'irix'				=> 'Irix',
+							'osf'				=> 'DEC OSF',
+							'hp-ux'				=> 'HP-UX',
+							'netbsd'			=> 'NetBSD',
+							'bsdi'				=> 'BSDi',
+							'openbsd'			=> 'OpenBSD',
+							'gnu'				=> 'GNU/Linux',
+							'unix'				=> 'Unknown Unix OS'
+						);
+
+	var $browsers = array(
+							'Opera'				=> 'Opera',
+							'MSIE'				=> 'Internet Explorer',
+							'Internet Explorer'	=> 'Internet Explorer',
+							'Shiira'			=> 'Shiira',
+							'Firefox'			=> 'Firefox',
+							'Camino'			=> 'Camino',
+							'Mozilla'			=> 'Mozilla',
+							'Safari'			=> 'Safari',
+							'Konqueror'			=> 'Konqueror',
+							'Lynx'				=> 'Lynx',
+							'ANTFresco'			=> 'Fresco'
+						);
+
+	var $mobiles = array(
+							'mobileexplorer'	=> 'Mobile Explorer',
+							'openwave'			=> 'Open Wave',
+							'opera mini'		=> 'Opera Mini',
+							'operamini'			=> 'Opera Mini',
+							'elaine'			=> 'Palm',
+							'palmsource'		=> 'Palm',
+							'digital paths'		=> 'Palm',
+							'avantgo'			=> 'Avantgo',
+							'xiino'				=> 'Xiino',
+							'palmscape'			=> 'Palmscape',
+							'nokia'				=> 'Nokia',
+							'ericsson'			=> 'Ericsson',
+							'blackBerry'		=> 'BlackBerry',
+							'motorola'			=> 'Motorola'
+						);	
+
+	var $robots = array(
+			
+							'googlebot'					=> 'Googlebot',
+							'msnbot'					=> 'MSNBot',
+							'slurp'						=> 'Inktomi Slurp',
+							'yahoo'						=> 'Yahoo',
+							'askjeeves'					=> 'AskJeeves',
+							'fastcrawler'				=> 'FastCrawler',
+							'infoseek'					=> 'InfoSeek Robot 1.0',
+							'lycos'						=> 'Lycos',
+							'abcdatos'					=> 'ABCdatos BotLink',
+							'Acme.Spider'				=> 'Acme.Spider',
+							'ahoythehomepagefinder'		=> 'Ahoy! The Homepage Finder',
+							'Alkaline'					=> 'Alkaline',
+							'anthill'					=> 'Anthill',
+							'appie'						=> 'Walhello appie',
+							'arachnophilia'				=> 'Arachnophilia',
+							'arale'						=> 'Arale',
+							'araneo'					=> 'Araneo',
+							'araybot'					=> 'AraybOt',
+							'architext'					=> 'ArchitextSpider',
+							'aretha'					=> 'Aretha',
+							'ariadne'					=> 'ARIADNE',
+							'arks'						=> 'arks',
+							'aspider'					=> 'ASpider (Associative Spider)',
+							'atn.txt'					=> 'ATN Worldwide',
+							'atomz'						=> 'Atomz.com Search Robot',
+							'auresys'					=> 'AURESYS',
+							'backrub'					=> 'BackRub',
+							'bbot'						=> 'BBot',
+							'bigbrother'				=> 'Big Brother',
+							'bjaaland'					=> 'Bjaaland',
+							'blackwidow'				=> 'BlackWidow',
+							'blindekuh'					=> 'Die Blinde Kuh',
+							'Bloodhound'				=> 'Bloodhound',
+							'borg-bot'					=> 'Borg-Bot',
+							'boxseabot'					=> 'BoxSeaBot',
+							'brightnet'					=> 'bright.net caching robot',
+							'bspider'					=> 'BSpider',
+							'cactvschemistryspider'		=> 'CACTVS Chemistry Spider',
+							'calif'						=> 'Calif',
+							'cassandra'					=> 'Cassandra',
+							'cgireader'					=> 'Digimarc Marcspider/CGI',
+							'checkbot'					=> 'Checkbot',
+							'christcrawler'				=> 'ChristCrawler.com',
+							'churl'						=> 'churl',
+							'cienciaficcion'			=> 'cIeNcIaFiCcIoN.nEt',
+							'cmc'						=> 'CMC/0.01',
+							'Collective'				=> 'Collective',
+							'combine'					=> 'Combine System',
+							'confuzzledbot'				=> 'ConfuzzledBot',
+							'coolbot'					=> 'CoolBot',
+							'core'						=> 'Web Core / Roots',
+							'cosmos'					=> 'XYLEME Robot',
+							'cruiser'					=> 'Internet Cruiser Robot',
+							'cusco'						=> 'Cusco',
+							'cyberspyder'				=> 'CyberSpyder Link Test',
+							'cydralspider'				=> 'CydralSpider',
+							'desertrealm'				=> 'Desert Realm Spider',
+							'deweb'						=> 'DeWeb(c) Katalog/Index',
+							'dienstspider'				=> 'DienstSpider',
+							'digger'					=> 'Digger',
+							'diibot'					=> 'Digital Integrity Robot',
+							'directhit'					=> 'Direct Hit Grabber',
+							'dnabot'					=> 'DNAbot',
+							'download_express'			=> 'DownLoad Express',
+							'dragonbot'					=> 'DragonBot',
+							'e-collector'				=> 'e-collector',
+							'ebiness'					=> 'EbiNess',
+							'eit'						=> 'EIT Link Verifier Robot',
+							'elfinbot'					=> 'ELFINBOT',
+							'emacs'						=> 'Emacs-w3 Search Engine',
+							'emcspider'					=> 'ananzi',
+							'esculapio'					=> 'esculapio',
+							'esther'					=> 'Esther',
+							'evliyacelebi'				=> 'Evliya Celebi',
+							'nzexplorer'				=> 'nzexplorer',
+							'fdse'						=> 'Fluid Dynamics Search Engine robot',
+							'felix'						=> 'Felix IDE',
+							'ferret'					=> 'Wild Ferret Web Hopper #1, #2, #3',
+							'fetchrover'				=> 'FetchRover',
+							'fido'						=> 'fido',
+							'finnish'					=> 'Hämähäkki',
+							'fireball'					=> 'KIT-Fireball',
+							'fish'						=> 'Fish search',
+							'fouineur'					=> 'Fouineur',
+							'francoroute'				=> 'Robot Francoroute',
+							'freecrawl'					=> 'Freecrawl',
+							'funnelweb'					=> 'FunnelWeb',
+							'gama'						=> 'gammaSpider, FocusedCrawler',
+							'gazz'						=> 'gazz',
+							'gcreep'					=> 'GCreep',
+							'getbot'					=> 'GetBot',
+							'geturl'					=> 'GetURL',
+							'golem'						=> 'Golem',
+							'grapnel'					=> 'Grapnel/0.01 Experiment',
+							'griffon'					=> 'Griffon                                                               ',
+							'gromit'					=> 'Gromit',
+							'gulliver'					=> 'Northern Light Gulliver',
+							'gulperbot'					=> 'Gulper Bot',
+							'hambot'					=> 'HamBot',
+							'harvest'					=> 'Harvest',
+							'havindex'					=> 'havIndex',
+							'hi'						=> 'HI (HTML Index) Search',
+							'hometown'					=> 'Hometown Spider Pro',
+							'wired-digital'				=> 'Wired Digital',
+							'htdig'						=> 'ht://Dig',
+							'htmlgobble'				=> 'HTMLgobble',
+							'hyperdecontextualizer'		=> 'Hyper-Decontextualizer',
+							'iajabot'					=> 'iajaBot',
+							'ibm'						=> 'IBM_Planetwide',
+							'iconoclast'				=> 'Popular Iconoclast',
+							'Ilse'						=> 'Ingrid',
+							'imagelock'					=> 'Imagelock ',
+							'incywincy'					=> 'IncyWincy',
+							'informant'					=> 'Informant',
+							'infoseeksidewinder'		=> 'Infoseek Sidewinder',
+							'infospider'				=> 'InfoSpiders',
+							'inspectorwww'				=> 'Inspector Web',
+							'intelliagent'				=> 'IntelliAgent',
+							'irobot'					=> 'I, Robot',
+							'iron33'					=> 'Iron33',
+							'israelisearch'				=> 'Israeli-search',
+							'javabee'					=> 'JavaBee',
+							'JBot'						=> 'JBot Java Web Robot',
+							'jcrawler'					=> 'JCrawler',
+							'jobo'						=> 'JoBo Java Web Robot',
+							'jobot'						=> 'Jobot',
+							'joebot'					=> 'JoeBot',
+							'jubii'						=> 'The Jubii Indexing Robot',
+							'jumpstation'				=> 'JumpStation',
+							'kapsi'						=> 'image.kapsi.net',
+							'katipo'					=> 'Katipo',
+							'kdd'						=> 'KDD-Explorer',
+							'kilroy'					=> 'Kilroy',
+							'ko_yappo_robot'			=> 'KO_Yappo_Robot',
+							'labelgrabber.txt'			=> 'LabelGrabber',
+							'larbin'					=> 'larbin',
+							'legs'						=> 'legs',
+							'linkidator'				=> 'Link Validator',
+							'linkscan'					=> 'LinkScan',
+							'linkwalker'				=> 'LinkWalker',
+							'lockon'					=> 'Lockon',
+							'logo_gif'					=> 'logo.gif Crawler',
+							'magpie'					=> 'Magpie',
+							'marvin'					=> 'marvin/infoseek',
+							'mattie'					=> 'Mattie',
+							'mediafox'					=> 'MediaFox',
+							'merzscope'					=> 'MerzScope',
+							'meshexplorer'				=> 'NEC-MeshExplorer',
+							'MindCrawler'				=> 'MindCrawler',
+							'mnogosearch'				=> 'mnoGoSearch search engine software',
+							'moget'						=> 'moget',
+							'momspider'					=> 'MOMspider',
+							'monster'					=> 'Monster',
+							'motor'						=> 'Motor',
+							'muncher'					=> 'Muncher',
+							'muninn'					=> 'Muninn',
+							'muscatferret'				=> 'Muscat Ferret',
+							'mwdsearch'					=> 'Mwd.Search',
+							'myweb'						=> 'Internet Shinchakubin',
+							'NDSpider'					=> 'NDSpider',
+							'netcarta'					=> 'NetCarta WebMap Engine',
+							'netmechanic'				=> 'NetMechanic',
+							'netscoop'					=> 'NetScoop',
+							'newscan-online'			=> 'newscan-online',
+							'nhse'						=> 'NHSE Web Forager',
+							'nomad'						=> 'Nomad',
+							'northstar'					=> 'The NorthStar Robot',
+							'objectssearch'				=> 'ObjectsSearch',
+							'occam'						=> 'Occam',
+							'octopus'					=> 'HKU WWW Octopus',
+							'OntoSpider'				=> 'OntoSpider',
+							'openfind'					=> 'Openfind data gatherer',
+							'orb_search'				=> 'Orb Search',
+							'packrat'					=> 'Pack Rat',
+							'pageboy'					=> 'PageBoy',
+							'parasite'					=> 'ParaSite',
+							'patric'					=> 'Patric',
+							'pegasus'					=> 'pegasus',
+							'perignator'				=> 'The Peregrinator',
+							'perlcrawler'				=> 'PerlCrawler 1.0',
+							'phantom'					=> 'Phantom',
+							'phpdig'					=> 'PhpDig',
+							'pitkow'					=> 'html_analyzer',
+							'pjspider'					=> 'Portal Juice Spider',
+							'pka'						=> 'PGP Key Agent',
+							'poppi'						=> 'Poppi',
+							'portalb'					=> 'PortalB Spider',
+							'psbot'						=> 'psbot',
+							'Puu'						=> 'GetterroboPlus Puu',
+							'python'					=> 'The Python Robot',
+							'raven '					=> 'Raven Search',
+							'rbse'						=> 'RBSE Spider',
+							'resumerobot'				=> 'Resume Robot',
+							'rhcs'						=> 'RoadHouse Crawling System',
+							'rixbot'					=> 'RixBot',
+							'roadrunner'				=> 'Road Runner: The ImageScape Robot',
+							'robbie'					=> 'Robbie the Robot',
+							'robi'						=> 'ComputingSite Robi/1.0',
+							'robocrawl'					=> 'RoboCrawl Spider',
+							'robofox'					=> 'RoboFox',
+							'robozilla'					=> 'Robozilla',
+							'roverbot'					=> 'Roverbot',
+							'rules'						=> 'RuLeS',
+							'safetynetrobot'			=> 'SafetyNet Robot',
+							'scooter'					=> 'Scooter',
+							'search_au'					=> 'Search.Aus-AU.COM',
+							'search-info'				=> 'Sleek',
+							'searchprocess'				=> 'SearchProcess',
+							'senrigan'					=> 'Senrigan',
+							'sgscout'					=> 'SG-Scout',
+							'shaggy'					=> 'ShagSeeker',
+							'sift'						=> 'Sift',
+							'simbot'					=> 'Simmany Robot Ver1.0',
+							'site-valet'				=> 'Site Valet',
+							'sitetech'					=> 'SiteTech-Rover',
+							'skymob'					=> 'Skymob.com',
+							'slcrawler'					=> 'SLCrawler',
+							'smartspider'				=> 'Smart Spider',
+							'snooper'					=> 'Snooper',
+							'solbot'					=> 'Solbot',
+							'speedy'					=> 'Speedy Spider',
+							'spider_monkey'				=> 'spider_monkey',
+							'spiderbot'					=> 'SpiderBot',
+							'spiderline'				=> 'Spiderline Crawler',
+							'spiderman'					=> 'SpiderMan',
+							'spiderview'				=> 'SpiderView(tm)',
+							'spry'						=> 'Spry Wizard Robot',
+							'ssearcher'					=> 'Site Searcher',
+							'suke'						=> 'Suke',
+							'suntek'					=> 'suntek search engine',
+							'sven'						=> 'Sven',
+							'sygol'						=> 'Sygol ',
+							'tach_bw'					=> 'TACH Black Widow',
+							'tarantula'					=> 'Tarantula',
+							'tarspider'					=> 'tarspider',
+							'tcl'						=> 'Tcl W3 Robot',
+							'techbot'					=> 'TechBOT',
+							'templeton'					=> 'Templeton',
+							'titin'						=> 'TitIn',
+							'titan'						=> 'TITAN',
+							'tkwww'						=> 'The TkWWW Robot',
+							'tlspider'					=> 'TLSpider',
+							'ucsd'						=> 'UCSD Crawl',
+							'udmsearch'					=> 'UdmSearch',
+							'ultraseek'					=> 'Ultraseek',
+							'uptimebot'					=> 'UptimeBot',
+							'urlck'						=> 'URL Check',
+							'valkyrie'					=> 'Valkyrie',
+							'verticrawl'				=> 'Verticrawl',
+							'victoria'					=> 'Victoria',
+							'visionsearch'				=> 'vision-search',
+							'voidbot'					=> 'void-bot',
+							'voyager'					=> 'Voyager',
+							'vwbot'						=> 'VWbot',
+							'w3index'					=> 'The NWI Robot',
+							'w3m2'						=> 'W3M2',
+							'wallpaper'					=> 'WallPaper (alias crawlpaper)',
+							'wanderer'					=> 'the World Wide Web Wanderer',
+							'wapspider'					=> 'w@pSpider by wap4.com',
+							'webbandit'					=> 'WebBandit Web Spider',
+							'webcatcher'				=> 'WebCatcher',
+							'webcopy'					=> 'WebCopy',
+							'webfetcher'				=> 'webfetcher',
+							'webfoot'					=> 'The Webfoot Robot',
+							'webinator'					=> 'Webinator',
+							'weblayers'					=> 'weblayers',
+							'weblinker'					=> 'WebLinker',
+							'webmirror'					=> 'WebMirror',
+							'webmoose'					=> 'The Web Moose',
+							'webquest'					=> 'WebQuest',
+							'webreader'					=> 'Digimarc MarcSpider',
+							'webreaper'					=> 'WebReaper',
+							'webs'						=> 'webs',
+							'websnarf'					=> 'Websnarf',
+							'webspider'					=> 'WebSpider',
+							'webvac'					=> 'WebVac',
+							'webwalk'					=> 'webwalk',
+							'webwalker'					=> 'WebWalker',
+							'webwatch'					=> 'WebWatch',
+							'wget'						=> 'Wget',
+							'whatuseek'					=> 'whatUseek Winona',
+							'whowhere'					=> 'WhoWhere Robot',
+							'wlm'						=> 'Weblog Monitor',
+							'wmir'						=> 'w3mir',
+							'wolp'						=> 'WebStolperer',
+							'wombat'					=> 'The Web Wombat ',
+							'worm'						=> 'The World Wide Web Worm',
+							'wwwc'						=> 'WWWC Ver 0.2.5',
+							'wz101'						=> 'WebZinger',
+							'xget'						=> 'XGET',				
+						);	
+
+
+	
+	/**
+	 * Constructor
+	 *
+	 * Sets the User Agent and runs the compilation routine
+	 *
+	 * @access	public
+	 * @return	void
+	 */		
+	function CI_User_agent()
+	{
+		if (isset($_SERVER['HTTP_USER_AGENT']))
+		{
+			$this->agent = trim($_SERVER['HTTP_USER_AGENT']);
+		}
+		
+		if ( ! is_null($this->agent))
+		{
+			$this->_compile_data();
+		}
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Compile the User Agent Data
+	 *
+	 * @access	private
+	 * @return	bool
+	 */		
+	function _compile_data()
+	{
+		$this->_set_platform();
+	
+		foreach (array('_set_browser', '_set_robot', '_set_mobile') as $function)
+		{
+			if ($this->$function() === TRUE)
+			{
+				break;
+			}
+		}	
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Set the Platform
+	 *
+	 * @access	private
+	 * @return	mixed
+	 */		
+	function _set_platform()
+	{
+		foreach ($this->platforms as $key => $val) 
+		{
+			if (preg_match("|$key|i", $this->agent)) 
+			{
+				$this->platform = $val;
+				return TRUE;
+			}
+		}
+	
+		$this->platform = 'Unknown Platform';
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Set the Browser
+	 *
+	 * @access	private
+	 * @return	bool
+	 */		
+	function _set_browser()
+	{
+		foreach ($this->browsers as $key => $val) 
+		{		
+			if (preg_match("|".$key.".*?([0-9\.]+)|i", $this->agent, $match)) 
+			{
+				$this->is_browser = TRUE;
+				$this->version = $match[1];
+				$this->browser = $val;
+				return TRUE;
+			}
+		}
+		
+		return FALSE;
+	}
+		
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Set the Robot
+	 *
+	 * @access	private
+	 * @return	bool
+	 */		
+	function _set_robot()
+	{
+		foreach ($this->robots as $key => $val) 
+		{
+			if (preg_match("|$key|i", $this->agent)) 
+			{
+				$this->is_robot = TRUE;
+				$this->robot = $val;
+				return TRUE;
+			}
+		}
+	
+		return FALSE;
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Set the Mobile Devise
+	 *
+	 * @access	private
+	 * @return	bool
+	 */		
+	function _set_mobile()
+	{
+		foreach ($this->mobiles as $key => $val) 
+		{
+			if (FALSE !== (strpos(strtolower($this->agent), $key)))
+			{
+				$this->is_mobile = TRUE;
+				$this->mobile = $val;
+				return TRUE;
+			}
+		}
+	
+		return FALSE;
+	}
+	
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Is Browser
+	 *
+	 * @access	public
+	 * @return	bool
+	 */		
+	function is_browser()
+	{
+		return $this->is_browser;
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Is Robot
+	 *
+	 * @access	public
+	 * @return	bool
+	 */		
+	function is_robot()
+	{
+		return $this->is_robot;
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Is Mobile
+	 *
+	 * @access	public
+	 * @return	bool
+	 */		
+	function is_mobile()
+	{
+		return $this->is_mobile;
+	}	
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Get Platform
+	 *
+	 * @access	public
+	 * @return	string
+	 */			
+	function get_platform()
+	{
+		return $this->platform;
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Get Browser Name
+	 *
+	 * @access	public
+	 * @return	string
+	 */			
+	function get_browser()
+	{
+		return $this->browser;
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Get the Browser Version
+	 *
+	 * @access	public
+	 * @return	string
+	 */			
+	function get_version()
+	{
+		return $this->version;
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Get The Robot Name
+	 *
+	 * @access	public
+	 * @return	string
+	 */				
+	function get_robot()
+	{
+		return $this->robot;
+	}
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Get the Mobile Devise
+	 *
+	 * @access	public
+	 * @return	string
+	 */			
+	function get_mobile()
+	{
+		return $this->mobile;
+	}
+	
+	
+}
+
+?>
\ No newline at end of file