From: <Saved by Windows Internet Explorer 7>
Subject: ALN Magazine - March 2008
Date: Tue, 4 Mar 2008 14:37:26 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
	type="multipart/alternative";
	boundary="----=_NextPart_000_0000_01C87E05.44527510"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/icons/navbar_logo.gif

R0lGODlhRQAcAOehAHp5elpZWdLS0l1dXWJhYUZFRe3p6jExMfLv8EJAQeDg4NTU1D8+PtjY2Hx8
fGVlZefm5nFxcR0dHdDQ0G1sbOPj497e3u3r7JycnIOCg9ra2ry8vFJRUq2trTk5OYqKiqioqMDA
wLi4uNbW1hMSEyopKSYlJpOTk42NjcfHxxkZGcTExMLCwuXi4zg1NlVVVUpKSjU0NaKiokxMTH5+
fpaWls7Ozs3Ky8nGxyEdHi4rLIaGhra2tqqqqjQyMnZ2dqWlpS4uLnJyciEfIJCQkI6OjoiIiDo3
ODczNHR0dCwsLCwpKmhoaBcWFiIiIjAuLyAgIBkXGBwaGx0bHP7+/v37/P7///z8/P/9/v39/fv7
+/v5+vz6+/z+/fr6+vj4+Pr8+/78/fb29vf5+Pf39/n5+fn3+PPz8/3//vX19fLy8vr4+SUjJNvd
3Pj09ff19iQgISMhIiQiIyYiI+Xj5Pb09fTy85mZmfXz9Pj29/T09PDw8Pn7+szMzOvr6+np6crK
yu/v7y8tLvLw8b+/v1BOT7W1te7s7fj6+ezs7M3Nzfv9/PHx8YWFhe7u7iIgIe3t7cvLy2tra/fz
9LGvsNnZ2UVDRNzc3Ojk5d/d3vTw8dXT1PPx8rKysiUhIllYWDMvMBEPEJqYmfX39lRSU8nJyZ6e
nqqpqd3Z2pqamufj5KamppaUlfP19LCysZWTlOrq6qelpp2dnbSys9PP0O/t7n19fYuLi5eXl+/x
8Li3t0A8PePf4KOjo1xbW11bXIeFhoiHh/T29dja2X9/f9nb2oWDhPn19tvb20NDQ3V3dtXX1tXV
1aCenyklJunr6sC8vVVTVFdXV3N1dMjKycrIycvJytDPzzw7PHVzdL29vfHt7s3LzMG/wLq5udPT
06+vr9TS0/Xx8vby88XGxdnX2PDy8bu7u5GSkZORkp2bnGlnaJyenYuJio+Njk1LTJiameHd3qWn
psTDw5WVlYSGhenn6KCgoC0tLdfX17CxsL+7vHt7e/L08//+/////yH5BAEAAP8ALAAAAABFABwA
AAj+AP8JHEjw3zx1vQoqXMiwocOHDjmYKADx35IcU3RUxBbkREWBLoZ8/McqTqgllCB6ygGnSUUf
Kg5E+OiCxMgnbB7loPgQzhwdUSoyMCFBDgFmEJM9+ghMijE2bIaIeghUirOKHkiUUCEngbWHu4JC
7BVH2j8KS5ocAQsnB5KKMA4wkTBEgo9YEUtUXCcnYS8JUp7scAgqRw6NEBkk+5cqhxwpbNo15DBl
rIRsA/k91tsQVNs5WIMI9IYtVE4KDH0tScx5oCA2UVAzdDHHbcUCBwgOICFBBalwCgmIdNhLx62C
rHI4OdCBIZLabyEWeFIQQJwpbHTMKvhJ0ENLUTL+4HqV7pWsYHF6+3I+B46L26ILitIRR8oSWwR/
rW4IIFShAgUkkEABLhRgiRxQmNCcQj60t5Z0+CxUjQtAyVHIQJ/E0VAvPlzIEBNNQJHAQqB4AseD
DyWjREMPPNGEHDEIFI13DJESxSkNdYDPFFOgoNATcJwolAkOueOCCSoIQsknRC6kSxMDPLSDBCYw
V5AOLKHokAdQPHRDDEOYEIUJ+yl0BBs4EgeTBA4UdJGQEMVQGUTvkCBHHE0W9IMEllQEgAQSQLEB
QVIoMUVuEOGjwkcBmEACogSJEIQKH1TUARRylMCTQI804cQTHHziiy8cDDAADAx4MJAJK34UwRP+
ixakTxL4ffSBLT/MNJAkQmSQgS012PIBCsTwww8FDwwUQSMj/UPEDM1GK61C81Qy7bXYLqRAttgG
0IsDjeAiiSH/mBLuP7Z0QEwGgKRCTA//nPIBARPQU0oITJwgREL3dHBHB/koww4x8HBLEAz/EELD
PyCgI1AfCJuFAREC9SAbCsdlkA85yX7DgccrGAKtPPpM44rBA5mFzEwg3EFOBIAgHIEMdzQgCzqd
/PBPB7oWoUgIOiNDQAoDCCDAAigvdKECBJS7CjpCgPPCP5/cIcsEA6wiiyTaYMMDC8gEA4guAPwz
QpQBaGODCEkr1IdA2/5jbSkL9KGIAyuIkIwoBd4owMICkQgQyT8KQPBPPgIh9U8Ig7bdLDPHKWCE
45QzBMQdnbQdEAA7

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/vertical_bar.gif

R0lGODlhAwAcAPcAAAAAAGxsbN3d3ePj4+zs7PT09Pj5+f///wAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+JENyZWF0ZWQgYnkgZkNv
ZGVyIEdyYXBoaWMgUHJvY2Vzc29yAAAh+QQJAQAAACwAAAAAAwAcAAcIKwABCBxIsOBAAQEODEhI
gGHCAgkNJDwwseIBihcjPnR4oKHChAgPGBwpMCAAOw==

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/first_page_grey.gif

R0lGODlhHAAcAMQAAJepxbPH26a60sbc6cvLy/7+/tDQ0N3d3cbGxtbW1q66yOPj4+np6Y+hve/v
76vA1sLCwvT09Pn5+djq8/z8/LnT5cDAwMPN2+Lu9p2xzcLCwczR3MLBwsHCwpGlw7W/0SwAAAAA
HAAcAAAF/6AljmRpnh2kQRCXsnDMrtysQkiu73zvE8CgcEgsGo7IpHLJTDif0Kh0eqhar9isdsHt
LhRghXe8uJAZ6DQjExgI1PAPAM5w2O8OQfuBvy8+AQF9DhGFhhF6Aw+HhX9tAYwREpOUEg8BFQ+V
EgcfAwOZmxIUpKUUlxUCphsBGBMVqaakBbS1BQ+XArUXFxKvFQG6tsO1AgIPGbS8BRiwAcjE0QIZ
07Wtzc/Vw7KkGd4Zpp6Z0+CyohIZAOmbwdMAAKKREQAe75EB6vaMgw4ADR4e+F0AGLAPHQYN/jU4
yGCDh4VwyCzw908ilw0AyGjZyPHKlI8goTAZSTJJkZMohQ/4WMlyhwsZLGrAfEFDRggAOw==

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/previous_page_grey.gif

R0lGODlhHAAcAMQAALTH2v/+/93d3cvLy8bGxtDQ0NbW1uPj45eryNHk7unp6e/v7/T09Pj5+fz8
/Mfd6sLCwsDAwLnS5KO608PN3JOlwcLCweDt9cHCwqnA152yzczR3MLBwre/zrS/08HBwiwAAAAA
HAAcAAAF3mAkjmRpnhBnQRAGfRwrr/K80kSu73zvD8CgcEgsFo7IpHLJNDif0Kh0Kqhar9is9sDt
er9dCrirKJvP6HIHkTYv3vC4/NABAORxhn7P5x88AA8AfXwNhoeIhwIeCQ8SGYmIDpOUlZMbABcJ
Eo+WlQGgoaIBFBQNF5wAE6OsraQUAagSABkarrehmai0E7aunp4ejhm9CMCTkcmqxQjJhoTQDAAI
1BXRDHjZbxQV3doLbeEKG93iY+dc5Oha7O1XU/DxUEz09UlF+PlCPvz9OywfakCw4EIgBoI1YsgI
AQA7

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/next_page.gif

R0lGODlhHAAcAMQAADdfmHKjyG6OtZ/L4kZuov/+/svLy93d3dDQ0NbW1sbGxuPj44qtzOnp6e/v
7/T09Pn5+fz8/K63y8LCwoucusDAwFSCscLd7MHCwsLBwsLCwcLBwcHCwcjM1eP0+dbY3SwAAAAA
HAAcAAAF3mAljmRpntOUpduEYamWzilHz5mi73zv/4agcEgsGhHIpHLJbCae0Kh0Sj1Yr9isdrvo
er+Mr3jcbZjPaAIFzW43HPC4PBAQfOR4/GPP7wsGdR19g30QhoeIFgwDAwIViJCHEZOUlRZ0AxcC
EpWdkwWgoaIEAnQXHhQUoqusqwQWpQEXBamttqIAr6UXmrcFnpW5rwwMAsCVkYgAuRawyZCEfcvL
FNGEeXLTFNjYbmfLEt5uZF4EEuTkW+rrWFTu71FN8vNKRvb3Qz/6+zwuKjf+JsiQkQLDihQZYEwI
AQA7

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/last_page.gif

R0lGODlhHAAcAMQAAJazzcHBwnSlyTNZlEpzpp3K4lSAr0hpnP7+/sbGxtbW1svLy93d3dDQ0OPj
4+np6e/v7zphmfT09Pn5+fz8/Iqdu2aUvm+Grbza63WOtF6DrmKKtD1qonmPrcvg7uP0+SwAAAAA
HAAcAAAF/GAgjmRpnmiqBknrvnAsL3Rt33je7Hzv/0CFcEgsGo+MpHLJbDod0KgDIK06OtiO9cHt
PggVr3hTEGjED4h6DRFYOgr22lLeyCGSvF5CF1wWe3kbABYagRITiYoTGwIFBRcBixMahBqTExSa
mxQGAgIYHhkAnJ6FnJoIqqsIBBafGB8VFauuBgasuawHBq+gCLOqvAQEusYRBL2goqvIHAe6qJoR
HMkCABec1BEH0pgTA9S3HZPhAweYhxLhHBEVh+YRh3cQ4e70A/kRd2gP4QD9/EXIh8aKgwMBDEI5
MPCAFScQIy45QrEiESAYM/bIwbGjDRkgQ75YQbJECAA7

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/contents.gif

R0lGODlhQAAcAMQAACwsLIeHh9zc3KamppaWluHh4f7+/vn5+bOzs8vKy7q6u8LBwsbFxmZmZtna
2UVFRXV0dVtbW83NztbW1tDQ0Pz8/PT09N3d3enp6cvLy7+/v+/v78LCwsbGxgMDA+Pj4yH5BAAA
AAAALAAAAABAABwAAAX/oCaOZGmeaKqmXNsubiy/M7fAdG3jul13QAZwSCwai8KOMHlsIo2ZTCIq
pVapU6t2i7Vmo98rOPulmM/otHrNbrvbk7h8Tq/b7/g8XnDh9/8XfXx+gYF+AoR/iIWGgI6JjYZ+
H5SVlpeYmZqbnJsYn6ChoqOkpaanphuqq6sUAQEEBayztLW2t7gbFru8uxAewB4Pur3FxRMIH8bL
vAwIzMUH0tMHvw8DCgEPGdTd3gEeAxbe5NIPHhjl1BXs7QLCGhQWFRgT7AkKGO0KCRgKAvQaeGgA
sIKAf+z8IcpnEICHAAkRtmtnoKJFcBAoWKwowSEwCBU9eAynINiAAwI//xooOdIBOGAbLpjcSPPi
ww80HTYI4DCAgY8CHwgQ2AABRg0CsYnUNnBCTw0YB2jAUJMmAQ8QNmwsGUFDAZkAPojUIBbABHAB
CpwD8OBc0YEdBgxU60HDhpIeIuCkOTGhSHvsDuZ1QE+kBMMVDKPFcA4WAQID5Da4UHLyOQ3sMgQ9
0JfcVQAEsg1zCEEB6QwiuYlMsBjctQgABiAYKJjgOQUHCASQ+0BCN2YERkZQIvyfyA4WjqNVFiFY
BA6SkTW9bSGlBwIZit0SoJsAggwbPuiWTWEDAgIczKOnAFmWeVjfCwwgMEE+fQ3eVQ3YnWwWqgsO
FBAKgB+A4sAFnxyIQWQBDhT4CYMCYvBBgBJSCCAoBI7SyYYcdtihIpEMAiIjkZRIIiOQLHKiIJHo
4eKLMML4xow01lijGF6QIUYYXHSBxRQ8dgEkFwkMwYQTSCYZhBEMLKGEkj3EwIMLU0Zp5ZVUwhAC
ADs=

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/thumbnail.gif

R0lGODlhLgAcAMQAAN3d3dbW1pmZmaWlpSwsLfj5+WZmZsvKy4KCgru6uv///sbFxrS0tMLBwtnZ
2c3NzUZGRhUVFXZ2d4uLi1xcXNDQ0PT09Pz8/MvLy+np6b+/v+/v78LCwsbGxgMDA+Pj4yH5BAAA
AAAALAAAAAAuABwAAAX/oCaOZGmeaKpxDee+cCzPbkvDXa7ry773P5+wAxQeMMhk8nDENJnI5nIq
dVqXlax2y+16v+BKYEwum8/otDoAaLvf8Lh8Tgd87vi8fs/v+z8ZgYKDhIWGh4gZG4uMCI4IGoyS
k5SVlosWmZoenJwGmqChoqOkFgWnqB4ECQMEHgmosbKztLUXt7iqDxcIHhMWGQkAwQC3xMS4CQm4
F8jMFwrR0qoVAK4DGhGcEB4IFg/aHtze4JwEDwoA4QPS7e2dntkeEgjaBh+u9PYfEQQMA/0sTJiH
LYM7dx4iGDAgQMMADxQ0fBDgwcDDiBMrPuwHwVWFBJwofHD37IKqDm02w4Ck4ODCQ4sQW758CEGA
zYYXHhgQV4DZLFUYYmmT0KqiOoKuDKiLMEEAAQoZBCCg+SCWqJOgFoSjUNEBwJAVA2jlFEFAhZ0J
BWAARYnBBA6TAjQdYDPAv6a9DATY8GECAgYMPmwYMDWwJEMOhhH64OBOY1dTXU14IMiBg0EAGi/+
84dBOI0BOO+pQxpAhQkSBAxAWRrOmtdknMBOE6a27dtQlCypcoX3FSe8mfAmEiRIkSE8kCNfMMPG
C+fOY0R/LiN6CAA7

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/find.gif

R0lGODlhNAAcAMQAANzc3cvKy/n5+aWlpf7//uDg4Lq6unZ2dsbFxmNjY8LBwoODg7GxsY6Oj5mZ
mdnZ2UNEQy0tLe3t7dbW1tDQ0PT09N3d3cvLy/z8/Onp6b+/v+/v7wMDA8LCwsbGxuPj4yH5BAAA
AAAALAAAAAA0ABwAAAX/oCaOZGmeaHp2rMK+cNzCLl3L8t15PML/vp9wSCwCjUFPYHlpOp+BC7MZ
rTqjT6oWi81SvuCweEwum8mTtHrNbrvfcDfAQq/b53YLYM7f3/F1eH2Adh+Gh4iJiouMjYsZkJGS
k5SVlpMLDZcbnJ2cBQsLA56kpaamHBATpxWtrhUIHLIcCa+2t7i3HBEeuQK/wAIJHA0GCQ4TwcrL
zMq7Ac0Y0tMYEBwOEhgWG9ISBgHU3gDiGN/e2RgBBtK7GgYA1NIE8/QEDrIQDvT3+BIEF7OsLaiw
SxaFABHwESgoi0G9h/UcJKT1L5WGBhwOYJB1YEHCBAU4LtDwsUECChyH/0HwBxFiBokcGGCMAMFa
hAG0NHy4B7JdAQY5C0gIGUHnrgn14kl7J20BMafHHEjl+QADzgQWnpWjVZVdBAobv1Jb9mDXAJwc
DBgw63GBBI4DPgLYdeFXwgMGFgiguzdCXWC4+MlyYKACRlkRGEyIJWtYggm7esGaqCoyQV6vTgEI
xcDAB04BMjHQIGHDhAUOBkidILNDpw8NFjDw0HpD7U6XMjx4MOnDAwuSfBcQrhu4pN2Qfic3DsmR
8+fQFenRwyfPHkLT8/y5Q+e69elxwosf3+aM+fPox2TZ0oVLFylX4q/fMv/CkSRJPOT3wT+/kf9D
IIDDgC8ooAMOBx5IYAEIADs=

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/links.gif

R0lGODlhKAAcAMQAANbW1jAwMbq6uoWFhfn5+d3c3bKysv/+/qioqMHBwZGRkcvKy3d3d0VFRWdn
Z8bFxuXl5dnZ2VpaWu/u79DQ0N3d3fT09Onp6fz8/MvLy+/v77+/v8LCwgMDA8bGxuPj4yH5BAAA
AAAALAAAAAAoABwAAAX/4CaOZGmeKMmtbOsmbgy3Sd16j6freb7/QB9wuMtkFkfkQnlsGp9IpzHq
VC4o2Kx2y+16tYCweEwum8/jinpdKajdazj8PWe37YWPfs/v+/+AfBeDhIWGhxcLAwiIjRqPkAoD
kBUSCpCYGgYdDBWZmROQFqOkDR0Aow8dDQWkrpsOqK6zrgS2t6YCtxsGFLe/Ah0OBb/FxRjIyaYb
yQIJBAsCGAILyMEObQLSGAUCF8nJB+Ljy+OrFqYBHZwH1xTqChMI6x0X4/f35eIdARSmEgPWVQgm
QR2DDRBMIUDADB8+fQf4+euwoYIpDsHWOUB4IGCHARbwgUO2LJnEksuCoqnrl8yAKQYjjZkaoI0A
vwy5COS65oCfBQIMEAQc9ouWKXoQ+HnIha6DAFgR/kFQxw+BrFGfEkgaMMCAAQUctBrQILYCAgUA
KkiicEGSgQ0XMCGqEKFuhAsRKlygO4gvhAgfLvy9i5dwoUCIEyMuUKdNYzxyGDumw9gNHDSYM2P+
wrkz5yegp4QeTZo0lQVBiBARkrq1hxhhYa+YMVu2jRchAAA7

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/settings.gif

R0lGODlhOgAcAMQAAJeXl8rKyqWlpdzc3NbW1i4uLkdHR/n5+YKCgnl5ecLBwrGxscXFxf7+/4qK
iuXl5bm5udnZ2WVlZezs7PT09NDQ0N3d3fz8/Onp6b+/v+/v78vLy8LCwsbGxgMDA+Pj4yH5BAAA
AAAALAAAAAA6ABwAAAX/YCaOZGmeaKqOXOu+MKy0M83Vsa3HONcxnWAQKCz+jMSjUSkEJpfD4GZK
nQaq1k1ge6V2tdiwGJylVs7otHrNbrvfaIJ8Tq/b7/i8fm4ZWPp/gIGCgQOGg4OGh36Afox9j3+H
Fh+VlpeYmZqbnJ2WGKChoqOkpaanqKEaq6waFggIAq2ztKsWBgC1urusFL6/DB7CHhK/xr4LDL4M
CxTBBgPH0tPUB9bXEh4OEBIABNfgBx4GEwcGHg8HGQsV4e7v8Bfy8+cAExcWGvITEAHyAR4KCBhQ
QNsFCBkODIAwIQCEeRcWTpD47yFEeQ0yagQgDNfGYeTOBUQwbMI4DQ4C/workJHjSg8LDiRYqbGm
zQYAChJrsGFchpQJABYAsKCggwwBK6QcWlCAhZEztWkImEHAhptYMeSEubTAuQIfAm7QcC6DyQJK
tVUg6YAkgg4YsjmY8FUABZsXDw6Qx5ZkNwCAKyS9UPZC0pRzEbt9cGHm3AsOClqcFy5CQAEChEGA
cDlBgQRnN5jzAEFcgQ1sMbDl7AGwMAcRJECoV+6aNJfCAECgkHLlAgIBO1A4tzs42wfHSXbUxnoc
BAzGakVouwDCh1UBEDhYYHaBAw4afi7Q4J1DBQBOzwuosABArGwILBBwsH1sq1MRIox6EMFCqP6g
WKAfBgB+EMEDGBjYQWVArsGkH3/+jeLJhBReotxrC3gSSSSIOFIIIYV4+IgfHSSQAGYVcNiIfHu0
6KIdW7gIx4w01tgGGF94QcYYY+SYoxZbhPHjBkU8EcWRUCSpZJJGBuGCAj3IkMMLUD5p5ZQ69FBD
CAA7

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/archives.gif

R0lGODlhPgAcAMQAABsbG9DQ0EVGRoWFhdzc3aenp5eXl/n5+eHh4XZ1dsvKy7Kysrq6uv7+/sLB
wmVlZcbFxtnZ2e3t7NfX19bW1vT09Pz8/N3d3enp6cvLy7+/v+/v7wMDA8LCwsbGxuPj4yH5BAAA
AAAALAAAAAA+ABwAAAX/oCaOZGmeaKqeXee0cCzP9PzWuCtDXu//Hp5PCITwiMBhcsnMOJ8ZhfQ5
nToVV+yVqoV6u9guNxMom8/otHrNbqspkwlcPqfD7/g83m6n5ONycXqBcgSGF4gXBIqJjY6MiIuO
hoeKi5SVkI+GH52en6ChoqOkpaIYqKmqq6ysCgMFrbKzshu2t7gLA7i8vQscCQi4CQm9xse4FcrL
zAAcBszR0b8PE80AFNLa28sH3t/fBRwcAh/g5+AMHA8E4BMFGujy898W9vf3DxzOC/YSDIYY3GOg
wIK6Bw4YSLCnYMEHgv4gWiAAEJ9EfA0yasx4YV+CdRUaqBOwT4IBZxwG/6hDCQBDA5ISAABA0GDA
sw36xiXISBLYxp8bbSbIIJPmygEDfgFACmvfAJIPLJDUYGCdBZkaPibQoK/AyAULLgAF6uxBApI7
D3bAYHPAWgziHniIi2BqA5laPZAUwHfdBWcCFBzYiO9e1XGIBSA4GMFCWwz2Dl6QPNXxOAAa6qY0
wLnABQwJZG7AJ4+kVwYMSC442G7CPgMFDLBmTZLBAQxlOxywKaDAg94OEizACk4aBHIKlVV9QM1a
hQEoE8Sd0Ly2MugFnOck18GmTgbMegWI7QEXZwexA9x6ZWABhPQI0lNdYCu+wlu62mfYwGBA+wm4
tIJABAisEsEFHxCoSnaCnyVYoIMYXBBBKh98psqABaKC4SqmdOjhhx1Gwogkj2hySSSVXJLiiCRi
ksiKiQzihx5+0GEjITPmqOMdNuYISI18uCHkkEQKuUUUVCDphZJJLomkGGNAAcYYQTBh5ZVFYJkl
Ej/IcAMML3yZw5heimmDlyEAADs=

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/send.gif

R0lGODlhLwAcAMQAANbW1qamppiYmMvKy/n4+dzc3YqKirKyskVFRf7+/i8vL2ZmZrq6usbFxsLB
wtnZ2Xl5eVdXV+7u7t/f3vT09NDQ0N3d3fz8/MvLy+np6b+/v+/v7wMDA8LCwsbGxuPj4yH5BAAA
AAAALAAAAAAvABwAAAX/oCaOZGmeaCp2rNO5LivPc9zSN213Xt83vmAQKBQSi0UiBjMYMJfQ5tIJ
rVKp0aq2Wul6v+CweEzuAs7otHrNbrvPlnghTrfM5XX8vHC/5/F/H4KDhIWGh4iJghmMjY6NAxAB
j5SVlo8bmZobExCSmQccEBObpaaaEqebFKytDRywHAsUoQsArbi5uru5BL6/CxwGDAsCDwyyBb/L
zM3OzBfR0ggcAhkXpMgLDgzX0gwDF+AXAwziBdHl3tLSCe7vArAIAu7ICrEZCRL3HNQIG/6EfeBX
7Z3Bg+4E8IuQwJ4BagsuRJBl4J6CCv4EBKAW4AA1AAhDJsigkMMBbR4C48iawEGBhjktMZp8IAGW
AgT3DFw4yC4aA3QXIAirNUEbSwXhMsSkpoHAhZYGBEg9sC4aswctA6jkwEDlggLaCkyMwICaAgzU
GPiauCDAzQcUmOmKF0sAg1oAaj0YCGuiAg9pWfGFBcHDhlynChgwcPLDhAACADyOvCHD4gMCDHTQ
wFgTSQMdAZi69OBBow97M6D+0OiBhQyuM1gw7Wg2a0qKcuve/QEQHT9/+NQRbkfOHuF7fL9Zzrw5
gDLQo0uvwETKlC3YtWCxkuU6FSRDwicBcsRIeSE4HKjHwf5F+/Xtb4QAADs=

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/download.gif

R0lGODlhSQAcAMQAAOrq6re3t2ZmZsvKy0xMTNzc3DMzM9bW1piYmPT09Pn5+YKCgouLi8LBwtnZ
2aioqP7//sbFxhQUFM/Pz8fHx93d3fz8/NDQ0Onp6b+/v8vLy+/v78LCwsbGxgMDA+Pj4yH5BAAA
AAAALAAAAABJABwAAAX/YCaOZGmeaKquJ+e+MNfEs1vT8B3veK7znaBwGIwQO8YjMYkUMo9PZVGq
qVqrg6t2kNVku1qs2Ov9hsFYtBh9abvf8Lh8Tq/b5Ye8fs/v+/+AgYJ+FRUFhQWHiYaKhYiOi4mN
h4yIlJSOlouGnJWWmR+hoqOkpaanqKmqphitAK2wsbCvALSusrGvuQsMtrm3GLqyvMKtG8fHAQvL
DBXIz9DR0tAeBgfT2M/V188J3t4LHuIeEgzf5+jp6ufVFOvv7Abu5wr19eEMygYeDPb+/wAD2qum
QaBBf9UG/LPAkCEDfgAsOJAg4UPDAAEYFghQQGNHCxsTBQAwICPDahM0/3JsyDDAAAsuL75EydIC
hJs3HzLYcFOABwQQEEgQJwFBBQ8EEkAgkBSCzwzh9lW7iXIDgXEEeG6QejXrVnFXDUzASRanTp4Q
dF4gt2wohasBjnqIWw1qNQT7HkCodsEnAQZdLVwVwGCfgQuDC/MtW/ZsTw8Pwi3ggAGBBwEBkAog
YICAzwUTdE7AlwBlXQdfHdQ9ZNpAhkIoy9bUGXFAXckYLDy4XIGihLYUM2CgTbv1Swv7MiS0AMA4
c5os/4UTEJkiggEHyCF4MPRBAcsSXg8VwEEBPgznCfoNsL5rgLAD3Ict6A9duHEGEATAkIDBUHKY
AZCABAJkkMACEnB0INM/H+DzQTsfSFXNAxdEKI5P8lh4WTvoQHMBAsvox8EHyBzAwAIYcZPBA9dU
8EAAx3z4QAUyVhAAAxxsAEBkIgKgIwP5IIDjj0EO+UwwsXzgwJIf4ALAkrJU0GQrFcCiZJNXYuBA
lcFkGcuWWnIZ5pNidrnKmWimqWYon1zyiSecuPnII5vMqQkkk2ASJ56FDOLnn4AGqscdhBZq6KFu
hFHGGIqS0eiji0IaqRpcmKFBE1Jk6sQUmkrxRBSZgmqDDDzU0MCpL9zwAw+lptrDDjP80EAIADs=

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/print.gif

R0lGODlhHAAcAPcAAAAAADMzMUxMTGxsbGRkfXh4eHh4ent7e39/kYN/hIWFhYyMjJOQlZWVlZub
nIqQup2drJSTtpiYupycvKe5n6Ghoaioqa2traeovrW1tbi4ubm2s8C8uLy8vaGjwaysxa60yai0
1amy0aq42be3wsDAxJfBhK/B4qzP96vQ+a/X/rDZ/7XW9rLZ/7/b9MXFxcbFzM3NzcPF2dTU1Nja
2t3d3sPg/9va5dre68Tj/9fh59Xj79jl9dbq/9rv/+Xl5e3t7e3t8uXy//X19fX1+fj7/vr59///
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+JENyZWF0ZWQgYnkgZkNv
ZGVyIEdyYXBoaWMgUHJvY2Vzc29yAAAh+QQJAQAAACwAAAAAHAAcAAcI/wABCBxIsKDBgwgTKlzI
sKHDhxAVDokgYYLFizciCgwi44hHjzgmENEIwAMPISiF8IgQhGSQED56yPQhIqPGICNy2NiZ40QE
kkNCpGhBdIWKBySNgEChgoWLHTo+kBgyBCKQF0U6cNiw4QUMGC80AGk4hEaGDjM0xPjxA4hbIDMu
jJX4gsYMuzGGGAHyo0aMDh1e5FX4Q67dGT9gxIDRIYZjGjEytEwIREGDvjMQ1/gBucOFBQkcVKUc
A0iDCy9mRG7QYIECBzBMUBiNEO4RIzMyXGigYIED1BoaMHhB++AQDTWODIF7wYGGDhUKFDjgwAKM
hUNedPixvEMGAwEEDClooHZGiYY1XrwAEhkBAQXP685tWCTuggYlMEC4QKM4yf8ABijggA8FBAA7

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/help.gif

R0lGODlhHAAcAPcAAAAAABtCjxZJtB9Pth5RuS1OkC5Qki1TnjZRiSFQtiRStiZWvCxYtyxavDdc
rDtdoTVdtDNgvD9hpDVivzphsz9ovihawiZZyS9ewzJgwTVkxTlmxUBsyzhp0kBw1Utonl90nkpo
oU5sqkVrvkptuEtwvktxv1JtpV53rlR3wF16uGR3mmd5nWl3lGmAq2F7s0x420p631t9xU5942iC
u3uKp36NrnSGsXeLtF6H3U+C7leE5FWD6VqG6FyI6V+M71yM9V2P+mCR/WmGxHCLxGWJ1mWN4GqQ
4HWPyGSQ7mOQ9W2U52WS9GKU/mqV92uc/3ye6Xur/4iTpoORroyUo46YrIKVuZScrJ+jraGipqKm
r6eprKOosaSrt7CwsbGvqrKztbq9wIObzY6gyYmg1IKg6Iei2pelwZSnzZ6sypat3oWp9o6x/5m7
/6Gwza62yLK4xbS7x7S8zLbA2J/B/77ByLzCzrfB0rzE1r/I26XB/7XF5sHBwMvGvMbFxMPHzsfK
0M7Kws/Q0MbO29TPxtXTz9vWztfW0tPW39rY097b1dzd387V5c7W6dDa78bd/9/h4Nzj9OHe1ujj
2Ofk3erm3PDq3fPr3Obl5enn4vDs5e3u7+fx/+nz//Xw5Pfx5/v27f/65fb6///99v///gAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+JENyZWF0ZWQgYnkgZkNv
ZGVyIEdyYXBoaWMgUHJvY2Vzc29yAAAh+QQJAQAAACwAAAAAHAAcAAcI/wABCBxIsKDBgwgTKlzI
sKHDhwPd2AH0J04aiARF1OgSxg8fMFdaiMD44dAoUqIiMUJESdIXBA9xgCLFiY4TGBs2yJiTqQ+I
higwkXoUJYiaPG9uKGggRhOYEAzlDH0SpBEpTZQseVFAQMwlKQsPnHzSBAopQUNkDLokYsEARIQC
KLQyVAiTMozEeLiwJxSKBgPETGKhMA6pNkyY/JgRowOZUYYgZGiQghIVhYBIsVHCJEkPGGpIFXph
YUKDEpCwKLSjmbPnHKIOqcAwwbQJTKoTnhmlB0hnHkdE+amgobaCIZ6mKJQAqpOOJEl87BBDY0Px
CALmeHqgEE0dUmt4eGI24gjOiOIKSnz6w/CEIlFLYswoMokQiQYJKrA80bDGpE1mcKABBQ4owAAR
i1Riw0MrEFIJHmgggcQYd1BiCGEQFZBFIIUkkoghhGxhAEYDuVCFFlxc4QKJLLbo4oswxkhQQAA7

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/icons/1ptrans.gif

R0lGODlhAQABAIAAAP8zzAAAACH5BAEAAAAALAAAAAABAAEAQAIChFEAOwA=

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://alnmag.texterity.com/newui/icons/nav_bg.gif

R0lGODlhNQAcAMQAAO/v7+Pj4/n5+cvLy+np6d3d3dDQ0PT09MbGxvz8/P///8LCwv7+/sDAwFNT
a5martbW1tbX1tfW1v7//tbW19fW18LCwf/+/v7+/9fX1sLBwtbX18HCwv///tfX1/7//ywAAAAA
NQAcAAAF/2AjjmRpnmiKLmzrvq4Fa4vschZH43TLcS+EcEgsGo/IJHLAbDqf0Kh0KjVYr9isdsvt
cjcQiCQTkYArFIpHEkFDKpA0pB2WQMBjiYRSiUAyFGFldXF9GwWIiYqLjI2Oj44BkpOUlZaXmJmY
BJydnp+goaKjogCmp6ipqqusrawHsLGys7S1tre2Arq7vL2+v8DBwAnExcbHyMnKy8oMGBMMF9AY
DNUME9TW1hfa1RgYFx3V4dUTHRMX6RPQ1tATCvDx8vP09fb39twK5dHa1PvstEnr8OEDv2vO2GEQ
104btAvMIkqcmEyYxYsYf+HayLFjLVcgQ4pcRaqkyZOhNFipXMnyEqSXMGM2shMhA54KGeaQKUMh
Axs7FfpQ2EAhQoSigopWkLDmzByjEuB48OOlqtWrW6ho3co1ipKvYMMegQGkBg0NQGy0ULuAhg22
Ls626GHBAo0QADs=

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/stylesheets/navigator.css

A:link {
	COLOR: #003399
}
A:visited {
	COLOR: #800080
}
A:hover {
	COLOR: #ff3300
}
TD {
	FONT-SIZE: xx-small; FONT-FAMILY: Verdana, Arial, Helvetica
}
.btn {
	FONT: bold 10px/12px verdana,arial,helvetica
}
.btn2 {
	FONT: bold 10px/12px verdana,arial,helvetica; WIDTH: 30px
}
.btn3 {
	FONT: bold 9px/10px verdana,arial,helvetica; WIDTH: 30px
}

------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/javascript/constants.js

=0A=
/* ************************************************** =0A=
   CONSTANTS=0A=
=0A=
   Defines constants used throughout.=0A=
=0A=
   *********************************************** */ =0A=
=0A=
=0A=
var ONE_PAGE_MODE =3D 1;=0A=
var TWO_PAGE_MODE =3D 2;=0A=
=0A=
var SINGLE_IMAGE_MODE =3D 1;=0A=
var SPLIT_IMAGE_MODE =3D 2;=0A=
var SVG_IMAGE_MODE =3D 3;=0A=
=0A=
var FULL_SCREEN_MODE_ON =3D 1;=0A=
var FULL_SCREEN_MODE_OFF =3D 0;=0A=
=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/javascript/wds.js

function WdsComponent (parent, name) {=0A=
  // If given a parent object, save a reference=0A=
  // and register with the parent component=0A=
=0A=
  if (parent) {=0A=
        this.parent =3D parent;=0A=
        this.name =3D name;=0A=
=0A=
        // Remove any duplicates and then add new instance=0A=
=0A=
        this.removeComponent(name);=0A=
        this.addComponent(this);=0A=
=0A=
        this.current_page =3D parent.current_page;=0A=
        this.zoom_factor =3D parent.zoom_factor;=0A=
        this.zoom_in_factor =3D parent.zoom_in_factor;=0A=
        this.page_mode =3D parent.page_mode;=0A=
        this.image_mode =3D parent.image_mode;=0A=
        this.search_string =3D parent.search_string;=0A=
        this.pview_height =3D parent.pview_height;=0A=
        this.pview_width =3D parent.pview_width;=0A=
        this.actual_zoom_fit =3D parent.actual_zoom_fit;=0A=
        this.full_screen =3D parent.full_screen;=0A=
        this.tracking_string =3D parent.tracking_string;=0A=
        this.http_url =3D parent.http_url;=0A=
        this.sub_id =3D parent.sub_id;=0A=
        this.lookinside_id =3D parent.lookinside_id;=0A=
        this.sub_email =3D parent.sub_email;=0A=
        this.auth_ticket =3D parent.auth_ticket;=0A=
        this.overlay_position =3D parent.overlay_position;=0A=
        this.last_displayed_page =3D parent.last_displayed_page;=0A=
        this.first_displayed_page =3D parent.first_displayed_page;=0A=
	this.has_page_zero =3D parent.has_page_zero;=0A=
  } else {=0A=
        this.name =3D 'master';=0A=
        this.parent =3D this;=0A=
  } // end if =0A=
}=0A=
=0A=
WdsComponent.prototype.components =3D new Array();=0A=
WdsComponent.prototype.handlers =3D new Object();=0A=
=0A=
WdsComponent.prototype.removeComponent =3D function(name) {=0A=
  for (var j =3D 0; j < this.parent.components.length; j++) {=0A=
        if (this.parent.components[j] !=3D null) {=0A=
          if (this.parent.components[j].name =3D=3D name) {=0A=
            this.parent.components[j] =3D null;=0A=
          } =0A=
        }=0A=
  }=0A=
}=0A=
=0A=
WdsComponent.prototype.addComponent =3D function(comp) {=0A=
  for (var j =3D this.parent.components.length-1; j >=3D 0; j--) {=0A=
        if (this.parent.components[j] =3D=3D null) {=0A=
          this.parent.components[j] =3D comp;=0A=
          return;=0A=
        }=0A=
  }=0A=
  this.parent.components[this.parent.components.length] =3D comp;=0A=
}=0A=
=0A=
=0A=
WdsComponent.prototype.current_page =3D null;=0A=
WdsComponent.prototype.handlers.current_page =3D new Array();=0A=
WdsComponent.prototype.getCurrentPage =3D function() {=0A=
  return this.current_page;=0A=
}=0A=
WdsComponent.prototype.setCurrentPage =3D function(value, no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getCurrentPage();=0A=
  if (value =3D=3D old_value) { return; }=0A=
  this.current_page =3D value;=0A=
  if (old_value !=3D null && !no_change) { this.onChangeCurrentPage(); }=0A=
  this.update('setCurrentPage', value, no_change);=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setCurrentPage(value, no_change);=0A=
  } // end if there is a parent=0A=
}=0A=
WdsComponent.prototype.onChangeCurrentPage =3D function() {=0A=
  for (var i =3D 0; i < this.handlers.current_page.length; i++) {=0A=
        this.handlers.current_page[i]();=0A=
  } // end for each handler=0A=
}=0A=
WdsComponent.prototype.addHandlerCurrentPage =3D function(method) {=0A=
  this.handlers.current_page[this.handlers.current_page.length] =3D =
method;=0A=
}=0A=
WdsComponent.prototype.removeHandlerCurrentPage =3D function(name) {=0A=
  var i =3D 0;=0A=
  for (var j =3D 0; j < this.handlers.current_page.length; j++) {=0A=
        if (this.handlers.current_page[j] !=3D null) {=0A=
          this.handlers.current_page[i] =3D =
this.handlers.current_page[j];=0A=
          if (this.handlers.current_page[i].name !=3D name) {=0A=
                i++;=0A=
          }=0A=
        }=0A=
  }=0A=
  this.handlers.current_page.length =3D i;=0A=
}=0A=
=0A=
WdsComponent.prototype.zoom_factor =3D null;=0A=
WdsComponent.prototype.handlers.zoom_factor =3D new Array();=0A=
=0A=
WdsComponent.prototype.getZoomFactor =3D function() {=0A=
  return this.zoom_factor;=0A=
}=0A=
WdsComponent.prototype.setZoomFactor =3D function(value, no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getZoomFactor();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.zoom_factor =3D value;=0A=
  if(old_value !=3D null && !no_change) { this.onChangeZoomFactor(); }=0A=
  this.update('setZoomFactor', value, no_change);=0A=
=0A=
  if ((this.parent !=3D null)  && (this.parent !=3D this)) {=0A=
        this.parent.setZoomFactor(value, no_change);=0A=
  } // end if there is a parent=0A=
}=0A=
WdsComponent.prototype.updateZoomFactor =3D function(value, no_change) {=0A=
  this.zoom_factor =3D value;=0A=
}=0A=
WdsComponent.prototype.onChangeZoomFactor =3D function() {=0A=
  for (var i =3D 0; i < this.handlers.zoom_factor.length; i++) {=0A=
        this.handlers.zoom_factor[i]();=0A=
  } // end for each handler=0A=
}=0A=
WdsComponent.prototype.addHandlerZoomFactor =3D function(method) {=0A=
  this.handlers.zoom_factor[this.handlers.zoom_factor.length] =3D method;=0A=
}=0A=
=0A=
WdsComponent.prototype.zoom_in_factor =3D null;=0A=
WdsComponent.prototype.handlers.zoom_in_factor =3D new Array();=0A=
WdsComponent.prototype.getZoom_In_Factor =3D function() {=0A=
  return this.zoom_in_factor;=0A=
}=0A=
WdsComponent.prototype.setZoom_In_Factor =3D function(value, no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getZoom_In_Factor();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.zoom_in_factor =3D value;=0A=
  if(old_value !=3D null && !no_change) { this.onChangeZoom_In_Factor(); =
}=0A=
  this.update('setZoom_In_Factor', value, no_change);=0A=
=0A=
  if ((this.parent !=3D null)  && (this.parent !=3D this)) {=0A=
        this.parent.setZoom_In_Factor(value, no_change);=0A=
  } // end if there is a parent=0A=
}=0A=
WdsComponent.prototype.updateZoom_In_Factor =3D function(value, =
no_change) {=0A=
  this.zoom_in_factor =3D value;=0A=
}=0A=
WdsComponent.prototype.onChangeZoom_In_Factor =3D function() {=0A=
  for (var i =3D 0; i < this.handlers.zoom_in_factor.length; i++) {=0A=
        this.handlers.zoom_in_factor[i]();=0A=
  } // end for each handler=0A=
}=0A=
WdsComponent.prototype.addHandlerZoom_In_Factor =3D function(method) {=0A=
  this.handlers.zoom_in_factor[this.handlers.zoom_in_factor.length] =3D =
method;=0A=
}=0A=
=0A=
=0A=
WdsComponent.prototype.getPageviewerHeight =3D function() {=0A=
  return this.pview_height;=0A=
}=0A=
WdsComponent.prototype.setPageviewerHeight =3D function(value) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getPageviewerHeight();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.pview_height =3D value;=0A=
  this.update('setPageviewerHeight', value);=0A=
=0A=
  if ((this.parent !=3D null)  && (this.parent !=3D this)) {=0A=
        this.parent.setPageviewerHeight(value);=0A=
  } // end if there is a parent to update=0A=
}=0A=
WdsComponent.prototype.getPageviewerWidth =3D function() {=0A=
  return this.pview_width;=0A=
}=0A=
WdsComponent.prototype.setPageviewerWidth =3D function(value) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getPageviewerWidth();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.pview_width =3D value;=0A=
  this.update('setPageviewerWidth', value);=0A=
=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setPageviewerWidth(value);=0A=
  } // end if there is a parent to update=0A=
}=0A=
=0A=
WdsComponent.prototype.getActualZoomFit =3D function() {=0A=
  return this.actual_zoom_fit;=0A=
}=0A=
WdsComponent.prototype.setActualZoomFit =3D function (value) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getActualZoomFit();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.actual_zoom_fit =3D value;=0A=
  this.update('setActualZoomFit', value);=0A=
=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setActualZoomFit(value);=0A=
  } // end if there is a parent to update=0A=
}=0A=
=0A=
WdsComponent.prototype.page_mode =3D null;=0A=
WdsComponent.prototype.handlers.page_mode =3D new Array();=0A=
=0A=
WdsComponent.prototype.getPageMode =3D function() {=0A=
  return this.page_mode;=0A=
}=0A=
WdsComponent.prototype.setPageMode =3D function(value, no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getPageMode();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.page_mode =3D value;=0A=
  if (old_value !=3D null && !no_change) { this.onChangePageMode(); }=0A=
  this.update('setPageMode', value, no_change);=0A=
=0A=
  if ((this.parent !=3D null)  && (this.parent !=3D this)) {=0A=
        this.parent.setPageMode(value, no_change);=0A=
  } // end if there is a parent=0A=
}=0A=
WdsComponent.prototype.onChangePageMode =3D function() {=0A=
  for (var i =3D 0; i < this.handlers.page_mode.length; i++) {=0A=
        this.handlers.page_mode[i]();=0A=
  } // end for each handler=0A=
}=0A=
WdsComponent.prototype.addHandlerPageMode =3D function(method) {=0A=
  this.handlers.page_mode[this.handlers.page_mode.length] =3D method;=0A=
}=0A=
=0A=
WdsComponent.prototype.full_screen =3D null;=0A=
WdsComponent.prototype.handlers.full_screen =3D new Array();=0A=
WdsComponent.prototype.getFullScreen =3D function() {=0A=
  return this.full_screen;=0A=
}=0A=
WdsComponent.prototype.setFullScreen =3D function(value, no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getFullScreen();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.full_screen =3D value;=0A=
  if (old_value !=3D null && !no_change) {=0A=
       if ((this.name !=3D 'pviewfs') || (value !=3D 0)) {=0A=
         this.onChangeFullScreen();=0A=
       }=0A=
  }=0A=
  this.update('setFullScreen', value, no_change);=0A=
=0A=
  if ((this.parent !=3D null)  && (this.parent !=3D this)) {=0A=
        this.parent.setFullScreen(value, no_change);=0A=
  } // end if there is a parent to update=0A=
}=0A=
WdsComponent.prototype.onChangeFullScreen =3D function() {=0A=
  for (var i =3D 0; i < this.handlers.full_screen.length; i++ ) {=0A=
        this.handlers.full_screen[i]();=0A=
  } // end for each handler=0A=
}=0A=
WdsComponent.prototype.addHandlerFullScreen =3D function(method) {=0A=
  this.handlers.full_screen[this.handlers.full_screen.length] =3D method;=0A=
}=0A=
=0A=
//   This is the new fullscreen version, the old=0A=
//   fullscreen had hardcoded behavior in too many places.=0A=
WdsComponent.prototype.full_mode =3D null;=0A=
WdsComponent.prototype.handlers.full_mode =3D new Array();=0A=
WdsComponent.prototype.getFullMode =3D function() {=0A=
  return this.full_mode;=0A=
}=0A=
WdsComponent.prototype.setFullMode =3D function(value, no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getFullMode();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.full_mode =3D value;=0A=
  this.update('setFullMode', value, no_change);=0A=
=0A=
  if ((this.parent !=3D null)  && (this.parent !=3D this)) {=0A=
        this.parent.setFullMode(value, no_change);=0A=
  } // end if there is a parent to update=0A=
}=0A=
=0A=
WdsComponent.prototype.tracking_string =3D null;=0A=
WdsComponent.prototype.getTrackingString =3D function() {=0A=
  return this.tracking_string;=0A=
}=0A=
WdsComponent.prototype.setTrackingString =3D function(value) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getTrackingString();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.tracking_string =3D value;=0A=
  this.update('setTrackingString', value);=0A=
=0A=
  if ((this.parent !=3D null)  && (this.parent !=3D this)) {=0A=
        this.parent.setTrackingString(value);=0A=
  } // end if there is a parent to pdate=0A=
}=0A=
=0A=
WdsComponent.prototype.auth_ticket =3D null;=0A=
WdsComponent.prototype.getAuthTicket =3D function() {=0A=
  return this.auth_ticket;=0A=
}=0A=
WdsComponent.prototype.setAuthTicket =3D function(value) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getAuthTicket();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.auth_ticket =3D value;=0A=
  this.update('setAuthTicket', value);=0A=
=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setAuthTicket(value);=0A=
  } // end if there is a parent to update=0A=
}=0A=
=0A=
WdsComponent.prototype.http_url =3D null;=0A=
=0A=
WdsComponent.prototype.getUrl =3D function() {=0A=
  return this.http_url;=0A=
}=0A=
WdsComponent.prototype.setUrl =3D function(value) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getUrl();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.http_url =3D value;=0A=
  this.update('setUrl', value);=0A=
=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setUrl(value);=0A=
  } // end if there is a parent to update=0A=
}=0A=
=0A=
WdsComponent.prototype.getBrowser =3D function () {=0A=
  // use userAgent property to determine browser=0A=
  var agt=3Dnavigator.userAgent.toLowerCase();=0A=
  if (agt.indexOf("safari") !=3D -1) return '1'; // Safari=0A=
  if (agt.indexOf("msie") !=3D -1) return '2'; // IE=0A=
  else return '0'; // firefox or mozilla=0A=
}=0A=
=0A=
WdsComponent.prototype.setBrowser =3D function (value) {=0A=
  // DEPRECATED!=0A=
  // Leaving stub so template overrides and cached templates don't blow =
up=0A=
}=0A=
=0A=
WdsComponent.prototype.sub_id =3D null;=0A=
WdsComponent.prototype.getSubscriberId =3D function () {=0A=
  return this.sub_id;=0A=
}=0A=
WdsComponent.prototype.setSubscriberId =3D function (value) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getSubscriberId();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.sub_id =3D value;=0A=
  this.update('setSubscriberId', value);=0A=
=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setSubscriberId(value);=0A=
  } // end if there is a parent to update=0A=
}=0A=
=0A=
WdsComponent.prototype.sub_email =3D null;=0A=
WdsComponent.prototype.getSubscriberEmail =3D function () {=0A=
  return this.sub_email;=0A=
}=0A=
WdsComponent.prototype.setSubscriberEmail =3D function (value) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getSubscriberEmail();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.sub_email =3D value;=0A=
  this.update('setSubscriberEmail', value);=0A=
=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setSubscriberEmail(value);=0A=
  } // end if there is a parent to update=0A=
}=0A=
=0A=
WdsComponent.prototype.image_mode =3D null;=0A=
WdsComponent.prototype.handlers.image_mode =3D new Array();=0A=
WdsComponent.prototype.getImageMode =3D function() {=0A=
  return this.image_mode;=0A=
}=0A=
WdsComponent.prototype.setImageMode =3D function(value, no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getImageMode();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.image_mode =3D value;=0A=
  if (old_value !=3D null && !no_change) { this.onChangeImageMode(); }=0A=
  this.update('setImageMode', value, no_change);=0A=
=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setImageMode(value, no_change);=0A=
  } // end if there is a parent=0A=
}=0A=
WdsComponent.prototype.onChangeImageMode =3D function() {=0A=
  for (var i =3D 0; i < this.handlers.image_mode.length; i++) {=0A=
        this.handlers.image_mode[i]();=0A=
  } // end for each handler=0A=
}=0A=
WdsComponent.prototype.addHandlerImageMode =3D function(method) {=0A=
  this.handlers.image_mode[this.handlers.image_mode.length] =3D method;=0A=
}=0A=
=0A=
WdsComponent.prototype.search_type =3D null;=0A=
WdsComponent.prototype.handlers.search_type =3D new Array();=0A=
WdsComponent.prototype.getSearchType =3D function() {=0A=
  return this.search_type;=0A=
}=0A=
WdsComponent.prototype.setSearchType =3D function(value, no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getSearchType();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.search_type =3D value;=0A=
  this.update('setSearchType', value, no_change);=0A=
=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setSearchType(value, no_change);=0A=
  } // end if there is a parent=0A=
}=0A=
=0A=
=0A=
WdsComponent.prototype.search_string =3D null;=0A=
WdsComponent.prototype.handlers.search_string =3D new Array();=0A=
WdsComponent.prototype.getSearchString =3D function() {=0A=
  return this.search_string;=0A=
}=0A=
WdsComponent.prototype.setSearchString =3D function(value, no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getSearchString();=0A=
  if (value =3D=3D old_value) { return; }=0A=
=0A=
  this.search_string =3D value;=0A=
  if (old_value !=3D null && !no_change) { this.onChangeSearchString(); }=0A=
  this.update('setSearchString', value, no_change);=0A=
=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setSearchString(value, no_change);=0A=
  } // end if there is a parent=0A=
}=0A=
WdsComponent.prototype.onChangeSearchString =3D function() {=0A=
  for (var i =3D 0; i < this.handlers.search_string.length; i++) {=0A=
        this.handlers.search_string[i]();=0A=
  } // end for each handler=0A=
}=0A=
=0A=
WdsComponent.prototype.addHandlerSearchString =3D function(method) {=0A=
  //this.handlers.search_string.push(method);=0A=
  this.handlers.search_string[this.handlers.search_string.length] =3D =
method;=0A=
}=0A=
=0A=
/* Recursively calls a set method on all the=0A=
   subcomponents.*/=0A=
WdsComponent.prototype.update =3D function (method, value, no_change) {=0A=
  for (var i =3D 0; i < this.components.length; i++) {=0A=
        if (this.components[i] !=3D null) {=0A=
                this.components[i][method](value, no_change);=0A=
        } // end if not a null object=0A=
  } // end for each component registered=0A=
}=0A=
=0A=
//   Assembles and returns the querystring that can be=0A=
//   used for passing around component data.=0A=
WdsComponent.prototype.getQuerystring =3D function =
(exclude_pview,exclude_zoom) {=0A=
  var querystring =3D "";=0A=
=0A=
  // Check the page number to be displayed=0A=
=0A=
  var current_page =3D this.getCurrentPage();=0A=
=0A=
  // Check the page display (one or two page mode)=0A=
  // and force to an even page to follow publishing=0A=
  // conventions=0A=
=0A=
  var page_mode =3D this.getPageMode();=0A=
  if (page_mode) {=0A=
        if (page_mode =3D=3D TWO_PAGE_MODE) {=0A=
		var delta =3D 0;=0A=
		try {=0A=
			delta =3D (parseInt(current_page) + this.getHasPageZero()) % 2;=0A=
		} catch(err) { }=0A=
                current_page =3D current_page - delta;=0A=
        } // end if two page mode=0A=
        if (querystring.length > 0) { querystring +=3D "&" }=0A=
        querystring +=3D "pm=3D" + page_mode;=0A=
  } // end if two page mode=0A=
=0A=
  // Check image mode=0A=
=0A=
  var image_mode =3D this.getImageMode();=0A=
  if (image_mode !=3D null && image_mode =3D=3D SVG_IMAGE_MODE) {=0A=
        if (querystring.length > 0) { querystring +=3D "&" }=0A=
        querystring +=3D "img=3D" + "svg";=0A=
  } // end if svg image mode=0A=
=0A=
  // Add the zoom factor to the querystring=0A=
  if (!exclude_zoom) {=0A=
    var zoom_factor =3D this.getZoomFactor();=0A=
    if (zoom_factor) {=0A=
      if (querystring.length > 0) { querystring +=3D "&" }=0A=
      querystring +=3D "z=3D" + zoom_factor;=0A=
    }=0A=
  }=0A=
  if (!exclude_pview) {=0A=
    if (zoom_factor =3D=3D 'fw') {=0A=
        var pview_width =3D this.getPageviewerWidth();=0A=
        querystring +=3D "&pvieww=3D" + pview_width;=0A=
    } else if (zoom_factor =3D=3D 'fh') {=0A=
        var pview_height =3D this.getPageviewerHeight();=0A=
        querystring +=3D "&pviewh=3D" + pview_height;=0A=
    }=0A=
  }=0A=
=0A=
  // add zoom in factor if necessary=0A=
    var zoom_in_factor =3D this.getZoom_In_Factor();=0A=
    if (zoom_in_factor) {=0A=
        if (querystring.length > 0) { querystring +=3D "&" }=0A=
        querystring +=3D "zin=3D" + zoom_in_factor;=0A=
=0A=
        if ((zoom_in_factor =3D=3D 'fw') && =
(querystring.indexOf("&pvieww=3D") < 0)) {=0A=
                var pview_width =3D this.getPageviewerWidth();=0A=
                querystring +=3D "&pvieww=3D" + pview_width;=0A=
        } else if ((zoom_in_factor =3D=3D 'fh') && =
(querystring.indexOf("&pvieww=3D") < 0)) {=0A=
                var pview_height =3D this.getPageviewerHeight();=0A=
                querystring +=3D "&pviewh=3D" + pview_height;=0A=
        }=0A=
    }=0A=
=0A=
  // Maintain full screen state=0A=
=0A=
  var full_screen =3D this.getFullScreen();=0A=
  if (full_screen !=3D null) {=0A=
        if (this.name =3D=3D 'pviewfs') {=0A=
                if (querystring.length > 0) { querystring +=3D "&" }=0A=
                querystring +=3D "fs=3D" + full_screen;=0A=
        } // only append full screen if mode is on and fs window=0A=
        else if ((this.name =3D=3D 'search') && (this.parent.name =3D=3D =
'fullscreen')) {=0A=
                 if (querystring.length > 0) { querystring +=3D "&" }=0A=
                querystring +=3D "fs=3D" + full_screen;=0A=
        }=0A=
  } // end if full screen mode on=0A=
=0A=
  var u1 =3D this.getTrackingString();=0A=
  if (u1 !=3D null) {=0A=
        if (querystring.length > 0) { querystring +=3D "&"; }=0A=
        querystring +=3D "u1=3D" + u1;=0A=
  } // end if tracking string=0A=
=0A=
  var auth_ticket =3D this.getAuthTicket();=0A=
  if (auth_ticket !=3D null && auth_ticket.length > 0) {=0A=
        if (querystring.length > 0) { querystring +=3D "&"; }=0A=
        querystring +=3D "ticket=3D" + auth_ticket;=0A=
  } // end if authentication ticket=0A=
=0A=
  // Add the search string=0A=
=0A=
  var search_string =3D this.getSearchString();=0A=
  if (search_string !=3D null && search_string.length > 0) {=0A=
        search_string =3D escape(search_string);=0A=
        if (querystring.length > 0) { querystring +=3D "&" }=0A=
        querystring +=3D "search=3D" + search_string;=0A=
        var search_type =3D this.getSearchType();=0A=
        if (search_type !=3D null && search_type.length > 0) {=0A=
           querystring +=3D "&search_type=3D" + search_type;=0A=
        }=0A=
  } // end if there is a search string=0A=
=0A=
  // Add the users access type id=0A=
=0A=
  var sub_id =3D this.getSubscriberId();=0A=
  if (sub_id !=3D null && sub_id.length > 0) {=0A=
        if (querystring.length > 0) { querystring +=3D "&" }=0A=
        querystring +=3D "sub_id=3D" + sub_id;=0A=
  } // end if access type id found=0A=
=0A=
  if (querystring.length > 0) { querystring +=3D "&" }=0A=
  querystring +=3D "pg=3D" + current_page;=0A=
=0A=
  return querystring;=0A=
}=0A=
=0A=
WdsComponent.prototype.getPersistentParameters =3D function () {=0A=
  var parameters =3D "";=0A=
=0A=
  var auth_ticket =3D this.getAuthTicket();=0A=
  if (auth_ticket !=3D null) {=0A=
        if (parameters.length > 0) { parameters +=3D "&"; }=0A=
        parameters +=3D "ticket=3D" + auth_ticket;=0A=
  } // end if authentication ticket=0A=
=0A=
  return parameters;=0A=
}=0A=
=0A=
WdsComponent.prototype.handlers.overlay =3D new Array();=0A=
WdsComponent.prototype.overlay_position =3D new Array();=0A=
WdsComponent.prototype.overlay_names =3D new Array();=0A=
=0A=
WdsComponent.prototype.setOverlayPosition =3D function(overlay_name,x,y) =
{=0A=
    var pos =3D new Array();=0A=
    pos.name =3D overlay_name;=0A=
    pos.x =3D x;=0A=
    pos.y =3D y;=0A=
    this.overlay_position[overlay_name] =3D pos;=0A=
    if ((this.parent !=3D null) && (this.parent.name !=3D this.name)) {=0A=
        this.parent.setOverlayPosition(overlay_name,x,y);=0A=
    } // end if there is a parent=0A=
    this.update('updateOverlayPosition',pos,false);=0A=
}=0A=
WdsComponent.prototype.getOverlayPositionX =3D function(overlay_name) {=0A=
    var pos =3D this.overlay_position[overlay_name];=0A=
    if (pos) return pos.x;=0A=
    return null;=0A=
}=0A=
WdsComponent.prototype.getOverlayPositionY =3D function(overlay_name) {=0A=
    var pos =3D this.overlay_position[overlay_name];=0A=
    if (pos) return pos.y;=0A=
    return null;=0A=
}=0A=
WdsComponent.prototype.updateOverlayPosition =3D =
function(overlay_position) {=0A=
    this.overlay_position[overlay_position.name] =3D overlay_position;=0A=
}=0A=
WdsComponent.prototype.getOverlayState =3D function(overlay_name) {=0A=
    var pos =3D this.overlay_position[overlay_name];=0A=
    if (pos) return pos.state;=0A=
    return null;=0A=
}=0A=
WdsComponent.prototype.setOverlayState =3D function(overlay_name, state, =
no_change) {=0A=
  if (state =3D=3D null) { return; }=0A=
  if (name =3D=3D null) { return; }=0A=
  var value =3D state+"_"+overlay_name; //update only takes one value=0A=
=0A=
  // update overlay array=0A=
  var pos =3D this.overlay_position[overlay_name];=0A=
  if (!pos) {=0A=
        pos =3D new Array();=0A=
        pos.name =3D overlay_name;=0A=
        this.overlay_position[overlay_name] =3D pos;=0A=
  }=0A=
  pos.state =3D state;=0A=
=0A=
  this.update('updateOverlayState', value, no_change);=0A=
=0A=
  if ((this.parent !=3D null) && (this.parent.name !=3D this.name)) {=0A=
        this.parent.setOverlayState(overlay_name,state, no_change);=0A=
  } // end if there is a parent=0A=
  else {=0A=
        if (!no_change) { this.onChangeOverlayState(overlay_name,state); =
}=0A=
  }=0A=
}=0A=
WdsComponent.prototype.updateOverlayState =3D function(value, no_change) =
{=0A=
  if ((value =3D=3D null) || (no_change)) { return; }=0A=
  var name, state;=0A=
  var index =3D value.indexOf('_');=0A=
  state =3D value.substring(0,index);=0A=
  name =3D value.substring(index+1,value.length);=0A=
=0A=
  // update overlay array=0A=
  var pos =3D this.overlay_position[name];=0A=
  if (!pos) {=0A=
        pos =3D new Array();=0A=
        pos.name =3D name;=0A=
        this.overlay_position[name] =3D pos;=0A=
  }=0A=
  pos.state =3D state;=0A=
=0A=
  if (!no_change) { this.onChangeOverlayState(name,state); }=0A=
}=0A=
WdsComponent.prototype.onChangeOverlay =3D function(value) {=0A=
  var name, state;=0A=
  var index =3D value.indexOf('_');=0A=
  state =3D value.substring(0,index);=0A=
  name =3D value.substring(index+1,value.length);=0A=
  this.onChangeOverlayState(name,state);=0A=
}=0A=
=0A=
WdsComponent.prototype.onChangeOverlayState =3D function(name,state) {=0A=
  for (var i =3D 0; i < this.handlers.overlay.length; i++) {=0A=
        this.handlers.overlay[i](name,state);=0A=
  } // end for each handler=0A=
}=0A=
=0A=
WdsComponent.prototype.addHandlerOverlay =3D function(method) {=0A=
  this.handlers.overlay[this.handlers.overlay.length] =3D method;=0A=
}=0A=
=0A=
WdsComponent.prototype.addOverlayName =3D function(name) {=0A=
  this.overlay_names[this.overlay_names.length] =3D name;=0A=
}=0A=
=0A=
WdsComponent.prototype.closeOverlays =3D function() {=0A=
  for (var i=3D0;i<this.overlay_names.length;i++) {=0A=
    this.setOverlayState(this.overlay_names[i],"close");=0A=
  }=0A=
}=0A=
=0A=
function getFolioLabel(folio,isfirst) {=0A=
  var label;=0A=
  if (folio =3D=3D "Cover") {=0A=
     label =3D "Front Cover";=0A=
  }=0A=
  else if (folio =3D=3D "IFC") {=0A=
     label =3D  "Inside Front Cover";=0A=
  }=0A=
  else if (folio =3D=3D "BC") {=0A=
     label =3D "Back Cover";=0A=
  }=0A=
  else if (folio =3D=3D "IBC") {=0A=
     label =3D "Inside Back Cover";=0A=
  }=0A=
  else if (folio.indexOf("Insert") =3D=3D 0) {=0A=
     label =3D folio;=0A=
  }=0A=
  else {=0A=
     if (isfirst) {=0A=
      label =3D "Page "+ folio;=0A=
     }=0A=
     else {=0A=
       label =3D folio;=0A=
     }=0A=
  }=0A=
  return label;=0A=
}=0A=
=0A=
function getFolioLabelRange(folio1,folio2) {=0A=
 var first =3D getFolioLabel(folio1,"true");=0A=
 var label =3D "";=0A=
 if (!folio2) {=0A=
   label =3D first;=0A=
 }=0A=
 else {=0A=
   var next;=0A=
   if (first.indexOf("Page") =3D=3D 0) {=0A=
     next =3D getFolioLabel(folio2);=0A=
   }=0A=
   else {=0A=
     next =3D getFolioLabel(folio2,"true");=0A=
   }=0A=
   if (next) {=0A=
     label =3D first + '-' + next;=0A=
   }=0A=
   else {=0A=
     label =3D first;=0A=
   }=0A=
 }=0A=
 return label;=0A=
}=0A=
=0A=
WdsComponent.prototype.last_displayed_page =3D null;=0A=
WdsComponent.prototype.getLastDisplayedPage =3D function() {=0A=
  if (this.last_displayed_page) return =
parseInt(this.last_displayed_page);=0A=
  return this.last_displayed_page;=0A=
}=0A=
WdsComponent.prototype.setLastDisplayedPage =3D function(value, =
no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getLastDisplayedPage();=0A=
  if (value =3D=3D old_value) { return; }=0A=
  this.last_displayed_page =3D value;=0A=
  this.update('setLastDisplayedPage', value, no_change);=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setLastDisplayedPage(value, no_change);=0A=
  } // end if there is a parent=0A=
}=0A=
=0A=
WdsComponent.prototype.first_displayed_page =3D null;=0A=
WdsComponent.prototype.getFirstDisplayedPage =3D function() {=0A=
  if (this.first_displayed_page) return =
parseInt(this.first_displayed_page);=0A=
  return this.first_displayed_page;=0A=
}=0A=
WdsComponent.prototype.setFirstDisplayedPage =3D function(value, =
no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getFirstDisplayedPage();=0A=
  if (value =3D=3D old_value) { return; }=0A=
  this.first_displayed_page =3D value;=0A=
  this.update('setFirstDisplayedPage', value, no_change);=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setFirstDisplayedPage(value, no_change);=0A=
  } // end if there is a parent=0A=
}=0A=
=0A=
WdsComponent.prototype.has_page_zero =3D null;=0A=
WdsComponent.prototype.getHasPageZero =3D function() {=0A=
  if (this.has_page_zero) return parseInt(this.has_page_zero);=0A=
  return this.has_page_zero;=0A=
}=0A=
WdsComponent.prototype.setHasPageZero =3D function(value, no_change) {=0A=
  if (value =3D=3D null) { return; }=0A=
  var old_value =3D this.getHasPageZero();=0A=
  if (value =3D=3D old_value) { return; }=0A=
  this.has_page_zero =3D value;=0A=
  this.update('setHasPageZero', value, no_change);=0A=
  if ((this.parent !=3D null) && (this.parent !=3D this)) {=0A=
        this.parent.setHasPageZero(value, no_change);=0A=
  } // end if there is a parent=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/templates/include/javascript/wds_info.js

function WdsInfo() {=0A=
}=0A=
=0A=
WdsInfo.prototype.pages =3D new Array();=0A=
WdsInfo.prototype.clearPageArray =3D function() {=0A=
  this.pages =3D new Array();=0A=
}=0A=
=0A=
WdsInfo.prototype.addPage =3D =
function(number,folio,filename,width,height,allowed) {=0A=
  var newPage =3D new Array();=0A=
  newPage.folio =3D folio;=0A=
  newPage.filename =3D filename;=0A=
  newPage.width =3D width;=0A=
  newPage.height =3D height;=0A=
  newPage.allowed =3D allowed;=0A=
  this.pages[parseInt(number)] =3D newPage;=0A=
}=0A=
=0A=
WdsInfo.prototype.getPage =3D function(number) {=0A=
  if (!number) return ;=0A=
  var pg =3D this.pages[parseInt(number)];=0A=
  return pg;=0A=
}=0A=
=0A=
WdsInfo.prototype.getPageFilename =3D function(number) {=0A=
  var pg =3D this.getPage(number);=0A=
  if (pg) {=0A=
    return pg.filename;=0A=
  }=0A=
  return ;=0A=
}=0A=
=0A=
WdsInfo.prototype.getPageFolio =3D function(number) {=0A=
  var pg =3D this.getPage(number);;=0A=
  if (pg) {=0A=
    return pg.folio;=0A=
  }=0A=
  return ;=0A=
}=0A=
=0A=
WdsInfo.prototype.getPageImgName =3D function(number, zoom) {=0A=
  var pg =3D this.getPage(number);=0A=
  if (pg && this.location) {=0A=
    return this.location+"/imgpages/"+ zoom+"/"+pg.filename;=0A=
  }=0A=
}=0A=
=0A=
WdsInfo.prototype.getPageWidth =3D function(number) {=0A=
  var pg =3D this.getPage(number);=0A=
  if (pg) {=0A=
    return pg.width;=0A=
  }=0A=
  return ;=0A=
}=0A=
=0A=
WdsInfo.prototype.getPageHeight =3D function(number) {=0A=
  var pg =3D this.getPage(number);=0A=
  if (pg) {=0A=
    return pg.height;=0A=
  }=0A=
  return ;=0A=
}=0A=
=0A=
WdsInfo.prototype.getPageAllowed =3D function(number) {=0A=
  var pg =3D this.getPage(number);=0A=
  if (pg) {=0A=
    return pg.allowed;=0A=
  }=0A=
  return ;=0A=
}=0A=
=0A=
WdsInfo.prototype.location;=0A=
WdsInfo.prototype.setLocation =3D function(loc) {=0A=
  this.location =3D loc;=0A=
}=0A=
WdsInfo.prototype.getLocation =3D function(loc) {=0A=
  return this.location;=0A=
}=0A=
=0A=
WdsInfo.prototype.imgmode;=0A=
WdsInfo.prototype.setImgmode =3D function(imode) {=0A=
  this.imgmode =3D imode;=0A=
}=0A=
=0A=
WdsInfo.prototype.zooms =3D new Array();=0A=
WdsInfo.prototype.addZoom =3D function(myzoom) {=0A=
  this.zooms[this.zooms.length] =3D myzoom;=0A=
}=0A=
WdsInfo.prototype.getZoomArray =3D function() {=0A=
  return this.zooms;=0A=
}=0A=
=0A=
WdsInfo.prototype.getZoomIndex =3D function(value) {=0A=
  var index;=0A=
  for (var i=3D this.zooms.length; i >=3D 1 ; i--) {=0A=
    var zoomval =3D this.zooms[i-1];=0A=
    if ((zoomval !=3D 'fw') && (zoomval !=3D 'fh') =0A=
       && (zoomval =3D=3D value)) {=0A=
            index =3D i;=0A=
    }=0A=
  }=0A=
  if (!index) index =3D this.zooms.length;=0A=
  return index;=0A=
}=0A=
=0A=
WdsInfo.prototype.getFitWidthZoomArgs =3D function(wds) {=0A=
       var zoomArray =3D this.getZoomArray();=0A=
       var page =3D wds.getCurrentPage();=0A=
       if (!page) page =3D "1";=0A=
       var pagew =3D this.getPageWidth(page);=0A=
       var pagemode =3D wds.getPageMode();=0A=
       if (!pagemode) pagemode =3D "2";=0A=
       if (pagew && zoomArray) {=0A=
         var zoom_source;=0A=
         var width =3D parseInt(pagew);=0A=
         if (pagemode =3D=3D '2') {=0A=
            var pagew2 =3D this.getPageWidth(parseInt(page)+1);=0A=
            width =3D width + parseInt(pagew2);=0A=
         }=0A=
         var zoom_factor =3D getWidth() * 100 / width;=0A=
         var index;=0A=
         for (var i=3D 0; i < zoomArray.length ; i++) {=0A=
           var zoomval =3D zoomArray[i];=0A=
           if ((zoomArray[i] !=3D 'fw') && (zoomArray[i] !=3D 'fh') && =
(zoomArray[i] <=3D zoom_factor)) {=0A=
              zoom_source =3D zoom_factor;=0A=
              index =3D i;=0A=
           }=0A=
         }=0A=
         if (!zoom_source) return;=0A=
         if (zoom_source > zoom_factor) return;=0A=
         while ((zoomArray[index] =3D=3D 'fw') || (zoomArray[index] =
=3D=3D 'fh')) index--;=0A=
         var zoom_arg =3D "&z=3D"+zoomArray[index];=0A=
         return zoom_arg;=0A=
       }=0A=
}=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/default/javascript/utilities.js

/*=0A=
  Cross browser utility functions.=0A=
*/=0A=
=0A=
// gets an object given it's id value=0A=
function getById(objId) {=0A=
  var myObj;=0A=
  if (document.all && !document.getElementById) {=0A=
    myObj =3D eval('document.all.' + objId);=0A=
  }=0A=
  else if (document.layers) {=0A=
    myObj =3D eval('document.' + objId);=0A=
  }=0A=
  else if (document.getElementById) {=0A=
    myObj =3D document.getElementById(objId);=0A=
  }=0A=
  return myObj;=0A=
}=0A=
=0A=
// gets the x coordinates for event e=0A=
function getX(e) {=0A=
  if (e.pageX || e.pageY) {=0A=
    return e.pageX;=0A=
  }=0A=
  else if (e.clientX || e.clientY) {=0A=
    if (document.body.scrollLeft) {=0A=
      return e.clientX + document.body.scrollLeft;=0A=
    }=0A=
    else {=0A=
      return e.clientX;=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
// gets the y coordinates for event e=0A=
function getY(e) {=0A=
 if (e.pageX || e.pageY) {=0A=
    return e.pageY;=0A=
  }=0A=
  else if (e.clientX || e.clientY) {=0A=
    if (document.body.scrollTop) {=0A=
      return e.clientY + document.body.scrollTop;=0A=
    }=0A=
    else {=0A=
      return e.clientY;=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
// gets target for event e=0A=
function getTarget(e) {=0A=
  var targ;=0A=
 if (!e)  e =3D window.event;=0A=
 if (e.target) targ =3D e.target;=0A=
 else if (e.srcElement) targ =3D e.srcElement;=0A=
 if (targ.nodeType =3D=3D 3) // defeat Safari bug=0A=
    targ =3D targ.parentNode;=0A=
 return targ;=0A=
}=0A=
// returns the frame height=0A=
function getHeight() {=0A=
    var height;=0A=
    if (self.innerHeight) {=0A=
      height =3D self.innerHeight;=0A=
    }=0A=
    else if (document.documentElement && =
document.documentElement.clientHeight) {=0A=
        height =3D document.documentElement.clientHeight;=0A=
    }=0A=
    else if (document.body) {=0A=
        height =3D document.body.clientHeight;=0A=
    }=0A=
    else {=0A=
        // don't know height=0A=
        height =3D 0;=0A=
    }=0A=
    return height;=0A=
}=0A=
=0A=
// returns the frame width=0A=
function getWidth() {=0A=
    var width;=0A=
    if (self.innerWidth) {=0A=
      width =3D self.innerWidth;=0A=
    }=0A=
    else if (document.documentElement && =
document.documentElement.clientWidth) {=0A=
        width =3D document.documentElement.clientWidth;=0A=
    }=0A=
    else if (document.body) {=0A=
        width =3D document.body.clientWidth;=0A=
    }=0A=
    else {=0A=
        // don't know width=0A=
        width =3D 0;=0A=
    }=0A=
    return width;=0A=
}=0A=
=0A=
function getScrollX() {=0A=
  var x;=0A=
  if (self.pageXOffset) // all except Explorer=0A=
  {=0A=
	x =3D self.pageXOffset;=0A=
  }=0A=
  else if (document.documentElement && =
document.documentElement.scrollTop)=0A=
	// Explorer 6 Strict=0A=
  {=0A=
	x =3D document.documentElement.scrollLeft;=0A=
  }=0A=
  else if (document.body) // all other Explorers=0A=
  {=0A=
	x =3D document.body.scrollLeft;=0A=
  }=0A=
  return x;=0A=
}=0A=
=0A=
function getScrollY() {=0A=
  var y;=0A=
  if (self.pageYOffset) // all except Explorer=0A=
  {=0A=
        y =3D self.pageYOffset;=0A=
  }=0A=
  else if (document.documentElement && =
document.documentElement.scrollTop)=0A=
        // Explorer 6 Strict=0A=
  {=0A=
        y =3D document.documentElement.scrollTop;=0A=
  }=0A=
  else if (document.body) // all other Explorers=0A=
  {=0A=
        y =3D document.body.scrollTop;=0A=
  }=0A=
  return y;=0A=
}=0A=
=0A=
=0A=
// determines if the given string is a single digit=0A=
function isDigit(num) {=0A=
  if (!num) {=0A=
   return false;=0A=
  }=0A=
  for (var i=3D0;i<num.length;i++) {  =0A=
    var string=3D"1234567890";=0A=
    if (string.indexOf(num.substring(i,i+1))=3D=3D-1){return false;}=0A=
  }=0A=
  return true;=0A=
}=0A=
=0A=
function isSafari() {=0A=
  var is_konq =3D (navigator.vendor =3D=3D =
'KDE')||(document.childNodes)&&(!document.all)&&(!navigator.taintEnabled)=
?true:false;=0A=
 return is_konq;=0A=
}=0A=
=0A=
/*=0A=
   name - name of the cookie=0A=
   value - value of the cookie=0A=
   [expires] - expiration date of the cookie=0A=
     (defaults to end of current session)=0A=
   [path] - path for which the cookie is valid=0A=
     (defaults to path of calling document)=0A=
   [domain] - domain for which the cookie is valid=0A=
     (defaults to domain of calling document)=0A=
   [secure] - Boolean value indicating if the cookie transmission =
requires=0A=
     a secure transmission=0A=
   * an argument defaults when it is assigned null as a placeholder=0A=
   * a null placeholder is not required for trailing omitted arguments=0A=
*/=0A=
=0A=
function setCookie(name, value, expires, path, domain, secure) {=0A=
  var curCookie =3D name + "=3D" + escape(value) +=0A=
      ((expires) ? "; expires=3D" + expires.toGMTString() : "") +=0A=
      ((path) ? "; path=3D" + path : "") +=0A=
      ((domain) ? "; domain=3D" + domain : "") +=0A=
      ((secure) ? "; secure" : "");=0A=
  document.cookie =3D curCookie;=0A=
}=0A=
=0A=
=0A=
/*=0A=
  name - name of the desired cookie=0A=
  return string containing value of specified cookie or null=0A=
  if cookie does not exist=0A=
*/=0A=
=0A=
function getCookie(name) {=0A=
  var dc =3D document.cookie;=0A=
  var prefix =3D name + "=3D";=0A=
  var begin =3D dc.indexOf("; " + prefix);=0A=
  if (begin =3D=3D -1) {=0A=
    begin =3D dc.indexOf(prefix);=0A=
    if (begin !=3D 0) return null;=0A=
  } else=0A=
    begin +=3D 2;=0A=
  var end =3D document.cookie.indexOf(";", begin);=0A=
  if (end =3D=3D -1)=0A=
    end =3D dc.length;=0A=
  return unescape(dc.substring(begin + prefix.length, end));=0A=
}=0A=
=0A=
/*=0A=
   name - name of the cookie=0A=
   [path] - path of the cookie (must be same as path used to create =
cookie)=0A=
   [domain] - domain of the cookie (must be same as domain used to=0A=
     create cookie)=0A=
   path and domain default if assigned null or omitted if no explicit=0A=
     argument proceeds=0A=
*/=0A=
=0A=
function deleteCookie(name, path, domain) {=0A=
  if (getCookie(name)) {=0A=
    document.cookie =3D name + "=3D" +=0A=
    ((path) ? "; path=3D" + path : "") +=0A=
    ((domain) ? "; domain=3D" + domain : "") +=0A=
    "; expires=3DThu, 01-Jan-70 00:00:01 GMT";=0A=
  }=0A=
}=0A=
=0A=
// date - any instance of the Date object=0A=
// * hand all instances of the Date object to this function for "repairs"=0A=
=0A=
function fixDate(date) {=0A=
  var base =3D new Date(0);=0A=
  var skew =3D base.getTime();=0A=
  if (skew > 0)=0A=
    date.setTime(date.getTime() - skew);=0A=
}=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/change_page_buttons.js

=0A=
/* ************************************************** =0A=
   setButtonStates()=0A=
=0A=
   Depending on the current page, certain buttons =0A=
   should not be available.  This is visually depicted =0A=
   by greying them out.=0A=
=0A=
   TODO: these are hard-coded values.  That's not ideal.=0A=
=0A=
 ************************************************** */=0A=
=0A=
function setButtonStates () {=0A=
=0A=
  // Set state for first and previous pages=0A=
=0A=
  var current_page =3D nav.getCurrentPage();=0A=
  var orientation =3D getCurrentOrientation();=0A=
  var page_mode =3D nav.getPageMode();=0A=
  var has_page_zero =3D nav.getHasPageZero();=0A=
=0A=
  // make sure current page is left-hand page=0A=
  if (page_mode =3D=3D TWO_PAGE_MODE) {=0A=
    if (current_page > first_page =0A=
	&& current_page % 2 !=3D has_page_zero) {=0A=
      current_page--;=0A=
    }=0A=
  }=0A=
=0A=
  if (current_page > first_page) {=0A=
	document.fp.src =3D "/newui/icons/first_page.gif";=0A=
	document.bp.src =3D "/newui/icons/previous_page.gif";=0A=
  } else {=0A=
	document.fp.src =3D "/newui/icons/first_page_grey.gif";=0A=
	document.bp.src =3D "/newui/icons/previous_page_grey.gif";=0A=
  } // end if the current page is not the first page=0A=
=0A=
  // Set the state for next and last pages=0A=
=0A=
  if (page_mode =3D=3D TWO_PAGE_MODE) {=0A=
	current_page++;=0A=
  } // end if two page mode=0A=
=0A=
  if (current_page < last_page) {=0A=
	document.np.src =3D "/newui/icons/next_page.gif";=0A=
 	document.lp.src =3D "/newui/icons/last_page.gif";=0A=
  } else {=0A=
	document.np.src =3D "/newui/icons/next_page_grey.gif";=0A=
	document.lp.src =3D "/newui/icons/last_page_grey.gif";=0A=
  } // end if the current page is not the last page=0A=
}=0A=
=0A=
/* ************************************************** =0A=
   handleFirstPage()=0A=
=0A=
   Several functions to handle events relating to the =0A=
   first page button (the <| button)=0A=
=0A=
 ************************************************** */=0A=
=0A=
function handleFirstPageMouseOver (obj, val) {=0A=
  var page_mode =3D nav.getPageMode();=0A=
  var page =3D getNextAllowedPage(first_page-page_mode);=0A=
  var current =3D parseInt(nav.getCurrentPage());=0A=
  if ((page !=3D null) && (page !=3D current))=0A=
	obj.src =3D val;=0A=
}=0A=
=0A=
function handleFirstPageMouseOut (obj, val) {=0A=
  var page_mode =3D nav.getPageMode();=0A=
  var page =3D getNextAllowedPage(first_page-page_mode);=0A=
  var current =3D parseInt(nav.getCurrentPage());=0A=
  if ((page !=3D null) && (page !=3D current))=0A=
	obj.src =3D val;=0A=
}=0A=
=0A=
function handleFirstPageClick () {=0A=
  var page_mode =3D nav.getPageMode();=0A=
  page =3D getNextAllowedPage(first_page-page_mode);=0A=
  if (page =3D=3D null) {=0A=
    // TODO=0A=
  } else {=0A=
    nav.setCurrentPage(page);=0A=
  }=0A=
}=0A=
=0A=
/* ************************************************** =0A=
   handlePreviousPage()=0A=
=0A=
   Several functions to handle events relating to the =0A=
   previous page button (the < button)=0A=
=0A=
 ************************************************** */=0A=
=0A=
function handlePreviousPageMouseOver (obj, val) {=0A=
  if (getPreviousAllowedPage() !=3D null || out_of_bounds_url !=3D '')=0A=
	obj.src =3D val;=0A=
}=0A=
=0A=
function handlePreviousPageMouseOut (obj, val) {=0A=
  if (getPreviousAllowedPage() !=3D null || out_of_bounds_url !=3D '')=0A=
	obj.src =3D val;=0A=
}=0A=
=0A=
function handlePreviousPageClick () {=0A=
  var current_page =3D nav.getCurrentPage();=0A=
  if (current_page <=3D first_page) {=0A=
	return;=0A=
  } // end if current page is out of bounds=0A=
=0A=
  var previous_page =3D getPreviousAllowedPage();=0A=
  if (previous_page =3D=3D null) {=0A=
    if (out_of_bounds_url !=3D '') {=0A=
      // Go to the subscribe page=0A=
      top.location.href =3D out_of_bounds_url=0A=
    }=0A=
  } else {=0A=
    nav.setCurrentPage(previous_page);=0A=
  }=0A=
}=0A=
=0A=
function getPreviousAllowedPage(current_page) {=0A=
  if (current_page =3D=3D null) current_page =3D nav.getCurrentPage();=0A=
  var previous_page =3D current_page;=0A=
  var current_is_even =3D (current_page % 2 =3D=3D 0) ? 1 : 0;=0A=
  var page_mode =3D nav.getPageMode();=0A=
=0A=
  // Make sure we're on a left page=0A=
  if (page_mode =3D=3D TWO_PAGE_MODE && current_is_even =3D=3D =
has_page_zero) {=0A=
    previous_page--;=0A=
  }=0A=
=0A=
  while (1) {=0A=
    previous_page--;=0A=
    // In two page mode, we must move two pages at a time=0A=
    if (page_mode =3D=3D TWO_PAGE_MODE && previous_page > first_page) =
previous_page--;=0A=
=0A=
    if (previous_page < first_page) {=0A=
        return null;=0A=
    }=0A=
    if (top.wdsInfo.getPageAllowed(previous_page) =3D=3D 1 ||=0A=
        (page_mode =3D=3D TWO_PAGE_MODE && =
top.wdsInfo.getPageAllowed(previous_page+1) =3D=3D 1)) {=0A=
        if (previous_page < first_page) return first_page;=0A=
        return previous_page;=0A=
    }=0A=
  }=0A=
=0A=
  return null; // We shouldn't get here, anyhow=0A=
}=0A=
=0A=
/* ************************************************** =0A=
   handleNextPage()=0A=
=0A=
   Several functions to handle events relating to the =0A=
   next page button (the > button)=0A=
=0A=
 ************************************************** */=0A=
=0A=
function handleNextPageMouseOver (obj, val) {=0A=
  if (getNextAllowedPage() !=3D null || out_of_bounds_url !=3D '')=0A=
	obj.src =3D val;=0A=
}=0A=
=0A=
function handleNextPageMouseOut (obj, val) {=0A=
  if (getNextAllowedPage() !=3D null || out_of_bounds_url !=3D '')=0A=
	obj.src =3D val;=0A=
}=0A=
=0A=
function handleNextPageClick () {=0A=
  var current_page =3D nav.getCurrentPage();=0A=
=0A=
  if (current_page >=3D last_page) {=0A=
	return;=0A=
  } // end if current page is out of bounds=0A=
=0A=
  var next_page =3D getNextAllowedPage();=0A=
  if (next_page =3D=3D null) {=0A=
    if (out_of_bounds_url !=3D '') {=0A=
      // Go to the subscribe page=0A=
      top.location.href =3D out_of_bounds_url=0A=
    }=0A=
  } else {=0A=
    nav.setCurrentPage(next_page);=0A=
  }=0A=
}=0A=
=0A=
function getNextAllowedPage(current_page) {=0A=
  if (current_page =3D=3D null) current_page =3D nav.getCurrentPage();=0A=
  var next_page =3D current_page;=0A=
  var current_is_even =3D (current_page % 2 =3D=3D 0) ? 1 : 0;=0A=
  var page_mode =3D nav.getPageMode();=0A=
=0A=
  // Make sure we're on a left page=0A=
  if (page_mode =3D=3D TWO_PAGE_MODE && current_is_even =3D=3D =
has_page_zero) {=0A=
    next_page--;=0A=
  }=0A=
=0A=
  while (1) {=0A=
    next_page++;=0A=
    // In two page mode, we must move two pages at a time=0A=
    if (page_mode =3D=3D TWO_PAGE_MODE && next_page < last_page) =
next_page++;=0A=
=0A=
    if (next_page > last_page) return null;=0A=
    if (top.wdsInfo.getPageAllowed(next_page) =3D=3D 1 ||=0A=
        (next_page + 1 <=3D last_page && page_mode =3D=3D TWO_PAGE_MODE =
&&=0A=
         top.wdsInfo.getPageAllowed(next_page+1) =3D=3D 1)) {=0A=
        if (next_page < first_page) return first_page;=0A=
        return next_page;=0A=
    }=0A=
  }=0A=
=0A=
  return null; // We shouldn't get here, anyhow=0A=
}=0A=
=0A=
/* ************************************************** =0A=
   handleLastPage()=0A=
=0A=
   Several functions to handle events relating to the =0A=
   last page button (the |> button)=0A=
=0A=
 ************************************************** */=0A=
=0A=
function handleLastPageMouseOver (obj, val) {=0A=
  var page_mode =3D nav.getPageMode();=0A=
  var page =3D getPreviousAllowedPage(last_page+page_mode);=0A=
  var current =3D parseInt(nav.getCurrentPage());=0A=
  if ((page !=3D null) && (page !=3D current))=0A=
	obj.src =3D val;=0A=
}=0A=
=0A=
function handleLastPageMouseOut (obj, val) {=0A=
  var page_mode =3D nav.getPageMode();=0A=
  var page =3D getPreviousAllowedPage(last_page+page_mode);=0A=
  var current =3D parseInt(nav.getCurrentPage());=0A=
  if ((page !=3D null) && (page !=3D current))=0A=
	obj.src =3D val;=0A=
}=0A=
=0A=
function handleLastPageClick () {=0A=
  var page_mode =3D nav.getPageMode();=0A=
  var page =3D getPreviousAllowedPage(last_page+page_mode);=0A=
  if (page =3D=3D null) {=0A=
    // TODO=0A=
  } else {=0A=
    nav.setCurrentPage(page);=0A=
  }=0A=
}=0A=
=0A=
/* **************************************************=0A=
   PageValue()=0A=
=0A=
   Functions for setting and retrieving the value of=0A=
   the current page as stored in a form element.=0A=
=0A=
 ************************************************** */=0A=
=0A=
function getPageValue () {=0A=
  if (document.navit) {=0A=
    var current_page =3D document.navit.pgno.value;=0A=
=0A=
    if (current_page > last_page) {=0A=
        current_page =3D last_page;=0A=
    } // end if beyond the last page=0A=
=0A=
    if (current_page < first_page) {=0A=
        current_page =3D first_page;=0A=
    } // end if before the first page=0A=
  } else {=0A=
    current_page =3D 1;=0A=
  }=0A=
=0A=
  return current_page;=0A=
}=0A=
=0A=
function setPageValue (page) {=0A=
  var current_page =3D getPageValue();=0A=
  if (page !=3D current_page) {=0A=
        for (var i=3D0; i < document.navit.pgno.length; i++) {=0A=
                if (document.navit.pgno.options[i].value =3D=3D page) {=0A=
                        document.navit.pgno.selectedIndex =3D i;=0A=
                        break;=0A=
                } // end if value matches=0A=
        } // end for each item in dropdown menu=0A=
  } // end if page to set is not the current page=0A=
}=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/two_page.js

=0A=
/* **************************************************=0A=
   handlePageMode()=0A=
=0A=
   Several functions to handle events relating to =0A=
   the page mode (1-page or 2-page).  When in a =0A=
   particular page mode, display icons for the =0A=
   opposite.=0A=
=0A=
   TODO: hard coded fw value here=0A=
   TODO: another gotcha with side-effect of dimensions on fw=0A=
=0A=
 ************************************************** */=0A=
=0A=
function handlePageModeMouseOver (obj, val_1p, val_2p) {=0A=
  var page_mode =3D nav.getPageMode();=0A=
  if (page_mode =3D=3D TWO_PAGE_MODE) {=0A=
  	obj.src =3D val_1p;=0A=
  } else if (page_mode =3D=3D ONE_PAGE_MODE) {=0A=
	obj.src =3D val_2p;=0A=
  } // end if one or two page mode=0A=
}=0A=
=0A=
function handlePageModeMouseOut (obj, val_1p, val_2p) {=0A=
  var page_mode =3D nav.getPageMode();=0A=
  if (page_mode =3D=3D TWO_PAGE_MODE) {=0A=
	obj.src =3D val_1p;=0A=
  } else if (page_mode =3D=3D ONE_PAGE_MODE) {=0A=
	obj.src =3D val_2p;=0A=
  } // end if one or two page mode=0A=
}=0A=
=0A=
function handlePageModeClick (obj, val_1p, val_2p, alt_1p, alt_2p) {=0A=
  var page_mode =3D nav.getPageMode();=0A=
=0A=
  if (page_mode =3D=3D ONE_PAGE_MODE) {=0A=
	setZoomFactor("fw");=0A=
	var zoom_factor =3D getZoomFactor();=0A=
	nav.setZoomFactor(zoom_factor, 1);=0A=
	obj.src =3D val_1p;=0A=
	obj.alt =3D alt_1p;=0A=
	obj.title =3D alt_1p;=0A=
	nav.setPageMode(TWO_PAGE_MODE);=0A=
  } else if (page_mode =3D=3D TWO_PAGE_MODE) {=0A=
	obj.src =3D val_2p;=0A=
	obj.alt =3D alt_2p;=0A=
	obj.title =3D alt_2p;=0A=
	nav.setPageMode(ONE_PAGE_MODE);=0A=
  } // end if one or two page mode=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/zoom.js

=0A=
  function handleZoomFactorChange() {=0A=
	var zoom_factor =3D nav.getZoomFactor();=0A=
	setZoomFactor(zoom_factor);=0A=
  }=0A=
  nav.addHandlerZoomFactor(handleZoomFactorChange);=0A=
=0A=
/* **************************************************=0A=
   handleZoomOut()=0A=
=0A=
   Several functions to handle events relating to the=0A=
   zoom out button (the - button).=0A=
=0A=
 ************************************************** */=0A=
=0A=
function handleZoomOutMouseOver (obj, val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleZoomOutMouseOut (obj, val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleZoomOutClick () {=0A=
  var current_zoom =3D nav.getZoomFactor();=0A=
  if (current_zoom =3D=3D "fw" || current_zoom =3D=3D "fh") {=0A=
	current_zoom =3D nav.getActualZoomFit();=0A=
  } // end if fit to window=0A=
=0A=
  var zoom_index =3D getZoomFactorIndex(current_zoom);=0A=
=0A=
  if (zoom_index > 0) {=0A=
	zoom_index--;=0A=
  } else {=0A=
	return;=0A=
  } // Check that zoom index is not out of bounds=0A=
=0A=
  setZoomFactorIndex(zoom_index);=0A=
  var zoom_factor =3D getZoomFactor();=0A=
  nav.setZoomFactor(zoom_factor);=0A=
}=0A=
=0A=
/* **************************************************=0A=
   handleZoomIn()=0A=
=0A=
   Several functions to handle events relating to the=0A=
   zoom in button (the + button).=0A=
=0A=
 ************************************************** */=0A=
=0A=
function handleZoomInMouseOver (obj, val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleZoomInMouseOut (obj, val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleZoomInClick () {=0A=
=0A=
  // Zoom in increments the zoom value instead =0A=
  // of jumping indexes because we're not sure =0A=
  // where the top value is.=0A=
=0A=
  var zoom_factor =3D getZoomFactor();=0A=
=0A=
  if (zoom_factor =3D=3D "fh" || zoom_factor =3D=3D "fw") {=0A=
	zoom_factor =3D nav.getActualZoomFit();=0A=
  } // fit height and width should go to next approximate size=0A=
=0A=
  zoom_factor++;=0A=
  setZoomFactor(zoom_factor);=0A=
  nav.setZoomFactor(getZoomFactor());=0A=
}=0A=
=0A=
=0A=
/* **************************************************=0A=
   ZoomFactor()=0A=
=0A=
   Accessor and modifier methods for the current value =0A=
   of the zoom factor as well as the index value.=0A=
=0A=
   TODO: checks for fit values of fw and fh hard-coded=0A=
   TODO: assumes object naming convention=0A=
   TODO: ugly side effect used for setting width/height of pview=0A=
=0A=
 ************************************************** */=0A=
=0A=
function getZoomFactor() {=0A=
  var zoom_factor =3D document.zoomform.zoom.value;=0A=
=0A=
  if (zoom_factor =3D=3D "fh") {=0A=
        //var dimensions =3D getPageviewerDimensions();=0A=
	//nav.setPageviewerHeight(dimensions.height);=0A=
	zoom_factor =3D "fh";=0A=
	return zoom_factor;=0A=
  } else if (zoom_factor =3D=3D "fw") {=0A=
        //var dimensions =3D getPageviewerDimensions();=0A=
	//nav.setPageviewerWidth(dimensions.width);=0A=
	zoom_factor =3D "fw";=0A=
	return zoom_factor;=0A=
  } // end if fit width or fit height=0A=
=0A=
  zoom_factor =3D Math.round(zoom_factor);=0A=
=0A=
  var image_mode =3D nav.getImageMode();=0A=
  if (image_mode !=3D SVG_IMAGE_MODE) {=0A=
	zoom_factor =3D getZoomFactorBucket(zoom_factor);=0A=
  } // end if not svg mode=0A=
=0A=
  return zoom_factor;=0A=
}=0A=
=0A=
function setZoomFactor(new_zoom) {=0A=
  if (!document.zoomform) return;=0A=
  var zoom =3D document.zoomform.zoom;=0A=
  if (new_zoom !=3D zoom.value) {=0A=
	for (var i=3D0; i < zoom.length; i++) {=0A=
		if (new_zoom =3D=3D 'fw' && zoom.options[i].value =3D=3D 'fw') {=0A=
			zoom.selectedIndex =3D i;=0A=
			break;=0A=
		} // end if setting to fit-width=0A=
=0A=
		if (new_zoom =3D=3D 'fh' && zoom.options[i].value =3D=3D 'fh') {=0A=
			zoom.selectedIndex =3D i;=0A=
			break;=0A=
		} // end if setting to fit-height=0A=
=0A=
		// Assumes that the zoom factors are =0A=
		// ordered ascending, stops once fit =0A=
		// values are reached.=0A=
		=0A=
		if (zoom.options[i].value =3D=3D 'fw' || =0A=
		    zoom.options[i].value =3D=3D 'fh') {=0A=
			zoom.selectedIndex =3D i - 1;=0A=
			break;=0A=
		} // end if reached fit width or fit height=0A=
=0A=
		if (Number(new_zoom) <=3D Number(zoom.options[i].value)) {=0A=
			zoom.selectedIndex =3D i;=0A=
			break;=0A=
		} // end if value matches=0A=
	} // end for each item=0A=
  } // end if not already the same=0A=
  var zoom_factor =3D getZoomFactor();=0A=
  return zoom_factor;=0A=
}=0A=
=0A=
function getZoomFactorIndex(current_zoom) {=0A=
  var zoom =3D document.zoomform.zoom;=0A=
  for (var i=3D0; i < zoom.length; i++) {=0A=
	if (current_zoom =3D=3D zoom.options[i].value) {=0A=
		return i;=0A=
	} // end if value matches=0A=
  } // end for each item in dropdown	=0A=
}=0A=
=0A=
function setZoomFactorIndex(zoom_index) {=0A=
  document.zoomform.zoom.selectedIndex =3D zoom_index;=0A=
}=0A=
=0A=
/* **************************************************=0A=
   getZoomFactorBucket()=0A=
=0A=
   Returns the zoom value from the zoom dropdown that =0A=
   most closely matches the zoom factor given.  Assumes =0A=
   zoom dropdown is in ascending order.=0A=
=0A=
 ************************************************** */=0A=
=0A=
function getZoomFactorBucket(zoom_factor) {=0A=
  var zoom =3D document.zoomform.zoom;=0A=
  for (var i=3D0; i < zoom.length; i++) {=0A=
	if (zoom.options[i].value =3D=3D 'fw' || =0A=
	    zoom.options[i].value =3D=3D 'fh') {=0A=
		return zoom.options[i-1].value;=0A=
		break;=0A=
	} // end if reached fit width or fit height=0A=
=0A=
	if (zoom_factor <=3D zoom.options[i].value) {=0A=
		return zoom.options[i].value;=0A=
		break;=0A=
	} // end if value is in range=0A=
  } // end for each item in zoom dropdown=0A=
}=0A=
=0A=
/* **************************************************=0A=
   getPageviewerDimensions()=0A=
=0A=
   Returns a two dimensional array of the width and =0A=
   height of the pageviewer window.=0A=
=0A=
   TODO: pview vs. pviewfs is awkward=0A=
=0A=
 ************************************************** */=0A=
=0A=
function getPageviewerDimensions () {=0A=
  var dimensions =3D new Object();=0A=
=0A=
  // Because of the Mozilla bug, we call the pageviewer window something =0A=
  // different based on full-screen vs. regular mode=0A=
=0A=
  var pv =3D parent.pview || parent.pviewfs;=0A=
  if (pv =3D=3D null) {=0A=
    pv =3D frames['pview'];=0A=
  }=0A=
=0A=
  if (typeof(pv.window.innerWidth) =3D=3D 'number') {=0A=
	dimensions.width =3D pv.window.innerWidth;=0A=
        dimensions.height =3D pv.window.innerHeight;=0A=
  } else {=0A=
	if (pv.document.documentElement &&=0A=
             ( pv.document.documentElement.clientWidth || =0A=
	       pv.document.documentElement.clientHeight)) {=0A=
		dimensions.width =3D pv.document.documentElement.clientWidth;=0A=
		dimensions.height =3D pv.document.documentElement.clientHeight;=0A=
	} else {=0A=
		if (pv.document.body &&=0A=
		    ( pv.document.body.clientWidth || =0A=
		      pv.document.body.clientHeight)) {=0A=
			dimensions.width =3D pv.document.body.clientWidth;=0A=
			dimensions.height =3D pv.document.body.clientHeight;=0A=
		} // end if usable values=0A=
	} // end if IE 6 standards compliant mode=0A=
  } // end if Microsoft browser or not=0A=
  =0A=
  return dimensions;=0A=
}=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/fullscreen.js

=0A=
/* **************************************************=0A=
   handleFullScreen()=0A=
=0A=
   Several functions to handle events relating to the=0A=
   full screen button.=0A=
=0A=
   TODO: this navbar should talk to the main navbar=0A=
   to keep the pages/zoom/etc in sync.=0A=
=0A=
 ************************************************** */=0A=
=0A=
function handleFullScreenMouseOver (obj, val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleFullScreenMouseOut (obj, val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleFullScreenClick () {=0A=
  =0A=
 // nav.setFullScreen(1);=0A=
=0A=
  var name=3D"_blank";=0A=
  var wob=3D10; 	// width outside border=0A=
  var hob=3D80;		// height outside border=0A=
  var wib=3D22; 	// width inside border (required for scrollbar)=0A=
  var hib=3D50; 	// height inside border=0A=
  var w=3Dscreen.width-wob; // available screen width=0A=
  var h=3Dscreen.height-hob; // available screen height=0A=
  var pvieww=3Dw-wib;=0A=
  nav.setPageviewerWidth(pvieww); =0A=
  var querystring =3D nav.getQuerystring();=0A=
  =0A=
  var currentx =3D top.screenLeft;=0A=
  var currenty =3D top.screenTop;=0A=
  var currentw =3D top.getWidth();=0A=
  var currenth =3D top.getHeight();=0A=
=0A=
  setCookie("restorex",currentx);=0A=
  setCookie("restorey",currenty);=0A=
  setCookie("restorew",currentw);=0A=
  setCookie("restoreh",currenth);=0A=
=0A=
  nurl =3D "../?"+querystring+"&fm=3D1";=0A=
  var l=3D0; =0A=
  var t=3D0;=0A=
  =
window.open(nurl,name,'toolbar=3Dno,menubar=3Dno,resizable=3Dyes,scrollba=
rs=3Dyes,left=3D'+l+',top=3D'+t+',width=3D'+w+',height=3D'+h);=0A=
=0A=
  // close this window now=0A=
  top.window.opener =3D top.self;=0A=
  top.window.close();=0A=
  return false;=0A=
}=0A=
=0A=
function handleRestoreClick () {=0A=
=0A=
 // nav.setFullScreen(1);=0A=
=0A=
  var name=3D"_blank";=0A=
  var querystring =3D nav.getQuerystring();=0A=
=0A=
  nurl =3D "../?"+querystring;=0A=
  var l=3D0;=0A=
  var t=3D0;=0A=
=0A=
  var x =3D getCookie("restorex");=0A=
  var y =3D getCookie("restorey");=0A=
  var w =3D getCookie("restorew");=0A=
  var h =3D getCookie("restoreh");=0A=
=0A=
  deleteCookie("restorex");=0A=
  deleteCookie("restorey");=0A=
  deleteCookie("restoreh");=0A=
  deleteCookie("restorew");=0A=
=0A=
  var featurestring =3D =
"toolbar=3Dyes,menubar=3Dyes,location=3Dyes,resizable=3Dyes,scrollbars=3D=
yes";=0A=
=0A=
  if (x) featurestring =3D featurestring + ",left=3D"+x;=0A=
  if (y) featurestring =3D featurestring + ",top=3D"+y;=0A=
  if (w) featurestring =3D featurestring + ",width=3D"+w;=0A=
  if (h) featurestring =3D featurestring + ",height=3D"+h;=0A=
  =0A=
  window.open(nurl,name,featurestring);=0A=
=0A=
  // close this window now=0A=
  top.window.opener =3D top.self;=0A=
  top.window.close();=0A=
  return false;=0A=
}=0A=
=0A=
function handleFullScreenCloseClick () {=0A=
  parent.wds.setFullScreen(0);=0A=
  parent.closeFullScreen();=0A=
}=0A=
=0A=
function closeFullScreen () {=0A=
  wds.removeComponent('fullscreen');=0A=
  window.close();=0A=
}=0A=
=0A=
/* **************************************************=0A=
   CurrentOrientation()=0A=
=0A=
   Returns/sets the current orientation.=0A=
=0A=
 ************************************************** */=0A=
=0A=
var HORIZONTAL =3D 'horizontal';=0A=
var VERTICAL =3D 'vertical';=0A=
var orientation =3D HORIZONTAL;=0A=
=0A=
function getCurrentOrientation () {=0A=
  return orientation;=0A=
}=0A=
=0A=
function setCurrentOrientation (new_orientation) {=0A=
  orientation =3D new_orientation;=0A=
}=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/initialization.js

=0A=
var last_page;=0A=
var pgArray;=0A=
=0A=
function initNavBar () {=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/print.js

=0A=
/* ***************************************************=0A=
   Print()=0A=
=0A=
   Handles the navstrip print function.=0A=
=0A=
   TODO: assumes querystring names that are passed=0A=
=0A=
  ************************************************* */=0A=
=0A=
function handlePrintMouseOver (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handlePrintMouseOut (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handlePrintClick () {=0A=
  var current_page =3D nav.getCurrentPage();=0A=
  var pagemode =3D nav.getPageMode();=0A=
=0A=
  var querystring =3D 'pageviewer_print?pg=3D' + current_page;=0A=
  if (current_page =3D=3D "1") pagemode =3D "1";=0A=
  if (pagemode) {=0A=
    querystring =3D querystring + "&pm=3D"+pagemode;=0A=
  }=0A=
=0A=
  var params =3D nav.getPersistentParameters();=0A=
  if (params.length > 0) { querystring +=3D "&" + params }=0A=
=0A=
  var coords =3D ""; =0A=
  var top,left;=0A=
  if (self.screen.width && self.screen.height) {=0A=
    top =3D (self.screen.height - 300)/2;=0A=
    left =3D (self.screen.width - 400)/2;=0A=
    coords =3D ",top=3D"+top+",left=3D"+left;=0A=
  }=0A=
  =0A=
  window.open(querystring, 'prnt', 'fullscreen=3Dno, width=3D400, =
height=3D300, resizable=3Dyes, scrollbars=3Dyes, menubar=3Dno, =
toolbar=3Dno, status=3Dno, location=3Dno'+coords);=0A=
=0A=
}=0A=
=0A=
function handlePrintRangeClick () {=0A=
  var current_page =3D nav.getCurrentPage();=0A=
  var pagemode =3D nav.getPageMode();=0A=
=0A=
  var querystring =3D 'pageviewer_prnt_dialog?pg=3D' + current_page;=0A=
  if (current_page =3D=3D "1") pagemode =3D "1";=0A=
  if (pagemode) {=0A=
    querystring =3D querystring + "&pm=3D"+pagemode;=0A=
  }=0A=
=0A=
  var params =3D nav.getPersistentParameters();=0A=
  if (params.length > 0) { querystring +=3D "&" + params }=0A=
=0A=
  =0A=
  var coords =3D "";=0A=
  var top,left;=0A=
  if (self.screen.width && self.screen.height) {=0A=
    top =3D (self.screen.height - 230)/2;=0A=
    left =3D (self.screen.width - 400)/2;=0A=
    coords =3D ",top=3D"+top+",left=3D"+left;=0A=
  }=0A=
=0A=
  window.open(querystring, 'prnt', 'fullscreen=3Dno, width=3D400, =
height=3D230, resizable=3Dyes, scrollbars=3Dyes, menubar=3Dno, =
toolbar=3Dno, status=3Dno, location=3Dno'+coords);=0A=
=0A=
}=0A=
=0A=
=0A=
/* ***************************************************=0A=
   printPage()=0A=
=0A=
   Executes the print.=0A=
=0A=
  ************************************************* */=0A=
=0A=
function printPage () {=0A=
  if (window.print) {=0A=
	window.print();=0A=
  } else {=0A=
	alert("Click <Enter> then ctrl-p or (on a Mac cmd-p) to print");=0A=
  } // end if browser supports print=0A=
}=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/preferences.js

=0A=
/* ***************************************************=0A=
   Preferences()=0A=
=0A=
  ************************************************* */=0A=
=0A=
function handlePreferencesMouseOver (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handlePreferencesMouseOut (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handlePreferencesClick () {=0A=
  alert('Coming Soon');=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/help.js

=0A=
/* ***************************************************=0A=
   Help()=0A=
=0A=
  ************************************************* */=0A=
=0A=
function handleHelpMouseOver (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleHelpMouseOut (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleHelpClick (oNewWinProp) {=0A=
  var url =3D '../templates/help';=0A=
=0A=
  var oDefWinProp =3D new Object();=0A=
  oDefWinProp.fullscreen =3D 'no';=0A=
  oDefWinProp.width =3D 783;=0A=
  oDefWinProp.height =3D 480;=0A=
  oDefWinProp.resizable =3D 'no';=0A=
  oDefWinProp.scrollbars =3D 'no';=0A=
  oDefWinProp.menubar =3D 'no';=0A=
  oDefWinProp.toolbar =3D 'no';=0A=
  oDefWinProp.status =3D 'no';=0A=
  oDefWinProp.location =3D 'no';=0A=
=0A=
  if (self.screen.width && self.screen.height) {=0A=
    oDefWinProp.top =3D self.screen.height/2 - oDefWinProp.height/2;=0A=
    oDefWinProp.left =3D (self.screen.width - oDefWinProp.width)/2;=0A=
  }=0A=
=0A=
  var popup_properties =3D buildPropertyString(oDefWinProp, oNewWinProp);=0A=
=0A=
  window.open(url, 'help', popup_properties);=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/download.js

=0A=
/* ***************************************************=0A=
   handleDownload()()=0A=
=0A=
   Handles the save/download functionality=0A=
=0A=
  ************************************************* */=0A=
=0A=
function handleDownloadMouseOver (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleDownloadMouseOut (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleDownloadClick() {=0A=
  var url =3D './download';=0A=
  var params =3D nav.getPersistentParameters();=0A=
  if (params.length > 0) { url +=3D "?" + params }=0A=
=0A=
  window.open(url, 'download', 'fullscreen=3Dno, width=3D200, =
height=3D100, resizable=3Dno, scrollbars=3Dno, menubar=3Dno, =
toolbar=3Dno, status=3Dno, location=3Dno');=0A=
}=0A=
=0A=
/* ***************************************************=0A=
   startDownload()=0A=
=0A=
   Triggers the start of a download.=0A=
=0A=
  ************************************************* */=0A=
=0A=
function startDownload (path) {=0A=
  document.location =3D path;=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/offline.js

=0A=
/* ***************************************************=0A=
   handleOffline()()=0A=
=0A=
   Handles the save/download functionality=0A=
=0A=
  ************************************************* */=0A=
=0A=
function handleOfflineMouseOver (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleOfflineMouseOut (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleOfflineClick() {=0A=
  var url =3D './download_offline';=0A=
=0A=
  var params =3D nav.getPersistentParameters();=0A=
  if (params.length > 0) { url +=3D "?" + params }=0A=
=0A=
  window.open(url, 'download', 'fullscreen=3Dno, width=3D600, =
height=3D400, resizable=3Dno, scrollbars=3Dno, menubar=3Dno, =
toolbar=3Dno, status=3Dno, location=3Dno');=0A=
}=0A=
=0A=
/* ***************************************************=0A=
   startOffline()=0A=
=0A=
   Triggers the start of a download.=0A=
=0A=
  ************************************************* */=0A=
=0A=
function startOffline (path) {=0A=
  document.location =3D path;=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/search.js

=0A=
/* ***************************************************=0A=
   Search()=0A=
=0A=
   Handles the functionality for the Find/Search feature.=0A=
=0A=
  ************************************************* */=0A=
=0A=
function handleSearchMouseOver (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleSearchMouseOut (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleSearchClick () {=0A=
  var url =3D 'search_advanced';=0A=
  var pv =3D 'pview';=0A=
  if (parent.pviewfs){ pv =3D 'pviewfs'; }=0A=
=0A=
  var params =3D nav.getPersistentParameters();=0A=
  if (params.length > 0) { url +=3D "?" + params } =0A=
=0A=
  var win =3D window.open(url, pv);=0A=
  win.focus();=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/send.js

=0A=
/* ***************************************************=0A=
   handleSend()=0A=
=0A=
   Functions for handling the Send to a Friend =0A=
   functionality.=0A=
=0A=
  ************************************************* */=0A=
=0A=
function handleSendMouseOver (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleSendMouseOut (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleSendClick (oNewWinProp) {=0A=
  var current_page =3D nav.getCurrentPage();=0A=
=0A=
  var oDefWinProp =3D new Object();=0A=
  oDefWinProp.fullscreen =3D 'no';=0A=
  oDefWinProp.width =3D 650;=0A=
  oDefWinProp.height =3D 430;=0A=
  oDefWinProp.resizable =3D 'yes';=0A=
  oDefWinProp.scrollbars =3D 'no';=0A=
  oDefWinProp.menubar =3D 'no';=0A=
  oDefWinProp.toolbar =3D 'no';=0A=
  oDefWinProp.status =3D 'no';=0A=
  oDefWinProp.location =3D 'no';=0A=
=0A=
  if (self.screen.width && self.screen.height) {=0A=
    oDefWinProp.top =3D self.screen.height/2 - oDefWinProp.height/2;=0A=
    oDefWinProp.left =3D (self.screen.width - oDefWinProp.width)/2;=0A=
  }=0A=
=0A=
  var url =3D './send_to_friend?pg=3D' + current_page;=0A=
  =0A=
  var pagemode =3D nav.getPageMode();=0A=
  if (pagemode !=3D null) { =0A=
     url +=3D "&pm=3D" +pagemode; =0A=
     if ((pagemode > 1) && (current_page > 1)) {=0A=
        oDefWinProp.width =3D oDefWinProp.width + 119*(pagemode-1);=0A=
     }=0A=
  }=0A=
  var u1 =3D nav.getTrackingString();=0A=
  if (u1 !=3D null) {=0A=
     url +=3D "&u1=3D" + u1;=0A=
  }=0A=
=0A=
  var params =3D nav.getPersistentParameters();=0A=
  if (params.length > 0) { url +=3D "&" + params }=0A=
=0A=
  var popup_properties =3D buildPropertyString(oDefWinProp, oNewWinProp);=0A=
=0A=
  window.open(url, 'email', popup_properties);=0A=
}=0A=
=0A=
/* ***************************************************=0A=
   validateEmailAddress()=0A=
=0A=
   Validate the given email address (very loosely) such =0A=
   that it is long enough and has an '@' and a '.'.=0A=
=0A=
  ************************************************* */=0A=
=0A=
function isEmailAddress (email) {=0A=
  var email_string =3D new String(email);=0A=
  var at_index =3D email_string.indexOf("@");=0A=
  if (at_index > 0) {=0A=
	var dot_index =3D email_string.indexOf('.', at_index);=0A=
	if ((dot_index > at_index + 1) &&=0A=
	    (email_string.length > dot_index + 1)) {=0A=
		return true;=0A=
	} // end if =0A=
  } // end if=0A=
=0A=
  return result;=0A=
}=0A=
=0A=
function validateEmailAddress (field, label) {=0A=
  if ((field.value.length < 3) || !isEmailAddress(field.value)) {=0A=
	alert(label + "\n" + "Please enter a complete email address in the =
form: yourname@yourdomain.com");=0A=
	field.focus();=0A=
	return false;=0A=
  } else {=0A=
	return true;=0A=
  } // end if=0A=
}=0A=
=0A=
function validateForm (send_form) {=0A=
  if (!validateEmailAddress(send_form.to, "Friends Email Address")) {=0A=
	return false;=0A=
  } // end if to is not valid=0A=
=0A=
  if (!validateEmailAddress(send_form.from, "Your Email Address")) {=0A=
	return false;=0A=
  } // end if from is not valid=0A=
}=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/collection.js

=0A=
function handleArchiveMouseOver (obj, val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleArchiveMouseOut (obj, val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleArchiveClick (url) {=0A=
  window.open(url, '_top');=0A=
}=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/navigator/javascript/bookmark.js

=0A=
/* ***************************************************=0A=
   Bookmark()=0A=
=0A=
   Handles the navstrip bookmark function.=0A=
=0A=
  ************************************************* */=0A=
=0A=
function handleBookmarkMouseOver (obj,val,burlId,url,title) {=0A=
  obj.src =3D val;=0A=
  var burl =3D document.getElementById(burlId);=0A=
  if (burl)=0A=
      updateBookmarkUrl(burl,url,title);=0A=
}=0A=
=0A=
function updateBookmarkUrl(burl,url,title) {=0A=
	if (burl) {=0A=
		var current_page =3D nav.getCurrentPage();=0A=
		var pagemode =3D nav.getPageMode();=0A=
		var folioName =3D '';=0A=
=0A=
        if (current_page =3D=3D "1") pagemode =3D 1;=0A=
		if (pagemode =3D=3D 2) {=0A=
			if (current_page % 2)=0A=
				current_page--;=0A=
			var folio1 =3D top.wdsInfo.getPageFolio(current_page);=0A=
			var folio2 =3D top.wdsInfo.getPageFolio(current_page+1);=0A=
			folioName =3D getFolioLabelRange(folio1,folio2);=0A=
		} else {=0A=
			folioName =3D getFolioLabel(top.wdsInfo.getPageFolio(current_page));=0A=
            if (folioName.match(/^\d+$/))=0A=
                folioName =3D "Page "+folioName;=0A=
		}=0A=
=0A=
		var querystring =3D '?pg=3D' + current_page;=0A=
		if (pagemode && current_page !=3D 1) {=0A=
			querystring =3D querystring + "&pm=3D"+pagemode;=0A=
		}=0A=
		burl.href =3D url + querystring;=0A=
        burl.title =3D title + " - " + folioName;=0A=
	}=0A=
}=0A=
=0A=
function handleBookmarkMouseOut (obj,val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
function handleBookmarkClick (burlId,url,title) {=0A=
  var burl =3D document.getElementById(burlId);=0A=
  if (burl) {=0A=
      updateBookmarkUrl(burl,url,title);=0A=
=0A=
      if (nav.getBrowser() =3D=3D 2) {=0A=
        window.external.AddFavorite(burl.href, burl.title);=0A=
      } else {=0A=
        alert("To create a link to this page, please right click or =
control click on the bookmark icon, then choose \"Bookmark this =
Link.\"");=0A=
      }=0A=
  } else {=0A=
	alert("To create a link to this page, please right click or control =
click on the bookmark icon, then choose \"Bookmark this Link.\"");=0A=
  }=0A=
}=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/javascript/utilitiesPopups.js

=0A=
/* ***************************************************=0A=
   buildPropertyString()=0A=
=0A=
   Returns the string to be used for window.open() based =0A=
   on a default property set or any properties that may =0A=
   have been overridden.  =0A=
=0A=
   Note, there is no validation of the properties being =0A=
   done.=0A=
=0A=
  ************************************************* */=0A=
=0A=
function buildPropertyString (oDefaults, oOverrides) {=0A=
  var popup_properties =3D '';=0A=
=0A=
  if (oOverrides) {=0A=
    for (prop in oOverrides) {=0A=
	if (popup_properties.length > 0) { popup_properties +=3D ', '; }=0A=
	popup_properties +=3D prop + '=3D' + oOverrides[prop];=0A=
    }=0A=
  }=0A=
=0A=
  for (prop in oDefaults) {=0A=
    if (oOverrides =3D=3D null || oOverrides[prop] =3D=3D null) {=0A=
        if (popup_properties.length > 0) { popup_properties +=3D ', '; }=0A=
        popup_properties +=3D prop + '=3D' + oDefaults[prop];=0A=
    }=0A=
  }=0A=
=0A=
  return popup_properties;=0A=
}=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/include/javascript/customization.js

=0A=
/* ***************************************************=0A=
   Customizations=0A=
=0A=
   This file is for any document/collection specific =0A=
   customizations in javascript.  By default, it won't =0A=
   do anything.=0A=
=0A=
  ************************************************* */=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/default/overlay/javascript/overlay.js

var oldmouseup =3D null;=0A=
var oldmousedown =3D null;=0A=
var dragOverlayObj =3D null;=0A=
var dragOverlayObj2 =3D null;=0A=
var x,y;=0A=
var origLeft, origTop;=0A=
var origLeft2, origTop2;=0A=
var dragEnabled =3D false;=0A=
var dragOverlayDiv =3D null;=0A=
=0A=
function updateUrl(overlay) {=0A=
  if (!overlay || !overlayArray) return;=0A=
  for (i=3D0;i<overlayArray.length;i++) {=0A=
    if (overlayArray[i].name =3D=3D overlay.name) {=0A=
       var overlayProps =3D overlayArray[i];=0A=
       if (overlayProps.loadurl) {=0A=
         var url =3D overlayProps.loadurl;=0A=
         if (overlayProps.pagereq) {=0A=
            var current_page =3D wds.getCurrentPage();=0A=
            if (url.indexOf("?") >=3D 0) url =3D url +'&pg=3D' + =
current_page;=0A=
            else url =3D url +'?pg=3D' + current_page;=0A=
         }=0A=
         if (overlayProps.subreq) {=0A=
            var sub =3D wds.getSubscriberId();=0A=
            if (sub) {=0A=
              if (url.indexOf("?") >=3D 0) url =3D url +'&sub_id=3D' + =
sub;=0A=
              else url =3D url +'?sub_id=3D' + sub;=0A=
            }=0A=
         }=0A=
         if (overlayProps.fullreq) {=0A=
            if (wds.getFullMode() =3D=3D '1') url +=3D '&fm=3D1';=0A=
         }=0A=
         if (overlayProps.searchreq) {=0A=
            var srchString =3D wds.getSearchString();=0A=
            if (srchString) url +=3D '&search=3D' + srchString;=0A=
         }=0A=
         overlay.src =3D url;=0A=
       }=0A=
       return;=0A=
     }=0A=
  }=0A=
} =0A=
function closeAllExcept(name) {=0A=
  for (i=3D0;i<overlayArray.length;i++) {=0A=
      if (overlayArray[i].name !=3D name) {=0A=
          closeOverlay(overlayArray[i].name,wds);=0A=
      }=0A=
  }=0A=
}=0A=
function handleOverlayChange(name,state,reload) {=0A=
    if (state =3D=3D 'open') {=0A=
        closeAllExcept(name);=0A=
        var overlay =3D getById(name);=0A=
        if ((overlay.src =3D=3D null) || =0A=
           (overlay.src.indexOf('blank.html') >=3D 0)){=0A=
           updateUrl(overlay);=0A=
        }=0A=
        var x =3D wds.getOverlayPositionX(name);=0A=
        var y =3D wds.getOverlayPositionY(name);=0A=
        if ((x !=3D null) && (y !=3D null)) {=0A=
            openOverlayAt(overlay,name,x,y);=0A=
        }=0A=
        else {=0A=
            openOverlay(overlay,name);=0A=
        }=0A=
    }=0A=
    else if (state =3D=3D 'close') {=0A=
        closeOverlay(name);=0A=
    }=0A=
  }=0A=
=0A=
function closeOverlay(name,wds) {=0A=
  var overlay =3D getById(name);=0A=
  var overlayTop =3D getById(name+"_top");=0A=
  if (overlay) {=0A=
    overlay.style.visibility =3D "hidden";=0A=
    overlay.style.height =3D "0px";=0A=
  }=0A=
  if (overlayTop) {=0A=
    overlayTop.style.visibility =3D "hidden";=0A=
  }=0A=
  if (wds) {=0A=
    wds.setOverlayState(name,"close",false);=0A=
  }=0A=
  if (!document.all && !isSafari()) {=0A=
        dragOverlayDiv =3D getById("moz_div");=0A=
        if (dragOverlayDiv) dragOverlayDiv.style.visibility =3D "hidden";=0A=
  }=0A=
}=0A=
=0A=
function openOverlay(overlay,name) {=0A=
  var overlayTop =3D getById(name+"_top");=0A=
  if (overlay) {=0A=
    overlay.style.height =3D "85%";=0A=
    overlay.style.visibility =3D "visible";=0A=
  }=0A=
  if (overlayTop) {=0A=
    overlayTop.style.visibility =3D "visible";=0A=
  }=0A=
  if (!document.all && !isSafari()) {=0A=
    dragOverlayDiv =3D getById("moz_div");=0A=
    if (dragOverlayDiv) dragOverlayDiv.style.visibility =3D "hidden";=0A=
  }=0A=
}=0A=
=0A=
function openOverlayAt(overlay,name,x,y) {=0A=
  var overlayTop =3D getById(name+"_top");=0A=
  if ((overlay !=3D null) && (overlayTop !=3D null)) {=0A=
    overlay.style.left =3D x;=0A=
    overlay.style.top =3D parseInt(y)+30+"px";=0A=
    overlayTop.style.left =3D x;=0A=
    overlayTop.style.top =3D y;=0A=
    overlay.style.zIndex =3D "10";=0A=
    overlay.scrollbars.visible =3D "true";=0A=
    overlay.style.visibility =3D "visible";=0A=
    overlayTop.style.visibility =3D "visible";=0A=
  }=0A=
}=0A=
=0A=
function overlayMouseOut(obj,e) {=0A=
 if (dragOverlayObj =3D=3D obj) { =0A=
  var targ;=0A=
  if (!e)  e =3D window.event;=0A=
  if (e.target) targ =3D e.target;=0A=
  else if (e.srcElement) targ =3D e.srcElement;=0A=
  if (targ.nodeType =3D=3D 3) // defeat Safari bug=0A=
    targ =3D targ.parentNode;=0A=
  if (targ =3D=3D obj) {=0A=
    overlayMouseUp();=0A=
  }=0A=
 }=0A=
}=0A=
=0A=
function overlayMouseDown(obj,name2,e) {=0A=
  var targ;=0A=
  if (!e)  e =3D window.event;=0A=
    dragEnabled =3D true;=0A=
    dragOverlayObj =3D obj;=0A=
    if (!dragOverlayObj) {=0A=
      dragOverlayObj =3D getById(name2+"_top");=0A=
    }=0A=
    dragOverlayObj2 =3D getById(name2);=0A=
 =0A=
    if (!dragOverlayObj2) {=0A=
      return;=0A=
    }=0A=
    if (!e) e =3D window.event;=0A=
    x =3D getX(e);=0A=
    y =3D getY(e);=0A=
=0A=
    // save old mouse event listeners and set new ones=0A=
    //oldmouseup =3D document.onmouseup;=0A=
    //oldmousemove =3D document.onmousemove;=0A=
    =0A=
    document.onmouseup =3D overlayMouseUp;=0A=
=0A=
    if (!document.addEventListener) document.onmousemove =3D =
overlayMouseMove;=0A=
    else document.addEventListener('mousemove',overlayMouseMove,false);=0A=
=0A=
    // save orig positions of elements=0A=
    origLeft =3D findPosX(dragOverlayObj);=0A=
    origTop =3D findPosY(dragOverlayObj);=0A=
    origLeft2 =3D findPosX(dragOverlayObj2);=0A=
    origTop2 =3D findPosY(dragOverlayObj2);=0A=
=0A=
    // mozilla fixes=0A=
    if (!document.all && !isSafari()) {=0A=
        dragOverlayDiv =3D getById("moz_div");=0A=
        dragOverlayDiv.style.left =3D origLeft2 + "px";=0A=
        dragOverlayDiv.style.top =3D origTop2 + "px";=0A=
        dragOverlayDiv.style.visibility =3D "visible";=0A=
        dragOverlayObj2.style.visibility =3D "hidden";=0A=
        var pview =3D getById("pview");=0A=
        if (pview.contentDocument) {=0A=
          oldmousemove =3D pview.contentDocument.onmousemove;=0A=
          oldmouseup =3D pview.contentDocument.onmouseup;=0A=
          pview.contentDocument.onmousemove =3D overlayMouseMove;=0A=
          pview.contentDocument.onmouseup =3D overlayMouseUp;=0A=
        }=0A=
        if (dragOverlayObj2 && dragOverlayObj2.contentDocument) {=0A=
          dragOverlayObj2.contentDocument.onmousemove =3D =
overlayMouseMove;=0A=
          dragOverlayObj2.contentDocument.onmouseup =3D overlayMouseUp;=0A=
        }=0A=
    }=0A=
   return false;=0A=
}=0A=
=0A=
function overlayMouseUp() {=0A=
  //if (dragOverlayObj) {=0A=
    //document.onmouseup =3D oldmouseup;=0A=
    //document.onmousemove =3D oldmousemove;=0A=
    document.onmouseup =3D null;=0A=
    document.onmousemove =3D null;=0A=
    if (document.removeEventListener) =
document.removeEventListener('mousemove',overlayMouseMove,false);=0A=
    =0A=
    // mozila fixes=0A=
    if (!document.all && !isSafari()) {=0A=
        dragOverlayDiv.style.visibility =3D "hidden";=0A=
        if (dragOverlayObj2) dragOverlayObj2.style.visibility =3D =
"visible";=0A=
        var pview =3D getById("pview");=0A=
        if (pview.contentDocument) {=0A=
          pview.contentDocument.onmousemove =3D oldmousemove;=0A=
          pview.contentDocument.onmouseup =3D oldmouseup;=0A=
        }=0A=
        if (dragOverlayObj2 && dragOverlayObj2.contentDocument) {=0A=
          dragOverlayObj2.contentDocument.onmousemove =3D null;=0A=
          dragOverlayObj2.contentDocument.onmouseup =3D null;=0A=
        }=0A=
    }=0A=
=0A=
    //dragOverlayObj.onmouseout =3D null;=0A=
    dragOverlayObj =3D null;=0A=
    dragOverlayObj2 =3D null;=0A=
    origLeft =3D null;=0A=
    origTop =3D null;=0A=
    origLeft2 =3D null;=0A=
    origTop2 =3D null;=0A=
    dragEnabled =3D false;=0A=
    =0A=
    if (document.releaseEvents) =
document.releaseEvents(Event.MOUSEUP|Event.MOUSEMOVE);=0A=
  //}=0A=
}=0A=
=0A=
function overlayMouseMove(e) {=0A=
  if (dragOverlayObj) {=0A=
    if (!e) e =3D window.event;=0A=
    var newx =3D getX(e);=0A=
    var newy =3D getY(e);=0A=
=0A=
    var newLeft =3D origLeft + (newx-x);=0A=
    var newTop =3D origTop + (newy -y);=0A=
    var newRight =3D parseInt(newLeft) + =
parseInt(dragOverlayObj.style.width);=0A=
    var newBottom =3D parseInt(newTop) + =
parseInt(dragOverlayObj.style.height);=0A=
=0A=
    if ((newLeft < 0) || (newTop < 0) || (newRight > getWidth()) || =
(newBottom > getHeight())) {=0A=
      return false;=0A=
    }=0A=
=0A=
    dragOverlayObj.style.left =3D newLeft + "px";=0A=
    dragOverlayObj.style.top =3D newTop + "px";=0A=
    dragOverlayObj2.style.left =3D origLeft2 + (newx-x) + "px";=0A=
    dragOverlayObj2.style.top =3D origTop2 + (newy -y) + "px";=0A=
  =0A=
    if (!document.all && !isSafari()) {=0A=
      dragOverlayDiv.style.left =3D origLeft2 + (newx-x) + "px";=0A=
      dragOverlayDiv.style.top =3D origTop2 + (newy -y) + "px"; =0A=
    }=0A=
    return false;=0A=
  }=0A=
  return false;=0A=
}=0A=
function findPosX(obj)=0A=
{=0A=
        var curleft =3D 0;=0A=
        if (obj.offsetParent)=0A=
        {=0A=
                while (obj.offsetParent)=0A=
                {=0A=
                        curleft +=3D obj.offsetLeft=0A=
                        obj =3D obj.offsetParent;=0A=
                }=0A=
        }=0A=
        else if (obj.x)=0A=
                curleft +=3D obj.x;=0A=
        return curleft;=0A=
}=0A=
=0A=
function findPosY(obj)=0A=
{=0A=
        var curtop =3D 0;=0A=
        if (obj.offsetParent)=0A=
        {=0A=
                while (obj.offsetParent)=0A=
                {=0A=
                        curtop +=3D obj.offsetTop=0A=
                        obj =3D obj.offsetParent;=0A=
                }=0A=
        }=0A=
        else if (obj.y)=0A=
                curtop +=3D obj.y;=0A=
        return curtop;=0A=
}=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/default/navigator/javascript/overlay_buttons.js

/***************************************************************=0A=
=0A=
This class is assigned to a nav button that opens/closes=0A=
an overlay component.  =0A=
=0A=
wds =3D the WdsComponent attached to the button's frame=0A=
name =3D the name of the overlay component=0A=
x,y =3D current coords of the overlay component=0A=
isOpen =3D true/false depending on if the overlay is visible or not=0A=
=0A=
*******************************************************************/=0A=
function OverlayButton(name,wds) {=0A=
  this.name =3D name;=0A=
  this.wds =3D wds;=0A=
  var state =3D wds.getOverlayState(name);=0A=
  if (state) {=0A=
    if (state =3D=3D "open") {=0A=
      isOpen =3D true;=0A=
    }=0A=
    else {=0A=
      isOpen =3D false;=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
// current state of the overlay=0A=
OverlayButton.prototype.isOpen =3D false;=0A=
OverlayButton.prototype.name =3D null;=0A=
OverlayButton.prototype.wds =3D null;=0A=
=0A=
OverlayButton.prototype.handleOverlayButtonClick =3D function() {=0A=
=0A=
  if (this.wds) {=0A=
    var state =3D this.wds.getOverlayState(this.name);=0A=
    if (state) {=0A=
      if (state =3D=3D "open") {=0A=
        this.isOpen =3D true;=0A=
      }=0A=
      else {=0A=
        this.isOpen =3D false;=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  if (this.isOpen) {=0A=
    this.wds.setOverlayState(this.name,"close",false);=0A=
    this.isOpen =3D false;=0A=
  }=0A=
  else {=0A=
    this.wds.setOverlayState(this.name,"open",false);=0A=
    this.isOpen =3D true;=0A=
  }=0A=
}=0A=
OverlayButton.prototype.handleOverlayButtonMouse =3D function(obj, val) {=0A=
  obj.src =3D val;=0A=
}=0A=
=0A=
=0A=
=0A=
/*###############Copyright##################=0A=
 *####   Copyright 2008 Texterity, Inc  ####=0A=
 *###############Copyright##################=0A=
 */
------=_NextPart_000_0000_01C87E05.44527510
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_0053_01C87E05.445979F0"


------=_NextPart_001_0053_01C87E05.445979F0
Content-Type: text/html;
	charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<HTML><HEAD><TITLE>ALN Magazine - March 2008</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3Dnofollow,noarchive name=3Drobots><LINK=20
href=3D"include/icons/favicon.ico" type=3Dimage/vnd.microsoft.icon=20
rel=3D"shortcut icon"><LINK href=3D"include/icons/favicon.ico"=20
type=3Dimage/vnd.microsoft.icon =
rel=3Dicon><!------------------------------------------------------------=
--------=0A=
--=0A=
This site uses Published Web Format from Texterity (www.texterity.com) =0A=
=0A=
Texterity is a leading provider of systems and services for the creation,=0A=
delivery, and tracking of digital magazines and rich print content.=0A=
=0A=
The Texterity system provides a vivid replica of the print edition, while=0A=
readers experience their magazine very much like an ink-and-paper =
version.=0A=
=0A=
Texterity provides a complete solution that reaches out to readers,=0A=
customers, and prospects via managed e-mail delivery. No applications,=0A=
plug-ins, or downloads are necessary. It's as easy as using a Web=0A=
browser. =0A=
=0A=
Texterity powerful tracking features report on the total number of =
readers,=0A=
how much time they spend reading, and which sections of each document =
they=0A=
visit most often, all while protecting the privacy of individuals.=0A=
=0A=
Texterity digitally supports leading publishers worldwide to extend the=0A=
reach, impact and revenue of their brands. The objective of all programs=0A=
and partnerships is to enhance reader commitment -- documented through =
ABC=0A=
and BPA -- and to accelerate category leadership.=0A=
------------------------------------------------------------------------=0A=
-->
<SCRIPT language=3Djavascript=20
src=3D"http://alnmag.texterity.com/alnmag/200803/include/javascript/const=
ants.js"></SCRIPT>

<SCRIPT language=3Djavascript=20
src=3D"http://alnmag.texterity.com/alnmag/200803/include/javascript/wds.j=
s"></SCRIPT>

<SCRIPT language=3Djavascript=20
src=3D"http://alnmag.texterity.com/alnmag/200803/include/javascript/wds_i=
nfo.js"></SCRIPT>

<SCRIPT language=3Djavascript=20
src=3D"http://alnmag.texterity.com/default/javascript/utilities.js"></SCR=
IPT>

<SCRIPT>=0A=
<!--=0A=
=0A=
  var wds =3D new WdsComponent();=0A=
=0A=
  wds.setTrackingString('texterity');=0A=
  wds.setUrl('http://alnmag.texterity.com/alnmag/200803/');=0A=
  wds.setSubscriberId('');=0A=
  wds.setPageviewerWidth('');=0A=
  =0A=
=0A=
  var wdsInfo =3D new WdsInfo();=0A=
=0A=
  wds.setSubscriberEmail("");=0A=
=0A=
	function reloadFrame(frameName,prefix) {=0A=
		if (frameName =3D=3D 'navbar') {=0A=
			=
window.frames[frameName].location.replace(prefix+"/templates/navigator?u1=
=3Dtexterity");=0A=
		} else if (frameName =3D=3D 'outer_pview') {=0A=
			=
window.frames[frameName].location.replace(prefix+"/templates/overlayframe=
?u1=3Dtexterity");=0A=
		} else if (frameName =3D=3D 'pview') {=0A=
			=
window.frames[frameName].location.replace(prefix+"/templates/pageviewer?u=
1=3Dtexterity");=0A=
		} else if (frameName =3D=3D 'proof_frame') {=0A=
			=
window.frames[frameName].location.replace(prefix+"/templates/proof_frame?=
u1=3Dtexterity");=0A=
		}=0A=
	}=0A=
=0A=
=0A=
	flashPTEnabled =3D -1;=0A=
=0A=
=0A=
//-->=0A=
</SCRIPT>

<META content=3D"MSHTML 6.00.6000.16608" =
name=3DGENERATOR></HEAD><FRAMESET border=3D0=20
frameSpacing=3D0 rows=3D30,* frameBorder=3D0 bgcolor=3D"#FFFFFF"><FRAME =
name=3Dnavbar=20
src=3D"http://alnmag.texterity.com/alnmag/200803/templates/navigator?u1=3D=
texterity"=20
noResize scrolling=3Dno><FRAME border=3D1 name=3Douter_pview =
marginWidth=3D0=20
frameSpacing=3D6 marginHeight=3D0=20
src=3D"http://alnmag.texterity.com/alnmag/200803/templates/overlayframe?u=
1=3Dtexterity"=20
frameBorder=3D1 leftmargin=3D"0" topmargin=3D"0"></FRAMESET></HTML>

------=_NextPart_001_0053_01C87E05.445979F0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://alnmag.texterity.com/alnmag/200803/templates/navigator?u1=texterity

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>ALN Magazine - March 2008: Navigation Bar</TITLE>
<SCRIPT language=3Djavascript=20
src=3D"http://alnmag.texterity.com/alnmag/200803/include/javascript/const=
ants.js"></SCRIPT>

<SCRIPT language=3Djavascript=20
src=3D"http://alnmag.texterity.com/alnmag/200803/include/javascript/wds.j=
s"></SCRIPT>

<SCRIPT language=3Djavascript=20
src=3D"http://alnmag.texterity.com/alnmag/200803/templates/include/javasc=
ript/wds_info.js"></SCRIPT>

<SCRIPT language=3Djavascript=20
src=3D"http://alnmag.texterity.com/default/javascript/utilities.js"></SCR=
IPT>

<SCRIPT language=3Djavascript>=0A=
  <!--=0A=
=0A=
  var nav =3D new WdsComponent(parent.wds, 'nav');=0A=
=0A=
  var has_page_zero =3D 0;=0A=
  var out_of_bounds_url =3D '';=0A=
=0A=
  function handleCurrentPageChange() {=0A=
        var current_page =3D nav.getCurrentPage();=0A=
        setPageValue(current_page);=0A=
        setButtonStates();=0A=
  }=0A=
  nav.addHandlerCurrentPage(handleCurrentPageChange);=0A=
=0A=
  function stagingWarning() {=0A=
	mylocation =3D location.href;=0A=
	if (mylocation.indexOf('http://staging3.texterity.com') =3D=3D 0)=0A=
		alert('This site is for review purposes and is only to be used by =
Texterity publishing customers for internal evaluation purposes. The web =
address (URL) for this site is confidential and should not be provided =
to end-users, subscribers, or others not affiliated directly with the =
customer.');=0A=
  }=0A=
=0A=
  if (top.wdsInfo) {=0A=
    top.wdsInfo.setLocation('/tcprojects/vicon/animallab/inbox/47569');=0A=
    =
top.wdsInfo.addPage('1','Cover','animallab200803_0001','783','1026','1');=0A=
    top.wdsInfo.addPage('2','2','animallab200803_0002','783','1026','1');=0A=
    top.wdsInfo.addPage('3','3','animallab200803_0003','783','1026','1');=0A=
    top.wdsInfo.addPage('4','4','animallab200803_0004','783','1026','1');=0A=
    top.wdsInfo.addPage('5','5','animallab200803_0005','783','1026','1');=0A=
    top.wdsInfo.addPage('6','6','animallab200803_0006','783','1026','1');=0A=
    top.wdsInfo.addPage('7','7','animallab200803_0007','783','1026','1');=0A=
    top.wdsInfo.addPage('8','8','animallab200803_0008','783','1026','1');=0A=
    top.wdsInfo.addPage('9','9','animallab200803_0009','783','1026','1');=0A=
    =
top.wdsInfo.addPage('10','10','animallab200803_0010','783','1026','1');=0A=
    =
top.wdsInfo.addPage('11','11','animallab200803_0011','783','1026','1');=0A=
    =
top.wdsInfo.addPage('12','12','animallab200803_0012','783','1026','1');=0A=
    =
top.wdsInfo.addPage('13','13','animallab200803_0013','783','1026','1');=0A=
    =
top.wdsInfo.addPage('14','14','animallab200803_0014','783','1026','1');=0A=
    =
top.wdsInfo.addPage('15','15','animallab200803_0015','783','1026','1');=0A=
    =
top.wdsInfo.addPage('16','16','animallab200803_0016','783','1026','1');=0A=
    =
top.wdsInfo.addPage('17','17','animallab200803_0017','783','1026','1');=0A=
    =
top.wdsInfo.addPage('18','18','animallab200803_0018','783','1026','1');=0A=
    =
top.wdsInfo.addPage('19','19','animallab200803_0019','783','1026','1');=0A=
    =
top.wdsInfo.addPage('20','20','animallab200803_0020','783','1026','1');=0A=
    =
top.wdsInfo.addPage('21','21','animallab200803_0021','783','1026','1');=0A=
    =
top.wdsInfo.addPage('22','22','animallab200803_0022','783','1026','1');=0A=
    =
top.wdsInfo.addPage('23','23','animallab200803_0023','783','1026','1');=0A=
    =
top.wdsInfo.addPage('24','24','animallab200803_0024','783','1026','1');=0A=
    =
top.wdsInfo.addPage('25','25','animallab200803_0025','783','1026','1');=0A=
    =
top.wdsInfo.addPage('26','26','animallab200803_0026','783','1026','1');=0A=
    =
top.wdsInfo.addPage('27','27','animallab200803_0027','783','1026','1');=0A=
    =
top.wdsInfo.addPage('28','28','animallab200803_0028','783','1026','1');=0A=
    =
top.wdsInfo.addPage('29','29','animallab200803_0029','783','1026','1');=0A=
    =
top.wdsInfo.addPage('30','30','animallab200803_0030','783','1026','1');=0A=
    =
top.wdsInfo.addPage('31','31','animallab200803_0031','783','1026','1');=0A=
    =
top.wdsInfo.addPage('32','32','animallab200803_0032','783','1026','1');=0A=
    =
top.wdsInfo.addPage('3