\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{wmletterhead}[2014/12/15 provides LaTeX WM letter head class]

% Created by Eugeniy E. Mikhailov 
% v1.0 2014/12/15
% Note logo files belong to W&M
% 'wmletterhead' class accepts all options of the 'letter' class and the following
% additional options which specify the header logo
%   prior2014dec - old logo prior 2014
%   fullcolor - (default) full color logo with yellowish WM cypher
%   black  - all black logo
%   green  - all green logo
%   white  - all white logo (quite use less on white background)
%   nologo - do not show logo image
% DEFAULT options: [fullcolor]
% Recomended use:
% \documentclass[12pt,fullcolor]{wmletterhead}

\RequirePackage{xcolor}
\RequirePackage{ifthen}

% --------------------------------------------------
% Global flag
\newif\iflogo

% by default we want logo
\logotrue

% --------------------------------------------------
% Tagline color since December 2014
\definecolor{WMgold}{rgb}{0.73,0.59,0.36}

% --------------------------------------------------
% New length to be used for WM specific things

% Page layout specific
\newlength{\wmtopmargin} % start position for address or logo
\newlength{\wmleftmargin}
\newlength{\wmrightmargin}
\newlength{\wmbottommargin}
\newlength{\wmlogoseparation} % distance between logo/from address to the main letter

% WM logos parameters
\newlength{\wmlogoheight}
\newlength{\wmlogoWhpos} % distance from the left logo edge to the 'W' in William
\newlength{\wmlogoWvpos} % distance from the top  logo edge to the 'W' in William

% --------------------------------------------------
% internal use sizes to lineup logo and from (W&M) address
\newlength{\wmaddressheight} % to be calculated at the opening

% --------------------------------------------------
% set page layout for one-line template
\newcommand*{\setonelinelayout}[1]{
  % first parameter intended to be used for layout switch
  \def\@layout{#1}%

  % --------------------------------------------------
  % logo related settings
  \setlength{\wmlogoheight}{0.65in} 
  \setlength{\wmlogoWhpos}{0in}% same as above
  \setlength{\wmlogoWvpos}{0in}% same as above

  % default page layout parameters
  \setlength{\wmlogoseparation}{0.5in} % header text from main text separation
  \setlength{\wmleftmargin}{1.0in}
  \setlength{\wmrightmargin}{1.0in}
  \setlength{\wmbottommargin}{1.0in} % guessed
  \setlength{\wmtopmargin}{1.0in}

  \colorlet{wmtaglinecolor}{black}

  % --------------------------------------------------
  % Now let's define/modify a particular layout
  % esssentially this programs a 'switch' construct
  \ifthenelse{\equal{\@layout}{prior2014dec}}{
    %use defaults
  }{
    % nothing to do in the else case
  }
  \ifthenelse{\equal{\@layout}{2014}}{
    % below are measured in the Word template
    \setlength{\wmlogoheight}{0.65in} 
    \setlength{\wmlogoWhpos}{0.82in}% same as above
    \setlength{\wmlogoWvpos}{.15in}% same as above

    % --------------------------------------------------
    % Required by WM
    \setlength{\wmlogoseparation}{0.5in} % header text from main text separation
    \setlength{\wmleftmargin}{1.64in}
    \setlength{\wmrightmargin}{1.0in}
    \setlength{\wmbottommargin}{1.0in} % guessed
    \setlength{\wmtopmargin}{1.0in}

    \colorlet{wmtaglinecolor}{WMgold}
  }{
    % nothing to do in the else case
  }
}

\setonelinelayout{default} % set page layout defaults

%-------------- define WM header logo file ---------------------------------
\providecommand{\wmheaderlogo}{}% no logo

% this is prior December 2014 logo with Wren building
\DeclareOption{nologo}{%
  \renewcommand{\wmheaderlogo}{}% no logo
  \logofalse
  \setonelinelayout{default}%
}

% this is prior December 2014 logo with Wren building
\DeclareOption{prior2014dec}{%
  \renewcommand{\wmheaderlogo}%
    {wmlogos/wmheader2012}%
  \setonelinelayout{prior2014dec}%
}

% full colored logo starting from December 2014
\DeclareOption{fullcolor}{%
  \renewcommand{\wmheaderlogo}%
    {wmlogos/wm_horizontal_single_line_full_color}%
  \setonelinelayout{2014}%
}

% green logo starting from December 2014
\DeclareOption{green}{%
  \renewcommand{\wmheaderlogo}%
    {wmlogos/wm_horizontal_single_line_green}%
  \setonelinelayout{2014}%
}

% black logo starting from December 2014
\DeclareOption{black}{%
  \renewcommand{\wmheaderlogo}%
    {wmlogos/wm_horizontal_single_line_black}%
  \setonelinelayout{2014}%
}

% black logo starting from December 2014
\DeclareOption{white}{%
  \renewcommand{\wmheaderlogo}%
    {wmlogos/wm_horizontal_single_line_white}%
  \setonelinelayout{2014}%
}
%-------------- end of define WM header logo file ------------------------------


% by default all unknown options are passed to 'letter' class
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{letter}}

% DEFAULT options
\ExecuteOptions{fullcolor}
\ProcessOptions\relax

\LoadClass{letter}
\RequirePackage{calc}
\RequirePackage{graphicx}
\RequirePackage{geometry} % easy page layout manipulation
\RequirePackage{fancyhdr} % Headers !

\colorlet{wmtaglinecolor}{black}


% --------------------------------------------------
% Change the letter class default for signature indent
\setlength{\longindentation}{0pt} % this is indent of signature

% --------------------------------------------------
% Let's calculate/set page layout

\geometry{
  letterpaper,
  top=\wmtopmargin,
  left=\wmleftmargin,
  right=\wmrightmargin,
  bottom=\wmbottommargin,
  marginparwidth=0in,
  marginparsep=0in,
  %showframe % this shows layout frames
}


% -------------------------------------------------------------------
%% WM fancy letter head definition
\newcommand{\wmaddress}{
  \ifx\@empty\fromaddress
    {}
  \else
    \begin{tabular}{l@{}}\ignorespaces
      \fromaddress%
    \end{tabular}%
  \fi
}

\newcommand{\setwmaddresssizes}{
  \settoheight{\wmaddressheight}{\hbox{\wmaddress}}%
}

\newcommand{\wmfromwithlogo}{
  \setwmaddresssizes
  \iflogo
    \raisebox{\wmaddressheight-\wmlogoheight+\wmlogoWvpos}[\wmaddressheight]{
      \hskip -\wmlogoWhpos%
      \includegraphics[height=\wmlogoheight{},keepaspectratio=true]{\wmheaderlogo}%
    }
  \else%
    % do nothing
  \fi%
  \hfill\wmaddress{}%
}

% -------------------------------------------------------------------
% This takes care of WM tagline which we will put in the central footer
\newcommand*{\tagline}[1]{\def\lettertagline{#1}}
\tagline{}

% -------------------------------------------------------------------
% fancyheader definitions
\fancypagestyle{empty}{% looks like this has no effect for the letter class
  \renewcommand{\headrulewidth}{0pt}
  \fancyfoot[C]{\thepage}%
}

\fancypagestyle{plain}{% this takes care of the 2nd and the following pages
  \renewcommand{\headrulewidth}{0pt}
  \fancyfoot[C]{\thepage}%
}

\fancypagestyle{firstpage}{% this is the very first page style
  \renewcommand{\headrulewidth}{0pt}
  \ifx\lettertagline\@empty
    \fancyfoot[C]{\thepage}%
  \else
    \fancyfoot[C]{{\color{wmtaglinecolor}\lettertagline}\\\thepage}%
  \fi
}

% Important! if changed expect trouble with pages 2, 3, ... headers/footers
\pagestyle{plain}

% -------------------------------------------------------------------
% Now let redefine opening so address goes to the right of logo
\renewcommand*{\opening}[1]{
  \setwmaddresssizes
  \thispagestyle{firstpage}%
  \wmfromwithlogo
  \vskip \wmlogoseparation
  {\raggedleft\@date\par}%
  {\raggedright \toname \\ \toaddress \par}%
  %\vspace{2\parskip}%
  #1\par\nobreak}
% -------------------------------------------------------------------

% vim: tabstop=2 shiftwidth=2 expandtab
