Initial Import
diff --git a/system/libraries/URI.php b/system/libraries/URI.php
new file mode 100644
index 0000000..4c2fa9c
--- /dev/null
+++ b/system/libraries/URI.php
@@ -0,0 +1,243 @@
+<?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
+ */
+ 
+// ------------------------------------------------------------------------
+
+/**
+ * URI Class
+ * 
+ * Parses URIs and determines routing
+ *
+ * @package		CodeIgniter
+ * @subpackage	Libraries
+ * @category	URI
+ * @author		Rick Ellis
+ * @link		http://www.codeigniter.com/user_guide/libraries/uri.html
+ */
+class CI_URI {
+
+	var $uri;
+	var	$keyval	= array();
+
+	/**
+	 * Constructor
+	 *
+	 * Simply globalizes the $RTR object.  The front
+	 * loads the Router class early on so it's not available
+	 * normally as other classes are. 
+	 *
+	 * @access	public
+	 */		
+	function CI_URI()
+	{
+		$this->uri =& _load_class('CI_Router');		
+		log_message('debug', "URI Class Initialized");
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Fetch a URI Segment
+	 *
+	 * This function returns the URI segment based on the number provided.  
+	 *
+	 * @access	public
+	 * @param	integer
+	 * @param	bool
+	 * @return	string
+	 */
+	function segment($n, $no_result = FALSE)
+	{
+		return ( ! isset($this->uri->segments[$n])) ? $no_result : $this->uri->segments[$n];
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Generate a key value pair from the URI string
+	 *
+	 * This function generates and associative array of URI data starting 
+	 * at the supplied segment. For example, if this is your URI:
+	 *
+	 *	www.your-site.com/user/search/name/joe/location/UK/gender/male
+	 *
+	 * You can use this function to generate an array with this prototype:
+	 *
+	 * array (
+	 *			name => joe
+	 *			location => UK
+	 *			gender => male
+	 *		 )
+	 * 
+	 * @access	public
+	 * @param	integer	the starting segment number
+	 * @param	array	an array of default values
+	 * @return	array
+	 */
+	function uri_to_assoc($n = 3, $default = array())
+	{
+		if ( ! ctype_digit($n))
+		{
+			return $default;
+		}
+	
+		if (isset($this->keyval[$n]))
+		{
+			return $this->keyval[$n];
+		}
+	
+		if ($this->total_segments() < $n)
+		{
+			if (count($default) == 0)
+			{
+				return array();
+			}
+			
+			$retval = array();
+			foreach ($default as $val)
+			{
+				$retval[$val] = FALSE;
+			}		
+			return $default;
+		}
+
+		$segments = array_slice($this->segment_array(), ($n - 1));
+
+		$i = 0;
+		$lastval = '';
+		$retval  = array();
+		foreach ($segments as $seg)
+		{
+			if ($i % 2)
+			{
+				$retval[$lastval] = $seg;
+			}
+			else
+			{
+				$retval[$seg] = FALSE;
+				$lastval = $seg;
+			}
+		
+			$i++;
+		}
+
+		if (count($default) > 0)
+		{
+			foreach ($default as $val)
+			{
+				if ( ! array_key_exists($val, $retval))
+				{
+					$retval[$val] = FALSE;
+				}
+			}
+		}
+
+		// Cache the array for reuse
+		$this->keyval[$n] = $retval;
+		return $retval;
+	}
+
+	/**
+	 * Generate a URI string from an associative array
+	 *
+	 * 
+	 * @access	public
+	 * @param	array	an associative array of key/values
+	 * @return	array
+	 */	function assoc_to_uri($array)
+	{	
+		$temp = array();
+		foreach ((array)$array as $key => $val)
+		{
+			$temp[] = $key;
+			$temp[] = $val;
+		}
+		
+		return implode('/', $temp);
+	}
+
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Fetch a URI Segment and add a trailing slash
+	 *
+	 * @access	public
+	 * @param	integer
+	 * @param	string
+	 * @return	string
+	 */
+	function slash_segment($n, $where = 'trailing')
+	{	
+		if ($where == 'trailing')
+		{
+			$trailing	= '/';
+			$leading	= '';
+		}
+		elseif ($where == 'leading')
+		{
+			$leading	= '/';
+			$trailing	= '';
+		}
+		else
+		{
+			$leading	= '/';
+			$trailing	= '/';
+		}
+		return ( ! isset($this->uri->segments[$n])) ? '' : $leading.$this->uri->segments[$n].$trailing;
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Segment Array
+	 *
+	 * @access	public
+	 * @return	array
+	 */
+	function segment_array()
+	{
+		return $this->uri->segments;
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Total number of segments
+	 *
+	 * @access	public
+	 * @return	integer
+	 */
+	function total_segments()
+	{
+		return count($this->uri->segments);
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Fetch the entire URI string
+	 *
+	 * @access	public
+	 * @return	string
+	 */
+	function uri_string()
+	{
+		return $this->uri->uri_string;
+	}
+
+}
+// END URI Class
+?>
\ No newline at end of file