adding initial Javascript and Jquery libs
diff --git a/system/libraries/Javascript.php b/system/libraries/Javascript.php
new file mode 100644
index 0000000..3b7dcc6
--- /dev/null
+++ b/system/libraries/Javascript.php
@@ -0,0 +1,847 @@
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+
+
+
+class CI_Javascript {
+
+	var $_javascript_location = 'js';
+
+	function CI_Javascript($params = array())
+	{
+		$defaults = array('js_library_driver' => 'jquery', 'autoload' => TRUE);
+		
+		foreach ($defaults as $key => $val)
+		{
+			if (isset($params[$key]) && $params[$key] !== "")
+			{
+				$defaults[$key] = $params[$key];
+			}
+		}
+		
+		extract($defaults);
+
+		$this->CI =& get_instance();
+
+		// load the requested js library
+		$this->CI->load->library($js_library_driver, array('autoload' => $autoload));
+		// make js to refer to current library
+		$this->js =& $this->CI->$js_library_driver;
+		
+		log_message('debug', "Javascript Class Initialized and loaded.  Driver used: $js_library_driver");
+	}
+
+	// --------------------------------------------------------------------	 
+	// Event Code
+	// --------------------------------------------------------------------	
+
+	/**
+	 * Blur
+	 *
+	 * Outputs a javascript library blur event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function blur($element = 'this', $js = '')
+	{
+		return $this->js->_blur($element, $js);
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Change
+	 *
+	 * Outputs a javascript library change event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function change($element = 'this', $js = '')
+	{
+		return $this->js->_change($element, $js);
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Click
+	 *
+	 * Outputs a javascript library click event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @param	boolean	whether or not to return false
+	 * @return	string
+	 */
+	function click($element = 'this', $js = '', $ret_false = TRUE)
+	{
+		return $this->js->_click($element, $js, $ret_false);
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Double Click
+	 *
+	 * Outputs a javascript library dblclick event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function dblclick($element = 'this', $js = '')
+	{
+		return $this->js->_dblclick($element, $js);
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Error
+	 *
+	 * Outputs a javascript library error event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function error($element = 'this', $js = '')
+	{
+		return $this->js->_error($element, $js);
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Focus
+	 *
+	 * Outputs a javascript library focus event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function focus($element = 'this', $js = '')
+	{
+		return $this->js->__add_event($focus, $js);
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Hover
+	 *
+	 * Outputs a javascript library hover event
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- Javascript code for mouse over
+	 * @param	string	- Javascript code for mouse out
+ 	 * @return	string
+	 */
+	function hover($element = 'this', $over, $out)
+	{
+		return $this->js->__hover($element, $over, $out);
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Keydown
+	 *
+	 * Outputs a javascript library keydown event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function keydown($element = 'this', $js = '')
+	{
+		return $this->js->_keydown($element, $js);
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Keyup
+	 *
+	 * Outputs a javascript library keydown event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function keyup($element = 'this', $js = '')
+	{
+		return $this->js->_keyup($element, $js);
+	}	
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Load
+	 *
+	 * Outputs a javascript library load event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function load($element = 'this', $js = '')
+	{
+		return $this->js->_load($element, $js);
+	}	
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Mousedown
+	 *
+	 * Outputs a javascript library mousedown event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function mousedown($element = 'this', $js = '')
+	{
+		return $this->js->_mousedown($element, $js);
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Mouse Out
+	 *
+	 * Outputs a javascript library mouseout event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function mouseout($element = 'this', $js = '')
+	{
+		return $this->js->_mouseout($element, $js);
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Mouse Over
+	 *
+	 * Outputs a javascript library mouseover event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function mouseover($element = 'this', $js = '')
+	{
+		return $this->js->_mouseover($element, $js);
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Mouseup
+	 *
+	 * Outputs a javascript library mouseup event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function mouseup($element = 'this', $js = '')
+	{
+		return $this->js->_mouseup($element, $js);
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Output
+	 *
+	 * Outputs the called javascript to the screen
+	 *
+	 * @access	public
+	 * @param	string	The code to output
+	 * @return	string
+	 */
+	function output($js)
+	{
+		return $this->js->_output($js);
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Ready
+	 *
+	 * Outputs a javascript library mouseup event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function ready($js)
+	{
+		return $this->js->_document_ready($js);
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Resize
+	 *
+	 * Outputs a javascript library resize event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function resize($element = 'this', $js = '')
+	{
+		return $this->js->_resize($element, $js);
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Scroll
+	 *
+	 * Outputs a javascript library scroll event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function scroll($element = 'this', $js = '')
+	{
+		return $this->js->_scroll($element, $js);
+	}
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Unload
+	 *
+	 * Outputs a javascript library unload event
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	string	The code to execute
+	 * @return	string
+	 */
+	function unload($element = 'this', $js = '')
+	{
+		return $this->js->_unload($element, $js);
+	}
+
+	// --------------------------------------------------------------------	 
+	// Effects
+	// --------------------------------------------------------------------	
+
+
+	/**
+	 * Add Class
+	 *
+	 * Outputs a javascript library addClass event
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- Class to add
+ 	 * @return	string
+	 */
+	function addClass($element = 'this', $class = '')
+	{
+		return $this->js->_addClass($element, $class);
+	}
+
+	// --------------------------------------------------------------------	
+
+	/**
+	 * Animate
+	 *
+	 * Outputs a javascript library animate event
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
+	 * @param	string	- Javascript callback function
+ 	 * @return	string
+	 */
+	function animate($element = 'this', $params = array(), $speed = '', $extra = '')
+	{
+		return $this->js->_animate($element, $params, $speed, $extra);
+	}
+
+	// --------------------------------------------------------------------
+		
+	/**
+	 * Fade In
+	 *
+	 * Outputs a javascript library hide event
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
+	 * @param	string	- Javascript callback function
+ 	 * @return	string
+	 */
+	function fadeIn($element = 'this', $speed = '', $callback = '')
+	{
+		return $this->js->_fadeIn($element, $speed, $callback);
+	}
+		
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Fade Out
+	 *
+	 * Outputs a javascript library hide event
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
+	 * @param	string	- Javascript callback function
+ 	 * @return	string
+	 */
+	function fadeOut($element = 'this', $speed = '', $callback = '')
+	{
+		return $this->js->_fadeOut($element, $speed, $callback);
+	}
+	// --------------------------------------------------------------------
+		
+	/**
+	 * Slide Up
+	 *
+	 * Outputs a javascript library slideUp event
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
+	 * @param	string	- Javascript callback function
+ 	 * @return	string
+	 */
+	function slideUp($element = 'this', $speed = '', $callback = '')
+	{
+		return $this->js->_slideUp($element, $speed, $callback);
+
+	}
+		
+	// --------------------------------------------------------------------
+
+	/**
+	 * Remove Class
+	 *
+	 * Outputs a javascript library removeClass event
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- Class to add
+ 	 * @return	string
+	 */
+	function removeClass($element = 'this', $class = '')
+	{
+		return $this->js->_removeClass($element, $class);
+	}
+
+	// --------------------------------------------------------------------	
+	
+	/**
+	 * Slide Down
+	 *
+	 * Outputs a javascript library slideDown event
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
+	 * @param	string	- Javascript callback function
+ 	 * @return	string
+	 */
+	function slideDown($element = 'this', $speed = '', $callback = '')
+	{
+		return $this->js->_slideDown($element, $speed, $callback);
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Slide Toggle
+	 *
+	 * Outputs a javascript library slideToggle event
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
+	 * @param	string	- Javascript callback function
+ 	 * @return	string
+	 */
+	function slideToggle($element = 'this', $speed = '', $callback = '')
+	{
+		return $this->js->_slideToggle($element, $speed, $callback);
+
+	}
+		
+	// --------------------------------------------------------------------
+
+	/**
+	 * Hide
+	 *
+	 * Outputs a javascript library hide action
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
+	 * @param	string	- Javascript callback function
+ 	 * @return	string
+	 */
+	function hide($element = 'this', $speed = '', $callback = '')
+	{
+		return $this->js->_hide($element, $speed, $callback);
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Toggle
+	 *
+	 * Outputs a javascript library toggle event
+	 *
+	 * @access	public
+	 * @param	string	- element
+ 	 * @return	string
+	 */
+	function toggle($element = 'this')
+	{
+		return $this->js->_toggle($element);
+
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Toggle Class
+	 *
+	 * Outputs a javascript library toggle class event
+	 *
+	 * @access	public
+	 * @param	string	- element
+ 	 * @return	string
+	 */
+	function toggleClass($element = 'this', $class='')
+	{
+		return $this->js->_toggleClass($element, $class);
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Show
+	 *
+	 * Outputs a javascript library show event
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
+	 * @param	string	- Javascript callback function
+ 	 * @return	string
+	 */
+	function show($element = 'this', $speed = '', $callback = '')
+	{
+		return $this->js->_show($element, $speed, $callback);
+	}
+
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Compile
+	 *
+	 * gather together all script needing to be output
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @return	string
+	 */	
+	function compile($view_var = 'script_foot', $script_tags = TRUE)
+	{
+		$this->js->_compile($view_var, $script_tags);
+	}
+	
+	/**
+	 * Clear Compile
+	 *
+	 * Clears any previous javascript collected for output
+	 *
+	 * @access	public
+	 * @return	void
+	 */
+	function clear_compile()
+	{
+		$this->js->_clear_compile();
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * External
+	 *
+	 * Outputs a <script> tag with the source as an external js file
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @return	string
+	 */
+	function external($external_file = '', $relative = FALSE)
+	{
+		if ($external_file !== '')
+		{
+			$this->_javascript_location = $external_file;
+		}
+		else
+		{
+			if ($this->CI->config->item('javascript_location') != '')
+			{
+				$this->_javascript_location = $this->CI->config->item('javascript_location');
+			}		
+		}
+		
+		if ($relative === TRUE OR strncmp($external_file, 'http://', 7) == 0 OR strncmp($external_file, 'https://', 8) == 0)
+		{
+			$str = $this->_open_script($external_file);		
+		}
+		elseif (strpos($this->_javascript_location, 'http://') !== FALSE)
+		{
+			$str = $this->_open_script($this->_javascript_location.$external_file);		
+		}
+		else
+		{
+			$str = $this->_open_script($this->CI->config->slash_item('base_url').$this->_javascript_location.$external_file);
+		}
+
+		$str .= $this->_close_script();
+		return $str;
+	}
+  	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Inline
+	 *
+	 * Outputs a <script> tag 
+	 *
+	 * @access	public
+	 * @param	string	The element to attach the event to
+	 * @param	boolean	If a CDATA section should be added
+	 * @return	string
+	 */
+	function inline($script, $cdata = TRUE)
+	{
+		$str = $this->_open_script();
+		$str .= ($cdata) ? "\n// <![CDATA[\n{$script}\n// ]]>\n" : "\n{$script}\n";
+		$str .= $this->_close_script();
+		
+		return $str;
+	}
+	  	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Open Script
+	 *
+	 * Outputs an opening <script> 
+	 *
+	 * @access	private
+	 * @param	string	
+	 * @return	string
+	 */
+	function _open_script($src = '')
+	{
+		$str = '<script type="text/javascript" charset="'.strtolower($this->CI->config->item('charset')).'"';
+		$str .= ($src == '') ? '>' : ' src="'.$src.'">';
+		return $str;
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Close Script
+	 *
+	 * Outputs an closing </script> 
+	 *
+	 * @access	private
+	 * @param	string	
+	 * @return	string
+	 */
+	function _close_script($extra = "\n")
+	{
+		return "</script>$extra";
+	}
+	
+	
+	// --------------------------------------------------------------------
+	// --------------------------------------------------------------------
+	// AJAX-Y STUFF - still a testbed
+	// --------------------------------------------------------------------
+	// --------------------------------------------------------------------
+
+	/**
+	 * Update
+	 *
+	 * Outputs a javascript library slideDown event
+	 *
+	 * @access	public
+	 * @param	string	- element
+	 * @param	string	- One of 'slow', 'normal', 'fast', or time in milliseconds
+	 * @param	string	- Javascript callback function
+ 	 * @return	string
+	 */
+	function update($element = 'this', $speed = '', $callback = '')
+	{
+		return $this->js->_updater($element, $speed, $callback);
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Generate JSON
+	 *
+	 * Can be passed a database result or associative array and returns a JSON formatted string
+	 *
+	 * @param	mixed	result set or array
+	 * @param	bool	match array types (defaults to objects)
+	 * @return	string	a json formatted string
+	 */
+	function generate_json($result = NULL, $match_array_type = FALSE)
+	{
+		// JSON data can optionally be passed to this function
+		// either as a database result object or an array, or a user supplied array
+		if ( ! is_null($result))
+		{
+			if (is_object($result))
+			{
+				$json_result = $result->result_array();
+			}
+			elseif (is_array($result))
+			{
+				$json_result = $result;
+			}
+			else
+			{
+				return $this->_prep_args($result);
+			}
+		}
+		else
+		{
+			return 'null';
+		}
+
+		$json = array();
+		$_is_assoc = TRUE;
+		
+		if ( ! is_array($json_result) AND empty($json_result))
+		{
+			show_error("Generate JSON Failed - Illegal key, value pair.");
+		}
+		elseif ($match_array_type)
+		{
+			$_is_assoc = $this->_is_associative_array($json_result);
+		}
+
+		foreach ($json_result as $k => $v)
+		{
+			if ($_is_assoc)
+			{
+				$json[] = $this->_prep_args($k, TRUE).':'.$this->generate_json($v, $match_array_type);
+			}
+			else
+			{
+				$json[] = $this->generate_json($v, $match_array_type);
+			}
+		}
+
+		$json = implode(',', $json);
+
+		return $_is_assoc ? "{".$json."}" : "[".$json."]";
+		
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Is associative array
+	 *
+	 * Checks for an associative array
+	 *
+	 * @access	public
+	 * @param	type
+	 * @return	type
+	 */
+	function _is_associative_array($arr)
+	{
+		foreach (array_keys($arr) as $key => $val)
+		{
+			if ($key !== $val)
+			{
+				return TRUE;
+			}
+		}
+		
+		return FALSE;
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Prep Args
+	 *
+	 * Ensures a standard json value and escapes values
+	 *
+	 * @access	public
+	 * @param	type
+	 * @return	type
+	 */
+	function _prep_args($result, $is_key = FALSE)
+	{
+		if (is_null($result))
+		{
+			return 'null';
+		}
+		elseif (is_bool($result))
+		{
+			return ($result === TRUE) ? 'true' : 'false';
+		}
+		elseif (is_string($result) OR $is_key)
+		{
+			return '"'.str_replace(array('\\', "\t", "\n", "\r", '"'), array('\\\\', '\\t', '\\n', "\\r", '\"'), $result).'"';
+		}
+		elseif (is_scalar($result))
+		{
+			return $result;
+		}
+	}
+}
+
+
+/* End of file Javascript.php */
+/* Location: ./system/libraries/Javascript.php */
\ No newline at end of file