<%@ page isErrorPage="true" %>
<%@ page import="at.gv.egiz.pdfas.web.helper.LocalRequestHelper" %>
<%@ page import="at.gv.egiz.pdfas.web.servlets.SignServlet" %>
<%@ page import="at.gv.egiz.pdfas.api.exceptions.PdfAsException"%>
<%@ page import="at.gv.egiz.pdfas.web.session.SignSessionInformation" %>
<%@ page import="at.gv.egiz.pdfas.web.session.VerifySessionInformation" %>
<%@ page import="at.gv.egiz.pdfas.web.session.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="org.apache.commons.lang.StringEscapeUtils" %>
<%@ page import="at.gv.egiz.pdfas.web.FormFields"%>
<%@ page import="java.io.*" %>

<%@ page import="at.gv.egiz.pdfas.web.i18n.LocaleParamFilter" %>
<%@ page import="java.util.Locale" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<%@ 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>
		<%
		
		String serverUrl=LocalRequestHelper.getLocalServerAddress(request,response);
		String baseUrl=LocalRequestHelper.getLocalContextAddress(request,response);
		
		//Check if application is started within an iframe from an extern application
		  boolean startedFromIFrame = false;
		  String extern = (String)session.getAttribute("extern");
		  if (extern!=null) {
			  if (extern.equals("yes")) {
				  startedFromIFrame = true;
			  }
		  }
		  //
		
		String language = (String)session.getAttribute(SessionAttributes.LANGUAGE);
		String height = (String)session.getAttribute(SignServlet.HEIGHT_SIGN_DIV);
		
		boolean german = true;
		  
		if (language!=null) {
			if (language.equals("de")) {%>
	  			<fmt:setLocale value="de"/>
			<% } else { 
				german = false; %>
				<fmt:setLocale value="en"/>
		<% } 
		}
		else { %>
			<fmt:setLocale value="de"/>
		<% } %>
		
		<title><fmt:message key="error.title"/></title>
		<base href="<%=LocalRequestHelper.getLocalContextAddress(request,response)%>/"/>
		
		 <%
		 //Check if error happened within IFrame (e.g. if Online-BKU was called)
		 String iframe = (String)session.getAttribute(SignServlet.ERROR_WITHIN_IFRAME);
		  
		 boolean withiniframe = false;
		 if (iframe!=null) {
			 if (iframe.equals("yes")) {
				 withiniframe = true;
			 }
		 }
		 %>
		
		<%
		//If not within IFrame and the whole application also was not started within an IFrame
		//we have to set the buergerkarte page as template
		if ((!withiniframe) && (!startedFromIFrame))  { 
			if (german) { %>
				<meta name="decorator" content="production_de" />
			<% } else { %>
			 	<meta name="decorator" content="production_en" />
			 <% } %>
		<% } %>
			<meta http-equiv="pragma" content="no-cache,no-store,private,must-revalidate,max-stale=0,post-check=0,pre-check=0"/>
			<meta http-equiv="expires" content="0"/>
			<meta http-equiv="cache-control" content="no-cache,no-store,must-revalidate,max-age=-1"/>
			<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT"/>
		
		
		<%
		//If the whole application started from an IFrame there could be an external stylesheet
		if (!startedFromIFrame) { %>
			<link rel="stylesheet" type="text/css" href="<%=baseUrl%>/css/pdfas-styles.css" />
			<link rel="stylesheet" href="<%=serverUrl%>style.css" type="text/css" />
		<% } else { %>
			<link rel="stylesheet" type="text/css" href="<%=baseUrl%>/css/extern-styles.css" />
		<% } %>
		
		<script language="javascript" type="text/javascript">
			//Detect if it is IE7 and if this is the case resize the div's
			function detectBrowser() {
				if ((navigator.appName.indexOf('Internet Explorer')!=-1) && (navigator.appVersion.indexOf('MSIE 7.0')!=-1)) {
					var stringHeight = "<%=height%>";
					var intHeight = stringHeight.substring(0,stringHeight.length-2);
					var iediff = 25;
					var height = parseInt(intHeight)+iediff;
					height = height + 'px';
					document.getElementById('sign').style.height = height;
					document.getElementById('errortext').style.height = height;
					document.getElementById('signintern').className='rechtsinhaltinternetexplorer';
					document.getElementById('errortextintern').className='linksinhaltinternetexplorer';
					document.getElementById('pdfasverticalspace').className='pdfasverticalspaceinternetexplorer';
				}
			}
			//Set the height of the div's equally as previous pages
			function setHeight() {
				document.getElementById('sign').style.height = "<%=height%>";
				document.getElementById('errortext').style.height = "<%=height%>";
			}
		</script>
		
	</head>

<%
		String redirect = null;
		PdfAsException pe=null;
		boolean paramInvok = false;
		boolean rb = false;
		boolean isExternalInvocation = false;
		String cause="";
		String error="";
		
		if (exception != null && exception instanceof PdfAsException)
	  {
		pe = (PdfAsException)exception;
	    SignServlet.prepareDispatchToErrorPage(pe, request);
	  } else {
		pe = (PdfAsException)request.getAttribute("PresentableException");
	  }

	  error = (String)request.getParameter("error");
	  if (error == null) {
		  error = (request.getAttribute("error") == null ? "" : request.getAttribute("error").toString());
	  } else {
	     paramInvok = true;
	  }
	  
	  cause = (String)request.getParameter("cause");
	  if (cause == null) {
		  cause = (request.getAttribute("cause") == null ? "" : request.getAttribute("cause").toString());
	  } else {
	     paramInvok = true;
	  }
	  
	  rb = Boolean.TRUE.equals((Boolean) request.getAttribute("resourcebundle"));
	  Object sessionInfo = session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
	  
	  
	  	  if (sessionInfo != null) {
			     if (sessionInfo instanceof SignSessionInformation) {
			        SignSessionInformation si = (SignSessionInformation) sessionInfo;
					  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 = null;
					       if(si.exappinf.invoke_error_url.contains("?")) {
					         errorUrl = si.exappinf.invoke_error_url + "&" + urlParams;
					       } else {
							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");
						response.sendRedirect(redirectHelper);
					  }
					}
			  }
	  
  
  	boolean testMode = request.getContextPath().startsWith("/test-");
	
		//If application not started within an iframe
		if (!startedFromIFrame) { %>
			<% 
			//If error didn't happen within IFrame (e.g. when local bku is called) the whole site has to be shown
			if (!withiniframe) {  %>
				<body style="background: #e6f2fa">
				<h1 id="heading1" style="display:block">
				<%
					if ((testMode) ) {
				%>
					<fmt:message key="test.common.title"/>
				<% } else { %>
					<fmt:message key="common.title"/>
				<% } // end if %>		   
				</h1>
				
					<div>
						<fmt:message key="error.description"/>
					</div>
					<div class="pdfasverticalspace" id="pdfasverticalspace"></div>
					<div id="inhalt">
						<div class="links" id="errortext">
							<div class="linksinhaltmargin" id="errortextintern">
								<div class="pdfasnote"><fmt:message key="error.cause"/>: <strong>
									<%= cause%>
								</strong></div>
								<div class="pdfasverticalspace"></div>
								<a id="backlink" href="<%=baseUrl%>/" target="_top"><fmt:message key="common.back"/></a>
							</div>
						</div>
						<div class="rechts" id="sign">
							<div class="rechtsinhalt" id="signintern">
								<div class="rechtslinks">
									<img src="<%=baseUrl%>/images/onlineBKU.png" alt="Chip-Karte" id="Karte" />
								</div>
								<div class="rechtsrechts">
									<img src="<%=baseUrl%>/images/mobileBKU.png" alt="Handy" id="Handy"/>
								</div>
								<div class="rechtslinks">
									<input type="submit" name="<%= FormFields.FIELD_CONNECTOR_SMARTCARD %>" value="<fmt:message key="signupload.signwithcard"/>" alt="Signatur mit Karte" disabled="disabled"/>
								</div>
								<div class="rechtsrechts">
									<input type="submit" name="<%= FormFields.FIELD_CONNECTOR_MOBILE %>" value="<fmt:message key="signupload.signwithmobile"/>" alt="Signatur mit Handy" disabled="disabled"/>
								</div>
							</div>
						</div>
					</div>
					<script language="javascript" type="text/javascript">
						//document.getElementById('sprachlinkneu').style.display = 'none';
						//document.getElementById('sprachlinkneudeaktiviert').style.display= 'block';
						setHeight();
						detectBrowser();
					</script>
				</body>
			<%} 
			//Just the error decription has to be shown
			else { %>
				<body style="background: #e6f2fa">
					<div class="pdfasnote"><fmt:message key="error.cause"/>: <strong>
						<% if (rb) { %>
							<fmt:message key="<%= cause %>"/>
						<% } else { out.write(StringEscapeUtils.escapeHtml(cause)); } %>
					</strong></div>
					<div class="pdfasverticalspace"></div>
					<% if (!isExternalInvocation && !paramInvok) { %>
						<a id="backlink" href="<%=baseUrl%>/" target="_top"><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(StringEscapeUtils.escapeHtml(sw.toString()));
					 }
					%>
					</pre>
					<script language="javascript" type="text/javascript">
						window.parent.moveErrorIFrame(document.getElementById('inhalt'),"<%=height%>");
					</script>
				</body>
			<% }
		} 
		//If application called from an IFrame the background is different
		else { %>
			<body>
			<h1 id="heading1" style="display:block">
			<%
				if (testMode) {
			%>
				<fmt:message key="test.common.title"/>
			<% } else { %>
				<fmt:message key="common.title"/>
			<% } // end if %>		   
			</h1>
				<div id="inhalt">
					<div class="links">
						<div class="linksinhaltmargin">
							<div class="pdfasnote"><fmt:message key="error.cause"/>: <strong>
								<%= cause%>
							</strong></div>
							<div class="pdfasverticalspace"></div>
							<a id="backlink" href="https://www.buergerkarte.at/pdf-as/" target="_self"><fmt:message key="common.back"/></a>
						</div>
					</div>
					<div class="rechts">
						<div class="rechtsinhalt">
							<div class="rechtslinks">
								<img src="https://www.buergerkarte.at/pdf-as/images/onlineBKU.png" alt="Chip-Karte" id="Karte"/>
							</div>
							<div class="rechtsrechts">
								<img src="https://www.buergerkarte.at/pdf-as/images/mobileBKU.png" alt="Handy" id="Handy"/>
							</div>
							<div class="rechtslinks">
								<input type="submit" name="<%= FormFields.FIELD_CONNECTOR_SMARTCARD %>" value="<fmt:message key="signupload.signwithcard"/>" alt="Signatur mit Karte" disabled="disabled"/>
							</div>
							<div class="rechtsrechts">
								<input type="submit" name="<%= FormFields.FIELD_CONNECTOR_MOBILE %>" value="<fmt:message key="signupload.signwithmobile"/>" alt="Signatur mit Handy" disabled="disabled"/>
							</div>
						</div>
					</div>
				</div>
			</body>	
		<% }
		
		%>
</html>