<%@ page import="com.zimbra.common.mime.MimeCompoundHeader" %>
<%@ page import="com.zimbra.cs.httpclient.URLUtil" %>
<%@ page buffer="8kb" autoFlush="true" %>
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="zm" uri="com.zimbra.zm" %>
<%@ taglib prefix="mo" uri="com.zimbra.mobileclient" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="com.zimbra.i18n" %>
<%@ taglib prefix="app" uri="com.zimbra.htmlclient" %>
<c:set var="F_LIMIT" value="${not empty sessionScope.F_LIMIT ? sessionScope.F_LIMIT : 100}" scope="session"/>
<c:if test="${empty param.ajax}"><?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html>
<html manifest="mobile.manifest">

<c:if test="${(!empty param.debug || !empty param.dev)}"><c:set var="dbg" value="${true}"/></c:if>
<c:remove var="prevUrl" scope="session"/><c:remove var="currentUrl" scope="session"/></c:if>
<c:url var="baseURL" scope="request" value="${requestScope.baseURL!=null?requestScope.baseURL:'zipad'}"/>
<c:set var="context_url" value="${requestScope.baseURL}"/>
<c:if test="${param.loginOp=='logout'}"><c:remove var="mapp" scope="session"/><c:redirect url="/"><c:param name="loginOp" value="logout"/><c:param name="client" value="mobile"/></c:redirect></c:if>
<%--<c:if test="${not empty param.ajax}">--%>
    <c:url var="prevUrl" scope="session" value="${sessionScope.currentUrl}"/>
    <c:url var="currentUrl" scope="session" value="zipad">
        <c:forEach items="${param}" var="p"><c:param name="${p.key}" value="${p.value}"/></c:forEach>
    </c:url>
<%--</c:if>--%>
<c:if test="${not empty param.djs}"><c:set var="djs" value="${fn:escapeXml(param.djs)}" scope="session" /></c:if>
<c:set var="version" value="${initParam.zimbraCacheBusterVersion}"/>
<c:set var="uiv" value="1" scope="session"/>
<mo:handleError>
    <zm:getMailbox var="mailbox"/>
    <zm:getUserAgent var="ua" session="true"/>
    <c:choose>
        <c:when test="${not empty mailbox.prefs.locale}">
            <fmt:setLocale value='${mailbox.prefs.locale}' scope='request'/>
        </c:when>
        <c:otherwise>
            <fmt:setLocale value='${pageContext.request.locale}' scope='request'/>
        </c:otherwise>
    </c:choose>
    <fmt:setBundle basename="/messages/ZhMsg" scope="request"/>
    <mo:apptComposeCheck/>
    <mo:composeCheck/>
    <c:choose>
        <c:when test="${not empty param.doPrefsAction}">
            <zm:modifyPrefs var="updated">
                <zm:pref name="zimbraPrefTimeZoneId" value="${param.zimbraPrefTimeZoneId}"/>
                <c:if test="${mailbox.features.conversations}">
                    <zm:pref name="zimbraPrefGroupMailBy" value="${param.zimbraPrefGroupMailBy}"/>
                </c:if>
                <c:if test="${mailbox.features.initialSearchPreference}">
                    <zm:pref name="zimbraPrefMailInitialSearch" value="${param.zimbraPrefMailInitialSearch}"/>
                </c:if>
                <zm:pref name="zimbraPrefAutoAddAddressEnabled" value="${param.zimbraPrefAutoAddAddressEnabled eq 'TRUE' ? 'TRUE' : 'FALSE'}"/>
                <zm:pref name="zimbraPrefContactsPerPage" value="${param.zimbraPrefContactsPerPage}"/>
                <zm:pref name="zimbraPrefMailItemsPerPage" value="${param.zimbraPrefMailItemsPerPage}"/>
                <zm:pref name="zimbraPrefCalendarFirstdayOfWeek" value="${param.zimbraPrefCalendarFirstdayOfWeek}"/>
                <zm:pref name="zimbraPrefUseTimeZoneListInCalendar" value="${param.zimbraPrefUseTimeZoneListInCalendar eq 'TRUE' ? 'TRUE' : 'FALSE'}"/>
            </zm:modifyPrefs>
            <c:if test="${ua.isiPad == false}">
            <c:set var="flimit" value="${zm:cook(param.F_LIMIT)}"/>
            <c:choose>
                <c:when test="${flimit gt 0 and flimit le 1000}">
                    <c:set var="F_LIMIT" scope="session" value="${flimit}"/>
                </c:when>
                <c:otherwise>
                    <c:redirect url="zmview?st=prefs&emsg=MO_MaxFoldersInvalidValueMsg"/>
                </c:otherwise>
            </c:choose>
            </c:if>
            <c:if test="${updated}">
                <zm:getMailbox var="mailbox" refreshaccount="${true}"/>
                <c:set var="limit" value="${mailbox.prefs.mailItemsPerPage}" scope="session"/>
                <zm:clearSearchCache />
                <app:status><fmt:message key="optionsSaved"/></app:status>
            </c:if>                    
        </c:when>
        <c:when test="${not empty param.doMessageAction}">
            <mo:messageAction/>
        </c:when>
        <c:when test="${not empty param.doBriefcaseAction}">
            <mo:briefcaseAction/>
        </c:when>
        <c:when test="${not empty param.doTaskAction}">
            <mo:taskAction/>
        </c:when>
        <c:when test="${not empty param.doContactAction}">
            <mo:contactAction/>
        </c:when>
        <c:when test="${not empty param.doFolderAction}">
            <mo:folderAction/>
        </c:when>
    </c:choose>
    <c:set var="action" value="${zm:cook(empty param.paction ? param.action : param.paction)}" scope="request"/>
</mo:handleError>
<c:if test="${empty sessionScope.zms}">
    <c:set value="${ua.isiPhone || ua.isiPod ? 'iphone' : (ua.isiPad ? 'ipad' : ( ua.isIE ? 'wm6' : 'ipad'))}" var="zms" scope="session"/>
</c:if>
<%-- just to make sure we are using ipad TODO: to set it differently--%>
<c:set var="zms" value="${'ipad'}" scope="session"/>
<c:if test="${not empty param.zms}">
    <c:set value="${fn:escapeXml(param.zms)}" var="zms" scope="session"/>
</c:if>
<c:if test="${sessionScope.limit == null}">
    <c:set var="limit" value="${sessionScope.zms eq 'xlite' ? '5' : mailbox.prefs.mailItemsPerPage}" scope="session"/>
</c:if>
<c:if test="${(sessionScope.limit != param.limit && param.limit != null && param.limit != '')  }">
    <c:set var="limit" value="${zm:cook(param.limit)}" scope="session"/>
</c:if>
<c:set var="aurl" value="${context_url}"/>
<%-- Access keys --%>
<c:set var="mailapp_accesskey" value="1" scope="request"/>
<c:set var="contactapp_accesskey" value="2" scope="request"/>
<c:set var="calapp_accesskey" value="3" scope="request"/>
<c:set var="fldrapp_accesskey" value="4" scope="request"/>
<c:set var="search_accesskey" value="5" scope="request"/>
<c:set var="navlink_accesskey" value="6" scope="request"/>
<c:set var="prev_accesskey" value="7" scope="request"/>
<c:set var="next_accesskey" value="8" scope="request"/>
<c:set var="mainaction_accesskey" value="0" scope="request"/>
<c:if test="${empty param.ajax}"><head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<title><fmt:message key="zimbraTitle"/></title>
<meta content="initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, width=device-width" name="viewport">
<script type="text/javascript">window.onerror=function(m,u,l){if(window.console){window.console.log("An error occured in: "+u+"\n{\n\tmsg: "+m+",\n\tline: "+l+"\n}");}return false;};</script>
<c:if test="${empty djs or not djs}"><script type="text/javascript">window.currentUrl='<c:url value="${currentUrl}"><c:param name="ajax" value="true"/></c:url>';<c:import url="/m/mojs${dbg ? '?dev=1':''}"/></script></c:if>
<link href="<c:url value='/css/ipad,images.css'/>" type="text/css" rel="stylesheet"/>
</head>

<body>
    <div class="veil" style="display:none;" id="veil"></div>

    <div class="wrapper" style="display:none;" id="compose-pop">
        <div class="composeBox" id="compose-body">
            &nbsp;
        </div>
    </div>
    
	<div class="toolbar footer">
       <!--
       <div class="listViewPane" style="background-color:transparent;">		
			<div class="quota">

                <c:set var="userQuota" value="0"/>
                <c:set var="max" value="${mailbox.attrs.zimbraMailQuota[0]}"/>
                <c:if test="${max != 0}">
                    <c:set var="userQuota" value="${(mailbox.size*100)/max}"/>
                </c:if>
                <c:catch>
                    <fmt:message var="unlimited" key="unlimited"/>
                    <fmt:message key="quotaUsage" var="quotaUsage">
                        <fmt:param value="${zm:displaySizeFractions(pageContext, mailbox.size,2)}"/>
                        <fmt:param value="${max==0 ? unlimited : zm:displaySizeFractions(pageContext, max,2)}"/>
                    </fmt:message>
                </c:catch>
                
                <div class="shell">
                     <div class="bar" style="width:${userQuota}%"></div>
                </div><span>${quotaUsage}</span>
			</div>
		</div>		
		 	
        <div class="contentViewPane">
        <div class="userInfo alignLeft">
				${fn:escapeXml(empty mailbox.defaultIdentity.fromDisplay ? mailbox.name : mailbox.defaultIdentity.fromDisplay)}
			</div>
        	<div class ="alignLeft copyrights">
       		 	&copy; 2010 <a href="#">Zimbra</a>. All rights reserved.
        	</div>
        	-->
        	
       <div class="button alignLeft" style="width: 20px; margin: 5px 0 0 10px; height: 14px; padding: 4px;"><app:img src="zimbra/ImgRefresh.png" border="0"/></div>
        	<a href="www.zimbra.com" target="_new" class="alignLeft"><div class="logo"></div></a>
        	<div class ="alignRight buttonBottom">
        		<c:url var="logoutUrl" value="${context_url}"><c:param name="loginOp" value="logout"/><c:param name="client" value="mobile"/></c:url>
       		 	<a href="${logoutUrl}" id="_logout" noajax='true'><fmt:message key="logOut"/></a>
        	</div>
        
        
    </div>
       
    
	<div class="topbar" style="display:none;">

		<a href="www.zimbra.com" target="_new"><div class="logo"></div></a>

		
				<ul class="ul alignLeft">
					<li class="sel"><a id="mail" href="${aurl}?st=${mailbox.prefs.groupMailBy}"><span onclick="return zClickLink('mail')"><fmt:message key="mail"/></span></a></li>
					<li><a id="contact" href="${aurl}?st=contact"><span onclick="return zClickLink('contact')"><fmt:message key="contacts"/></span></a></li>
					<li><a id="cal" href="${aurl}?st=cal"><span onclick="return zClickLink('cal')"><fmt:message key="calendar"/></span></a></li>
					<li><a id="options" href="${aurl}?st=prefs"><span onclick="return zClickLink('options')"><fmt:message key="options"/></span></a></li>
				</ul>
		

        <div class="search alignRight">
            <form method="post" accept-charset="UTF-8" action="${context_url}" onsubmit="if(!this.sq.value){showLoadingMsg('<fmt:message key="actionNoSearchQuerySpecified"/>',true,'Warning',1000);return false;}else{return submitForm(this);}">
                <input type="hidden" name="crumb" value="${fn:escapeXml(mailbox.accountInfo.crumb)}"/>
                <input type="hidden" name="st" id="st" value="${empty param.st? mailbox.prefs.groupMailBy : (param.st eq 'cal' ? 'appointment' : zm:cook(param.st))}"/>
                <input type="hidden" name="search" value="1"/>
                <input type="search" id="sq" name="sq" placeholder="Search..." onclick="this.value=''">
            </form>
        </div>


	</div>
</c:if>

<c:if test="${empty param.show}">
	<c:if test="${empty param.ajax}">
		<div class="loadingDiv " id="loadingDiv" onclick="function(){return requestTimeout(false,'Aborted by user.');}"></div>
	</c:if>
	<c:choose>
			<c:when test="${not empty param.appmsg}"><c:set var="statusMessage" value="${fn:escapeXml(param.appmsg)}"/>
				<c:set var="statusClass" value="Info"/>
	            <div class="container tbl" id="msgDiv" onclick="return toggleElem(this);"><div id='statusdiv' class="tbl StatusInfo"><span  class='td'><fmt:message key="${fn:escapeXml(param.appmsg)}"/></span><!-- span class='SmlIcnHldr aright right Cancel'></span --></div></div>
	        </c:when>
	        <c:when test="${not empty requestScope.statusMessage}">
	            <c:set var="statusMessage" value="${fn:escapeXml(requestScope.statusMessage)}"/>
	            <c:set var="statusClass" value="${requestScope.statusClass}"/>
	            <div class="container tbl" id="msgDiv" onclick="return toggleElem(this);"><div id='statusdiv' class="tbl ${requestScope.statusClass}"><span class="td">${fn:escapeXml(requestScope.statusMessage)}</span><!-- span class='SmlIcnHldr aright Cancel'></span --></div></div>
	        </c:when>
	        <c:when test="${empty param.ajax}">
	        	<div class="container tbl" id="eaMsgDiv" onclick="return toggleElem(this);"></div>
	        </c:when>
	</c:choose>
</c:if>        

	<mo:handleError>
        <c:import url="/m/zmview" var="response" scope="page"/>
    </mo:handleError>
    <%  //!TODO may be should be done through filter? but minimization of html is essential to reduce response size
        String respText = (String)pageContext.getAttribute("response");
        respText = respText.replaceAll("[\t ]+"," ").replaceAll("\n\\s*\n","\n");
        pageContext.setAttribute("response",respText);
    %>
 
<c:if test="${param.ajax and param.show eq 'more'}">
   ${response}
</c:if>
<c:if test="${param.ajax and empty param.show}">
   <div id="pAjax"> ${response} </div>
</c:if>


<c:if test="${empty param.ajax}">
    <div class="view" id="view">

      <div id="view-main" style="display:none;"></div>

      <div class="listViewPane" id="view-list">
            ${response}
      </div>
	  
	  <div class="listViewPane" id="folder-list" style="display:none;"></div>

      <div class="contentViewPane" id="view-content" style="display:none;"></div>
        
      <div class="contentViewPane" id="static-content">
      
          <div class="tb tbl "><div class="tr"><div class="td toolbar">
            <c:url var="addUrl" value="${aurl}?st=contact">
                <c:param name="action" value="edit"/>
            </c:url>

            <div class ="compose button" id="view-contact" style="display:none;"><a id="add" accesskey="${requestScope.mainaction_accesskey}" href="${addUrl}"><span onclick="return zClickLink('add')"><fmt:message key="add"/></span></a></div>
            <c:url var="composeUrl" value="${aurl}?st=newmail&compose=new"/>
            <div class ="compose button" id="view-mail" style="display:block;"><a accesskey="${requestScope.mainaction_accesskey}" href="${composeUrl}" id="compose"><fmt:message key="compose"/></a></div>
          </div></div></div>
          <div class="emptyBody" id="empty-message">
          	<h2><fmt:message key="viewMessage"/></h2>
          </div>
      </div>
    </div>
</c:if>

<script type="text/javascript"><c:set var="js">
//This code runs from the ajax response
var nojs = false;
</c:set>${dbg ? js : zm:yuiCompress(js, 'js')}</script>

<c:if test="${empty param.ajax}">
    <c:if test="${empty param.noframe || empty param.isiniframe}">
    <script type="text/javascript">
        if (XHR !==undefined && XHR(true)) {if(!nojs && (window == parent)){registerOnclickHook();
        <c:if test="${ua.isiPhone or ua.isiPad or ua.isiPod or ua.isOsAndroid}">setInterval(function() {checkHash(null,'get');}, 400);</c:if>
        }}
    </script></c:if>
</body>

</html></c:if>
