From 5e2d498f7a7728464546a97dac4d5f211770ac66 Mon Sep 17 00:00:00 2001
From: Olav Morken <olav.morken@uninett.no>
Date: Wed, 27 Jan 2010 09:27:01 +0000
Subject: [PATCH] Remove xajax.

git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@2142 44740490-163a-0410-bde0-09ae8108e29a
---
 libextinc/xajax/copyright.inc.php            |   54 -
 libextinc/xajax/xajax.inc.php                | 1239 ------------------
 libextinc/xajax/xajaxCompress.php            |  182 ---
 libextinc/xajax/xajaxResponse.inc.php        |  580 --------
 www/saml2/idp/xajax_js/xajax.js              |  172 ---
 www/saml2/idp/xajax_js/xajax_uncompressed.js |  795 -----------
 6 files changed, 3022 deletions(-)
 delete mode 100755 libextinc/xajax/copyright.inc.php
 delete mode 100644 libextinc/xajax/xajax.inc.php
 delete mode 100644 libextinc/xajax/xajaxCompress.php
 delete mode 100644 libextinc/xajax/xajaxResponse.inc.php
 delete mode 100644 www/saml2/idp/xajax_js/xajax.js
 delete mode 100644 www/saml2/idp/xajax_js/xajax_uncompressed.js

diff --git a/libextinc/xajax/copyright.inc.php b/libextinc/xajax/copyright.inc.php
deleted file mode 100755
index ce24adff6..000000000
--- a/libextinc/xajax/copyright.inc.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/*
-	File: copyright.inc.php
-	
-	This file contains detailed information regarding the xajax project, 
-	current version, copyrights, licnese and documentation.
-	
-	You do not need to include this file in your project for xajax to 
-	function properly.
-*/
-
-/*
-	Section: Current Version
-	
-	xajax version 0.5 (beta 4)
-*/
-
-/*
-	Section: Copyright
-	
-	- copyright (c) 2005-2007 by Jared White & J. Max Wilson
-	- portions copyright (c) 2006-2007 by Joseph Woolley
-*/
-
-/*
-	Section: Description
-	
-	xajax is an open source PHP class library for easily creating powerful
-	PHP-driven, web-based Ajax Applications. Using xajax, you can asynchronously
-	call PHP functions and update the content of your your webpage without
-	reloading the page.
-*/
-
-/*
-	Section: License
-	
-	xajax is released under the terms of the BSD license
-	http://www.xajaxproject.org/bsd_license.txt
-*/
-
-/*
-	@package xajax
-	@version $Id: copyright.inc.php 327 2007-02-28 16:55:26Z calltoconstruct $
-	@copyright Copyright (c) 2005-2006 by Jared White & J. Max Wilson
-	@license http://www.xajaxproject.org/bsd_license.txt BSD License
-*/
-
-/*
-	Section: Online documentation
-	
-	Online documentation for this class is available on the xajax wiki at:
-	http://wiki.xajaxproject.org/Documentation:xajax.inc.php
-*/
-	
diff --git a/libextinc/xajax/xajax.inc.php b/libextinc/xajax/xajax.inc.php
deleted file mode 100644
index 602a04930..000000000
--- a/libextinc/xajax/xajax.inc.php
+++ /dev/null
@@ -1,1239 +0,0 @@
-<?php
-/**
- * xajax.inc.php :: Main xajax class and setup file
- *
- * xajax version 0.2.4
- * copyright (c) 2005 by Jared White & J. Max Wilson
- * http://www.xajaxproject.org
- *
- * xajax is an open source PHP class library for easily creating powerful
- * PHP-driven, web-based Ajax Applications. Using xajax, you can asynchronously
- * call PHP functions and update the content of your your webpage without
- * reloading the page.
- *
- * xajax is released under the terms of the LGPL license
- * http://www.gnu.org/copyleft/lesser.html#SEC3
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * @package xajax
- * @version $Id$
- * @copyright Copyright (c) 2005-2006  by Jared White & J. Max Wilson
- * @license http://www.gnu.org/copyleft/lesser.html#SEC3 LGPL License
- */
-
-/*
-   ----------------------------------------------------------------------------
-   | Online documentation for this class is available on the xajax wiki at:   |
-   | http://wiki.xajaxproject.org/Documentation:xajax.inc.php                 |
-   ----------------------------------------------------------------------------
-*/
-
-/**
- * Define XAJAX_DEFAULT_CHAR_ENCODING that is used by both
- * the xajax and xajaxResponse classes
- */
-if (!defined ('XAJAX_DEFAULT_CHAR_ENCODING'))
-{
-	define ('XAJAX_DEFAULT_CHAR_ENCODING', 'utf-8' );
-}
-
-require_once(dirname(__FILE__)."/xajaxResponse.inc.php");
-
-/**
- * Communication Method Defines
- */
-if (!defined ('XAJAX_GET'))
-{
-	define ('XAJAX_GET', 0);
-}
-if (!defined ('XAJAX_POST'))
-{
-	define ('XAJAX_POST', 1);
-}
-
-/**
- * The xajax class generates the xajax javascript for your page including the 
- * Javascript wrappers for the PHP functions that you want to call from your page.
- * It also handles processing and executing the command messages in the XML responses
- * sent back to your page from your PHP functions.
- * 
- * @package xajax
- */ 
-class xajax
-{
-	/**#@+
-	 * @access protected
-	 */
-	/**
-	 * @var array Array of PHP functions that will be callable through javascript wrappers
-	 */
-	var $aFunctions;
-	/**
-	 * @var array Array of object callbacks that will allow Javascript to call PHP methods (key=function name)
-	 */
-	var $aObjects;
-	/**
-	 * @var array Array of RequestTypes to be used with each function (key=function name)
-	 */
-	var $aFunctionRequestTypes;
-	/**
-	 * @var array Array of Include Files for any external functions (key=function name)
-	 */
-	var $aFunctionIncludeFiles;
-	/**
-	 * @var string Name of the PHP function to call if no callable function was found
-	 */
-	var $sCatchAllFunction;
-	/**
-	 * @var string Name of the PHP function to call before any other function
-	 */
-	var $sPreFunction;
-	/**
-	 * @var string The URI for making requests to the xajax object
-	 */
-	var $sRequestURI;
-	/**
-	 * @var string The prefix to prepend to the javascript wraper function name
-	 */
-	var $sWrapperPrefix;
-	/**
-	 * @var boolean Show debug messages (default false)
-	 */
-	var $bDebug;
-	/**
-	 * @var boolean Show messages in the client browser's status bar (default false)
-	 */
-	var $bStatusMessages;	
-	/**
-	 * @var boolean Allow xajax to exit after processing a request (default true)
-	 */
-	var $bExitAllowed;
-	/**
-	 * @var boolean Use wait cursor in browser (default true)
-	 */
-	var $bWaitCursor;
-	/**
-	 * @var boolean Use an special xajax error handler so the errors are sent to the browser properly (default false)
-	 */
-	var $bErrorHandler;
-	/**
-	 * @var string Specify what, if any, file xajax should log errors to (and more information in a future release)
-	 */
-	var $sLogFile;
-	/**
-	 * @var boolean Clean all output buffers before outputting response (default false)
-	 */
-	var $bCleanBuffer;
-	/**
-	 * @var string String containing the character encoding used
-	 */
-	var $sEncoding;
-	/**
-	 * @var boolean Decode input request args from UTF-8 (default false)
-	 */
-	var $bDecodeUTF8Input;
-	/**
-	 * @var boolean Convert special characters to HTML entities (default false)
-	 */
-	var $bOutputEntities;
-	/**
-	 * @var array Array for parsing complex objects
-	 */
-	var $aObjArray;
-	/**
-	 * @var integer Position in $aObjArray
-	 */
-	var $iPos;
-	
-	/**#@-*/
-	
-	/**
-	 * Constructor. You can set some extra xajax options right away or use
-	 * individual methods later to set options.
-	 * 
-	 * @param string  defaults to the current browser URI
-	 * @param string  defaults to "xajax_";
-	 * @param string  defaults to XAJAX_DEFAULT_CHAR_ENCODING defined above
-	 * @param boolean defaults to false
-	 */
-	function xajax($sRequestURI="",$sWrapperPrefix="xajax_",$sEncoding=XAJAX_DEFAULT_CHAR_ENCODING,$bDebug=false)
-	{
-		$this->aFunctions = array();
-		$this->aObjects = array();
-		$this->aFunctionIncludeFiles = array();
-		$this->sRequestURI = $sRequestURI;
-		if ($this->sRequestURI == "")
-			$this->sRequestURI = $this->_detectURI();
-		$this->sWrapperPrefix = $sWrapperPrefix;
-		$this->bDebug = $bDebug;
-		$this->bStatusMessages = false;
-		$this->bWaitCursor = true;
-		$this->bExitAllowed = true;
-		$this->bErrorHandler = false;
-		$this->sLogFile = "";
-		$this->bCleanBuffer = false;
-		$this->setCharEncoding($sEncoding);
-		$this->bDecodeUTF8Input = false;
-		$this->bOutputEntities = false;
-	}
-		
-	/**
-	 * Sets the URI to which requests will be made.
-	 * <i>Usage:</i> <kbd>$xajax->setRequestURI("http://www.xajaxproject.org");</kbd>
-	 * 
-	 * @param string the URI (can be absolute or relative) of the PHP script
-	 *               that will be accessed when an xajax request occurs
-	 */
-	function setRequestURI($sRequestURI)
-	{
-		$this->sRequestURI = $sRequestURI;
-	}
-
-	/**
-	 * Sets the prefix that will be appended to the Javascript wrapper
-	 * functions (default is "xajax_").
-	 * 
-	 * @param string
-	 */ 
-	// 
-	function setWrapperPrefix($sPrefix)
-	{
-		$this->sWrapperPrefix = $sPrefix;
-	}
-	
-	/**
-	 * Enables debug messages for xajax.
-	 * */
-	function debugOn()
-	{
-		$this->bDebug = true;
-	}
-	
-	/**
-	 * Disables debug messages for xajax (default behavior).
-	 */
-	function debugOff()
-	{
-		$this->bDebug = false;
-	}
-		
-	/**
-	 * Enables messages in the browser's status bar for xajax.
-	 */
-	function statusMessagesOn()
-	{
-		$this->bStatusMessages = true;
-	}
-	
-	/**
-	 * Disables messages in the browser's status bar for xajax (default behavior).
-	 */
-	function statusMessagesOff()
-	{
-		$this->bStatusMessages = false;
-	}
-	
-	/**
-	 * Enables the wait cursor to be displayed in the browser (default behavior).
-	 */
-	function waitCursorOn()
-	{
-		$this->bWaitCursor = true;
-	}
-	
-	/**
-	 * Disables the wait cursor to be displayed in the browser.
-	 */
-	function waitCursorOff()
-	{
-		$this->bWaitCursor = false;
-	}	
-	
-	/**
-	 * Enables xajax to exit immediately after processing a request and
-	 * sending the response back to the browser (default behavior).
-	 */
-	function exitAllowedOn()
-	{
-		$this->bExitAllowed = true;
-	}
-	
-	/**
-	 * Disables xajax's default behavior of exiting immediately after
-	 * processing a request and sending the response back to the browser.
-	 */
-	function exitAllowedOff()
-	{
-		$this->bExitAllowed = false;
-	}
-	
-	/**
-	 * Turns on xajax's error handling system so that PHP errors that occur
-	 * during a request are trapped and pushed to the browser in the form of
-	 * a Javascript alert.
-	 */
-	function errorHandlerOn()
-	{
-		$this->bErrorHandler = true;
-	}
-
-	/**
-	 * Turns off xajax's error handling system (default behavior).
-	 */
-	function errorHandlerOff()
-	{
-		$this->bErrorHandler = false;
-	}
-	
-	/**
-	 * Specifies a log file that will be written to by xajax during a request
-	 * (used only by the error handling system at present). If you don't invoke
-	 * this method, or you pass in "", then no log file will be written to.
-	 * <i>Usage:</i> <kbd>$xajax->setLogFile("/xajax_logs/errors.log");</kbd>
-	 */
-	function setLogFile($sFilename)
-	{
-		$this->sLogFile = $sFilename;
-	}
-
-	/**
-	 * Causes xajax to clean out all output buffers before outputting a
-	 * response (default behavior).
-	 */
-	function cleanBufferOn()
-	{
-		$this->bCleanBuffer = true;
-	}
-	/**
-	 * Turns off xajax's output buffer cleaning.
-	 */
-	function cleanBufferOff()
-	{
-		$this->bCleanBuffer = false;
-	}
-	
-	/**
-	 * Sets the character encoding for the HTTP output based on
-	 * <kbd>$sEncoding</kbd>, which is a string containing the character
-	 * encoding to use. You don't need to use this method normally, since the
-	 * character encoding for the response gets set automatically based on the
-	 * <kbd>XAJAX_DEFAULT_CHAR_ENCODING</kbd> constant.
-	 * <i>Usage:</i> <kbd>$xajax->setCharEncoding("utf-8");</kbd>
-	 *
-	 * @param string the encoding type to use (utf-8, iso-8859-1, etc.)
-	 */
-	function setCharEncoding($sEncoding)
-	{
-		$this->sEncoding = $sEncoding;
-	}
-
-	/**
-	 * Causes xajax to decode the input request args from UTF-8 to the current
-	 * encoding if possible. Either the iconv or mb_string extension must be
-	 * present for optimal functionality.
-	 */
-	function decodeUTF8InputOn()
-	{
-		$this->bDecodeUTF8Input = true;
-	}
-
-	/**
-	 * Turns off decoding the input request args from UTF-8 (default behavior).
-	 */
-	function decodeUTF8InputOff()
-	{
-		$this->bDecodeUTF8Input = false;
-	}
-	
-	/**
-	 * Tells the response object to convert special characters to HTML entities
-	 * automatically (only works if the mb_string extension is available).
-	 */
-	function outputEntitiesOn()
-	{
-		$this->bOutputEntities = true;
-	}
-	
-	/**
-	 * Tells the response object to output special characters intact. (default
-	 * behavior).
-	 */
-	function outputEntitiesOff()
-	{
-		$this->bOutputEntities = false;
-	}
-				
-	/**
-	 * Registers a PHP function or method to be callable through xajax in your
-	 * Javascript. If you want to register a function, pass in the name of that
-	 * function. If you want to register a static class method, pass in an
-	 * array like so:
-	 * <kbd>array("myFunctionName", "myClass", "myMethod")</kbd>
-	 * For an object instance method, use an object variable for the second
-	 * array element (and in PHP 4 make sure you put an & before the variable
-	 * to pass the object by reference). Note: the function name is what you
-	 * call via Javascript, so it can be anything as long as it doesn't
-	 * conflict with any other registered function name.
-	 * 
-	 * <i>Usage:</i> <kbd>$xajax->registerFunction("myFunction");</kbd>
-	 * or: <kbd>$xajax->registerFunction(array("myFunctionName", &$myObject, "myMethod"));</kbd>
-	 * 
-	 * @param mixed  contains the function name or an object callback array
-	 * @param mixed  request type (XAJAX_GET/XAJAX_POST) that should be used 
-	 *               for this function.  Defaults to XAJAX_POST.
-	 */
-	function registerFunction($mFunction,$sRequestType=XAJAX_POST)
-	{
-		if (is_array($mFunction)) {
-			$this->aFunctions[$mFunction[0]] = 1;
-			$this->aFunctionRequestTypes[$mFunction[0]] = $sRequestType;
-			$this->aObjects[$mFunction[0]] = array_slice($mFunction, 1);
-		}	
-		else {
-			$this->aFunctions[$mFunction] = 1;
-			$this->aFunctionRequestTypes[$mFunction] = $sRequestType;
-		}
-	}
-	
-	/**
-	 * Registers a PHP function to be callable through xajax which is located
-	 * in some other file.  If the function is requested the external file will
-	 * be included to define the function before the function is called.
-	 * 
-	 * <i>Usage:</i> <kbd>$xajax->registerExternalFunction("myFunction","myFunction.inc.php",XAJAX_POST);</kbd>
-	 * 
-	 * @param string contains the function name or an object callback array
-	 *               ({@link xajax::registerFunction() see registerFunction} for
-	 *               more info on object callback arrays)
-	 * @param string contains the path and filename of the include file
-	 * @param mixed  the RequestType (XAJAX_GET/XAJAX_POST) that should be used 
-	 *		          for this function. Defaults to XAJAX_POST.
-	 */
-	function registerExternalFunction($mFunction,$sIncludeFile,$sRequestType=XAJAX_POST)
-	{
-		$this->registerFunction($mFunction, $sRequestType);
-		
-		if (is_array($mFunction)) {
-			$this->aFunctionIncludeFiles[$mFunction[0]] = $sIncludeFile;
-		}
-		else {
-			$this->aFunctionIncludeFiles[$mFunction] = $sIncludeFile;
-		}
-	}
-	
-	/**
-	 * Registers a PHP function to be called when xajax cannot find the
-	 * function being called via Javascript. Because this is technically
-	 * impossible when using "wrapped" functions, the catch-all feature is
-	 * only useful when you're directly using the xajax.call() Javascript
-	 * method. Use the catch-all feature when you want more dynamic ability to
-	 * intercept unknown calls and handle them in a custom way.
-	 * 
-	 * <i>Usage:</i> <kbd>$xajax->registerCatchAllFunction("myCatchAllFunction");</kbd>
-	 * 
-	 * @param string contains the function name or an object callback array
-	 *               ({@link xajax::registerFunction() see registerFunction} for
-	 *               more info on object callback arrays)
-	 */
-	function registerCatchAllFunction($mFunction)
-	{
-		if (is_array($mFunction)) {
-			$this->sCatchAllFunction = $mFunction[0];
-			$this->aObjects[$mFunction[0]] = array_slice($mFunction, 1);
-		}
-		else {
-			$this->sCatchAllFunction = $mFunction;
-		}
-	}
-	
-	/**
-	 * Registers a PHP function to be called before xajax calls the requested
-	 * function. xajax will automatically add the request function's response
-	 * to the pre-function's response to create a single response. Another
-	 * feature is the ability to return not just a response, but an array with
-	 * the first element being false (a boolean) and the second being the
-	 * response. In this case, the pre-function's response will be returned to
-	 * the browser without xajax calling the requested function.
-	 * 
-	 * <i>Usage:</i> <kbd>$xajax->registerPreFunction("myPreFunction");</kbd>
-	 * 
-	 * @param string contains the function name or an object callback array
-	 *               ({@link xajax::registerFunction() see registerFunction} for
-	 *               more info on object callback arrays)
-	 */
-	function registerPreFunction($mFunction)
-	{
-		if (is_array($mFunction)) {
-			$this->sPreFunction = $mFunction[0];
-			$this->aObjects[$mFunction[0]] = array_slice($mFunction, 1);
-		}
-		else {
-			$this->sPreFunction = $mFunction;
-		}
-	}
-	
-	/**
-	 * Returns true if xajax can process the request, false if otherwise.
-	 * You can use this to determine if xajax needs to process the request or
-	 * not.
-	 * 
-	 * @return boolean
-	 */ 
-	function canProcessRequests()
-	{
-		if ($this->getRequestMode() != -1) return true;
-		return false;
-	}
-	
-	/**
-	 * Returns the current request mode (XAJAX_GET or XAJAX_POST), or -1 if
-	 * there is none.
-	 * 
-	 * @return mixed
-	 */
-	function getRequestMode()
-	{
-		if (!empty($_GET["xajax"]))
-			return XAJAX_GET;
-		
-		if (!empty($_POST["xajax"]))
-			return XAJAX_POST;
-			
-		return -1;
-	}
-	
-	/**
-	 * This is the main communications engine of xajax. The engine handles all
-	 * incoming xajax requests, calls the apporiate PHP functions (or
-	 * class/object methods) and passes the XML responses back to the
-	 * Javascript response handler. If your RequestURI is the same as your Web
-	 * page then this function should be called before any headers or HTML has
-	 * been sent.
-	 */
-	function processRequests()
-	{	
-		
-		$requestMode = -1;
-		$sFunctionName = "";
-		$bFoundFunction = true;
-		$bFunctionIsCatchAll = false;
-		$sFunctionNameForSpecial = "";
-		$aArgs = array();
-		$sPreResponse = "";
-		$bEndRequest = false;
-		$sResponse = "";
-		
-		$requestMode = $this->getRequestMode();
-		if ($requestMode == -1) return;
-	
-		if ($requestMode == XAJAX_POST)
-		{
-			$sFunctionName = $_POST["xajax"];
-			
-			if (!empty($_POST["xajaxargs"])) 
-				$aArgs = $_POST["xajaxargs"];
-		}
-		else
-		{	
-			header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
-			header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
-			header ("Cache-Control: no-cache, must-revalidate");
-			header ("Pragma: no-cache");
-			
-			$sFunctionName = $_GET["xajax"];
-			
-			if (!empty($_GET["xajaxargs"])) 
-				$aArgs = $_GET["xajaxargs"];
-		}
-		
-		// Use xajax error handler if necessary
-		if ($this->bErrorHandler) {
-			$GLOBALS['xajaxErrorHandlerText'] = "";
-			set_error_handler("xajaxErrorHandler");
-		}
-		
-		if ($this->sPreFunction) {
-			if (!$this->_isFunctionCallable($this->sPreFunction)) {
-				$bFoundFunction = false;
-				$objResponse = new xajaxResponse();
-				$objResponse->addAlert("Unknown Pre-Function ". $this->sPreFunction);
-				$sResponse = $objResponse->getXML();
-			}
-		}
-		//include any external dependencies associated with this function name
-		if (array_key_exists($sFunctionName,$this->aFunctionIncludeFiles))
-		{
-			ob_start();
-			include_once($this->aFunctionIncludeFiles[$sFunctionName]);
-			ob_end_clean();
-		}
-		
-		if ($bFoundFunction) {
-			$sFunctionNameForSpecial = $sFunctionName;
-			if (!array_key_exists($sFunctionName, $this->aFunctions))
-			{
-				if ($this->sCatchAllFunction) {
-					$sFunctionName = $this->sCatchAllFunction;
-					$bFunctionIsCatchAll = true;
-				}
-				else {
-					$bFoundFunction = false;
-					$objResponse = new xajaxResponse();
-					$objResponse->addAlert("Unknown Function $sFunctionName.");
-					$sResponse = $objResponse->getXML();
-				}
-			}
-			else if ($this->aFunctionRequestTypes[$sFunctionName] != $requestMode)
-			{
-				$bFoundFunction = false;
-				$objResponse = new xajaxResponse();
-				$objResponse->addAlert("Incorrect Request Type.");
-				$sResponse = $objResponse->getXML();
-			}
-		}
-		
-		if ($bFoundFunction)
-		{
-			for ($i = 0; $i < sizeof($aArgs); $i++)
-			{
-				// If magic quotes is on, then we need to strip the slashes from the args
-				if (get_magic_quotes_gpc() == 1 && is_string($aArgs[$i])) {
-				
-					$aArgs[$i] = stripslashes($aArgs[$i]);
-				}
-				if (stristr($aArgs[$i],"<xjxobj>") != false)
-				{
-					$aArgs[$i] = $this->_xmlToArray("xjxobj",$aArgs[$i]);	
-				}
-				else if (stristr($aArgs[$i],"<xjxquery>") != false)
-				{
-					$aArgs[$i] = $this->_xmlToArray("xjxquery",$aArgs[$i]);	
-				}
-				else if ($this->bDecodeUTF8Input)
-				{
-					$aArgs[$i] = $this->_decodeUTF8Data($aArgs[$i]);	
-				}
-			}
-
-			if ($this->sPreFunction) {
-				$mPreResponse = $this->_callFunction($this->sPreFunction, array($sFunctionNameForSpecial, $aArgs));
-				if (is_array($mPreResponse) && $mPreResponse[0] === false) {
-					$bEndRequest = true;
-					$sPreResponse = $mPreResponse[1];
-				}
-				else {
-					$sPreResponse = $mPreResponse;
-				}
-				if (is_a($sPreResponse, "xajaxResponse")) {
-					$sPreResponse = $sPreResponse->getXML();
-				}
-				if ($bEndRequest) $sResponse = $sPreResponse;
-			}
-			
-			if (!$bEndRequest) {
-				if (!$this->_isFunctionCallable($sFunctionName)) {
-					$objResponse = new xajaxResponse();
-					$objResponse->addAlert("The Registered Function $sFunctionName Could Not Be Found.");
-					$sResponse = $objResponse->getXML();
-				}
-				else {
-					if ($bFunctionIsCatchAll) {
-						$aArgs = array($sFunctionNameForSpecial, $aArgs);
-					}
-					$sResponse = $this->_callFunction($sFunctionName, $aArgs);
-				}
-				if (is_a($sResponse, "xajaxResponse")) {
-					$sResponse = $sResponse->getXML();
-				}
-				if (!is_string($sResponse) || strpos($sResponse, "<xjx>") === FALSE) {
-					$objResponse = new xajaxResponse();
-					$objResponse->addAlert("No XML Response Was Returned By Function $sFunctionName.");
-					$sResponse = $objResponse->getXML();
-				}
-				else if ($sPreResponse != "") {
-					$sNewResponse = new xajaxResponse($this->sEncoding, $this->bOutputEntities);
-					$sNewResponse->loadXML($sPreResponse);
-					$sNewResponse->loadXML($sResponse);
-					$sResponse = $sNewResponse->getXML();
-				}
-			}
-		}
-		
-		$sContentHeader = "Content-type: text/xml;";
-		if ($this->sEncoding && strlen(trim($this->sEncoding)) > 0)
-			$sContentHeader .= " charset=".$this->sEncoding;
-		header($sContentHeader);
-		if ($this->bErrorHandler && !empty( $GLOBALS['xajaxErrorHandlerText'] )) {
-			$sErrorResponse = new xajaxResponse();
-			$sErrorResponse->addAlert("** PHP Error Messages: **" . $GLOBALS['xajaxErrorHandlerText']);
-			if ($this->sLogFile) {
-				$fH = @fopen($this->sLogFile, "a");
-				if (!$fH) {
-					$sErrorResponse->addAlert("** Logging Error **\n\nxajax was unable to write to the error log file:\n" . $this->sLogFile);
-				}
-				else {
-					fwrite($fH, "** xajax Error Log - " . strftime("%b %e %Y %I:%M:%S %p") . " **" . $GLOBALS['xajaxErrorHandlerText'] . "\n\n\n");
-					fclose($fH);
-				}
-			}
-
-			$sErrorResponse->loadXML($sResponse);
-			$sResponse = $sErrorResponse->getXML();
-			
-		}
-		if ($this->bCleanBuffer) while (@ob_end_clean());
-		print $sResponse;
-		if ($this->bErrorHandler) restore_error_handler();
-		
-		if ($this->bExitAllowed)
-			exit();
-	}
-
-	/**			
-	 * Prints the xajax Javascript header and wrapper code into your page by
-	 * printing the output of the getJavascript() method. It should only be
-	 * called between the <pre><head> </head></pre> tags in your HTML page.
-	 * Remember, if you only want to obtain the result of this function, use
-	 * {@link xajax::getJavascript()} instead.
-	 * 
-	 * <i>Usage:</i>
-	 * <code>
-	 *  <head>
-	 *		...
-	 *		< ?php $xajax->printJavascript(); ? >
-	 * </code>
-	 * 
-	 * @param string the relative address of the folder where xajax has been
-	 *               installed. For instance, if your PHP file is
-	 *               "http://www.myserver.com/myfolder/mypage.php"
-	 *               and xajax was installed in
-	 *               "http://www.myserver.com/anotherfolder", then $sJsURI
-	 *               should be set to "../anotherfolder". Defaults to assuming
-	 *               xajax is in the same folder as your PHP file.
-	 * @param string the relative folder/file pair of the xajax Javascript
-	 *               engine located within the xajax installation folder.
-	 *               Defaults to xajax_js/xajax.js.
-	 */
-	function printJavascript($sJsURI="", $sJsFile=NULL)
-	{
-		print $this->getJavascript($sJsURI, $sJsFile);
-	}
-	
-	/**
-	 * Returns the xajax Javascript code that should be added to your HTML page
-	 * between the <kbd><head> </head></kbd> tags.
-	 * 
-	 * <i>Usage:</i>
-	 * <code>
-	 *  < ?php $xajaxJSHead = $xajax->getJavascript(); ? >
-	 *	<head>
-	 *		...
-	 *		< ?php echo $xajaxJSHead; ? >
-	 * </code>
-	 * 
-	 * @param string the relative address of the folder where xajax has been
-	 *               installed. For instance, if your PHP file is
-	 *               "http://www.myserver.com/myfolder/mypage.php"
-	 *               and xajax was installed in
-	 *               "http://www.myserver.com/anotherfolder", then $sJsURI
-	 *               should be set to "../anotherfolder". Defaults to assuming
-	 *               xajax is in the same folder as your PHP file.
-	 * @param string the relative folder/file pair of the xajax Javascript
-	 *               engine located within the xajax installation folder.
-	 *               Defaults to xajax_js/xajax.js.
-	 * @return string
-	 */
-	function getJavascript($sJsURI="", $sJsFile=NULL)
-	{	
-		$html = $this->getJavascriptConfig();
-		$html .= $this->getJavascriptInclude($sJsURI, $sJsFile);
-		
-		return $html;
-	}
-	
-	/**
-	 * Returns a string containing inline Javascript that sets up the xajax
-	 * runtime (typically called internally by xajax from get/printJavascript).
-	 * 
-	 * @return string
-	 */
-	function getJavascriptConfig()
-	{
-		$html  = "\t<script type=\"text/javascript\">\n";
-		$html .= "var xajaxRequestUri=\"".$this->sRequestURI."\";\n";
-		$html .= "var xajaxDebug=".($this->bDebug?"true":"false").";\n";
-		$html .= "var xajaxStatusMessages=".($this->bStatusMessages?"true":"false").";\n";
-		$html .= "var xajaxWaitCursor=".($this->bWaitCursor?"true":"false").";\n";
-		$html .= "var xajaxDefinedGet=".XAJAX_GET.";\n";
-		$html .= "var xajaxDefinedPost=".XAJAX_POST.";\n";
-		$html .= "var xajaxLoaded=false;\n";
-
-		foreach($this->aFunctions as $sFunction => $bExists) {
-			$html .= $this->_wrap($sFunction,$this->aFunctionRequestTypes[$sFunction]);
-		}
-
-		$html .= "\t</script>\n";
-		return $html;		
-	}
-	
-	/**
-	 * Returns a string containing a Javascript include of the xajax.js file
-	 * along with a check to see if the file loaded after six seconds
-	 * (typically called internally by xajax from get/printJavascript).
-	 * 
-	 * @param string the relative address of the folder where xajax has been
-	 *               installed. For instance, if your PHP file is
-	 *               "http://www.myserver.com/myfolder/mypage.php"
-	 *               and xajax was installed in
-	 *               "http://www.myserver.com/anotherfolder", then $sJsURI
-	 *               should be set to "../anotherfolder". Defaults to assuming
-	 *               xajax is in the same folder as your PHP file.
-	 * @param string the relative folder/file pair of the xajax Javascript
-	 *               engine located within the xajax installation folder.
-	 *               Defaults to xajax_js/xajax.js.
-	 * @return string
-	 */
-	function getJavascriptInclude($sJsURI="", $sJsFile=NULL)
-	{
-		if ($sJsFile == NULL) $sJsFile = "xajax_js/xajax.js";
-			
-		if ($sJsURI != "" && substr($sJsURI, -1) != "/") $sJsURI .= "/";
-		
-		$html = "\t<script type=\"text/javascript\" src=\"" . $sJsURI . $sJsFile . "\"></script>\n";	
-		$html .= "\t<script type=\"text/javascript\">\n";
-		$html .= "window.setTimeout(function () { if (!xajaxLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\\nURL: {$sJsURI}{$sJsFile}'); } }, 6000);\n";
-		$html .= "\t</script>\n";
-		return $html;
-	}
-
-	/**
-	 * This method can be used to create a new xajax.js file out of the
-	 * xajax_uncompressed.js file (which will only happen if xajax.js doesn't
-	 * already exist on the filesystem).
-	 * 
-	 * @param string an optional argument containing the full server file path
-	 *               of xajax.js.
-	 */
-	function autoCompressJavascript($sJsFullFilename=NULL)
-	{	
-		$sJsFile = "xajax_js/xajax.js";
-		
-		if ($sJsFullFilename) {
-			$realJsFile = $sJsFullFilename;
-		}
-		else {
-			$realPath = realpath(dirname(__FILE__));
-			$realJsFile = $realPath . "/". $sJsFile;
-		}
-
-		// Create a compressed file if necessary
-		if (!file_exists($realJsFile)) {
-			$srcFile = str_replace(".js", "_uncompressed.js", $realJsFile);
-			if (!file_exists($srcFile)) {
-				trigger_error("The xajax uncompressed Javascript file could not be found in the <b>" . dirname($realJsFile) . "</b> folder. Error ", E_USER_ERROR);	
-			}
-			require(dirname(__FILE__)."/xajaxCompress.php");
-			$javaScript = implode('', file($srcFile));
-			$compressedScript = xajaxCompressJavascript($javaScript);
-			$fH = @fopen($realJsFile, "w");
-			if (!$fH) {
-				trigger_error("The xajax compressed javascript file could not be written in the <b>" . dirname($realJsFile) . "</b> folder. Error ", E_USER_ERROR);
-			}
-			else {
-				fwrite($fH, $compressedScript);
-				fclose($fH);
-			}
-		}
-	}
-	
-	/**
-	 * Returns the current URL based upon the SERVER vars.
-	 * 
-	 * @access private
-	 * @return string
-	 */
-	function _detectURI() {
-		$aURL = array();
-
-		// Try to get the request URL
-		if (!empty($_SERVER['REQUEST_URI'])) {
-			$aURL = parse_url($_SERVER['REQUEST_URI']);
-		}
-
-		// Fill in the empty values
-		if (empty($aURL['scheme'])) {
-			if (!empty($_SERVER['HTTP_SCHEME'])) {
-				$aURL['scheme'] = $_SERVER['HTTP_SCHEME'];
-			} else {
-				$aURL['scheme'] = (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http';
-			}
-		}
-
-		if (empty($aURL['host'])) {
-			if (!empty($_SERVER['HTTP_HOST'])) {
-				if (strpos($_SERVER['HTTP_HOST'], ':') > 0) {
-					list($aURL['host'], $aURL['port']) = explode(':', $_SERVER['HTTP_HOST']);
-				} else {
-					$aURL['host'] = $_SERVER['HTTP_HOST'];
-				}
-			} else if (!empty($_SERVER['SERVER_NAME'])) {
-				$aURL['host'] = $_SERVER['SERVER_NAME'];
-			} else {
-				print "xajax Error: xajax failed to automatically identify your Request URI.";
-				print "Please set the Request URI explicitly when you instantiate the xajax object.";
-				exit();
-			}
-		}
-
-		if (empty($aURL['port']) && !empty($_SERVER['SERVER_PORT'])) {
-			$aURL['port'] = $_SERVER['SERVER_PORT'];
-		}
-
-		if (empty($aURL['path'])) {
-			if (!empty($_SERVER['PATH_INFO'])) {
-				$sPath = parse_url($_SERVER['PATH_INFO']);
-			} else {
-				$sPath = parse_url($_SERVER['PHP_SELF']);
-			}
-			$aURL['path'] = $sPath['path'];
-			unset($sPath);
-		}
-
-		if (!empty($aURL['query'])) {
-			$aURL['query'] = '?'.$aURL['query'];
-		}
-
-		// Build the URL: Start with scheme, user and pass
-		$sURL = $aURL['scheme'].'://';
-		if (!empty($aURL['user'])) {
-			$sURL.= $aURL['user'];
-			if (!empty($aURL['pass'])) {
-				$sURL.= ':'.$aURL['pass'];
-			}
-			$sURL.= '@';
-		}
-
-		// Add the host
-		$sURL.= $aURL['host'];
-
-		// Add the port if needed
-		if (!empty($aURL['port']) && (($aURL['scheme'] == 'http' && $aURL['port'] != 80) || ($aURL['scheme'] == 'https' && $aURL['port'] != 443))) {
-			$sURL.= ':'.$aURL['port'];
-		}
-
-		// Add the path and the query string
-		$sURL.= $aURL['path'].@$aURL['query'];
-
-		// Clean up
-		unset($aURL);
-		return $sURL;
-	}
-	
-	/**
-	 * Returns true if the function name is associated with an object callback,
-	 * false if not.
-	 * 
-	 * @param string the name of the function
-	 * @access private
-	 * @return boolean
-	 */
-	function _isObjectCallback($sFunction)
-	{
-		if (array_key_exists($sFunction, $this->aObjects)) return true;
-		return false;
-	}
-	
-	/**
-	 * Returns true if the function or object callback can be called, false if
-	 * not.
-	 * 
-	 * @param string the name of the function
-	 * @access private
-	 * @return boolean
-	 */
-	function _isFunctionCallable($sFunction)
-	{
-		if ($this->_isObjectCallback($sFunction)) {
-			if (is_object($this->aObjects[$sFunction][0])) {
-				return method_exists($this->aObjects[$sFunction][0], $this->aObjects[$sFunction][1]);
-			}
-			else {
-				return is_callable($this->aObjects[$sFunction]);
-			}
-		}
-		else {
-			return function_exists($sFunction);
-		}	
-	}
-	
-	/**
-	 * Calls the function, class method, or object method with the supplied
-	 * arguments.
-	 * 
-	 * @param string the name of the function
-	 * @param array  arguments to pass to the function
-	 * @access private
-	 * @return mixed the output of the called function or method
-	 */
-	function _callFunction($sFunction, $aArgs)
-	{
-		if ($this->_isObjectCallback($sFunction)) {
-			$mReturn = call_user_func_array($this->aObjects[$sFunction], $aArgs);
-		}
-		else {
-			$mReturn = call_user_func_array($sFunction, $aArgs);
-		}
-		return $mReturn;
-	}
-	
-	/**
-	 * Generates the Javascript wrapper for the specified PHP function.
-	 * 
-	 * @param string the name of the function
-	 * @param mixed  the request type
-	 * @access private
-	 * @return string
-	 */
-	function _wrap($sFunction,$sRequestType=XAJAX_POST)
-	{
-		$js = "function ".$this->sWrapperPrefix."$sFunction(){return xajax.call(\"$sFunction\", arguments, ".$sRequestType.");}\n";		
-		return $js;
-	}
-
-	/**
-	 * Takes a string containing xajax xjxobj XML or xjxquery XML and builds an
-	 * array representation of it to pass as an argument to the PHP function
-	 * being called.
-	 * 
-	 * @param string the root tag of the XML
-	 * @param string XML to convert
-	 * @access private
-	 * @return array
-	 */
-	function _xmlToArray($rootTag, $sXml)
-	{
-		$aArray = array();
-		$sXml = str_replace("<$rootTag>","<$rootTag>|~|",$sXml);
-		$sXml = str_replace("</$rootTag>","</$rootTag>|~|",$sXml);
-		$sXml = str_replace("<e>","<e>|~|",$sXml);
-		$sXml = str_replace("</e>","</e>|~|",$sXml);
-		$sXml = str_replace("<k>","<k>|~|",$sXml);
-		$sXml = str_replace("</k>","|~|</k>|~|",$sXml);
-		$sXml = str_replace("<v>","<v>|~|",$sXml);
-		$sXml = str_replace("</v>","|~|</v>|~|",$sXml);
-		$sXml = str_replace("<q>","<q>|~|",$sXml);
-		$sXml = str_replace("</q>","|~|</q>|~|",$sXml);
-		
-		$this->aObjArray = explode("|~|",$sXml);
-		
-		$this->iPos = 0;
-		$aArray = $this->_parseObjXml($rootTag);
-        
-		return $aArray;
-	}
-	
-	/**
-	 * A recursive function that generates an array from the contents of
-	 * $this->aObjArray.
-	 * 
-	 * @param string the root tag of the XML
-	 * @access private
-	 * @return array
-	 */
-	function _parseObjXml($rootTag)
-	{
-		$aArray = array();
-		
-		if ($rootTag == "xjxobj")
-		{
-			while(!stristr($this->aObjArray[$this->iPos],"</xjxobj>"))
-			{
-				$this->iPos++;
-				if(stristr($this->aObjArray[$this->iPos],"<e>"))
-				{
-					$key = "";
-					$value = null;
-						
-					$this->iPos++;
-					while(!stristr($this->aObjArray[$this->iPos],"</e>"))
-					{
-						if(stristr($this->aObjArray[$this->iPos],"<k>"))
-						{
-							$this->iPos++;
-							while(!stristr($this->aObjArray[$this->iPos],"</k>"))
-							{
-								$key .= $this->aObjArray[$this->iPos];
-								$this->iPos++;
-							}
-						}
-						if(stristr($this->aObjArray[$this->iPos],"<v>"))
-						{
-							$this->iPos++;
-							while(!stristr($this->aObjArray[$this->iPos],"</v>"))
-							{
-								if(stristr($this->aObjArray[$this->iPos],"<xjxobj>"))
-								{
-									$value = $this->_parseObjXml("xjxobj");
-									$this->iPos++;
-								}
-								else
-								{
-									$value .= $this->aObjArray[$this->iPos];
-									if ($this->bDecodeUTF8Input)
-									{
-										$value = $this->_decodeUTF8Data($value);
-									}
-								}
-								$this->iPos++;
-							}
-						}
-						$this->iPos++;
-					}
-					
-					$aArray[$key]=$value;
-				}
-			}
-		}
-		
-		if ($rootTag == "xjxquery")
-		{
-			$sQuery = "";
-			$this->iPos++;
-			while(!stristr($this->aObjArray[$this->iPos],"</xjxquery>"))
-			{
-				if (stristr($this->aObjArray[$this->iPos],"<q>") || stristr($this->aObjArray[$this->iPos],"</q>"))
-				{
-					$this->iPos++;
-					continue;
-				}
-				$sQuery	.= $this->aObjArray[$this->iPos];
-				$this->iPos++;
-			}
-			
-			parse_str($sQuery, $aArray);
-			if ($this->bDecodeUTF8Input)
-			{
-				foreach($aArray as $key => $value)
-				{
-					$aArray[$key] = $this->_decodeUTF8Data($value);
-				}
-			}
-			// If magic quotes is on, then we need to strip the slashes from the
-			// array values because of the parse_str pass which adds slashes
-			if (get_magic_quotes_gpc() == 1) {
-				$newArray = array();
-				foreach ($aArray as $sKey => $sValue) {
-					if (is_string($sValue))
-						$newArray[$sKey] = stripslashes($sValue);
-					else
-						$newArray[$sKey] = $sValue;
-				}
-				$aArray = $newArray;
-			}
-		}
-		
-		return $aArray;
-	}
-	
-	/**
-	 * Decodes string data from UTF-8 to the current xajax encoding.
-	 * 
-	 * @param string data to convert
-	 * @access private
-	 * @return string converted data
-	 */
-	function _decodeUTF8Data($sData)
-	{
-		$sValue = $sData;
-		if ($this->bDecodeUTF8Input)
-		{
-			$sFuncToUse = NULL;
-			
-			if (function_exists('iconv'))
-			{
-				$sFuncToUse = "iconv";
-			}
-			else if (function_exists('mb_convert_encoding'))
-			{
-				$sFuncToUse = "mb_convert_encoding";
-			}
-			else if ($this->sEncoding == "ISO-8859-1")
-			{
-				$sFuncToUse = "utf8_decode";
-			}
-			else
-			{
-				trigger_error("The incoming xajax data could not be converted from UTF-8", E_USER_NOTICE);
-			}
-			
-			if ($sFuncToUse)
-			{
-				if (is_string($sValue))
-				{
-					if ($sFuncToUse == "iconv")
-					{
-						$sValue = iconv("UTF-8", $this->sEncoding.'//TRANSLIT', $sValue);
-					}
-					else if ($sFuncToUse == "mb_convert_encoding")
-					{
-						$sValue = mb_convert_encoding($sValue, $this->sEncoding, "UTF-8");
-					}
-					else
-					{
-						$sValue = utf8_decode($sValue);
-					}
-				}
-			}
-		}
-		return $sValue;	
-	}
-		
-}// end class xajax 
-
-/**
- * This function is registered with PHP's set_error_handler() function if
- * the xajax error handling system is turned on.
- */
-function xajaxErrorHandler($errno, $errstr, $errfile, $errline)
-{
-	$errorReporting = error_reporting();
-	if (($errno & $errorReporting) == 0) return;
-	
-	if ($errno == E_NOTICE) {
-		$errTypeStr = "NOTICE";
-	}
-	else if ($errno == E_WARNING) {
-		$errTypeStr = "WARNING";
-	}
-	else if ($errno == E_USER_NOTICE) {
-		$errTypeStr = "USER NOTICE";
-	}
-	else if ($errno == E_USER_WARNING) {
-		$errTypeStr = "USER WARNING";
-	}
-	else if ($errno == E_USER_ERROR) {
-		$errTypeStr = "USER FATAL ERROR";
-	}
-	else if ($errno == E_STRICT) {
-		return;
-	}
-	else {
-		$errTypeStr = "UNKNOWN: $errno";
-	}
-	$GLOBALS['xajaxErrorHandlerText'] .= "\n----\n[$errTypeStr] $errstr\nerror in line $errline of file $errfile";
-}
-
-?>
\ No newline at end of file
diff --git a/libextinc/xajax/xajaxCompress.php b/libextinc/xajax/xajaxCompress.php
deleted file mode 100644
index 327a92dff..000000000
--- a/libextinc/xajax/xajaxCompress.php
+++ /dev/null
@@ -1,182 +0,0 @@
-<?php
-/**
- * xajaxCompress.php :: function to compress Javascript
- *
- * xajax version 0.2.4
- * copyright (c) 2005 by Jared White & J. Max Wilson
- * http://www.xajaxproject.org
- *
- * xajax is an open source PHP class library for easily creating powerful
- * PHP-driven, web-based Ajax Applications. Using xajax, you can asynchronously
- * call PHP functions and update the content of your your webpage without
- * reloading the page.
- *
- * xajax is released under the terms of the LGPL license
- * http://www.gnu.org/copyleft/lesser.html#SEC3
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * @package xajax
- * @version $Id$
- * @copyright Copyright (c) 2005-2006  by Jared White & J. Max Wilson
- * @license http://www.gnu.org/copyleft/lesser.html#SEC3 LGPL License
- */
-
-/**
- * Compresses the Javascript code for more efficient delivery.
- * (used internally)
- * 
- * @param string contains the Javascript code to compress
- */
-function xajaxCompressJavascript($sJS)
-{
-	//remove windows cariage returns
-	$sJS = str_replace("\r","",$sJS);
-	
-	//array to store replaced literal strings
-	$literal_strings = array();
-	
-	//explode the string into lines
-	$lines = explode("\n",$sJS);
-	//loop through all the lines, building a new string at the same time as removing literal strings
-	$clean = "";
-	$inComment = false;
-	$literal = "";
-	$inQuote = false;
-	$escaped = false;
-	$quoteChar = "";
-	
-	for($i=0;$i<count($lines);$i++)
-	{
-		$line = $lines[$i];
-		$inNormalComment = false;
-	
-		//loop through line's characters and take out any literal strings, replace them with ___i___ where i is the index of this string
-		for($j=0;$j<strlen($line);$j++)
-		{
-			$c = substr($line,$j,1);
-			$d = substr($line,$j,2);
-	
-			//look for start of quote
-			if(!$inQuote && !$inComment)
-			{
-				//is this character a quote or a comment
-				if(($c=="\"" || $c=="'") && !$inComment && !$inNormalComment)
-				{
-					$inQuote = true;
-					$inComment = false;
-					$escaped = false;
-					$quoteChar = $c;
-					$literal = $c;
-				}
-				else if($d=="/*" && !$inNormalComment)
-				{
-					$inQuote = false;
-					$inComment = true;
-					$escaped = false;
-					$quoteChar = $d;
-					$literal = $d;	
-					$j++;	
-				}
-				else if($d=="//") //ignore string markers that are found inside comments
-				{
-					$inNormalComment = true;
-					$clean .= $c;
-				}
-				else
-				{
-					$clean .= $c;
-				}
-			}
-			else //allready in a string so find end quote
-			{
-				if($c == $quoteChar && !$escaped && !$inComment)
-				{
-					$inQuote = false;
-					$literal .= $c;
-	
-					//subsitute in a marker for the string
-					$clean .= "___" . count($literal_strings) . "___";
-	
-					//push the string onto our array
-					array_push($literal_strings,$literal);
-	
-				}
-				else if($inComment && $d=="*/")
-				{
-					$inComment = false;
-					$literal .= $d;
-	
-					//subsitute in a marker for the string
-					$clean .= "___" . count($literal_strings) . "___";
-	
-					//push the string onto our array
-					array_push($literal_strings,$literal);
-	
-					$j++;
-				}
-				else if($c == "\\" && !$escaped)
-					$escaped = true;
-				else
-					$escaped = false;
-	
-				$literal .= $c;
-			}
-		}
-		if($inComment) $literal .= "\n";
-		$clean .= "\n";
-	}
-	//explode the clean string into lines again
-	$lines = explode("\n",$clean);
-	
-	//now process each line at a time
-	for($i=0;$i<count($lines);$i++)
-	{
-		$line = $lines[$i];
-	
-		//remove comments
-		$line = preg_replace("/\/\/(.*)/","",$line);
-	
-		//strip leading and trailing whitespace
-		$line = trim($line);
-	
-		//remove all whitespace with a single space
-		$line = preg_replace("/\s+/"," ",$line);
-	
-		//remove any whitespace that occurs after/before an operator
-		$line = preg_replace("/\s*([!\}\{;,&=\|\-\+\*\/\)\(:])\s*/","\\1",$line);
-	
-		$lines[$i] = $line;
-	}
-	
-	//implode the lines
-	$sJS = implode("\n",$lines);
-	
-	//make sure there is a max of 1 \n after each line
-	$sJS = preg_replace("/[\n]+/","\n",$sJS);
-	
-	//strip out line breaks that immediately follow a semi-colon
-	$sJS = preg_replace("/;\n/",";",$sJS);
-	
-	//curly brackets aren't on their own
-	$sJS = preg_replace("/[\n]*\{[\n]*/","{",$sJS);
-	
-	//finally loop through and replace all the literal strings:
-	for($i=0;$i<count($literal_strings);$i++)
-		$sJS = str_replace("___".$i."___",$literal_strings[$i],$sJS);
-	
-	return $sJS;
-}
-?>
\ No newline at end of file
diff --git a/libextinc/xajax/xajaxResponse.inc.php b/libextinc/xajax/xajaxResponse.inc.php
deleted file mode 100644
index 1c0aeb602..000000000
--- a/libextinc/xajax/xajaxResponse.inc.php
+++ /dev/null
@@ -1,580 +0,0 @@
-<?php
-/**
- * xajaxResponse.inc.php :: xajax XML response class
- *
- * xajax version 0.2.4
- * copyright (c) 2005 by Jared White & J. Max Wilson
- * http://www.xajaxproject.org
- *
- * xajax is an open source PHP class library for easily creating powerful
- * PHP-driven, web-based Ajax Applications. Using xajax, you can asynchronously
- * call PHP functions and update the content of your your webpage without
- * reloading the page.
- *
- * xajax is released under the terms of the LGPL license
- * http://www.gnu.org/copyleft/lesser.html#SEC3
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * @package xajax
- * @version $Id$
- * @copyright Copyright (c) 2005-2006  by Jared White & J. Max Wilson
- * @license http://www.gnu.org/copyleft/lesser.html#SEC3 LGPL License
- */
-
-/*
-   ----------------------------------------------------------------------------
-   | Online documentation for this class is available on the xajax wiki at:   |
-   | http://wiki.xajaxproject.org/Documentation:xajaxResponse.inc.php         |
-   ----------------------------------------------------------------------------
-*/
-
-/**
- * The xajaxResponse class is used to create responses to be sent back to your
- * Web page.  A response contains one or more command messages for updating
- * your page.
- * Currently xajax supports 21 kinds of command messages, including some common
- * ones such as:
- * <ul>
- * <li>Assign - sets the specified attribute of an element in your page</li>
- * <li>Append - appends data to the end of the specified attribute of an
- * element in your page</li>
- * <li>Prepend - prepends data to the beginning of the specified attribute of
- * an element in your page</li>
- * <li>Replace - searches for and replaces data in the specified attribute of
- * an element in your page</li>
- * <li>Script - runs the supplied JavaScript code</li>
- * <li>Alert - shows an alert box with the supplied message text</li>
- * </ul>
- *
- * <i>Note:</i> elements are identified by their HTML id, so if you don't see
- * your browser HTML display changing from the request, make sure you're using
- * the right id names in your response.
- * 
- * @package xajax
- */
-class xajaxResponse
-{
-	/**#@+
-	 * @access protected
-	 */
-	/**
-	 * @var string internal XML storage
-	 */	
-	var $xml;
-	/**
-	 * @var string the encoding type to use
-	 */
-	var $sEncoding;
-	/**
-	 * @var boolean if special characters in the XML should be converted to
-	 *              entities
-	 */
-	var $bOutputEntities;
-
-	/**#@-*/
-	
-	/**
-	 * The constructor's main job is to set the character encoding for the
-	 * response.
-	 * 
-	 * <i>Note:</i> to change the character encoding for all of the
-	 * responses, set the XAJAX_DEFAULT_ENCODING constant before you
-	 * instantiate xajax.
-	 * 
-	 * @param string  contains the character encoding string to use
-	 * @param boolean lets you set if you want special characters in the output
-	 *                converted to HTML entities
-	 * 
-	 */
-	function xajaxResponse($sEncoding=XAJAX_DEFAULT_CHAR_ENCODING, $bOutputEntities=false)
-	{
-		$this->setCharEncoding($sEncoding);
-		$this->bOutputEntities = $bOutputEntities;
-	}
-	
-	/**
-	 * Sets the character encoding for the response based on $sEncoding, which
-	 * is a string containing the character encoding to use. You don't need to
-	 * use this method normally, since the character encoding for the response
-	 * gets set automatically based on the XAJAX_DEFAULT_CHAR_ENCODING
-	 * constant.
-	 * 
-	 * @param string
-	 */
-	function setCharEncoding($sEncoding)
-	{
-		$this->sEncoding = $sEncoding;
-	}
-	
-	/**
-	 * Tells the response object to convert special characters to HTML entities
-	 * automatically (only works if the mb_string extension is available).
-	 */
-	function outputEntitiesOn()
-	{
-		$this->bOutputEntities = true;
-	}
-	
-	/**
-	 * Tells the response object to output special characters intact. (default
-	 * behavior)
-	 */
-	function outputEntitiesOff()
-	{
-		$this->bOutputEntities = false;
-	}
-
-	/**
-	 * Adds a confirm commands command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addConfirmCommands(1, "Do you want to preview the new data?");</kbd>
-	 *
-	 * @param integer the number of commands to skip if the user presses
-	 *                Cancel in the browsers's confirm dialog
-	 * @param string  the message to show in the browser's confirm dialog
-	 */
-	function addConfirmCommands($iCmdNumber, $sMessage)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"cc","t"=>$iCmdNumber),$sMessage);
-	}
-	
-	/**
-	 * Adds an assign command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addAssign("contentDiv", "innerHTML", "Some Text");</kbd>
-	 * 
-	 * @param string contains the id of an HTML element
-	 * @param string the part of the element you wish to modify ("innerHTML",
-	 *               "value", etc.)
-	 * @param string the data you want to set the attribute to
-	 */
-	function addAssign($sTarget,$sAttribute,$sData)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"as","t"=>$sTarget,"p"=>$sAttribute),$sData);
-	}
-
-	/**
-	 * Adds an append command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addAppend("contentDiv", "innerHTML", "Some New Text");</kbd>
-	 * 
-	 * @param string contains the id of an HTML element
-	 * @param string the part of the element you wish to modify ("innerHTML",
-	 *               "value", etc.)
-	 * @param string the data you want to append to the end of the attribute
-	 */
-	function addAppend($sTarget,$sAttribute,$sData)
-	{	
-		$this->xml .= $this->_cmdXML(array("n"=>"ap","t"=>$sTarget,"p"=>$sAttribute),$sData);
-	}
-
-	/**
-	 * Adds an prepend command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addPrepend("contentDiv", "innerHTML", "Some Starting Text");</kbd>
-	 * 
-	 * @param string contains the id of an HTML element
-	 * @param string the part of the element you wish to modify ("innerHTML",
-	 *               "value", etc.)
-	 * @param string the data you want to prepend to the beginning of the
-	 *               attribute
-	 */
-	function addPrepend($sTarget,$sAttribute,$sData)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"pp","t"=>$sTarget,"p"=>$sAttribute),$sData);
-	}
-
-	/**
-	 * Adds a replace command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addReplace("contentDiv", "innerHTML", "text", "<b>text</b>");</kbd>
-	 * 
-	 * @param string contains the id of an HTML element
-	 * @param string the part of the element you wish to modify ("innerHTML",
-	 *               "value", etc.)
-	 * @param string the string to search for
-	 * @param string the string to replace the search string when found in the
-	 *               attribute
-	 */
-	function addReplace($sTarget,$sAttribute,$sSearch,$sData)
-	{
-		$sDta = "<s><![CDATA[$sSearch]]></s><r><![CDATA[$sData]]></r>";
-		$this->xml .= $this->_cmdXML(array("n"=>"rp","t"=>$sTarget,"p"=>$sAttribute),$sDta);
-	}
-
-	/**
-	 * Adds a clear command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addClear("contentDiv", "innerHTML");</kbd>
-	 * 
-	 * @param string contains the id of an HTML element
-	 * @param string the part of the element you wish to clear ("innerHTML",
-	 *               "value", etc.)
-	 */	
-	function addClear($sTarget,$sAttribute)
-	{
-		$this->addAssign($sTarget,$sAttribute,'');
-	}
-	
-	/**
-	 * Adds an alert command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addAlert("This is important information");</kbd>
-	 * 
-	 * @param string the text to be displayed in the Javascript alert box
-	 */
-	function addAlert($sMsg)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"al"),$sMsg);
-	}
-
-	/**
-	 * Uses the addScript() method to add a Javascript redirect to another URL.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addRedirect("http://www.xajaxproject.org");</kbd>
-	 * 
-	 * @param string the URL to redirect the client browser to
-	 */	
-	function addRedirect($sURL)
-	{
-		//we need to parse the query part so that the values are rawurlencode()'ed
-		//can't just use parse_url() cos we could be dealing with a relative URL which
-		//  parse_url() can't deal with.
-		$queryStart = strpos($sURL, '?', strrpos($sURL, '/'));
-		if ($queryStart !== FALSE)
-		{
-			$queryStart++;
-			$queryEnd = strpos($sURL, '#', $queryStart);
-			if ($queryEnd === FALSE)
-				$queryEnd = strlen($sURL);
-			$queryPart = substr($sURL, $queryStart, $queryEnd-$queryStart);
-			parse_str($queryPart, $queryParts);
-			$newQueryPart = "";
-			foreach($queryParts as $key => $value)
-			{
-				$newQueryPart .= rawurlencode($key).'='.rawurlencode($value).ini_get('arg_separator.output');
-			}
-			$sURL = str_replace($queryPart, $newQueryPart, $sURL);
-		}
-		$this->addScript('window.location = "'.$sURL.'";');
-	}
-
-	/**
-	 * Adds a Javascript command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addScript("var x = prompt('get some text');");</kbd>
-	 * 
-	 * @param string contains Javascript code to be executed
-	 */
-	function addScript($sJS)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"js"),$sJS);
-	}
-
-	/**
-	 * Adds a Javascript function call command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addScriptCall("myJSFunction", "arg 1", "arg 2", 12345);</kbd>
-	 * 
-	 * @param string $sFunc the name of a Javascript function
-	 * @param mixed $args,... optional arguments to pass to the Javascript function
-	 */
-	function addScriptCall() {
-		$arguments = func_get_args();
-		$sFunc = array_shift($arguments);
-		$sData = $this->_buildObjXml($arguments);
-		$this->xml .= $this->_cmdXML(array("n"=>"jc","t"=>$sFunc),$sData);
-	}
-
-	/**
-	 * Adds a remove element command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addRemove("Div2");</kbd>
-	 * 
-	 * @param string contains the id of an HTML element to be removed
-	 */
-	function addRemove($sTarget)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"rm","t"=>$sTarget),'');
-	}
-
-	/**
-	 * Adds a create element command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addCreate("parentDiv", "h3", "myid");</kbd>
-	 * 
-	 * @param string contains the id of an HTML element to to which the new
-	 *               element will be appended.
-	 * @param string the tag to be added
-	 * @param string the id to be assigned to the new element
-	 * @param string deprecated, use the addCreateInput() method instead
-	 */
-	function addCreate($sParent, $sTag, $sId, $sType="")
-	{
-		if ($sType)
-		{
-			trigger_error("The \$sType parameter of addCreate has been deprecated.  Use the addCreateInput() method instead.", E_USER_WARNING);
-			return;
-		}
-		$this->xml .= $this->_cmdXML(array("n"=>"ce","t"=>$sParent,"p"=>$sId),$sTag);
-	}
-
-	/**
-	 * Adds a insert element command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addInsert("childDiv", "h3", "myid");</kbd>
-	 * 
-	 * @param string contains the id of the child before which the new element
-	 *               will be inserted
-	 * @param string the tag to be added
-	 * @param string the id to be assigned to the new element
-	 */
-	function addInsert($sBefore, $sTag, $sId)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"ie","t"=>$sBefore,"p"=>$sId),$sTag);
-	}
-
-	/**
-	 * Adds a insert element command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addInsertAfter("childDiv", "h3", "myid");</kbd>
-	 * 
-	 * @param string contains the id of the child after which the new element
-	 *               will be inserted
-	 * @param string the tag to be added
-	 * @param string the id to be assigned to the new element
-	 */
-	function addInsertAfter($sAfter, $sTag, $sId)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"ia","t"=>$sAfter,"p"=>$sId),$sTag);
-	}
-	
-	/**
-	 * Adds a create input command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addCreateInput("form1", "text", "username", "input1");</kbd>
-	 * 
-	 * @param string contains the id of an HTML element to which the new input
-	 *               will be appended
-	 * @param string the type of input to be created (text, radio, checkbox,
-	 *               etc.)
-	 * @param string the name to be assigned to the new input and the variable
-	 *               name when it is submitted
-	 * @param string the id to be assigned to the new input
-	 */
-	function addCreateInput($sParent, $sType, $sName, $sId)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"ci","t"=>$sParent,"p"=>$sId,"c"=>$sType),$sName);
-	}
-
-	/**
-	 * Adds an insert input command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addInsertInput("input5", "text", "username", "input1");</kbd>
-	 * 
-	 * @param string contains the id of the child before which the new element
-	 *               will be inserted
-	 * @param string the type of input to be created (text, radio, checkbox,
-	 *               etc.)
-	 * @param string the name to be assigned to the new input and the variable
-	 *               name when it is submitted
-	 * @param string the id to be assigned to the new input
-	 */
-	function addInsertInput($sBefore, $sType, $sName, $sId)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"ii","t"=>$sBefore,"p"=>$sId,"c"=>$sType),$sName);
-	}
-
-	/**
-	 * Adds an insert input command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addInsertInputAfter("input7", "text", "email", "input2");</kbd>
-	 * 
-	 * @param string contains the id of the child after which the new element
-	 *               will be inserted
-	 * @param string the type of input to be created (text, radio, checkbox,
-	 *               etc.)
-	 * @param string the name to be assigned to the new input and the variable
-	 *               name when it is submitted
-	 * @param string the id to be assigned to the new input
-	 */
-	function addInsertInputAfter($sAfter, $sType, $sName, $sId)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"iia","t"=>$sAfter,"p"=>$sId,"c"=>$sType),$sName);
-	}
-
-	/**
-	 * Adds an event command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addEvent("contentDiv", "onclick", "alert(\'Hello World\');");</kbd>
-	 * 
-	 * @param string contains the id of an HTML element
-	 * @param string the event you wish to set ("onclick", "onmouseover", etc.)
-	 * @param string the Javascript string you want the event to invoke
-	 */
-	function addEvent($sTarget,$sEvent,$sScript)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"ev","t"=>$sTarget,"p"=>$sEvent),$sScript);
-	}
-
-	/**
-	 * Adds a handler command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addHandler("contentDiv", "onclick", "content_click");</kbd>
-	 * 
-	 * @param string contains the id of an HTML element
-	 * @param string the event you wish to set ("onclick", "onmouseover", etc.)
-	 * @param string the name of a Javascript function that will handle the
-	 *               event. Multiple handlers can be added for the same event
-	 */
-	function addHandler($sTarget,$sEvent,$sHandler)
-	{	
-		$this->xml .= $this->_cmdXML(array("n"=>"ah","t"=>$sTarget,"p"=>$sEvent),$sHandler);
-	}
-
-	/**
-	 * Adds a remove handler command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addRemoveHandler("contentDiv", "onclick", "content_click");</kbd>
-	 * 
-	 * @param string contains the id of an HTML element
-	 * @param string the event you wish to remove ("onclick", "onmouseover",
-	 *               etc.)
-	 * @param string the name of a Javascript handler function that you want to
-	 *               remove
-	 */
-	function addRemoveHandler($sTarget,$sEvent,$sHandler)
-	{	
-		$this->xml .= $this->_cmdXML(array("n"=>"rh","t"=>$sTarget,"p"=>$sEvent),$sHandler);
-	}
-
-	/**
-	 * Adds an include script command message to the XML response.
-	 * 
-	 * <i>Usage:</i> <kbd>$objResponse->addIncludeScript("functions.js");</kbd>
-	 * 
-	 * @param string URL of the Javascript file to include
-	 */
-	function addIncludeScript($sFileName)
-	{
-		$this->xml .= $this->_cmdXML(array("n"=>"in"),$sFileName);
-	}
-
-	/**	
-	 * Returns the XML to be returned from your function to the xajax processor
-	 * on your page. Since xajax 0.2, you can also return an xajaxResponse
-	 * object from your function directly, and xajax will automatically request
-	 * the XML using this method call.
-	 * 
-	 * <i>Usage:</i> <kbd>return $objResponse->getXML();</kbd>
-	 * 
-	 * @return string response XML data
-	 */
-	function getXML()
-	{
-		$sXML = "<?xml version=\"1.0\"";
-		if ($this->sEncoding && strlen(trim($this->sEncoding)) > 0)
-			$sXML .= " encoding=\"".$this->sEncoding."\"";
-		$sXML .= " ?"."><xjx>" . $this->xml . "</xjx>";
-		
-		return $sXML;
-	}
-	
-	/**
-	 * Adds the commands of the provided response XML output to this response
-	 * object
-	 * 
-	 * <i>Usage:</i>
-	 * <code>$r1 = $objResponse1->getXML();
-	 * $objResponse2->loadXML($r1);
-	 * return $objResponse2->getXML();</code>
-	 * 
-	 * @param string the response XML (returned from a getXML() method) to add
-	 *               to the end of this response object
-	 */
-	function loadXML($mXML)
-	{
-		if (is_a($mXML, "xajaxResponse")) {
-			$mXML = $mXML->getXML();
-		}
-		$sNewXML = "";
-		$iStartPos = strpos($mXML, "<xjx>") + 5;
-		$sNewXML = substr($mXML, $iStartPos);
-		$iEndPos = strpos($sNewXML, "</xjx>");
-		$sNewXML = substr($sNewXML, 0, $iEndPos);
-		$this->xml .= $sNewXML;
-	}
-
-	/**
-	 * Generates XML from command data
-	 * 
-	 * @access private
-	 * @param array associative array of attributes
-	 * @param string data
-	 * @return string XML command
-	 */
-	function _cmdXML($aAttributes, $sData)
-	{
-		if ($this->bOutputEntities) {
-			if (function_exists('mb_convert_encoding')) {
-				$sData = call_user_func_array('mb_convert_encoding', array(&$sData, 'HTML-ENTITIES', $this->sEncoding));
-			}
-			else {
-				trigger_error("The xajax XML response output could not be converted to HTML entities because the mb_convert_encoding function is not available", E_USER_NOTICE);
-			}
-		}
-		$xml = "<cmd";
-		foreach($aAttributes as $sAttribute => $sValue)
-			$xml .= " $sAttribute=\"$sValue\"";
-		if ($sData !== null && !stristr($sData,'<![CDATA['))
-			$xml .= "><![CDATA[$sData]]></cmd>";
-		else if ($sData !== null)
-			$xml .= ">$sData</cmd>";
-		else
-			$xml .= "></cmd>";
-		
-		return $xml;
-	}
-
-	/**
-	 * Recursively serializes a data structure in XML so it can be sent to
-	 * the client. It could be thought of as the opposite of
-	 * {@link xajax::_parseObjXml()}.
-	 * 
-	 * @access private
-	 * @param mixed data structure to serialize to XML
-	 * @return string serialized XML
-	 */
-	function _buildObjXml($var) {
-		if (gettype($var) == "object") $var = get_object_vars($var);
-		if (!is_array($var)) {
-			return "<![CDATA[$var]]>";
-		}
-		else {
-			$data = "<xjxobj>";
-			foreach ($var as $key => $value) {
-				$data .= "<e>";
-				$data .= "<k>" . htmlspecialchars($key) . "</k>";
-				$data .= "<v>" . $this->_buildObjXml($value) . "</v>";
-				$data .= "</e>";
-			}
-			$data .= "</xjxobj>";
-			return $data;
-		}
-	}
-	
-}// end class xajaxResponse
-?>
diff --git a/www/saml2/idp/xajax_js/xajax.js b/www/saml2/idp/xajax_js/xajax.js
deleted file mode 100644
index 0dca8f520..000000000
--- a/www/saml2/idp/xajax_js/xajax.js
+++ /dev/null
@@ -1,172 +0,0 @@
-/* xajax Javascript library :: version 0.2.4 */
-Array.prototype.containsValue=function(valueToCheck){for(var i=0;i<this.length;i++){if(this[i]==valueToCheck)return true;}
-return false;}
-function Xajax(){this.DebugMessage=function(text){if(text.length > 1000)text=text.substr(0,1000)+"...\n[long response]\n...";try{if(this.debugWindow==undefined||this.debugWindow.closed==true){this.debugWindow=window.open('about:blank','xajax-debug','width=800,height=600,scrollbars=1,resizable,status');this.debugWindow.document.write('<html><head><title>Xajax debug output</title></head><body><h2>Xajax debug output</h2><div id="debugTag"></div></body></html>');}
-text=text.replace(/&/g,"&amp;")
-text=text.replace(/</g,"&lt;")
-text=text.replace(/>/g,"&gt;")
-debugTag=this.debugWindow.document.getElementById('debugTag');debugTag.innerHTML=('<b>'+(new Date()).toString()+'</b>: '+text+'<hr/>')+debugTag.innerHTML;}catch(e){alert("Xajax Debug:\n "+text);}
-};this.workId='xajaxWork'+new Date().getTime();this.depth=0;this.responseErrorsForAlert=["400","401","402","403","404","500","501","502","503"];this.getRequestObject=function(){if(xajaxDebug)this.DebugMessage("Initializing Request Object..");var req=null;if(typeof XMLHttpRequest!="undefined")
-req=new XMLHttpRequest();if(!req&&typeof ActiveXObject!="undefined"){try{req=new ActiveXObject("Msxml2.XMLHTTP");}
-catch(e){try{req=new ActiveXObject("Microsoft.XMLHTTP");}
-catch(e2){try{req=new ActiveXObject("Msxml2.XMLHTTP.4.0");}
-catch(e3){req=null;}
-}
-}
-}
-if(!req&&window.createRequest)
-req=window.createRequest();if(!req)this.DebugMessage("Request Object Instantiation failed.");return req;}
-this.$=function(sId){if(!sId){return null;}
-var returnObj=document.getElementById(sId);if(!returnObj&&document.all){returnObj=document.all[sId];}
-if(xajaxDebug&&!returnObj&&sId!=this.workId){this.DebugMessage("Element with the id \""+sId+"\" not found.");}
-return returnObj;}
-this.include=function(sFileName){var objHead=document.getElementsByTagName('head');var objScript=document.createElement('script');objScript.type='text/javascript';objScript.src=sFileName;objHead[0].appendChild(objScript);}
-this.stripOnPrefix=function(sEventName){sEventName=sEventName.toLowerCase();if(sEventName.indexOf('on')==0){sEventName=sEventName.replace(/on/,'');}
-return sEventName;}
-this.addOnPrefix=function(sEventName){sEventName=sEventName.toLowerCase();if(sEventName.indexOf('on')!=0){sEventName='on'+sEventName;}
-return sEventName;}
-this.addHandler=function(sElementId,sEvent,sFunctionName){if(window.addEventListener){sEvent=this.stripOnPrefix(sEvent);eval("this.$('"+sElementId+"').addEventListener('"+sEvent+"',"+sFunctionName+",false);");}
-else{sAltEvent=this.addOnPrefix(sEvent);eval("this.$('"+sElementId+"').attachEvent('"+sAltEvent+"',"+sFunctionName+",false);");}
-}
-this.removeHandler=function(sElementId,sEvent,sFunctionName){if(window.addEventListener){sEvent=this.stripOnPrefix(sEvent);eval("this.$('"+sElementId+"').removeEventListener('"+sEvent+"',"+sFunctionName+",false);");}
-else{sAltEvent=this.addOnPrefix(sEvent);eval("this.$('"+sElementId+"').detachEvent('"+sAltEvent+"',"+sFunctionName+",false);");}
-}
-this.create=function(sParentId,sTag,sId){var objParent=this.$(sParentId);objElement=document.createElement(sTag);objElement.setAttribute('id',sId);if(objParent)
-objParent.appendChild(objElement);}
-this.insert=function(sBeforeId,sTag,sId){var objSibling=this.$(sBeforeId);objElement=document.createElement(sTag);objElement.setAttribute('id',sId);objSibling.parentNode.insertBefore(objElement,objSibling);}
-this.insertAfter=function(sAfterId,sTag,sId){var objSibling=this.$(sAfterId);objElement=document.createElement(sTag);objElement.setAttribute('id',sId);objSibling.parentNode.insertBefore(objElement,objSibling.nextSibling);}
-this.getInput=function(sType,sName,sId){var Obj;if(!window.addEventListener){Obj=document.createElement('<input type="'+sType+'" id="'+sId+'" name="'+sName+'">');}
-else{Obj=document.createElement('input');Obj.setAttribute('type',sType);Obj.setAttribute('name',sName);Obj.setAttribute('id',sId);}
-return Obj;}
-this.createInput=function(sParentId,sType,sName,sId){var objParent=this.$(sParentId);var objElement=this.getInput(sType,sName,sId);if(objParent&&objElement)
-objParent.appendChild(objElement);}
-this.insertInput=function(sBeforeId,sType,sName,sId){var objSibling=this.$(sBeforeId);var objElement=this.getInput(sType,sName,sId);if(objElement&&objSibling&&objSibling.parentNode)
-objSibling.parentNode.insertBefore(objElement,objSibling);}
-this.insertInputAfter=function(sAfterId,sType,sName,sId){var objSibling=this.$(sAfterId);var objElement=this.getInput(sType,sName,sId);if(objElement&&objSibling&&objSibling.parentNode){objSibling.parentNode.insertBefore(objElement,objSibling.nextSibling);}
-}
-this.remove=function(sId){objElement=this.$(sId);if(objElement&&objElement.parentNode&&objElement.parentNode.removeChild){objElement.parentNode.removeChild(objElement);}
-}
-this.replace=function(sId,sAttribute,sSearch,sReplace){var bFunction=false;if(sAttribute=="innerHTML")
-sSearch=this.getBrowserHTML(sSearch);eval("var txt=this.$('"+sId+"')."+sAttribute);if(typeof txt=="function"){txt=txt.toString();bFunction=true;}
-if(txt.indexOf(sSearch)>-1){var newTxt='';while(txt.indexOf(sSearch)>-1){x=txt.indexOf(sSearch)+sSearch.length+1;newTxt+=txt.substr(0,x).replace(sSearch,sReplace);txt=txt.substr(x,txt.length-x);}
-newTxt+=txt;if(bFunction){eval('this.$("'+sId+'").'+sAttribute+'=newTxt;');}
-else if(this.willChange(sId,sAttribute,newTxt)){eval('this.$("'+sId+'").'+sAttribute+'=newTxt;');}
-}
-}
-this.getFormValues=function(frm){var objForm;var submitDisabledElements=false;if(arguments.length > 1&&arguments[1]==true)
-submitDisabledElements=true;var prefix="";if(arguments.length > 2)
-prefix=arguments[2];if(typeof(frm)=="string")
-objForm=this.$(frm);else
-objForm=frm;var sXml="<xjxquery><q>";if(objForm&&objForm.tagName=='FORM'){var formElements=objForm.elements;for(var i=0;i < formElements.length;i++){if(!formElements[i].name)
-continue;if(formElements[i].name.substring(0,prefix.length)!=prefix)
-continue;if(formElements[i].type&&(formElements[i].type=='radio'||formElements[i].type=='checkbox')&&formElements[i].checked==false)
-continue;if(formElements[i].disabled&&formElements[i].disabled==true&&submitDisabledElements==false)
-continue;var name=formElements[i].name;if(name){if(sXml!='<xjxquery><q>')
-sXml+='&';if(formElements[i].type=='select-multiple'){for(var j=0;j < formElements[i].length;j++){if(formElements[i].options[j].selected==true)
-sXml+=name+"="+encodeURIComponent(formElements[i].options[j].value)+"&";}
-}
-else{sXml+=name+"="+encodeURIComponent(formElements[i].value);}
-}
-}
-}
-sXml+="</q></xjxquery>";return sXml;}
-this.objectToXML=function(obj){var sXml="<xjxobj>";for(i in obj){try{if(i=='constructor')
-continue;if(obj[i]&&typeof(obj[i])=='function')
-continue;var key=i;var value=obj[i];if(value&&typeof(value)=="object"&&this.depth <=50){this.depth++;value=this.objectToXML(value);this.depth--;}
-sXml+="<e><k>"+key+"</k><v>"+value+"</v></e>";}
-catch(e){if(xajaxDebug)this.DebugMessage(e.name+": "+e.message);}
-}
-sXml+="</xjxobj>";return sXml;}
-this._nodeToObject=function(node){if(node.nodeName=='#cdata-section'){var data="";for(var j=0;j<node.parentNode.childNodes.length;j++){data+=node.parentNode.childNodes[j].data;}
-return data;}
-else if(node.nodeName=='xjxobj'){var data=new Array();for(var j=0;j<node.childNodes.length;j++){var child=node.childNodes[j];var key;var value;if(child.nodeName=='e'){for(var k=0;k<child.childNodes.length;k++){if(child.childNodes[k].nodeName=='k'){key=child.childNodes[k].firstChild.data;}
-else if(child.childNodes[k].nodeName=='v'){value=this._nodeToObject(child.childNodes[k].firstChild);}
-}
-if(key!=null&&value!=null){data[key]=value;key=value=null;}
-}
-}
-return data;}
-}
-this.loadingFunction=function(){};this.doneLoadingFunction=function(){};var loadingTimeout;this.call=function(sFunction,aArgs,sRequestType){var i,r,postData;if(document.body&&xajaxWaitCursor)
-document.body.style.cursor='wait';if(xajaxStatusMessages==true)window.status='Sending Request...';clearTimeout(loadingTimeout);loadingTimeout=setTimeout("xajax.loadingFunction();",400);if(xajaxDebug)this.DebugMessage("Starting xajax...");if(sRequestType==null){var xajaxRequestType=xajaxDefinedPost;}
-else{var xajaxRequestType=sRequestType;}
-var uri=xajaxRequestUri;var value;switch(xajaxRequestType){case xajaxDefinedGet:{var uriGet=uri.indexOf("?")==-1?"?xajax="+encodeURIComponent(sFunction):"&xajax="+encodeURIComponent(sFunction);if(aArgs){for(i=0;i<aArgs.length;i++){value=aArgs[i];if(typeof(value)=="object")
-value=this.objectToXML(value);uriGet+="&xajaxargs[]="+encodeURIComponent(value);}
-}
-uriGet+="&xajaxr="+new Date().getTime();uri+=uriGet;postData=null;}break;case xajaxDefinedPost:{postData="xajax="+encodeURIComponent(sFunction);postData+="&xajaxr="+new Date().getTime();if(aArgs){for(i=0;i <aArgs.length;i++){value=aArgs[i];if(typeof(value)=="object")
-value=this.objectToXML(value);postData=postData+"&xajaxargs[]="+encodeURIComponent(value);}
-}
-}break;default:
-alert("Illegal request type: "+xajaxRequestType);return false;break;}
-r=this.getRequestObject();if(!r)return false;r.open(xajaxRequestType==xajaxDefinedGet?"GET":"POST",uri,true);if(xajaxRequestType==xajaxDefinedPost){try{r.setRequestHeader("Method","POST "+uri+" HTTP/1.1");r.setRequestHeader("Content-Type","application/x-www-form-urlencoded");}
-catch(e){alert("Your browser does not appear to  support asynchronous requests using POST.");return false;}
-}
-r.onreadystatechange=function(){if(r.readyState!=4)
-return;if(r.status==200){if(xajaxDebug)xajax.DebugMessage("Received:\n"+r.responseText);if(r.responseXML&&r.responseXML.documentElement)
-xajax.processResponse(r.responseXML);else{var errorString="Error: the XML response that was returned from the server is invalid.";errorString+="\nReceived:\n"+r.responseText;trimmedResponseText=r.responseText.replace(/^\s+/g,"");trimmedResponseText=trimmedResponseText.replace(/\s+$/g,"");if(trimmedResponseText!=r.responseText)
-errorString+="\nYou have whitespace in your response.";alert(errorString);document.body.style.cursor='default';if(xajaxStatusMessages==true)window.status='Invalid XML response error';}
-}
-else{if(xajax.responseErrorsForAlert.containsValue(r.status)){var errorString="Error: the server returned the following HTTP status: "+r.status;errorString+="\nReceived:\n"+r.responseText;alert(errorString);}
-document.body.style.cursor='default';if(xajaxStatusMessages==true)window.status='Invalid XML response error';}
-delete r;r=null;}
-if(xajaxDebug)this.DebugMessage("Calling "+sFunction+" uri="+uri+" (post:"+postData+")");r.send(postData);if(xajaxStatusMessages==true)window.status='Waiting for data...';delete r;return true;}
-this.getBrowserHTML=function(html){tmpXajax=this.$(this.workId);if(!tmpXajax){tmpXajax=document.createElement("div");tmpXajax.setAttribute('id',this.workId);tmpXajax.style.display="none";tmpXajax.style.visibility="hidden";document.body.appendChild(tmpXajax);}
-tmpXajax.innerHTML=html;var browserHTML=tmpXajax.innerHTML;tmpXajax.innerHTML='';return browserHTML;}
-this.willChange=function(element,attribute,newData){if(!document.body){return true;}
-if(attribute=="innerHTML"){newData=this.getBrowserHTML(newData);}
-elementObject=this.$(element);if(elementObject){var oldData;eval("oldData=this.$('"+element+"')."+attribute);if(newData!==oldData)
-return true;}
-return false;}
-this.viewSource=function(){return "<html>"+document.getElementsByTagName("HTML")[0].innerHTML+"</html>";}
-this.processResponse=function(xml){clearTimeout(loadingTimeout);this.doneLoadingFunction();if(xajaxStatusMessages==true)window.status='Processing...';var tmpXajax=null;xml=xml.documentElement;if(xml==null)
-return;var skipCommands=0;for(var i=0;i<xml.childNodes.length;i++){if(skipCommands > 0){skipCommands--;continue;}
-if(xml.childNodes[i].nodeName=="cmd"){var cmd;var id;var property;var data;var search;var type;var before;var objElement=null;for(var j=0;j<xml.childNodes[i].attributes.length;j++){if(xml.childNodes[i].attributes[j].name=="n"){cmd=xml.childNodes[i].attributes[j].value;}
-else if(xml.childNodes[i].attributes[j].name=="t"){id=xml.childNodes[i].attributes[j].value;}
-else if(xml.childNodes[i].attributes[j].name=="p"){property=xml.childNodes[i].attributes[j].value;}
-else if(xml.childNodes[i].attributes[j].name=="c"){type=xml.childNodes[i].attributes[j].value;}
-}
-if(xml.childNodes[i].childNodes.length > 1&&xml.childNodes[i].firstChild.nodeName=="#cdata-section"){data="";for(var j=0;j<xml.childNodes[i].childNodes.length;j++){data+=xml.childNodes[i].childNodes[j].data;}
-}
-else if(xml.childNodes[i].firstChild&&xml.childNodes[i].firstChild.nodeName=='xjxobj'){data=this._nodeToObject(xml.childNodes[i].firstChild);objElement="XJX_SKIP";}
-else if(xml.childNodes[i].childNodes.length > 1){for(var j=0;j<xml.childNodes[i].childNodes.length;j++){if(xml.childNodes[i].childNodes[j].childNodes.length > 1&&xml.childNodes[i].childNodes[j].firstChild.nodeName=="#cdata-section"){var internalData="";for(var k=0;k<xml.childNodes[i].childNodes[j].childNodes.length;k++){internalData+=xml.childNodes[i].childNodes[j].childNodes[k].nodeValue;}
-}else{var internalData=xml.childNodes[i].childNodes[j].firstChild.nodeValue;}
-if(xml.childNodes[i].childNodes[j].nodeName=="s"){search=internalData;}
-if(xml.childNodes[i].childNodes[j].nodeName=="r"){data=internalData;}
-}
-}
-else if(xml.childNodes[i].firstChild)
-data=xml.childNodes[i].firstChild.nodeValue;else
-data="";if(objElement!="XJX_SKIP")objElement=this.$(id);var cmdFullname;try{if(cmd=="cc"){cmdFullname="addConfirmCommands";var confirmResult=confirm(data);if(!confirmResult){skipCommands=id;}
-}
-if(cmd=="al"){cmdFullname="addAlert";alert(data);}
-else if(cmd=="js"){cmdFullname="addScript/addRedirect";eval(data);}
-else if(cmd=="jc"){cmdFullname="addScriptCall";var scr=id+'(';if(data[0]!=null){scr+='data[0]';for(var l=1;l<data.length;l++){scr+=',data['+l+']';}
-}
-scr+=');';eval(scr);}
-else if(cmd=="in"){cmdFullname="addIncludeScript";this.include(data);}
-else if(cmd=="as"){cmdFullname="addAssign/addClear";if(this.willChange(id,property,data)){eval("objElement."+property+"=data;");}
-}
-else if(cmd=="ap"){cmdFullname="addAppend";eval("objElement."+property+"+=data;");}
-else if(cmd=="pp"){cmdFullname="addPrepend";eval("objElement."+property+"=data+objElement."+property);}
-else if(cmd=="rp"){cmdFullname="addReplace";this.replace(id,property,search,data)
-}
-else if(cmd=="rm"){cmdFullname="addRemove";this.remove(id);}
-else if(cmd=="ce"){cmdFullname="addCreate";this.create(id,data,property);}
-else if(cmd=="ie"){cmdFullname="addInsert";this.insert(id,data,property);}
-else if(cmd=="ia"){cmdFullname="addInsertAfter";this.insertAfter(id,data,property);}
-else if(cmd=="ci"){cmdFullname="addCreateInput";this.createInput(id,type,data,property);}
-else if(cmd=="ii"){cmdFullname="addInsertInput";this.insertInput(id,type,data,property);}
-else if(cmd=="iia"){cmdFullname="addInsertInputAfter";this.insertInputAfter(id,type,data,property);}
-else if(cmd=="ev"){cmdFullname="addEvent";property=this.addOnPrefix(property);eval("this.$('"+id+"')."+property+"= function(){"+data+";}");}
-else if(cmd=="ah"){cmdFullname="addHandler";this.addHandler(id,property,data);}
-else if(cmd=="rh"){cmdFullname="addRemoveHandler";this.removeHandler(id,property,data);}
-}
-catch(e){if(xajaxDebug)
-alert("While trying to '"+cmdFullname+"' (command number "+i+"), the following error occured:\n"
-+e.name+": "+e.message+"\n"
-+(id&&!objElement?"Object with id='"+id+"' wasn't found.\n":""));}
-delete objElement;delete cmd;delete cmdFullname;delete id;delete property;delete search;delete data;delete type;delete before;delete internalData;delete j;delete k;}
-}
-delete xml;delete i;document.body.style.cursor='default';if(xajaxStatusMessages==true)window.status='Done';}
-}
-var xajax=new Xajax();xajaxLoaded=true;
\ No newline at end of file
diff --git a/www/saml2/idp/xajax_js/xajax_uncompressed.js b/www/saml2/idp/xajax_js/xajax_uncompressed.js
deleted file mode 100644
index df51ccdeb..000000000
--- a/www/saml2/idp/xajax_js/xajax_uncompressed.js
+++ /dev/null
@@ -1,795 +0,0 @@
-/* xajax Javascript library :: version 0.2.4 */
-
-Array.prototype.containsValue = function(valueToCheck)
-{
-	for (var i=0;i<this.length;i++) {
-		if (this[i] == valueToCheck) return true;
-	}
-	return false;
-}
-
-function Xajax()
-{
-	this.DebugMessage = function(text)
-	{
-		if (text.length > 1000) text = text.substr(0,1000)+"...\n[long response]\n...";
-		try {
-			if (this.debugWindow == undefined || this.debugWindow.closed == true) {
-				this.debugWindow = window.open('about:blank', 'xajax-debug', 'width=800,height=600,scrollbars=1,resizable,status');
-				this.debugWindow.document.write('<html><head><title>Xajax debug output</title></head><body><h2>Xajax debug output</h2><div id="debugTag"></div></body></html>');
-			}
-			text = text.replace(/&/g, "&amp;")
-			text = text.replace(/</g, "&lt;")
-			text = text.replace(/>/g, "&gt;")
-			debugTag = this.debugWindow.document.getElementById('debugTag');
-			debugTag.innerHTML = ('<b>'+(new Date()).toString()+'</b>: ' + text + '<hr/>') + debugTag.innerHTML;
-		} catch (e) {
-			alert("Xajax Debug:\n " + text);
-		}
-	};
-	
-	this.workId = 'xajaxWork'+ new Date().getTime();
-	this.depth = 0;
-	this.responseErrorsForAlert = ["400","401","402","403","404","500","501","502","503"];
-	
-	//Get the XMLHttpRequest Object
-	this.getRequestObject = function()
-	{
-		if (xajaxDebug) this.DebugMessage("Initializing Request Object..");
-		var req = null;
-		if (typeof XMLHttpRequest != "undefined")
-			req = new XMLHttpRequest();
-		if (!req && typeof ActiveXObject != "undefined")
-		{
-			try
-			{
-				req=new ActiveXObject("Msxml2.XMLHTTP");
-			}
-			catch (e)
-			{
-				try
-				{
-					req=new ActiveXObject("Microsoft.XMLHTTP");
-				}
-				catch (e2)
-				{
-					try {
-						req=new ActiveXObject("Msxml2.XMLHTTP.4.0");
-					}
-					catch (e3)
-					{
-						req=null;
-					}
-				}
-			}
-		}
-		if(!req && window.createRequest)
-			req = window.createRequest();
-		
-		if (!req) this.DebugMessage("Request Object Instantiation failed.");
-			
-		return req;
-	}
-
-	// xajax.$() is shorthand for document.getElementById()
-	this.$ = function(sId)
-	{
-		if (!sId) {
-			return null;
-		}
-		var returnObj = document.getElementById(sId);
-		if (!returnObj && document.all) {
-			returnObj = document.all[sId];
-		}
-		if (xajaxDebug && !returnObj && sId != this.workId) {
-			this.DebugMessage("Element with the id \"" + sId + "\" not found.");
-		}
-		return returnObj;
-	}
-	
-	// xajax.include(sFileName) dynamically includes an external javascript file
-	this.include = function(sFileName)
-	{
-		var objHead = document.getElementsByTagName('head');
-		var objScript = document.createElement('script');
-		objScript.type = 'text/javascript';
-		objScript.src = sFileName;
-		objHead[0].appendChild(objScript);
-	}
-	
-	this.stripOnPrefix = function(sEventName)
-	{
-		sEventName = sEventName.toLowerCase();
-		if (sEventName.indexOf('on') == 0)
-		{
-			sEventName = sEventName.replace(/on/,'');
-		}
-		
-		return sEventName;
-	}
-	
-	this.addOnPrefix = function(sEventName)
-	{
-		sEventName = sEventName.toLowerCase();
-		if (sEventName.indexOf('on') != 0)
-		{
-			sEventName = 'on' + sEventName;
-		}
-		
-		return sEventName;
-	}
-	
-	// xajax.addHandler adds an event handler to an element
-	this.addHandler = function(sElementId, sEvent, sFunctionName)
-	{
-		if (window.addEventListener)
-		{
-			sEvent = this.stripOnPrefix(sEvent);
-			eval("this.$('"+sElementId+"').addEventListener('"+sEvent+"',"+sFunctionName+",false);");
-		}
-		else
-		{
-			sAltEvent = this.addOnPrefix(sEvent);
-			eval("this.$('"+sElementId+"').attachEvent('"+sAltEvent+"',"+sFunctionName+",false);");
-		}
-	}
-	
-	// xajax.removeHandler removes an event handler from an element
-	this.removeHandler = function(sElementId, sEvent, sFunctionName)
-	{
-		if (window.addEventListener)
-		{
-			sEvent = this.stripOnPrefix(sEvent);
-			eval("this.$('"+sElementId+"').removeEventListener('"+sEvent+"',"+sFunctionName+",false);");
-		}
-		else
-		{
-			sAltEvent = this.addOnPrefix(sEvent);
-			eval("this.$('"+sElementId+"').detachEvent('"+sAltEvent+"',"+sFunctionName+",false);");
-		}
-	}
-	
-	// xajax.create creates a new child node under a parent
-	this.create = function(sParentId, sTag, sId)
-	{
-		var objParent = this.$(sParentId);
-		objElement = document.createElement(sTag);
-		objElement.setAttribute('id',sId);
-		if (objParent)
-			objParent.appendChild(objElement);
-	}
-	
-	// xajax.insert inserts a new node before another node
-	this.insert = function(sBeforeId, sTag, sId)
-	{
-		var objSibling = this.$(sBeforeId);
-		objElement = document.createElement(sTag);
-		objElement.setAttribute('id',sId);
-		objSibling.parentNode.insertBefore(objElement, objSibling);
-	}
-
-	// xajax.insertAfter inserts a new node after another node
-	this.insertAfter = function(sAfterId, sTag, sId)
-	{
-		var objSibling = this.$(sAfterId);
-		objElement = document.createElement(sTag);
-		objElement.setAttribute('id',sId);
-		objSibling.parentNode.insertBefore(objElement, objSibling.nextSibling);
-	}
-	
-	this.getInput = function(sType, sName, sId)
-	{
-		var Obj;
-		if (!window.addEventListener)
-		{
-			Obj = document.createElement('<input type="'+sType+'" id="'+sId+'" name="'+sName+'">');
-		}
-		else
-		{
-			Obj = document.createElement('input');
-			Obj.setAttribute('type',sType);
-			Obj.setAttribute('name',sName);
-			Obj.setAttribute('id',sId);
-		}
-		return Obj;
-	}
-	
-	// xajax.createInput creates a new input node under a parent
-	this.createInput = function(sParentId, sType, sName, sId)
-	{
-		var objParent = this.$(sParentId);
-		var objElement = this.getInput(sType, sName, sId);
-		if (objParent && objElement)
-			objParent.appendChild(objElement);
-	}
-	
-	// xajax.insertInput creates a new input node before another node
-	this.insertInput = function(sBeforeId, sType, sName, sId)
-	{
-		var objSibling = this.$(sBeforeId);
-		var objElement = this.getInput(sType, sName, sId);
-		if (objElement && objSibling && objSibling.parentNode)
-			objSibling.parentNode.insertBefore(objElement, objSibling);
-	}
-
-	// xajax.insertInputAfter creates a new input node after another node
-	this.insertInputAfter = function(sAfterId, sType, sName, sId)
-	{
-		var objSibling = this.$(sAfterId);
-		var objElement = this.getInput(sType, sName, sId);
-		if (objElement && objSibling && objSibling.parentNode) {
-			objSibling.parentNode.insertBefore(objElement, objSibling.nextSibling);
-		}
-	}
-		
-	// xajax.remove deletes an element
-	this.remove = function(sId)
-	{
-		objElement = this.$(sId);
-		if (objElement && objElement.parentNode && objElement.parentNode.removeChild)
-		{
-			objElement.parentNode.removeChild(objElement);
-		}
-	}
-	
-	//xajax.replace searches for text in an attribute of an element and replaces it
-	//with a different text
-	this.replace = function(sId,sAttribute,sSearch,sReplace)
-	{
-		var bFunction = false;
-		
-		if (sAttribute == "innerHTML")
-			sSearch = this.getBrowserHTML(sSearch);
-		
-		eval("var txt=this.$('"+sId+"')."+sAttribute);
-		if (typeof txt == "function")
-        {
-            txt = txt.toString();
-            bFunction = true;
-        }
-		if (txt.indexOf(sSearch)>-1)
-		{
-			var newTxt = '';
-			while (txt.indexOf(sSearch) > -1)
-			{
-				x = txt.indexOf(sSearch)+sSearch.length+1;
-				newTxt += txt.substr(0,x).replace(sSearch,sReplace);
-				txt = txt.substr(x,txt.length-x);
-			}
-			newTxt += txt;
-			if (bFunction)
-			{
-				eval('this.$("'+sId+'").'+sAttribute+'=newTxt;');
-			}
-			else if (this.willChange(sId,sAttribute,newTxt))
-			{
-				eval('this.$("'+sId+'").'+sAttribute+'=newTxt;');
-			}
-		}
-	}
-	
-	// xajax.getFormValues() builds a query string XML message from the elements of a form object
-	// * The first argument is the id of the form
-	// * The second argument (optional) can be set to true if you want to submit disabled elements
-	// * The third argument (optional) allows you to specify a string prefix that a form element
-	//   name must contain if you want that element to be submitted
-	this.getFormValues = function(frm)
-	{
-		var objForm;
-		var submitDisabledElements = false;
-		if (arguments.length > 1 && arguments[1] == true)
-			submitDisabledElements = true;
-		var prefix="";
-		if(arguments.length > 2)
-			prefix = arguments[2];
-		
-		if (typeof(frm) == "string")
-			objForm = this.$(frm);
-		else
-			objForm = frm;
-		var sXml = "<xjxquery><q>";
-		if (objForm && objForm.tagName == 'FORM')
-		{
-			var formElements = objForm.elements;
-			for( var i=0; i < formElements.length; i++)
-			{
-				if (!formElements[i].name)
-					continue;
-				if (formElements[i].name.substring(0, prefix.length) != prefix)
-					continue;
-				if (formElements[i].type && (formElements[i].type == 'radio' || formElements[i].type == 'checkbox') && formElements[i].checked == false)
-					continue;
-				if (formElements[i].disabled && formElements[i].disabled == true && submitDisabledElements == false)
-					continue;
-				var name = formElements[i].name;
-				if (name)
-				{
-					if (sXml != '<xjxquery><q>')
-						sXml += '&';
-					if(formElements[i].type=='select-multiple')
-					{
-						for (var j = 0; j < formElements[i].length; j++)
-						{
-							if (formElements[i].options[j].selected == true)
-								sXml += name+"="+encodeURIComponent(formElements[i].options[j].value)+"&";
-						}
-					}
-					else
-					{
-						sXml += name+"="+encodeURIComponent(formElements[i].value);
-					}
-				} 
-			}
-		}
-		
-		sXml +="</q></xjxquery>";
-		
-		return sXml;
-	}
-	
-	// Generates an XML message that xajax can understand from a javascript object
-	this.objectToXML = function(obj)
-	{
-		var sXml = "<xjxobj>";
-		for (i in obj)
-		{
-			try
-			{
-				if (i == 'constructor')
-					continue;
-				if (obj[i] && typeof(obj[i]) == 'function')
-					continue;
-					
-				var key = i;
-				var value = obj[i];
-				if (value && typeof(value)=="object" && this.depth <= 50)
-				{
-					this.depth++;
-					value = this.objectToXML(value);
-					this.depth--;
-				}
-				
-				sXml += "<e><k>"+key+"</k><v>"+value+"</v></e>";
-				
-			}
-			catch(e)
-			{
-				if (xajaxDebug) this.DebugMessage(e.name+": "+e.message);
-			}
-		}
-		sXml += "</xjxobj>";
-	
-		return sXml;
-	}
-
-	// unserializes data structure from xajaxResponse::_buildObjXml()
-	this._nodeToObject = function(node) {
-		// parentNode here is weird, have to tune
-		if (node.nodeName == '#cdata-section') {
-			var data = "";
-			for (var j=0; j<node.parentNode.childNodes.length; j++) {
-				data += node.parentNode.childNodes[j].data;
-			}
-			return data;
-		}
-		else if (node.nodeName == 'xjxobj') {
-			var data = new Array();
-			for (var j=0; j<node.childNodes.length; j++) {
-				var child = node.childNodes[j];
-				var key;
-				var value;
-				if (child.nodeName == 'e') {
-					for (var k=0; k<child.childNodes.length; k++) {
-						if (child.childNodes[k].nodeName == 'k') {
-							key = child.childNodes[k].firstChild.data;
-						}
-						else if (child.childNodes[k].nodeName == 'v') {
-							value = this._nodeToObject(child.childNodes[k].firstChild);
-						}
-					}
-					if (key != null && value != null) {
-						data[key] = value;
-						key = value = null;
-					}
-				}
-			}
-			return data;
-		}		
-	}
-
-	this.loadingFunction = function(){};
-	this.doneLoadingFunction = function(){};
-	var loadingTimeout;
-
-	// Sends a XMLHttpRequest to call the specified PHP function on the server
-	// * sRequestType is optional -- defaults to POST
-	this.call = function(sFunction, aArgs, sRequestType)
-	{
-		var i,r,postData;
-		if (document.body && xajaxWaitCursor)
-			document.body.style.cursor = 'wait';
-		if (xajaxStatusMessages == true) window.status = 'Sending Request...';
-		clearTimeout(loadingTimeout);
-		loadingTimeout = setTimeout("xajax.loadingFunction();",400);
-		if (xajaxDebug) this.DebugMessage("Starting xajax...");
-		if (sRequestType == null) {
-		   var xajaxRequestType = xajaxDefinedPost;
-		}
-		else {
-			var xajaxRequestType = sRequestType;
-		}
-		var uri = xajaxRequestUri;
-		var value;
-		switch(xajaxRequestType)
-		{
-			case xajaxDefinedGet:{
-				var uriGet = uri.indexOf("?")==-1?"?xajax="+encodeURIComponent(sFunction):"&xajax="+encodeURIComponent(sFunction);
-				if (aArgs) {
-					for (i = 0; i<aArgs.length; i++)
-					{
-						value = aArgs[i];
-						if (typeof(value)=="object")
-							value = this.objectToXML(value);
-						uriGet += "&xajaxargs[]="+encodeURIComponent(value);
-					}
-				}
-				uriGet += "&xajaxr=" + new Date().getTime();
-				uri += uriGet;
-				postData = null;
-				} break;
-			case xajaxDefinedPost:{
-				postData = "xajax="+encodeURIComponent(sFunction);
-				postData += "&xajaxr="+new Date().getTime();
-				if (aArgs) {
-					for (i = 0; i <aArgs.length; i++)
-					{
-						value = aArgs[i];
-						if (typeof(value)=="object")
-							value = this.objectToXML(value);
-						postData = postData+"&xajaxargs[]="+encodeURIComponent(value);
-					}
-				}
-				} break;
-			default:
-				alert("Illegal request type: " + xajaxRequestType); return false; break;
-		}
-		r = this.getRequestObject();
-		if (!r) return false;
-		r.open(xajaxRequestType==xajaxDefinedGet?"GET":"POST", uri, true);
-		if (xajaxRequestType == xajaxDefinedPost)
-		{
-			try
-			{
-				r.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
-				r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
-			}
-			catch(e)
-			{
-				alert("Your browser does not appear to  support asynchronous requests using POST.");
-				return false;
-			}
-		}
-		r.onreadystatechange = function()
-		{
-			if (r.readyState != 4)
-				return;
-			
-			if (r.status==200)
-			{
-				if (xajaxDebug) xajax.DebugMessage("Received:\n" + r.responseText);
-				if (r.responseXML && r.responseXML.documentElement)
-					xajax.processResponse(r.responseXML);
-				else {
-					var errorString = "Error: the XML response that was returned from the server is invalid.";
-					errorString += "\nReceived:\n" + r.responseText;
-					trimmedResponseText = r.responseText.replace( /^\s+/g, "" );// strip leading space
-					trimmedResponseText = trimmedResponseText.replace( /\s+$/g, "" );// strip trailing
-					if (trimmedResponseText != r.responseText)
-						errorString += "\nYou have whitespace in your response.";
-					alert(errorString);
-					document.body.style.cursor = 'default';
-					if (xajaxStatusMessages == true) window.status = 'Invalid XML response error';				
-				}
-			}
-			else {
-				if (xajax.responseErrorsForAlert.containsValue(r.status)) {
-					var errorString = "Error: the server returned the following HTTP status: " + r.status;
-					errorString += "\nReceived:\n" + r.responseText;
-					alert(errorString);
-				}
-				document.body.style.cursor = 'default';
-				if (xajaxStatusMessages == true) window.status = 'Invalid XML response error';								
-			}
-			
-			delete r;
-			r = null;
-		}
-		if (xajaxDebug) this.DebugMessage("Calling "+sFunction +" uri="+uri+" (post:"+ postData +")");
-		r.send(postData);
-		if (xajaxStatusMessages == true) window.status = 'Waiting for data...';
-		delete r;
-		return true;
-	}
-	
-	//Gets the text as it would be if it were being retrieved from
-	//the innerHTML property in the current browser
-	this.getBrowserHTML = function(html)
-	{
-		tmpXajax = this.$(this.workId);
-		if (!tmpXajax)
-		{
-			tmpXajax = document.createElement("div");
-			tmpXajax.setAttribute('id',this.workId);
-			tmpXajax.style.display = "none";
-			tmpXajax.style.visibility = "hidden";
-			document.body.appendChild(tmpXajax);
-		}
-		tmpXajax.innerHTML = html;
-		var browserHTML = tmpXajax.innerHTML;
-		tmpXajax.innerHTML = '';	
-		
-		return browserHTML;
-	}
-	
-	// Tests if the new Data is the same as the extant data
-	this.willChange = function(element, attribute, newData)
-	{
-		if (!document.body)
-		{
-			return true;
-		}
-		if (attribute == "innerHTML")
-		{
-			newData = this.getBrowserHTML(newData);
-		}
-		elementObject = this.$(element);
-		if (elementObject) {
-			var oldData;		
-			eval("oldData=this.$('"+element+"')."+attribute);
-			if (newData !== oldData)
-				return true;
-		}
-
-		return false;
-	}
-	
-	//Returns the source code of the page after it's been modified by xajax
-	this.viewSource = function()
-	{
-		return "<html>"+document.getElementsByTagName("HTML")[0].innerHTML+"</html>";
-	}
-	
-	//Process XML xajaxResponses returned from the request
-	this.processResponse = function(xml)
-	{
-		clearTimeout(loadingTimeout);
-		this.doneLoadingFunction();
-		if (xajaxStatusMessages == true) window.status = 'Processing...';
-		var tmpXajax = null;
-		xml = xml.documentElement;
-		if (xml == null)
-			return;
-		
-		var skipCommands = 0;
-		for (var i=0; i<xml.childNodes.length; i++)
-		{
-			if (skipCommands > 0) {
-				skipCommands--;
-				continue;
-			}
-			if (xml.childNodes[i].nodeName == "cmd")
-			{
-				var cmd;
-				var id;
-				var property;
-				var data;
-				var search;
-				var type;
-				var before;
-				var objElement = null;
-
-				for (var j=0; j<xml.childNodes[i].attributes.length; j++)
-				{
-					if (xml.childNodes[i].attributes[j].name == "n")
-					{
-						cmd = xml.childNodes[i].attributes[j].value;
-					}
-					else if (xml.childNodes[i].attributes[j].name == "t")
-					{
-						id = xml.childNodes[i].attributes[j].value;
-					}
-					else if (xml.childNodes[i].attributes[j].name == "p")
-					{
-						property = xml.childNodes[i].attributes[j].value;
-					}
-					else if (xml.childNodes[i].attributes[j].name == "c")
-					{
-						type = xml.childNodes[i].attributes[j].value;
-					}
-				}
-				if (xml.childNodes[i].childNodes.length > 1 && xml.childNodes[i].firstChild.nodeName == "#cdata-section")
-				{
-					data = "";
-					for (var j=0; j<xml.childNodes[i].childNodes.length; j++)
-					{
-						data += xml.childNodes[i].childNodes[j].data;
-					}
-				}
-				else if (xml.childNodes[i].firstChild && xml.childNodes[i].firstChild.nodeName == 'xjxobj') {
-					data = this._nodeToObject(xml.childNodes[i].firstChild);
-					objElement = "XJX_SKIP";
-				}
-				else if (xml.childNodes[i].childNodes.length > 1)
-				{
-					for (var j=0; j<xml.childNodes[i].childNodes.length; j++)
-					{
-						if (xml.childNodes[i].childNodes[j].childNodes.length > 1 && xml.childNodes[i].childNodes[j].firstChild.nodeName == "#cdata-section")
-						{
-							var internalData = "";
-							for (var k=0; k<xml.childNodes[i].childNodes[j].childNodes.length;k++)
-							{
-								internalData+=xml.childNodes[i].childNodes[j].childNodes[k].nodeValue;
-							}
-						} else {
-							var internalData = xml.childNodes[i].childNodes[j].firstChild.nodeValue;
-						}
-					
-						if (xml.childNodes[i].childNodes[j].nodeName == "s")
-						{
-							search = internalData;
-						}
-						if (xml.childNodes[i].childNodes[j].nodeName == "r")
-						{
-							data = internalData;
-						}
-					}
-				}
-				else if (xml.childNodes[i].firstChild)
-					data = xml.childNodes[i].firstChild.nodeValue;
-				else
-					data = "";
-				
-				if (objElement != "XJX_SKIP") objElement = this.$(id);
-				var cmdFullname;
-				try
-				{
-					if (cmd=="cc") {
-						cmdFullname = "addConfirmCommands";
-						var confirmResult = confirm(data);
-						if (!confirmResult) {
-							skipCommands = id;
-						}
-					}
-					if (cmd=="al")
-					{
-						cmdFullname = "addAlert";
-						alert(data);
-					}
-					else if (cmd=="js")
-					{
-						cmdFullname = "addScript/addRedirect";
-						eval(data);
-					}
-					else if (cmd=="jc")
-					{
-						cmdFullname = "addScriptCall";
-						var scr = id + '(';
-						if (data[0] != null) {
-							scr += 'data[0]';
-							for (var l=1; l<data.length; l++) {
-								scr += ',data['+l+']';
-							}
-						}
-						scr += ');';
-						eval(scr);
-					}
-					else if (cmd=="in")
-					{
-						cmdFullname = "addIncludeScript";
-						this.include(data);
-					}
-					else if (cmd=="as")
-					{
-						cmdFullname = "addAssign/addClear";
-						if (this.willChange(id,property,data))
-						{
-							eval("objElement."+property+"=data;");
-						}
-					}
-					else if (cmd=="ap")
-					{
-						cmdFullname = "addAppend";
-						eval("objElement."+property+"+=data;");
-					}
-					else if (cmd=="pp")
-					{
-						cmdFullname = "addPrepend";
-						eval("objElement."+property+"=data+objElement."+property);
-					}
-					else if (cmd=="rp")
-					{
-						cmdFullname = "addReplace";
-						this.replace(id,property,search,data)
-					}
-					else if (cmd=="rm")
-					{
-						cmdFullname = "addRemove";
-						this.remove(id);
-					}
-					else if (cmd=="ce")
-					{
-						cmdFullname = "addCreate";
-						this.create(id,data,property);
-					}
-					else if (cmd=="ie")
-					{
-						cmdFullname = "addInsert";
-						this.insert(id,data,property);
-					}
-					else if (cmd=="ia")
-					{
-						cmdFullname = "addInsertAfter";
-						this.insertAfter(id,data,property);
-					}
-					else if (cmd=="ci")
-					{
-						cmdFullname = "addCreateInput";
-						this.createInput(id,type,data,property);
-					}
-					else if (cmd=="ii")
-					{
-						cmdFullname = "addInsertInput";
-						this.insertInput(id,type,data,property);
-					}
-					else if (cmd=="iia")
-					{
-						cmdFullname = "addInsertInputAfter";
-						this.insertInputAfter(id,type,data,property);
-					}
-					else if (cmd=="ev")
-					{
-						cmdFullname = "addEvent";
-						property = this.addOnPrefix(property);
-						eval("this.$('"+id+"')."+property+"= function(){"+data+";}");
-					}
-					else if (cmd=="ah")
-					{
-						cmdFullname = "addHandler";
-						this.addHandler(id, property, data);
-					}
-					else if (cmd=="rh")
-					{
-						cmdFullname = "addRemoveHandler";
-						this.removeHandler(id, property, data);
-					}
-				}
-				catch(e)
-				{
-					if (xajaxDebug)
-						alert("While trying to '"+cmdFullname+"' (command number "+i+"), the following error occured:\n"
-							+ e.name+": "+e.message+"\n"
-							+ (id&&!objElement?"Object with id='"+id+"' wasn't found.\n":""));
-				}
-				delete objElement;
-				delete cmd;
-				delete cmdFullname;
-				delete id;
-				delete property;
-				delete search;
-				delete data;
-				delete type;
-				delete before;
-				delete internalData;
-				delete j;
-				delete k;
-			}	
-		}
-		delete xml;
-		delete i;
-		document.body.style.cursor = 'default';
-		if (xajaxStatusMessages == true) window.status = 'Done';
-	}
-}
-
-var xajax = new Xajax();
-xajaxLoaded = true;
-- 
GitLab