<%@ page isErrorPage="true" %>
<%@ page import="at.knowcenter.wag.egov.egiz.web.LocalRequestHelper" %>
<%@ page import="at.knowcenter.wag.egov.egiz.web.servlets.SignServlet" %>
<%@ page import="at.knowcenter.wag.egov.egiz.exceptions.*" %>
<%@ page import="at.gv.egiz.pdfas.web.SignSessionInformation" %>
<%@ page import="at.knowcenter.wag.egov.egiz.web.SessionAttributes" %>
<%@ page import="org.apache.commons.httpclient.util.EncodingUtil" %>
<%@ page import="org.apache.commons.httpclient.NameValuePair" %>
<%@ page import="at.gv.egiz.pdfas.web.helper.SignServletHelper" %>
<%@ page import="java.io.*" %>

<%@ include file="language.jsp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>

	<head>
		<title><fmt:message key="error.title"/></title>
		<base href="<%=LocalRequestHelper.getLocalContextAddress(request,response)%>/"/>
		<meta http-equiv="Cache-Control" content="no-cache"/>
		<meta http-equiv="Pragma"        content="no-cache"/>
		<meta http-equiv="Expires"       content="-1"/>
	</head>

<%
  PresentableException pe;
  if (exception != null && exception instanceof PresentableException)
  {
    pe = (PresentableException)exception;
    SignServlet.prepareDispatchToErrorPage(pe, request);
  } else {
    pe = (PresentableException)request.getAttribute("PresentableException");
  }

  String error = request.getParameter("error");
  boolean paramInvok = false;
  if (error == null) {
	  error = (request.getAttribute("error") == null ? "" : request.getAttribute("error").toString());
  } else {
     paramInvok = true;
  }
  String cause = request.getParameter("cause");
  if (cause == null) {
	  cause = (request.getAttribute("cause") == null ? "" : request.getAttribute("cause").toString());
  } else {
     paramInvok = true;
  }
  boolean rb = Boolean.TRUE.equals((Boolean) request.getAttribute("resourcebundle"));
  SignSessionInformation si = (SignSessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
  
  boolean isExternalInvocation = (si != null && si.exappinf != null);
  
  if (isExternalInvocation) {
		String urlParams = EncodingUtil.formUrlEncode(new NameValuePair[] { new NameValuePair("error", error), new NameValuePair("cause", cause) }, "ISO8859_1");
     if (si.exappinf.invoke_error_url == null) {
		 // prevent circular redirect
		 si.exappinf = null;
  	    String redirectUrl = response.encodeRedirectURL(request.getContextPath() + "/jsp/error.jsp" + "?" + urlParams);
		 session.setAttribute(SessionAttributes.PARENT_WEBAPP_REDIRECT_URL, redirectUrl);
     } else {
		String errorUrl = si.exappinf.invoke_error_url + "?" + urlParams;
	   session.setAttribute(SessionAttributes.PARENT_WEBAPP_REDIRECT_URL, errorUrl);
     }
   String redirectHelper = response.encodeRedirectURL(request.getContextPath() + "/jsp/redirect_to_parent.jsp");
   SignServletHelper.disableBrowserCacheForResponse(response);
   response.sendRedirect(redirectHelper);
  }
	
%>

	<body>
		<h1><fmt:message key="common.title"/></h1>
		<h2><fmt:message key="error.heading2"/></h2>
		<div class="pdfasnote">
			<% if (rb) { %>
				<fmt:message key="<%= error %>"/>
			<% } else { out.write(error); } %>
		</div>
		<div class="pdfasnote"><fmt:message key="error.cause"/>: <strong>
			<% if (rb) { %>
				<fmt:message key="<%= cause %>"/>
			<% } else { out.write(cause); } %>
		</strong></div>
		<% if (!isExternalInvocation && !paramInvok) { %>
			<div class="pdfasverticalspace"></div>
			<a href="<%=LocalRequestHelper.getLocalContextAddress(request,response)%>/"><fmt:message key="common.back"/></a>
		<% } // end if %>
		<pre style="display:none">
		<%
		  if (pe != null) {
		    StringWriter sw = new StringWriter();
		    PrintWriter pw = new PrintWriter(sw);
		    pe.printStackTrace(pw);
		    sw.close();
		    pw.close();
		    out.print(sw);
		  }
		%>
		</pre>
	</body>

</html>