/**
  * Throws an previously catched exception while maintaing the propriate stacktrace.
  * 
  * @param	\Exception	$e
  */
 protected function throwException(\Exception $e)
 {
     if ($this->inDebugMode) {
         throw $e;
     }
     if ($e instanceof InvalidSecurityTokenException) {
         throw new AJAXException(WCF::getLanguage()->get('wcf.ajax.error.sessionExpired'), AJAXException::SESSION_EXPIRED, $e->getTraceAsString());
     } else {
         if ($e instanceof PermissionDeniedException) {
             throw new AJAXException(WCF::getLanguage()->get('wcf.ajax.error.permissionDenied'), AJAXException::INSUFFICIENT_PERMISSIONS, $e->getTraceAsString());
         } else {
             if ($e instanceof SystemException) {
                 throw new AJAXException($e->getMessage(), AJAXException::INTERNAL_ERROR, $e->__getTraceAsString(), array(), $e->getExceptionID());
             } else {
                 if ($e instanceof IllegalLinkException) {
                     throw new AJAXException(WCF::getLanguage()->get('wcf.ajax.error.illegalLink'), AJAXException::ILLEGAL_LINK, $e->getTraceAsString());
                 } else {
                     if ($e instanceof UserInputException) {
                         // repackage as ValidationActionException
                         $exception = new ValidateActionException($e->getField(), $e->getType(), $e->getVariables());
                         throw new AJAXException($exception->getMessage(), AJAXException::BAD_PARAMETERS, $e->getTraceAsString(), array('errorMessage' => $exception->getMessage(), 'errorType' => $e->getType(), 'fieldName' => $exception->getFieldName()));
                     } else {
                         if ($e instanceof ValidateActionException) {
                             throw new AJAXException($e->getMessage(), AJAXException::BAD_PARAMETERS, $e->getTraceAsString(), array('errorMessage' => $e->getMessage(), 'fieldName' => $e->getFieldName()));
                         } else {
                             if ($e instanceof NamedUserException) {
                                 throw new AJAXException($e->getMessage(), AJAXException::BAD_PARAMETERS, $e->getTraceAsString());
                             } else {
                                 throw new AJAXException($e->getMessage(), AJAXException::INTERNAL_ERROR, $e->getTraceAsString(), array(), $e instanceof LoggedException ? $e->getExceptionID() : '');
                             }
                         }
                     }
                 }
             }
         }
     }
 }