[ci skip] Update the Input library and Cookie helper docs
diff --git a/user_guide_src/source/helpers/cookie_helper.rst b/user_guide_src/source/helpers/cookie_helper.rst
index e70893f..2e8db5f 100644
--- a/user_guide_src/source/helpers/cookie_helper.rst
+++ b/user_guide_src/source/helpers/cookie_helper.rst
@@ -25,18 +25,17 @@
 The following functions are available:
 
 
-.. function:: set_cookie([$name = ''[, $value = ''[, $expire = ''[, $domain = ''[, $path = '/'[, $prefix = ''[, $secure = FALSE[, $httponly = FALSE]]]]]]]])
+.. function:: set_cookie($name[, $value = ''[, $expire = ''[, $domain = ''[, $path = '/'[, $prefix = ''[, $secure = FALSE[, $httponly = FALSE]]]]]]]])
 
-	:param	mixed	$name: Cookie name *or* associative array of all of
-		the parameters available to this function
-	:param	string	$value: Cookie value
-	:param	int	$expire: Number of seconds until expiration
-	:param	string	$domain: Cookie domain (usually: .yourdomain.com)
-	:param	string	$path: Cookie path
-	:param	string	$prefix: Cookie name prefix
-	:param	bool	$secure: Whether to only send the cookie through HTTPS
-	:param	bool	$httponly: Whether to hide the cookie from JavaScript
-	:returns:	void
+	:param mixed $name: Cookie name *or* associative array of all of the parameters available to this function
+	:param string $value: Cookie value
+	:param int $expire: Number of seconds until expiration
+	:param string $domain: Cookie domain (usually: .yourdomain.com)
+	:param string $path: Cookie path
+	:param string $prefix: Cookie name prefix
+	:param bool $secure: Whether to only send the cookie through HTTPS
+	:param bool $httponly: Whether to hide the cookie from JavaScript
+	:returns: void
 
 	This helper function gives you view file friendly syntax to set browser
 	cookies. Refer to the :doc:`Input Library <../libraries/input>` for a
@@ -44,28 +43,27 @@
 	``CI_Input::set_cookie()``.
 
 
-.. function:: get_cookie([$index = ''[, $xss_clean = FALSE]])
+.. function:: get_cookie($index[, $xss_clean = FALSE]])
 
-	:param	string	$index: Cookie name
-	:param	bool	$xss_clean: Whether to apply XSS filtering to the returned value
-	:returns:	mixed
+	:param string $index: Cookie name
+	:param bool $xss_clean: Whether to apply XSS filtering to the returned value
+	:returns: mixed
 
 	This helper function gives you view file friendly syntax to get browser
 	cookies. Refer to the :doc:`Input Library <../libraries/input>` for a
 	description of its use, as this function is an alias for ``CI_Input::cookie()``.
 
 
-.. function:: delete_cookie([$name = ''[, $domain = ''[, $path = '/'[, $prefix = '']]]])
+.. function:: delete_cookie($name[, $domain = ''[, $path = '/'[, $prefix = '']]]])
 
-	:param	string	$name: Cookie name
-	:param	string	$domain: Cookie domain (usually: .yourdomain.com)
-	:param	string	$path: Cookie path
-	:param	string	$prefix: Cookie name prefix
+	:param string $name: Cookie name
+	:param string $domain: Cookie domain (usually: .yourdomain.com)
+	:param string $path: Cookie path
+	:param string $prefix: Cookie name prefix
 	:returns: void
 
 	Lets you delete a cookie. Unless you've set a custom path or other
 	values, only the name of the cookie is needed.
-
 	::
 
 		delete_cookie('name');
@@ -74,7 +72,6 @@
 	does not have the value and expiration parameters. You can submit an
 	array of values in the first parameter or you can set discrete
 	parameters.
-
 	::
 
 		delete_cookie($name, $domain, $path, $prefix)
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/input.rst b/user_guide_src/source/libraries/input.rst
index 177f5cb..39a0d06 100644
--- a/user_guide_src/source/libraries/input.rst
+++ b/user_guide_src/source/libraries/input.rst
@@ -10,6 +10,13 @@
 .. note:: This class is initialized automatically by the system so there
 	is no need to do it manually.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
 Security Filtering
 ==================
 
@@ -17,7 +24,7 @@
 :doc:`controller <../general/controllers>` is invoked. It does the
 following:
 
--  If $config['allow_get_array'] is FALSE (default is TRUE), destroys
+-  If ``$config['allow_get_array']`` is FALSE (default is TRUE), destroys
    the global GET array.
 -  Destroys all global variables in the event register_globals is
    turned on.
@@ -33,7 +40,7 @@
 The Input class has the ability to filter input automatically to prevent
 cross-site scripting attacks. If you want the filter to run
 automatically every time it encounters POST or COOKIE data you can
-enable it by opening your application/config/config.php file and setting
+enable it by opening your *application/config/config.php* file and setting
 this::
 
 	$config['global_xss_filtering'] = TRUE;
@@ -44,7 +51,7 @@
 Using POST, GET, COOKIE, or SERVER Data
 =======================================
 
-CodeIgniter comes with four helper methods that let you fetch POST, GET,
+CodeIgniter comes with helper methods that let you fetch POST, GET,
 COOKIE or SERVER items. The main advantage of using the provided
 methods rather than fetching an item directly (``$_POST['something']``)
 is that the methods will check to see if the item is set and return
@@ -58,90 +65,13 @@
 
 	$something = $this->input->post('something');
 
-The four methods are:
+The main methods are:
 
 -  $this->input->post()
 -  $this->input->get()
 -  $this->input->cookie()
 -  $this->input->server()
 
-$this->input->post()
-====================
-
-The first parameter will contain the name of the POST item you are
-looking for::
-
-	$this->input->post('some_data');
-
-The method returns NULL if the item you are attempting to retrieve
-does not exist.
-
-The second optional parameter lets you run the data through the XSS
-filter. It's enabled by setting the second parameter to boolean TRUE;
-
-::
-
-	$this->input->post('some_data', TRUE);
-
-To return an array of all POST items call without any parameters.
-
-To return all POST items and pass them through the XSS filter set the
-first parameter NULL while setting the second parameter to boolean;
-
-The method returns NULL if there are no items in the POST.
-
-::
-
-	$this->input->post(NULL, TRUE); // returns all POST items with XSS filter
-	$this->input->post(); // returns all POST items without XSS filter
-
-$this->input->get()
-===================
-
-This method is identical to the post method, only it fetches get data
-::
-
-	$this->input->get('some_data', TRUE);
-
-To return an array of all GET items call without any parameters.
-
-To return all GET items and pass them through the XSS filter set the
-first parameter NULL while setting the second parameter to boolean;
-
-The method returns NULL if there are no items in the GET.
-
-::
-
-	$this->input->get(NULL, TRUE); // returns all GET items with XSS filter
-	$this->input->get(); // returns all GET items without XSS filtering
-
-
-$this->input->get_post()
-========================
-
-This method will search through both the post and get streams for
-data, looking first in post, and then in get::
-
-	$this->input->get_post('some_data', TRUE);
-
-$this->input->cookie()
-======================
-
-This method is identical to the post method, only it fetches cookie data
-::
-
-	$this->input->cookie('some_cookie');
-	$this->input->cookie('some_cookie, TRUE); // with XSS filter
-
-
-$this->input->server()
-======================
-
-This method is identical to the above methods, only it fetches server
-server data::
-
-	$this->input->server('some_data');
-
 Using the php://input stream
 ============================
 
@@ -158,162 +88,290 @@
 
 	$this->input->input_stream('key');
 
-Similar to the methods above, if the requested data is not found, it
-will return NULL and you can also decide whether to run the data
-through ``xss_clean()`` by passing a boolean value as the second
-parameter::
+Similar to other methods such as ``get()`` and ``post()``, if the
+requested data is not found, it will return NULL and you can also
+decide whether to run the data through ``xss_clean()`` by passing
+a boolean value as the second parameter::
 
 	$this->input->input_stream('key', TRUE); // XSS Clean
 	$this->input->input_stream('key', FALSE); // No XSS filter
 
-.. note:: You can utilize method() in order to know if you're reading
+.. note:: You can utilize ``method()`` in order to know if you're reading
 	PUT, DELETE or PATCH data.
 
-$this->input->set_cookie()
-==========================
+***************
+Class Reference
+***************
 
-Sets a cookie containing the values you specify. There are two ways to
-pass information to this method so that a cookie can be set: Array
-Method, and Discrete Parameters:
+.. class:: CI_Input
 
-Array Method
-^^^^^^^^^^^^
+	.. method:: post([$index = NULL[, $xss_clean = FALSE]])
 
-Using this method, an associative array is passed to the first
-parameter::
+		:param string $index: POST parameter name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
 
-	$cookie = array(
-	    'name'   => 'The Cookie Name',
-	    'value'  => 'The Value',
-	    'expire' => '86500',
-	    'domain' => '.some-domain.com',
-	    'path'   => '/',
-	    'prefix' => 'myprefix_',
-	    'secure' => TRUE
-	);
+		The first parameter will contain the name of the POST item you are
+		looking for::
 
-	$this->input->set_cookie($cookie);
+			$this->input->post('some_data');
 
-**Notes:**
+		The method returns NULL if the item you are attempting to retrieve
+		does not exist.
 
-Only the name and value are required. To delete a cookie set it with the
-expiration blank.
+		The second optional parameter lets you run the data through the XSS
+		filter. It's enabled by setting the second parameter to boolean TRUE.
+		::
 
-The expiration is set in **seconds**, which will be added to the current
-time. Do not include the time, but rather only the number of seconds
-from *now* that you wish the cookie to be valid. If the expiration is
-set to zero the cookie will only last as long as the browser is open.
+			$this->input->post('some_data', TRUE);
 
-For site-wide cookies regardless of how your site is requested, add your
-URL to the **domain** starting with a period, like this:
-.your-domain.com
+		To return an array of all POST items call without any parameters.
 
-The path is usually not needed since the method sets a root path.
+		To return all POST items and pass them through the XSS filter set the
+		first parameter NULL while setting the second parameter to boolean TRUE.
+		::
 
-The prefix is only needed if you need to avoid name collisions with
-other identically named cookies for your server.
+			$this->input->post(NULL, TRUE); // returns all POST items with XSS filter
+			$this->input->post(); // returns all POST items without XSS filter
 
-The secure boolean is only needed if you want to make it a secure cookie
-by setting it to TRUE.
+	.. method:: get([$index = NULL[, $xss_clean = FALSE]])
 
-Discrete Parameters
-^^^^^^^^^^^^^^^^^^^
+		:param string $index: GET parameter name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
 
-If you prefer, you can set the cookie by passing data using individual
-parameters::
+		This method is identical to ``post()``, only it fetches GET data.
+		::
 
-	$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);
+			$this->input->get('some_data', TRUE);
+
+		To return an array of all GET items call without any parameters.
+
+		To return all GET items and pass them through the XSS filter set the
+		first parameter NULL while setting the second parameter to boolean TRUE.
+		::
+
+			$this->input->get(NULL, TRUE); // returns all GET items with XSS filter
+			$this->input->get(); // returns all GET items without XSS filtering
+
+	.. method:: get_post([$index = ''[, $xss_clean = FALSE]])
+
+		:param string $index: GET/POST parameter name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
+
+		This method works the same way as ``post()`` and ``get()``, only combined.
+		It will search through both POST and GET streams for data, looking first
+		in POST, and then in GET::
+
+			$this->input->get_post('some_data', TRUE);
+
+	.. method:: cookie([$index = ''[, $xss_clean = FALSE]])
+
+		:param string $index: COOKIE parameter name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
+
+		This method is identical to ``post()`` and ``get()``, only it fetches cookie
+		data::
+
+			$this->input->cookie('some_cookie');
+			$this->input->cookie('some_cookie, TRUE); // with XSS filter
+
+	.. method:: server([$index = ''[, $xss_clean = FALSE]])
+
+		:param string $index: Value name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
+
+		This method is identical to the ``post()``, ``get()`` and ``cookie()`` methods,
+		only it fetches server data (``$_SERVER``)::
+
+			$this->input->server('some_data');
+
+	.. method:: input_stream([$index = ''[, $xss_clean = FALSE]])
+
+		:param string $index: Key name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
+
+		This method is identical to ``get()``, ``post()`` and ``cookie()``,
+		only it fetches the *php://input* stream data.
+
+	.. method:: set_cookie($name = ''[, $value = ''[, $expire = ''[, $domain = ''[, $path = '/'[, $prefix = ''[, $secure = FALSE[, $httponly = FALSE]]]]]]])
+
+		:param mixed $name: Cookie name or an array of parameters
+		:param string $value: Cookie value
+		:param int $expire: Cookie expiration time in seconds
+		:param string $domain: Cookie domain
+		:param string $path: Cookie path
+		:param string $prefix: Cookie name prefix
+		:param bool $secure: Whether to only transfer the cookie through HTTPS
+		:param bool $httponly: Whether to only make the cookie accessible for HTTP requests (no JavaScript)
+		:returns: void
+
+		Sets a cookie containing the values you specify. There are two ways to
+		pass information to this method so that a cookie can be set: Array
+		Method, and Discrete Parameters:
+
+		Array Method
+		^^^^^^^^^^^^
+
+		Using this method, an associative array is passed to the first
+		parameter::
+
+			$cookie = array(
+				'name'   => 'The Cookie Name',
+				'value'  => 'The Value',
+				'expire' => '86500',
+				'domain' => '.some-domain.com',
+				'path'   => '/',
+				'prefix' => 'myprefix_',
+				'secure' => TRUE
+			);
+
+			$this->input->set_cookie($cookie);
+
+		**Notes:**
+
+		Only the name and value are required. To delete a cookie set it with the
+		expiration blank.
+
+		The expiration is set in **seconds**, which will be added to the current
+		time. Do not include the time, but rather only the number of seconds
+		from *now* that you wish the cookie to be valid. If the expiration is
+		set to zero the cookie will only last as long as the browser is open.
+
+		For site-wide cookies regardless of how your site is requested, add your
+		URL to the **domain** starting with a period, like this:
+		.your-domain.com
+
+		The path is usually not needed since the method sets a root path.
+
+		The prefix is only needed if you need to avoid name collisions with
+		other identically named cookies for your server.
+
+		The secure boolean is only needed if you want to make it a secure cookie
+		by setting it to TRUE.
+
+		Discrete Parameters
+		^^^^^^^^^^^^^^^^^^^
+
+		If you prefer, you can set the cookie by passing data using individual
+		parameters::
+
+			$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);
 
 
-$this->input->ip_address()
-==========================
+	.. method:: ip_address()
 
-Returns the IP address for the current user. If the IP address is not
-valid, the method will return an IP of: 0.0.0.0
+		:returns: string
 
-::
+		Returns the IP address for the current user. If the IP address is not
+		valid, the method will return '0.0.0.0'::
 
-	echo $this->input->ip_address();
+			echo $this->input->ip_address();
 
-$this->input->valid_ip($ip)
-===========================
+		.. important:: This method takes into account the ``$config['proxy_ips']``
+			setting and will return the reported HTTP_X_FORWARDED_FOR,
+			HTTP_CLIENT_IP, HTTP_X_CLIENT_IP or HTTP_X_CLUSTER_CLIENT_IP
+			address for the allowed IP addresses.
 
-Takes an IP address as input and returns TRUE or FALSE (boolean) if it
-is valid or not.
+	.. method:: valid_ip($ip[, $which = ''])
 
-.. note:: The $this->input->ip_address() method above automatically
-	validates the IP address.
+		:param string $ip: IP address
+		:param string $which: IP protocol ('ipv4' or 'ipv6')
+		:returns: bool
 
-::
+		Takes an IP address as input and returns TRUE or FALSE (boolean) depending
+		on whether it is valid or not.
 
-	if ( ! $this->input->valid_ip($ip))
-	{
-	     echo 'Not Valid';
-	}
-	else
-	{
-	     echo 'Valid';
-	}
+		.. note:: The $this->input->ip_address() method above automatically
+			validates the IP address.
 
-Accepts an optional second string parameter of 'ipv4' or 'ipv6' to specify
-an IP format. The default checks for both formats.
+		::
 
-$this->input->user_agent()
-==========================
+			if ( ! $this->input->valid_ip($ip))
+			{
+				echo 'Not Valid';
+			}
+			else
+			{
+				echo 'Valid';
+			}
 
-Returns the user agent (web browser) being used by the current user.
-Returns FALSE if it's not available.
+		Accepts an optional second string parameter of 'ipv4' or 'ipv6' to specify
+		an IP format. The default checks for both formats.
 
-::
+	.. method:: user_agent()
 
-	echo $this->input->user_agent();
+		:returns: string
 
-See the :doc:`User Agent Class <user_agent>` for methods which extract
-information from the user agent string.
+		Returns the user agent string (web browser) being used by the current user,
+		or NULL if it's not available.
+		::
 
-$this->input->request_headers()
-===============================
+			echo $this->input->user_agent();
 
-Useful if running in a non-Apache environment where
-`apache_request_headers() <http://php.net/apache_request_headers>`_
-will not be supported. Returns an array of headers.
+		See the :doc:`User Agent Class <user_agent>` for methods which extract
+		information from the user agent string.
 
-::
+	.. method:: request_headers([$xss_clean = FALSE])
 
-	$headers = $this->input->request_headers();
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: array
 
-$this->input->get_request_header()
-==================================
+		Returns an array of HTTP request headers.
+		Useful if running in a non-Apache environment where
+		`apache_request_headers() <http://php.net/apache_request_headers>`_
+		will not be supported.
+		::
 
-Returns a single member of the request headers array.
+			$headers = $this->input->request_headers();
 
-::
+	.. method:: get_request_header($index[, $xss_clean = FALSE])
 
-	$this->input->get_request_header('some-header', TRUE);
+		:param string $index: HTTP request header name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: string
 
-$this->input->is_ajax_request()
-===============================
+		Returns a single member of the request headers array or NULL
+		if the searched header is not found.
+		::
 
-Checks to see if the HTTP_X_REQUESTED_WITH server header has been
-set, and returns a boolean response.
+			$this->input->get_request_header('some-header', TRUE);
 
-$this->input->is_cli_request()
-==============================
+	.. method:: is_ajax_request()
 
-Checks to see if the STDIN constant is set, which is a failsafe way to
-see if PHP is being run on the command line.
+		:returns: bool
 
-::
+		Checks to see if the HTTP_X_REQUESTED_WITH server header has been
+		set, and returns boolean TRUE if it is or FALSE if not.
 
-	$this->input->is_cli_request()
+	.. method:: is_cli_request()
 
-$this->input->method()
-======================
+		:returns: bool
 
-Returns the $_SERVER['REQUEST_METHOD'], optional set uppercase or lowercase (default lowercase).
+		Checks to see if the application was run from the command-line
+		interface.
 
-::
+		.. note:: This method checks both the PHP SAPI name currently in use
+			and if the ``STDIN`` constant is defined, which is usually a
+			failsafe way to see if PHP is being run via the command line.
 
-	echo $this->input->method(TRUE); // Outputs: POST
-	echo $this->input->method(FALSE); // Outputs: post
-	echo $this->input->method(); // Outputs: post
\ No newline at end of file
+		::
+
+			$this->input->is_cli_request()
+
+	.. method:: method([$upper = FALSE])
+
+		:param bool $upper: Whether to return the request method name in upper or lower case
+		:returns: string
+
+		Returns the ``$_SERVER['REQUEST_METHOD']``, with the option to set it
+		in uppercase or lowercase.
+		::
+
+			echo $this->input->method(TRUE); // Outputs: POST
+			echo $this->input->method(FALSE); // Outputs: post
+			echo $this->input->method(); // Outputs: post
\ No newline at end of file