From: <Saved by Windows Internet Explorer 7>
Subject: Canadian Zinc Corporation: Corporate Governance: Whistleblower Policy
Date: Tue, 31 Mar 2009 08:54:19 -0700
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01C9B1DE.479BAAD0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3350

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://test.canadianzinc.com/content/responsibility/policy.php

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>Canadian Zinc =
Corporation: Corporate Governance: Whistleblower Policy</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">
<META http-equiv=3DCache-Control content=3Dno-cache>
<META content=3Dtrue name=3Dmssmarttagspreventparsing><LINK=20
href=3D"http://test.canadianzinc.com/css/styles.css" type=3Dtext/css=20
rel=3Dstylesheet><LINK href=3D"/favicon.ico" rel=3D"shortcut icon">
<SCRIPT language=3DJavaScript=20
src=3D"http://test.canadianzinc.com/scripts/other/MM.js" =
type=3Dtext/javascript>
</SCRIPT>
<!-- if using relative-positioned js nav menu-->
<SCRIPT language=3DJavaScript type=3Dtext/javascript>
   function reload() {
     window.onresize =3D function() { setTimeout('navBarRefresh()',1); }
   }
</SCRIPT>

<SCRIPT =
src=3D"http://test.canadianzinc.com/scripts/AC_RunActiveContent.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"http://test.canadianzinc.com/scripts/fValidate/fValidate.config.js=
"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"http://test.canadianzinc.com/scripts/fValidate/fValidate.core.js" =

type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"http://test.canadianzinc.com/scripts/fValidate/fValidate.lang-enUS=
.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"http://test.canadianzinc.com/scripts/fValidate/fValidate.validator=
s.js"=20
type=3Dtext/javascript></SCRIPT>

<STYLE type=3Dtext/css>#header {
=09
}
#sectionTitle {
=09
}
</STYLE>

<STYLE type=3Dtext/css>#sectionheader {
	BACKGROUND-IMAGE: url(/images/headers/responsibility.jpg)
}
#sidebar {
	BACKGROUND-POSITION: 50% top; BACKGROUND-IMAGE: =
url(/images/bg/bg-left-nav6.jpg); BACKGROUND-REPEAT: no-repeat
}
</STYLE>

<META content=3D"MSHTML 6.00.6000.16809" name=3DGENERATOR></HEAD>
<BODY=20
onload=3D"reload();MM_preloadImages('/images/bg/bg-button-over.jpg','/ima=
ges/buttons/RI-button-down.gif','/images/buttons/get-quote-blue.gif','/im=
ages/logos/TSX-60r.gif','/images/buttons/menu_chinese_on-80.png'); "><A=20
id=3Dtop name=3Dtop></A>
<DIV id=3Dheader><A href=3D"http://test.canadianzinc.com/"><IMG =
style=3D"FLOAT: left"=20
height=3D76=20
alt=3D"Canadian Zinc Corporation is a Toronto listed junior exploration =
company, trading under the symbol CZN.  The company=E2=80=99s main =
project is the Prairie Creek Silver &amp; Zinc mine in Canada. "=20
src=3D"http://test.canadianzinc.com/images/pixels/pixel.gif" width=3D317 =

border=3D0></A> <A=20
href=3D"http://www.tsx.com/HttpController?GetPage=3DQuotesViewPage&amp;De=
tailedView=3DDetailedPrices&amp;Language=3Den&amp;QuoteSymbol_1=3Dczn"=20
target=3D_blank><IMG id=3Dtsx=20
onmouseover=3D"MM_swapImage('tsx','','/images/logos/TSX-60r.gif',1)"=20
style=3D"FLOAT: right" onmouseout=3DMM_swapImgRestore() height=3D60=20
alt=3D"Get stock quote from Toronto Stock Exchange now" hspace=3D10=20
src=3D"http://test.canadianzinc.com/images/logos/TSX-60g.gif" width=3D59 =
vspace=3D10=20
border=3D0 name=3Dtsx></A> <A=20
href=3D"http://test.canadianzinc.com/content/investor/quote.php"><IMG =
id=3Dgetquote=20
onmouseover=3D"MM_swapImage('getquote','','/images/buttons/get-quote-blue=
.gif',1)"=20
style=3D"FLOAT: right; PADDING-TOP: 30px" =
onmouseout=3DMM_swapImgRestore() height=3D36=20
alt=3D"CZN stock quotes and metals charts"=20
src=3D"http://test.canadianzinc.com/images/buttons/get-quote.gif" =
width=3D40=20
border=3D0 name=3Dgetquote></A><A =
href=3D"http://nai.chineseworldnet.com/hosting/CZN/"=20
target=3D_blank><IMG id=3Dchinese=20
onmouseover=3D"MM_swapImage('chinese','','/images/buttons/menu_chinese_on=
-80.png',1)"=20
style=3D"FLOAT: right; PADDING-TOP: 30px" =
onmouseout=3DMM_swapImgRestore() height=3D27=20
alt=3DChinese hspace=3D20=20
src=3D"http://test.canadianzinc.com/images/buttons/menu_chinese_off-80.pn=
g"=20
width=3D80 border=3D0 name=3Dchinese></A> <!--  <div =
id=3D"headerlinks"><span onClick=3D"location.href=3D'/'">home</span> =
&middot; <span =
onClick=3D"location.href=3D'/content/contact/'">contact</span> &middot; =
<span onClick=3D"location.href=3D'/content/sitemap.php'">site map</span> =
</div> --></DIV>
<DIV id=3Dsectionheader></DIV><IMG id=3Dorigin alt=3D.=20
src=3D"http://test.canadianzinc.com/images/pixels/pixel.gif" =
name=3Dorigin>=20
<TABLE id=3Dtopnav cellSpacing=3D0 cellPadding=3D0 width=3D"100%" =
align=3Dcenter=20
bgColor=3D#e5e5e5 border=3D0>
  <TBODY>
  <TR align=3Dmiddle>
    <TD class=3Dnav=20
    onmouseover=3D"popUp('JSMenu_Menu1',event);this.className=3D'nav =
navOver'"=20
    onclick=3D"location.href=3D'/'"=20
    onmouseout=3D"popDown('JSMenu_Menu1');this.className=3D'nav'" =
noWrap>Home </TD>
    <TD class=3Dseparator></TD>
    <TD class=3Dnav=20
    onmouseover=3D"popUp('JSMenu_Menu2',event);this.className=3D'nav =
navOver'"=20
    onclick=3D"location.href=3D'/content/about/'"=20
    onmouseout=3D"popDown('JSMenu_Menu2');this.className=3D'nav'" =
noWrap>About=20
    Us</TD>
    <TD class=3Dseparator></TD>
    <TD class=3Dnav=20
    onmouseover=3D"popUp('JSMenu_Menu3',event);this.className=3D'nav =
navOver'"=20
    onclick=3D"location.href=3D'/content/mine/'"=20
    onmouseout=3D"popDown('JSMenu_Menu3');this.className=3D'nav'" =
noWrap>Prairie=20
      Creek Mine</TD>
    <TD class=3Dseparator></TD>
    <TD class=3Dnav=20
    onmouseover=3D"popUp('JSMenu_Menu4',event);this.className=3D'nav =
navOver'"=20
    onclick=3D"location.href=3D'/content/investor/'"=20
    onmouseout=3D"popDown('JSMenu_Menu4');this.className=3D'nav'" =
noWrap>Investor=20
      Info</TD>
    <TD class=3Dseparator></TD>
    <TD class=3Dnav=20
    onmouseover=3D"popUp('JSMenu_Menu5',event);this.className=3D'nav =
navOver'"=20
    onclick=3D"location.href=3D'/content/responsibility/'"=20
    onmouseout=3D"popDown('JSMenu_Menu5');this.className=3D'nav'" =
noWrap>Corporate=20
      Governance</TD>
    <TD class=3Dseparator></TD>
    <TD class=3Dnav=20
    onmouseover=3D"popUp('JSMenu_Menu6',event);this.className=3D'nav =
navOver'"=20
    onclick=3D"location.href=3D'/content/gallery/'"=20
    onmouseout=3D"popDown('JSMenu_Menu6');this.className=3D'nav'" =
noWrap>Image=20
      Gallery</TD>
    <TD class=3Dseparator></TD>
    <TD class=3Dnav=20
    onmouseover=3D"popUp('JSMenu_Menu7',event);this.className=3D'nav =
navOver'"=20
    onclick=3D"location.href=3D'/content/contact/'"=20
    onmouseout=3D"popUp('JSMenu_Menu7',event);this.className=3D'nav'"=20
      noWrap>Contact Us</TD></TR></TBODY></TABLE><!--<div =
id=3D"wrapper"> -->
<TABLE id=3Dwrapper cellSpacing=3D0 cellPadding=3D0 width=3D"100%" =
border=3D0>
  <TBODY>
  <TR>
    <TD id=3Dsidebar vAlign=3Dtop>
      <P class=3Dbutton onmouseover=3D"this.className=3D'button =
buttonOver'"=20
      onclick=3D"location.href=3D'/content/responsibility/'"=20
      onmouseout=3D"this.className=3D'button'">Corporate Governance</P>
      <P class=3Dbutton onmouseover=3D"this.className=3D'button =
buttonOver'"=20
      onclick=3D"location.href=3D'/content/responsibility/audit.php'"=20
      onmouseout=3D"this.className=3D'button'">Audit Committee =
Charter</P>
      <P class=3Dbutton onmouseover=3D"this.className=3D'button =
buttonOver'"=20
      onclick=3D"location.href=3D'/content/responsibility/policy.php'"=20
      onmouseout=3D"this.className=3D'button'">Whistleblower Policy</P>
      <P class=3Dbutton onmouseover=3D"this.className=3D'button =
buttonOver'"=20
      =
onclick=3D"window.open('/docs/CZNCodeofEthics-Final2007-11-01website.pdf'=
)"=20
      onmouseout=3D"this.className=3D'button'">Code of Ethics</P>
      <P class=3Dbutton onmouseover=3D"this.className=3D'button =
buttonOver'"=20
      =
onclick=3D"window.open('/docs/CZNInsiderTradingPolicy-Final2007-11-01webs=
ite.pdf')"=20
      onmouseout=3D"this.className=3D'button'">Insider Trading =
Policy</P>
      <FORM style=3D"MARGIN-TOP: 15px"=20
      onsubmit=3D"return validateForm( this, 0, 1, 0, 0, 0);"=20
      action=3D/cgi-bin/soupermail/soupermail.pl?type=3Dnewsletter =
method=3Dpost>
      <P class=3Dbutton2>GET NEWS </P><INPUT=20
      onmousedown=3D"if(this.value=3D=3D'Enter Name')this.value=3D''"=20
      style=3D"FILTER: alpha(opacity=3D90); WIDTH: 148px; opacity: .9" =
alt=3Dblank=20
      value=3D"Enter Name" name=3DName> <BR><INPUT=20
      onmousedown=3D"if(this.value=3D=3D'Enter Email')this.value=3D''"=20
      style=3D"FILTER: alpha(opacity=3D90); WIDTH: 148px; opacity: .9" =
alt=3Demail=20
      value=3D"Enter Email" name=3DEmail> <BR><INPUT style=3D"FONT-SIZE: =
11px; FILTER: alpha(opacity=3D90); MARGIN-LEFT: 64px; HEIGHT: 25px; =
opacity: .9" onclick=3D"if(this.form.Name.value=3D=3D'Your =
Name')this.form.Name.value=3D''; if(this.form.Email.value=3D=3D'Your =
Email')this.form.Email.value=3D''; =
if(this.form.ConfirmEmail.value=3D=3D'Confirm =
Email')this.form.ConfirmEmail.value=3D'';" type=3Dsubmit value=3D"Sign =
Me Up">=20
      <INPUT type=3Dhidden value=3D/_private/config.txt =
name=3DSoupermailConf> <INPUT=20
      type=3Dhidden value=3D"Newsletter Signup" name=3DFormType> =
</FORM></TD>
    <TD vAlign=3Dtop>
      <DIV id=3Dmain>
      <DIV id=3Dtitle></DIV>
      <DIV id=3Dcontent>
      <H1>Whistleblower Policy </H1>
      <H2>1.0 INTRODUCTION</H2><!--<img =
src=3D"/images/photos/equipment.jpg" alt=3D"Prairie Creek Mine" =
width=3D"203" height=3D"135"  align=3D"right" class=3D"pic" =
style=3D"margin-left:10px;" /> -->
      <P><A=20
      =
href=3D"http://test.canadianzinc.com/content/gallery/photos/"></A>Canadia=
n=20
      Zinc Corporation (the "<STRONG>Company</STRONG>") is committed to=20
      maintaining the highest standards of business conduct and ethics, =
as well=20
      as full compliance with all applicable government laws, rules and=20
      regulations, corporate reporting and disclosure, accounting =
practices,=20
      accounting controls, auditing practices and other matters relating =
to=20
      fraud against shareholders (collectively "<STRONG>Accounting=20
      Concerns</STRONG>"). </P>
      <P>Pursuant to its charter, the Audit Committee (the=20
      "<STRONG>Committee</STRONG>") of the Board of Directors of Company =
is=20
      responsible for ensuring that a confidential and anonymous process =
exists=20
      whereby persons can report any Accounting Concerns relating to the =
Company=20
      and its subsidiaries. In order to carry out its responsibilities =
under its=20
      charter, the Committee has adopted this Whistleblower Policy (the=20
      "<STRONG>Policy</STRONG>"). </P>
      <P>For the purposes of this Policy, "Accounting Concerns" is =
intended to=20
      be broad and comprehensive and to include any matter, which in the =
view of=20
      the complainant, is illegal, unethical, contrary to the policies =
of the=20
      Company or in some other manner not right or proper. Examples =
would=20
      include: </P>
      <UL>
        <LI>violation of any applicable law, rule or regulation that =
relates to=20
        corporate reporting and disclosure;=20
        <LI>violation of the Company's Code of Business Conduct and =
Ethics;=20
        <LI>fraud or deliberate error in the preparation, evaluation, =
review or=20
        audit of any financial statement of the Company or any of its=20
        subsidiaries;=20
        <LI>fraud or deliberate error in the recording and maintaining =
of=20
        financial records of the Company or any of its subsidiaries;=20
        <LI>deficiencies in or noncompliance with the Company or any of =
its=20
        subsidiaries' internal policies and controls;=20
        <LI>misrepresentation or a false statement by or to a director, =
officer=20
        or employee of the Company or any of its subsidiaries respecting =
a=20
        matter contained in the financial records, reports or audit=20
        reports;&nbsp; and=20
        <LI>deviation from full and fair reporting of the Company's =
consolidated=20
        financial condition. </LI></UL>
      <H2>2.0 COMMUNICATION OF THE POLICY</H2>
      <P>To ensure that all directors, officers, employees, consultants =
and=20
      contractors of the Company are aware of the Policy, a copy of the =
Policy=20
      will be distributed to all directors, officers, employees, =
consultants and=20
      contractors or alternatively they will be advised if the Policy is =

      available on the Company's Website for their review. All =
directors,=20
      officers, employees, consultants and contractors will be informed =
whenever=20
      significant changes are made. New directors, officers, employees,=20
      consultants and contractors will be provided with a copy of this =
Policy=20
      and will be educated about its importance.</P>
      <H2>3.0 REPORTING ALLEGED VIOLATIONS OR COMPLAINTS</H2>
      <P><!--<span class=3D"pic left"><img =
src=3D"/images/photos/whistleblower.jpg" width=3D"175" height=3D"181" =
/></span> -->Any=20
      person with an Accounting Concern relating to the Company or any=20
      subsidiary of the Company may submit their concern to the Chairman =
of the=20
      Audit Committee (the "Chairman") of the Company, on a confidential =
and=20
      anonymous basis through Whistleblower Security.<BR>WhistleBlower =
Security=20
      is an independent contractor engaged specifically to receive =
concerns of=20
      the nature described above. WhistleBlower Security is under a =
legal=20
      obligation not to disclose or reveal the source of any concern of=20
      complaint. WhistleBlower Security can be contacted as follows:</P>
      <P><STRONG>Call Centre/Voicemail:</STRONG>1.866.921.6714 between =
6:00 am=20
      and 4:00 pm (PST). Outside these hours, a voicemail service will =
be in=20
      operation.</P>
      <P><STRONG>Email:</STRONG> =
canadianzinc@whistleblowersecurity.com</P>
      <P><STRONG>Internet:</STRONG> www.whistleblowersecurity.com</P>
      <H2>4.0 NO ADVERSE CONSEQUENCES</H2>
      <P>A submission regarding an Accounting Concern may be made by an =
officer=20
      or employee of the Company without fear of dismissal, disciplinary =
action=20
      or retaliation of any kind. The Company will not discharge, =
discipline,=20
      demote, suspend, threaten or in any manner discriminate against =
any person=20
      who submits in good faith an Accounting Concern or provides =
assistance to=20
      the Audit Committee, management or any other person or group, =
including=20
      any governmental, regulatory or law enforcement body, =
investigating an=20
      Accounting Concern.</P>
      <H2>5.0 TREATMENT OF ACCOUNTING CONCERN SUBMISSIONS</H2>
      <P>Accounting Concerns will be reviewed as soon as possible by the =
Audit=20
      Committee with the assistance and direction of whomever the Audit=20
      Committee thinks appropriate including, but not limited to, =
external legal=20
      counsel and the Audit Committee shall implement such corrective =
measures=20
      and do such things in an expeditious manner as it deems necessary =
or=20
      desirable to address the Accounting Concern.</P>
      <P>Where possible and when determined to be appropriate by the =
Audit=20
      Committee notice of any such corrective measures will be given to =
the=20
      person who submitted the Accounting Concern.</P>
      <H2>6.0 RETENTION OF RECORDS</H2>
      <P>The Audit Committee will retain all records relating to any =
Accounting=20
      Concern or report of a retaliatory act and to the investigation of =
any=20
      such report for a period judged to be appropriate based upon the =
merits of=20
      the submission. The types of records to be retained by the Audit =
Committee=20
      will include records of all steps taken in connection with the=20
      investigation and the results of any such investigation.</P>
      <H2>7.0 REVIEW OF POLICY</H2>
      <P>The Committee will review and evaluate this Policy on an annual =
basis=20
      to determine whether the Policy is effective in providing a =
confidential=20
      and anonymous procedure to report violations or complaints =
regarding=20
      Accounting Concerns.</P>
      <H2>8.0 QUERIES</H2>
      <P>If you have any questions about how this Policy should be =
followed in a=20
      particular case, please contact the Chairman of the Audit =
Committee or the=20
      General Counsel of the Company.</P>
      <H2>9.0 PUBLICATION OF THE POLICY ON WEBSITE</H2>
      <P>This Policy will be posted on the Company's website at:=20
      www.canadianzinc.com.</P><!--   <h3>9.0 PUBLICATION OF THE POLICY =
ON WEBSITE</h3>
        <p>This Policy will be posted on the Company's Website at: <a =
href=3D"http://www.canadianzinc.com">www.canadianzinc.com</a></p> -->
      <DIV id=3Drequest>
      <P class=3Dmedium align=3Dcenter><A=20
      =
onmouseover=3D"MM_swapImage('up','','/images/buttons/RI-button-down.gif',=
1)"=20
      onmouseout=3DMM_swapImgRestore()=20
      =
href=3D"http://test.canadianzinc.com/content/contact/request.php">Contact=
 us=20
      to learn more &gt;&gt;&gt;</A> <A=20
      =
onmouseover=3D"MM_swapImage('contact','','/images/buttons/RI-button-down.=
gif',1)"=20
      onmouseout=3DMM_swapImgRestore()=20
      =
href=3D"http://test.canadianzinc.com/content/contact/request.php"><IMG=20
      id=3Dcontact style=3D"VERTICAL-ALIGN: middle" height=3D30 =
alt=3Dbutton hspace=3D20=20
      src=3D"http://test.canadianzinc.com/images/buttons/RI-button.gif" =
width=3D121=20
      border=3D0 name=3Dcontact></A></P></DIV>
      <P class=3DfooterText><A=20
      =
href=3D"http://test.canadianzinc.com/content/responsibility/policy.php#to=
p"><IMG=20
      style=3D"VERTICAL-ALIGN: middle" height=3D16 alt=3D"Back to top"=20
      =
src=3D"http://test.canadianzinc.com/images/buttons/generic/gray-top.gif" =

      width=3D17 border=3D0> Back To Top</A> </P>
      <P class=3DfooterText align=3Dcenter><A=20
      href=3D"http://test.canadianzinc.com/">Home</A> =E2=80=A2 <A=20
      href=3D"http://test.canadianzinc.com/content/about/">About Us</A> =
=E2=80=A2 <A=20
      href=3D"http://test.canadianzinc.com/content/mine/">Prairie Creek =
Mine</A> =E2=80=A2=20
      <A =
href=3D"http://test.canadianzinc.com/content/investor/">Investor=20
      Information</A> =E2=80=A2 <A=20
      =
href=3D"http://test.canadianzinc.com/content/responsibility/">Corporate=20
      Governance</A> =E2=80=A2 <A=20
      =
href=3D"http://test.canadianzinc.com/content/investor/quote.php">Stock=20
      Quotes</A> =E2=80=A2 <A =
href=3D"http://test.canadianzinc.com/content/gallery/">Image=20
      Gallery</A> =E2=80=A2 <A=20
      =
href=3D"http://test.canadianzinc.com/content/contact/request.php">Request=
=20
      Info</A> =E2=80=A2 <A =
href=3D"http://test.canadianzinc.com/content/contact/">Contact=20
      Info</A> =E2=80=A2 <A =
href=3D"http://test.canadianzinc.com/content/sitemap.php">Site=20
      Map</A></P></DIV><!-- This closes div id=3D"content" --></DIV><!-- =
&nbsp;</div> This closes div id=3D"wrapper" =
--></TD></TR></TBODY></TABLE>
<DIV id=3Dfooter1>
<P class=3Dlittle align=3Dcenter>&nbsp;<A=20
href=3D"http://test.canadianzinc.com/content/responsibility/policy.php#to=
p"><IMG=20
style=3D"VERTICAL-ALIGN: middle" height=3D16 alt=3D"Back to previous =
page"=20
src=3D"http://test.canadianzinc.com/images/buttons/generic/gray-back.gif"=
 width=3D17=20
border=3D0></A><A href=3D"javascript:history.go(-1)"></A>&nbsp;<A=20
href=3D"http://test.canadianzinc.com/content/responsibility/policy.php#to=
p"> <IMG=20
style=3D"VERTICAL-ALIGN: middle" height=3D16 alt=3D"Back to top"=20
src=3D"http://test.canadianzinc.com/images/buttons/generic/gray-top.gif" =
width=3D17=20
border=3D0></A> &nbsp;<A href=3D"javascript:window.print();"><IMG=20
style=3D"VERTICAL-ALIGN: middle" height=3D16 alt=3D"Print Page"=20
src=3D"http://test.canadianzinc.com/images/buttons/generic/gray-print.gif=
"=20
width=3D18 border=3D0></A> <A=20
href=3D"http://test.canadianzinc.com/content/investor/legal.php">Legal=20
Disclaimer</A> =E2=80=A2 <A href=3D"http://www.redesignlab.com/" =
target=3D_blank>Website=20
Redesign</A> =C2=A9 1999 -
<SCRIPT type=3Dtext/javascript>
var d =3D new Date()
document.write(d.getFullYear())
      </SCRIPT>
 Canadian Zinc Corporation</P></DIV>
<SCRIPT language=3DJavaScript1.2=20
src=3D"http://test.canadianzinc.com/scripts/JSMenu/dhtmllib.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3DJavaScript1.2=20
src=3D"http://test.canadianzinc.com/scripts/JSMenu/Loader.js"=20
type=3Dtext/javascript></SCRIPT>
</BODY></HTML>

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://test.canadianzinc.com/images/pixels/pixel.gif

R0lGODlhAQABAPcAAP//////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////yH5BAEAAAAALAAAAAABAAEA
AAgEAAEEBAA7

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://test.canadianzinc.com/images/logos/TSX-60g.gif

R0lGODlhOwA8APeMAI6Ojh0dHaysrBYWFgAAAKGhoSYmJltbWwEBAQMDA5+fnwICAkZGRqWlpZyc
nJqamhAQEAQEBJeXlwkJCUFBQQoKCkdHR4aGhggICExMTGhoaJaWlpSUlJmZmQYGBmBgYJKSkoWF
hYmJiWFhYZWVlU1NTXp6eo+Pjzc3N5GRkQcHBwUFBX19fSgoKCIiIhUVFRISEpCQkAwMDIiIiJOT
k4SEhJ2dnU9PTzIyMhwcHBQUFIqKin5+flhYWFNTU5iYmI2NjTo6OiQkJB8fH4eHhx4eHllZWRMT
E0RERFZWVnV1dWJiYjk5OXd3d3FxcVxcXHJyckNDQzg4ODQ0NEtLS2ZmZnx8fGpqahsbGzExMXBw
cDU1NVJSUjY2Nm9vb2RkZCUlJXh4eFRUVAsLC3Nzc4GBgWdnZzAwMIyMjHZ2dkhISElJSTw8PFBQ
UFpaWmNjY25ubmlpaRgYGC0tLaKiokVFRT4+Pg4ODlVVVSkpKV9fX4uLixoaGhcXF4CAgG1tbXR0
dCMjI0BAQH9/fxERETs7OzMzM2tra3t7ey8vL0pKSpubmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAIwALAAAAAA7ADwA
QAj/ABkJHEiwoMGDCBMaDDAihcKHECMifLCoog+JGDMe1FCx4gYHIB0UuFiwY8UiBqeYXJRFIQ4O
Ji9gYORmZcUkEFcaeLgiAwibLgwuCGGz4p4xEnVE0IgwgomVbwwWkmATxEymBxcgWfQjA1amBMKC
GWFjkQQNQ76qXcu2IBWTbeMSvNJRAoGCQwLo3cu3b4CCE/wGGCAwR98VBVcAKLoIT0KdB3sUFcEF
8cEjG0h4SGKzB0bIBSGIHv2iyUoiBQ+sZCDjhE0AE+Q2/bDowoHbB8QkeEgBN+4nXDQSQFCCg40a
LWQrX56BYsXlcaF0TAOdLQqTc6qr1WGyhPaveRgv/wLhgREPAejR20yPXuCQGQ1MsqchMIGVlRYI
aikK4CpC0ASpcVpQCS2wX0U/YFCHTTtUEBGABS1wAxBFmeAgQiPYtERGECp0wUpUFDQGTOItoseD
izSgAAAoFTRIAzDGSIcCG4SgAQwEVUCCSSLEJtAfRX3wXX1frERCIAhhEEOQCMgmRA2LsODjkBAh
MMUDNviRA5UKDbfFBQ6QMAIfXBYkgyEHULhIB2F0oUKZcH4lRBgdUBQnRiXAdWdETnS0w54RLVZR
E4A+hIVJ+RWakAUmQaBoQiQuosSjCG3VERwUZJppFJQi8BNjZez2qBHiBSEQDwCkquqqrAIwUB92
sP/QKgBXCNTFD6vGUVAijLGwwEAyDCCssCv5MKywjESQgkkhtHEsIQOpMINJJ+gg0AQdFLXFQx0y
csNKTDyUwUqCeLDsSiY0ya1JOxXkgk0KmIEjQhPQUNEhEXy4khQSdcvIArQV5cWFBpUgxgKumaSB
uih21C5CLzhB1UpQIFSBcyZJEG6/7EZkQbYmrWHQt+KxIOq6DkfkwbQmJTdQAmVQq0RRKOTUskEb
KKCzzgKsVMMLBEmxEhkCWYBxRzwsldAFJlCAQwC/FiQEA1RXjQIOLRxRkApoZGzqQBWIUBQbVCZQ
xUoxvGnQ2QyerFwCSyxSwNxzP6EQGCLRTXeickVNgMgiVtxBaUEIZJGCAhpMOTgBCZCxSAxfD84I
Alh4sQgHnkk+HAoiOECDV5SGhQADQDiwwRdbFhoWAS4oQtQDEhghB6VnmARIFPMOHhAAOw==

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://test.canadianzinc.com/images/buttons/get-quote.gif

R0lGODlhKAAkAOZ/AE1NTYGBgVZWVioqKjAwMAkJCRcXFyYmJkJCQi4uLhgYGDk5OQ0NDRoaGkVF
RTw8PFRUVAUFBVFRUSQkJBQUFBERESAgIAICAhISEqioqB8fH2RkZKqqqqysrKurq0BAQJubm2Ji
YqmpqR4eHi0tLW1tbSMjI6GhoZWVlVhYWBwcHDIyMqWlpT8/PyIiIo2NjZiYmJeXlx0dHZKSkp2d
nXFxcYSEhGhoaHd3dykpKXNzc5+fn6CgoIyMjI6OjoqKinBwcKOjo4iIiGpqalpaWmZmZouLi11d
XZycnFJSUo+Pj0FBQVtbW5mZmTU1NaSkpJ6enmlpaaampmtra3h4eHl5eX5+fnt7e15eXlxcXEdH
R5OTkz4+PmBgYDQ0NF9fXygoKImJiTMzM4KCgoWFhUtLS3R0dE9PT5SUlH9/fzY2NpaWlllZWXZ2
dqenp3p6epGRkVNTU0ZGRiwsLG5ubmNjY2dnZ319fW9vb0hISDs7O2xsbHJycpCQkK2trQAAACH5
BAEAAH8ALAAAAAAoACQAAAf/gH+Cg4SFhoeIf1wqiY2Ohgw4HC6PhxcEDxUGYBSDGlwPMoIRWn5+
Dp2Vgxd8pjtrfkR/F0Udph4hfw2mfh4lqoMLGX5FG6Zsf0t+UBYHT34EkaZvLcCCWRlBEX8xfil/
Zn40QEAcfjd/LqYa1oJnGVIGBTTefzp+IBtFX0x6fzmmRrT7YwCEnybd6rXww+MAiRJFFPw5YKrL
gYEmrKz5giLWrA0eeNUo8KfAi1502s0JkYTCBSR+kgxS4cQLo0EMxBCQaE0GCw9QYHjg0WAgMBNR
yAi5YcEoogM82x3YgIXkowIbWCQwioADhwqGCuRY4eLCLCemEDAYpIDAgW2r/1wQMAH3gx8WaxWo
MPBnQBNeYRhUcMNryp8IN4b5gTNH0IgfvHyY+GM3SIEoHHiQ+EPFD5ADIbI0KJDGlJEyfwTcjXNH
HIMLkNEAsOHnyp+FO6b4ObFCkOrFOj6YbWBrwCwffjb8UWCOAAVTakoqWGuXlxBCH4B09CPgjwVT
YGbN8HPkDwURflYYMLU5ggaXC/1IMYfgcBw7DipY8VPjjwZTRAhkDAgLDOFHEBVEAIMfYzjRhh8o
XMCFHxwMcAM+r7GRQQYnZIDCBCUZseEvDFyxYQYECkICDCciIQZlGTwRgQFBZJDLH2AAkAICYAli
AABn5DCIF0nkwdcgFCwBgf8WR1KwgBfbDLBAb05VaeWVVlqFpSMNlIDaloWYtcp4EjgihxBjtFAD
Dp10QYUDlFERglkFCCDEFjoY98cG6M3QhSAalIDGFnsIVB166/yxhR9D/BGCHzFcEMF+IiwogpDI
mdLHcjv4UcUV+CgAWQ8YpOBHBwL1kNwfR/ihxB8JUEhCBGT4gcMfKsAUAl9fQNiACiB4wMQJfkQx
0amp+pFLFq7+UcoJ29ThxwuzdAOAIA+6ccIJUPBAx3g+GMAEsn+cFIAGkL1KQi8EFCCEHzqU9FcK
ZmEBoQENPLBCA3LwYkoH7ODBC3qRXlDFqfQ8MdkFJ4lQBad+BEAbDKIsYcMyG1h0ALB5NZBBhBpm
HGFWBBLYYMQQlKiYRhiN+jfFCz2UMBkhAyQKZiIJSMGCKDcTEggAOw==

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://test.canadianzinc.com/images/buttons/menu_chinese_off-80.png

iVBORw0KGgoAAAANSUhEUgAAAFAAAAAbCAMAAADcUPgwAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAINUExURQMDAwICAgQEBHt7e3l5eZKSkgkJ
CQcHBwUFBUdHR1NTU4yMjAgICG9vb5mZmXV1dXx8fJGRkZ2dnXJycnd3d19fX3p6epubm5CQkKKi
ohgYGHZ2dpeXl4aGhnNzc0RERI2NjRUVFZ+fn6Ojo5ycnBQUFBISEhMTE4GBgQ4ODgoKCgwMDH9/
f4KCgltbWzs7O0JCQjw8PAYGBmFhYZiYmFZWVjIyMktLSyQkJJOTkxcXFw8PDwsLC0FBQV1dXR8f
H1lZWZWVlUZGRmtrazo6OlxcXLCwsGJiYqGhoW1tbRYWFk1NTWZmZlhYWKampiUlJSsrK0hISB0d
HRwcHCEhIRoaGnh4eJ6enkVFRW5ubq+vr3R0dJSUlENDQ6ioqH5+fjc3N2NjYy0tLWpqan19famp
qY6OjmlpaYuLi2hoaKqqqj09PXBwcBEREZaWlqSkpC8vL2RkZD8/P4SEhDY2NlVVVTU1NVRUVIOD
g0BAQCcnJw0NDbS0tI+Pjz4+PhAQEJqamjAwMFJSUoqKiiAgICwsLElJSWdnZ7i4uBsbG7Ozs7W1
tU5OTk9PTyoqKmxsbFpaWqWlpRkZGa6urre3t4eHhzQ0NHFxcWBgYFFRUSYmJkxMTLa2tr29vTMz
M0pKSikpKYCAgDg4OIiIiFdXV15eXi4uLrGxsTExMR4eHqurq6CgoGVlZaysrAAAACfahn0AAACv
dFJOU///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////wB/tAOBAAADPElEQVR42uyVRXcUQRCAe9zX3bOW1bi7uxBXIsQT3D1Igru7u9RvpGfh
QQ67N24wh5op6W+q+lV1I/jLD/oP/NvAXrHq9zdBwLkLW3zHu/kZo8fjpGmT0uSYo5wmp1PpMpqc
Wt2OjMBqa3SrKq5s+xPX0EN0tcxbIhFd5LtxaOJ+wmKh9Xen6emk/mA6YAErx7hSQz8Xl1kSERzL
cizq8/fLrMyxVSzB902emHACq8bSutRaBIIrRPAZSs5xMYxNs0fP1OulHZB9wFA/ydgM47vLzyf0
twsBalpD8yfrYHhogII5Fbgp6SXN6qnFyYfxtECdtbj7iLbtfXF34UcBYtcfFXceqhOFQ6Wme7OF
b6qaWwx5nT5b4zMt/bzRpQABQsuR0ep8r2Aa6UgLpG5ikavhAEhDaco1mLJHSz1YhqmI6za8W5hX
7AFjoqcRm7b799aW9dbW3rJmpQVGaKy8rK8ACBkE4BFsd3UAgYCmcTZqnKCJ3sRsigLQavGC/PGA
3243+L+Uh9ICk0Y1w9140/kiL7bnNH6ylWDTazduIBzWeety+xmNm7JPLUtTS2qGRa8cjjsOh6gP
pwVOt5nNzcMjXWbz0hUvROuWDkKO0gRiaz6BEBErXrWNjl9KzN4dFltbg4raYl/Fa+I58ZqWSV/y
Y2nxlFRv9y3apPN7Idt9Fttq2j8ktgHCCVZSkn4hGaiDYC62a3HZsLaadPskn7soAxCRJEc0aCqI
Ap5DapMh7PRqslMhGEkIZ+I7x7iggFWLCYs8F/aRPFSXhzOP3n5r5Va1uf2w7ues7BobLClH7Uqs
LcBQstGi/uwSRR09cFTLBCrSAvHoImgYycIVEnhSACqaa5RjUPNtn5rTnav7zzKxnRMFT1fmrsOY
WnLYfHV55eLFHntexsOBAC8TBhJ3Ii9/LrtgDapDnzOl2+wNrdM3mjRxT2rksjfcHjRQNnCZvqH6
Z3fVnsgARPBCqcRAnN+6r6VQlknsJuWOtyf3AYf6gvFUqYf9bVfMVcsLe5JDCPEk31Rkzc+4h5Ub
5K+jYmZ08Lf1QcNxLB0lZNkT/M46fXqtn5zJO1byc6OiuWsd/6+Afwv4Q4ABAF25b3fV3ZFIAAAA
AElFTkSuQmCC

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://test.canadianzinc.com/images/buttons/RI-button.gif

R0lGODlheQAeAPf/ACuIwUic0Ye+4QtlnRRpniF3qyaIxIrA4VGi0wJytxNklix+sTiUzRpwpSd1
pCaBuTCQyx1voaS7yAJmo6PN54C73zyWzgJhm5TG5Fak1CGHxiJljXehuiOIxyJplCJyo22bt7HV
663T6qjQ6aXP6BtkkZ3K5lqm1ZDD4y6OyiiMyRt/u3W13DeUzTaTzBaBxGCq1k+g0q/U65rI5TyW
zYm/4SRsmCN+tnWfuhV2sh1jjQtglSGDvyVumw9tpw5iln663qHM5w59wgN4vwZ5wAl7wUqe0cHe
7wB2vkKaz0Sb0Eec0cLe8OHv9x2FxhOAw4S94CWKyPD3+4O84NHm80CYzqHN5zuVzUue0cDd7z+Y
zoG832Kr18Pf8CyNykKZz02g0vH3+zKRy+Dv9yeLyDuWzSGFwqDM56LN6Eye0Uec0Lra7T6XzmOr
17TX7JbG5JPF5DWSzBB/wh99theBwhqExX253nOfuQ58wC2OygVimwdknAVdkwdflG+cuGmu2QZu
rhF6uhZ8uwZ4vgl6v6PO6BJ/wRiDxWat2AhvrxB0sDOSywN3vXKz23O03CqNyQZ0uF+p1ghppQxr
pm6ctw14uQJckwl2uQNtrUCYz0CZz0Sa0GSr2AVnpHGduSV5rA1xr5HE4x6GxkGZz93j5n+63hho
mJS4zil5q3+qxBprnIS934Olup/A1ByDwhyEw42/3nu43cLd7cTg8ChumHe23M/X3J/M5iyCuEyA
nw19wbfR4G6x2rjV5gB1vLfG0LbY7HO02ylslRRvqKvS6ieEviWFwMrT2cnW33qftrPW7Mvf6xl3
sOLv+E6Zx0l/ni+OyHigt3qjvSx4p4+zyI3C4iVnj9Pn9ABbkiN8sjSLwSZ9sid/ti91n+Di40Sa
zxRvpyhynx12rI282Bl5swBrrOLk5arS6afQ6DWRyg9oniFtnLrY63ymwBhyqarR6SGFw5LE4yVt
mjqVzWCq1yR2qCKIxyR/tyVnjpqzwyhojxKAwxyFxReCxP///+Xl5SH5BAEAAP8ALAAAAAB5AB4A
AAj/AP+ZWyZrjRsZxM69W8iwocOHECNKnEixokWKI0jcwiAA1q5/IEmxW7MGmAx0FKwEWcmypcuX
MGPKnEmzps2ZZ86YeFOjFpc040D2IhYihAgKMzDAice0qdOnUKNKnUq1qtWrVlH0bIMlnTZk/2aY
QIPGBIpVFUoBWcu2rdu3cOPKnUu3rt25duzEYsEVAgBcp/5BOVDtwJRgiNrQW8y4sePHkCNLnky5
smXLkU6o8QKA26dU/xqxcMSLS4wqNMrMW826tevXsGPLnk27tu3aZVyQKXajwId2/+hxiZRBjZgo
HewpX868ufPn0KNLn069evUOGnjMEddAlbR/GTIg/zDCRoUTfujTq1/Pvr379/Djy59Pn9+rFeTc
qTLF4V+MGGl840IH/RRo4IEIJqjgggw26OCDEEZYIB2C5DAMAQrg8A8WWKiRiRii7CPiiCSWaOKJ
KKao4oostuiiiIYEoogP6vxwxz8BBLCJBSnUIcSPQnhhxJBDXvGjE0QSaeSPRgggwB9eAFnkj1cM
KQSSSRqxJJJOnkBllkM6AeSVQ0ZZpRFHhikEmFH+eEKXYo4pBB6VgDLJADt48o8SSmjCwCP9FCFo
EVD4Y+ihGBSxxKGHMlHEIUww6g8ighrqaBGR+qOopP442kIYjEKBKaf+LDHopv6Imqmoi5ZaBKei
tv/QBKNhtHBqEYRckogke/Thxz9ffMGGbk8QYSwRUxhKlhSGvqCEoU0cIS0cRKBx6KyGRkGEoUcY
e4ShRDzrT7TTVmuoI1Rk+y2nShwbrqFTELGuP3GI266hUkh7BCdEYCsFs+O6S8QgkADSiR58UPKP
FlqUsUgUcgwh8RBbGJrEE+n680QShlqRxMdPDHFoyKEYuoXI/hwh8bpDcOyPxx93MIQVhlJhRSMX
T8ztxDy7fPK8VLicBMpBfzyEGDVLnPHQEzOSACYTXGAJCP+wwcY8ENijCxJcI1EBp2cgUQWnVSBh
aBZcx2BoBWb7gzYSWRgqNqdsayDpGXJ0fXbXfI//7Q/bcR8aeNmczu0PClx/7Q8MfPuSQDlRY0M1
ww5DzHPF/oxh6BghuzyGvmKgzDkXCJiMsspDsOy5vlxI3EEoGfvTusQ78yyxz6lzy+jQ+OrbcscS
0+wP0xI7DbXUVAc7LBnFHpusP0qEYCi14sbrLsDPn9uvoUpEAfC7/lh/LLdEcALv+CkLbGz18mYL
MPTbpu8utHFEge0L7hJsMMIK8+knoKcqVKlUcCgVtIpRjhKgpA5RBAxwShmoklQRCgEtbJmqUp26
laBapSpDFSEDhzKVpW7lQEkV4la52lWvfpWjHfVoTAIwFJpIYCgSGIFTXfiRAEDFqGtcyQ2M6oKY
/27IqSA1g1F/GJOhciinNRlKAELogqF+BER/oGmJTXwDD8PwhibSyU540hMWjOAhEL1IRWAAwz4g
MIsDjMgeaXyRFsAAgTPaMUUQ0AKKYjSjGt0oDWkIwBfiQCAJGfKQiEykIvtBoRyAA0MaGmMAksAA
MtTnkpjMpCY3iR5XrIAZDcBQNPY0CjYwIA8aMIMZ4MHKVrrylbCMpSxnScta2vKWtlSldsQRAVOU
YJQtSAEZDGCMB9zjmMhMpjKXycxmOvOZ0IymNKd5jxtkowAR8EAJdJCMf0ADAMV4wDY+UY9ymvOc
6EynOtfJzna6853wjGc5P7AOD+jgnqz4hzNwsZQAVDggHD3ogTwGStCCGvSgCE2oQhfK0IY61KE2
8MAGJjpRCfyjFQuYRjhooQ9r4OOjIA2pSEdK0pKa9KQoTalKVzrSZ3gDJNTohjD0QdOa2vSmOM2p
TnfK05769KdA1WkujgESkNhCAvlIqlKXytSmOvWpUI2qVKdK1ao69RfmKKpWt8rVrnr1q2ANq1jH
StaydjUgADs=

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://test.canadianzinc.com/images/buttons/generic/gray-top.gif

R0lGODlhEQAQAJEDAM7Ozv///wAAAAAAACH5BAEAAAMALAAAAAARABAAAAI5nC+pco0AYXJNRBkY
HfaKkG1dtGjVhZbqKH3g+7JAArugTN95lrrff+vVasIY0WPL1FawpgmxUlAKADs=

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://test.canadianzinc.com/images/buttons/generic/gray-back.gif

R0lGODlhEQAQAKIEAAgICM7Ozv///wAAAAAAAAAAAAAAAAAAACH5BAEAAAQALAAAAAARABAAAAM6
SLrTPiuyQGmTcVQrICbaNgjdF1aPl21s6p7WSM4zHDQ13bWyTNs4FwnY0+1EPoCOaKy9mkPM64FJ
AAA7

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://test.canadianzinc.com/images/buttons/generic/gray-print.gif

R0lGODlhEgAQAJEDAM7Ozv///wAAAAAAACH5BAEAAAMALAAAAAASABAAAAI7nIWJxj0ColyOQRlF
EPXgHGzdhSmcQ36ZZbZuCMdyiMw2XG+uQmvbTesFdz9dAmg8PZI8pQXpPOwSjAIAOw==

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: application/x-css
Content-Transfer-Encoding: quoted-printable
Content-Location: http://test.canadianzinc.com/css/styles.css

BODY {
	FONT-SIZE: 70%; BACKGROUND: #000000; MARGIN: 0px auto 10px; WIDTH: =
781px; COLOR: black; FONT-FAMILY: verdana,arial,helvetica,sans-serif
}
TABLE {
	FONT-SIZE: 100%
}
A:link {
	COLOR: #456789; TEXT-DECORATION: underline
}
A:visited {
	COLOR: #456789; TEXT-DECORATION: underline
}
A:hover {
	COLOR: #123456; TEXT-DECORATION: underline
}
#header {
	BACKGROUND-IMAGE: url(/images/bg/CZN-top-banner.jpg); COLOR: #ffffff; =
BACKGROUND-REPEAT: no-repeat; HEIGHT: 80px
}
#headerlinks {
	MARGIN-TOP: 55px; FONT-WEIGHT: bold; FONT-SIZE: 110%; FLOAT: right; =
CURSOR: pointer; COLOR: #b0b0b0; MARGIN-RIGHT: 20px; TEXT-DECORATION: =
none
}
#headerlinks A:link {
	MARGIN-TOP: 55px; FONT-WEIGHT: bold; FONT-SIZE: 110%; FLOAT: right; =
CURSOR: pointer; COLOR: #b0b0b0; MARGIN-RIGHT: 20px; TEXT-DECORATION: =
none
}
#headerlinks A:visited {
	MARGIN-TOP: 55px; FONT-WEIGHT: bold; FONT-SIZE: 110%; FLOAT: right; =
CURSOR: pointer; COLOR: #b0b0b0; MARGIN-RIGHT: 20px; TEXT-DECORATION: =
none
}
#sectionheader {
	BORDER-RIGHT: #e1e1e1 2px solid; BACKGROUND-POSITION: 50% top; =
BORDER-TOP: #e1e1e1 0px solid; BORDER-LEFT: #e1e1e1 2px solid; =
BORDER-BOTTOM: #e1e1e1 0px solid; BACKGROUND-REPEAT: no-repeat; HEIGHT: =
158px
}
#divider {
	BORDER-RIGHT: #999999 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: =
#999999 1px solid; PADDING-LEFT: 0px; BACKGROUND-IMAGE: none; =
PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: #999999 1px solid; =
PADDING-TOP: 0px; BORDER-BOTTOM: #999999 0px solid; BACKGROUND-COLOR: =
#efefef; TEXT-ALIGN: left
}
#home-feature {
	BORDER-RIGHT: #e1e1e1 3px solid; BORDER-TOP: #e1e1e1 3px solid; =
BORDER-LEFT: #e1e1e1 3px solid; BORDER-BOTTOM: #e1e1e1 1px solid
}
#wrapper {
	BACKGROUND-IMAGE: url(/images/bg/bg-main.gif); BACKGROUND-REPEAT: =
repeat-y; BACKGROUND-COLOR: #e5e5e5
}
#sidebar {
	WIDTH: 207px; PADDING-TOP: 20px; TEXT-ALIGN: center
}
#main {
	WIDTH: 574px
}
#title {
	PADDING-LEFT: 70px; FONT-SIZE: 24px; BACKGROUND-IMAGE: =
url(/images/titles/title.gif); COLOR: #878484; PADDING-TOP: 12px; =
BACKGROUND-REPEAT: no-repeat; FONT-FAMILY: "Arial Black", "Helvetica =
Heavy", "Helvetica Black", Sans-serif; HEIGHT: 60px; BACKGROUND-COLOR: =
#b0b0b0
}
#content {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: left
}
#footer1 {
	CLEAR: both; BACKGROUND-POSITION: 50% top; BACKGROUND-IMAGE: =
url(/images/bg/CZN-footer.gif); MARGIN-LEFT: auto; VERTICAL-ALIGN: =
bottom; MARGIN-RIGHT: auto; PADDING-TOP: 10px; BACKGROUND-REPEAT: =
repeat-x; HEIGHT: 39px
}
#footer2 {
	CLEAR: both; FONT-WEIGHT: bold; FONT-SIZE: xx-small; BACKGROUND-IMAGE: =
none; MARGIN: 0px auto; WIDTH: 675px; COLOR: #ffffff; PADDING-TOP: 10px; =
BACKGROUND-COLOR: #000000
}
#request {
	CLEAR: both; MARGIN: 30px 0px
}
#origin {
	FLOAT: left; WIDTH: 0px; LINE-HEIGHT: 0px; HEIGHT: 0px
}
#topnav {
	BORDER-RIGHT: #e1e1e1 2px solid; BORDER-TOP: #e1e1e1 0px solid; =
BORDER-LEFT: #e1e1e1 2px solid; BORDER-BOTTOM: #e1e1e1 2px solid; =
HEIGHT: 25px
}
.nav {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; CURSOR: pointer; COLOR: white; =
FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: =
#336699
}
.nav A:link {
	COLOR: #dbdbdb; TEXT-DECORATION: none
}
.nav A:visited {
	COLOR: #dbdbdb; TEXT-DECORATION: none
}
.nav A:hover {
	COLOR: black; TEXT-DECORATION: none
}
.navOver {
	COLOR: white; BACKGROUND-COLOR: #0076be
}
.navOver A:link {
	COLOR: black; TEXT-DECORATION: none
}
.navOver A:visited {
	COLOR: black; TEXT-DECORATION: none
}
.navOver A:hover {
	COLOR: black; TEXT-DECORATION: none
}
.separator {
	WIDTH: 1px; BACKGROUND-COLOR: #e1e1e1
}
.button A:link {
	COLOR: #000000; TEXT-DECORATION: none
}
.button A:visited {
	COLOR: #000000; TEXT-DECORATION: none
}
.button A:hover {
	COLOR: #4ab0e1; TEXT-DECORATION: none
}
.button {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: =
11px; FILTER: alpha(opacity=3D80); BACKGROUND-IMAGE: =
url(/images/bg/bg-button-up.gif); PADDING-BOTTOM: 1px; MARGIN: 0px auto =
2px; WIDTH: 159px; CURSOR: pointer; COLOR: #000000; PADDING-TOP: 4px; =
BACKGROUND-REPEAT: no-repeat; FONT-FAMILY: Arial, Helvetica, sans-serif; =
HEIGHT: 16px; BACKGROUND-COLOR: #cacaca; TEXT-ALIGN: center; =
TEXT-DECORATION: none; opacity: .
	.80
}
.buttonOver {
	BACKGROUND-IMAGE: url(/images/bg/bg-button-over.gif); COLOR: #214e7a; =
BACKGROUND-COLOR: #e5e5e5
}
.button2 {
	BORDER-RIGHT: white 2px solid; PADDING-RIGHT: 3px; BORDER-TOP: white =
2px solid; PADDING-LEFT: 3px; FONT-WEIGHT: bold; FONT-SIZE: 11px; =
FILTER: alpha(opacity=3D90); PADDING-BOTTOM: 3px; MARGIN: 0px auto 2px; =
BORDER-LEFT: white 2px solid; WIDTH: 144px; COLOR: #ffffff; PADDING-TOP: =
3px; BORDER-BOTTOM: white 2px solid; BACKGROUND-COLOR: #666666; =
TEXT-ALIGN: center; TEXT-DECORATION: none; opacity: .9
}
H1 {
	MARGIN-TOP: -50px; FONT-SIZE: 24px; LEFT: 60px; COLOR: #336699; =
FONT-FAMILY: "Arial Black", "Helvetica Heavy", "Helvetica Black", =
Sans-serif; POSITION: relative; TOP: -15px
}
H2 {
	FONT-SIZE: 140%; TEXT-TRANSFORM: capitalize; COLOR: #0068a7
}
H3 {
	FONT-SIZE: 120%; COLOR: #0076be; FONT-VARIANT: small-caps
}
H4 {
	FONT-WEIGHT: bold; FONT-SIZE: 100%; TEXT-TRANSFORM: uppercase; COLOR: =
#123456
}
HR {
	COLOR: #123456; HEIGHT: 1px
}
TH {
	FONT-WEIGHT: bold; FONT-SIZE: larger; PADDING-BOTTOM: 15px; COLOR: =
#123456; TEXT-ALIGN: left; FONT-VARIANT: small-caps
}
UL {
	PADDING-LEFT: 0px; MARGIN-LEFT: 1.5em; LIST-STYLE-TYPE: square
}
OL {
	PADDING-LEFT: 0px; MARGIN-LEFT: 1.5em
}
FORM {
	MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
.colour {
	COLOR: #990000
}
.boldcolour {
	FONT-WEIGHT: bold; COLOR: #123456
}
.pic-caption {
	FONT-SIZE: smaller; TEXT-ALIGN: center
}
.hilitebox {
	BORDER-RIGHT: #456789 2px solid; PADDING-RIGHT: 4px; BORDER-TOP: =
#456789 2px solid; PADDING-LEFT: 4px; FONT-WEIGHT: normal; =
PADDING-BOTTOM: 4px; MARGIN: 2px; BORDER-LEFT: #456789 2px solid; COLOR: =
#123456; PADDING-TOP: 4px; BORDER-BOTTOM: #456789 2px solid; =
BACKGROUND-COLOR: #efefef
}
.formfield {
	BORDER-RIGHT: #123456 1px solid; BORDER-TOP: #123456 1px solid; =
BORDER-LEFT: #123456 1px solid; WIDTH: 180px; BORDER-BOTTOM: #123456 1px =
solid
}
.px50 {
	WIDTH: 50px
}
.input-display {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: =
0px; BACKGROUND-COLOR: transparent
}
INPUT.errHilite {
	BORDER-RIGHT: #123456 1px solid; BORDER-TOP: #123456 1px solid; =
BORDER-LEFT: #123456 1px solid; BORDER-BOTTOM: #123456 1px solid; =
BACKGROUND-COLOR: #efefef
}
SELECT.errHilite {
	BORDER-RIGHT: #123456 1px solid; BORDER-TOP: #123456 1px solid; =
BORDER-LEFT: #123456 1px solid; BORDER-BOTTOM: #123456 1px solid; =
BACKGROUND-COLOR: #efefef
}
TEXTAREA.errHilite {
	BORDER-RIGHT: #123456 1px solid; BORDER-TOP: #123456 1px solid; =
BORDER-LEFT: #123456 1px solid; BORDER-BOTTOM: #123456 1px solid; =
BACKGROUND-COLOR: #efefef
}
LABEL.errHilite {
	COLOR: #123456
}
.errors {
	COLOR: #123456
}
.checkbox {
	DISPLAY: list-item; LIST-STYLE-IMAGE: =
url(/images/icons/generic/checkbox.gif); MARGIN-LEFT: 20px
}
.done {
	DISPLAY: list-item; LIST-STYLE-IMAGE: =
url(/images/icons/generic/checkmark20.gif); MARGIN-LEFT: 20px
}
.gone {
	DISPLAY: none
}
.little {
	FONT-WEIGHT: normal; FONT-SIZE: 90%; TEXT-DECORATION: none
}
.little A:link {
	FONT-WEIGHT: normal; TEXT-DECORATION: none
}
.little A:visited {
	FONT-WEIGHT: normal; TEXT-DECORATION: none
}
.little A:hover {
	FONT-WEIGHT: normal; TEXT-DECORATION: underline
}
.back {
	DISPLAY: list-item; LIST-STYLE-IMAGE: =
url(/images/buttons/gray-back-padded-rt.gif); MARGIN-LEFT: 3em; =
VERTICAL-ALIGN: middle
}
.fwd {
	DISPLAY: list-item; LIST-STYLE-IMAGE: =
url(/images/buttons/gray-fwd-padded-rt.gif); MARGIN-LEFT: 3em; =
VERTICAL-ALIGN: middle
}
.footerText {
	FONT-SIZE: 10px; MARGIN-LEFT: auto; WIDTH: 95%; COLOR: #666666; =
MARGIN-RIGHT: auto; TEXT-ALIGN: center; TEXT-DECORATION: none
}
.footerText A:link {
	COLOR: #666666; TEXT-DECORATION: none
}
.footerText A:visited {
	COLOR: #666666; TEXT-DECORATION: none
}
.footerText A:hover {
	COLOR: #000000
}
.white {
	COLOR: #ffffff; TEXT-DECORATION: none
}
.white A:link {
	COLOR: #ffffff; TEXT-DECORATION: none
}
.white A:visited {
	COLOR: #ffffff; TEXT-DECORATION: none
}
.white A:hover {
	COLOR: #cccccc
}
.grey {
	COLOR: #cccccc; TEXT-DECORATION: none
}
.grey A:link {
	COLOR: #cccccc; TEXT-DECORATION: none
}
.grey A:visited {
	COLOR: #cccccc; TEXT-DECORATION: none
}
.grey A:hover {
	COLOR: #cccccc
}
.center {
	MARGIN-LEFT: auto; MARGIN-RIGHT: auto
}
#newsticker {
	PADDING-LEFT: 25px; FONT-WEIGHT: bolder; FONT-SIZE: 14px; COLOR: =
#333333; PADDING-TOP: 6px; FONT-FAMILY: Arial, Helvetica, sans-serif; =
HEIGHT: 25px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: left
}
#newsticker A:link {
	COLOR: #333333; TEXT-DECORATION: none
}
#newsticker A:visited {
	COLOR: #333333; TEXT-DECORATION: none
}
#newsticker A:hover {
	COLOR: #666666; TEXT-DECORATION: none
}
.pic {
	BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; MARGIN-TOP: =
0px; FONT-SIZE: 83%; MARGIN-BOTTOM: 5px; BORDER-LEFT: black 1px solid; =
BORDER-BOTTOM: black 1px solid; TEXT-ALIGN: center
}
.left {
	FLOAT: left; MARGIN-LEFT: 0px; MARGIN-RIGHT: 10px
}
.right {
	FLOAT: right; MARGIN-RIGHT: 5px
}
.medium {
	FONT-WEIGHT: bold; FONT-SIZE: 115%; COLOR: #666666; TEXT-DECORATION: =
none
}
.medium A:link {
	FONT-WEIGHT: bold; FONT-SIZE: 115%; COLOR: #666666; TEXT-DECORATION: =
none
}
.medium A:visited {
	FONT-WEIGHT: bold; FONT-SIZE: 115%; COLOR: #666666; TEXT-DECORATION: =
none
}
.medium A:hover {
	COLOR: #17524e
}

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://test.canadianzinc.com/scripts/other/MM.js

// JavaScript Document

<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init=3D=3Dtrue) with (navigator) {if =
((appName=3D=3D"Netscape")&&(parseInt(appVersion)=3D=3D4)) {
    document.MM_pgW=3DinnerWidth; document.MM_pgH=3DinnerHeight; =
onresize=3DMM_reloadPage; }}
  else if (innerWidth!=3Ddocument.MM_pgW || =
innerHeight!=3Ddocument.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->

function MM_validateForm() { //v4.0
  var =
i,p,q,nm,test,num,min,max,errors=3D'',args=3DMM_validateForm.arguments;
  for (i=3D0; i<(args.length-2); i+=3D3) { test=3Dargs[i+2]; =
val=3DMM_findObj(args[i]);
    if (val) { nm=3Dval.name; if ((val=3Dval.value)!=3D"") {
      if (test.indexOf('isEmail')!=3D-1) { p=3Dval.indexOf('@');
        if (p<1 || p=3D=3D(val.length-1)) errors+=3D'- '+nm+' must =
contain an e-mail address.\n';
      } else if (test!=3D'R') { num =3D parseFloat(val);
        if (isNaN(val)) errors+=3D'- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') !=3D -1) { p=3Dtest.indexOf(':');
          min=3Dtest.substring(8,p); max=3Dtest.substring(p+1);
          if (num<min || max<num) errors+=3D'- '+nm+' must contain a =
number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) =3D=3D 'R') errors +=3D '- '+nm+' is =
required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue =3D (errors =3D=3D '');
}
//-->
function OpenJump(selObj,restore){ //v3.0
  eval("window.open('"+selObj.options[selObj.selectedIndex].value+"')");
  if (restore) selObj.selectedIndex=3D0;
}

function MM_jumpMenu(targ,selObj,restore){ //v3.0
  =
eval(targ+".location=3D'"+selObj.options[selObj.selectedIndex].value+"'")=
;
  if (restore) selObj.selectedIndex=3D0;
}


function MM_preloadImages() { //v3.0
  var d=3Ddocument; if(d.images){ if(!d.MM_p) d.MM_p=3Dnew Array();
    var i,j=3Dd.MM_p.length,a=3DMM_preloadImages.arguments; for(i=3D0; =
i<a.length; i++)
    if (a[i].indexOf("#")!=3D0){ d.MM_p[j]=3Dnew Image; =
d.MM_p[j++].src=3Da[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=3Ddocument.MM_sr; =
for(i=3D0;a&&i<a.length&&(x=3Da[i])&&x.oSrc;i++) x.src=3Dx.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=3Ddocument; =
if((p=3Dn.indexOf("?"))>0&&parent.frames.length) {
    d=3Dparent.frames[n.substring(p+1)].document; n=3Dn.substring(0,p);}
  if(!(x=3Dd[n])&&d.all) x=3Dd.all[n]; for =
(i=3D0;!x&&i<d.forms.length;i++) x=3Dd.forms[i][n];
  for(i=3D0;!x&&d.layers&&i<d.layers.length;i++) =
x=3DMM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=3Dd.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=3D0,x,a=3DMM_swapImage.arguments; document.MM_sr=3Dnew Array; =
for(i=3D0;i<(a.length-2);i+=3D3)
   if ((x=3DMM_findObj(a[i]))!=3Dnull){document.MM_sr[j++]=3Dx; =
if(!x.oSrc) x.oSrc=3Dx.src; x.src=3Da[i+2];}
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=3DMM_showHideLayers.arguments;
  for (i=3D0; i<(args.length-2); i+=3D3) if =
((obj=3DMM_findObj(args[i]))!=3Dnull) { v=3Dargs[i+2];
    if (obj.style) { obj=3Dobj.style; =
v=3D(v=3D=3D'show')?'visible':(v=3D=3D'hide')?'hidden':v; }
    obj.visibility=3Dv; }
}
------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://test.canadianzinc.com/scripts/AC_RunActiveContent.js

//v1.0
//Copyright 2006 Adobe Systems, Inc. All rights reserved.
function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') !=3D -1)
    return src.replace(/\?/, ext+'?');=20
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs)=20
{=20
  var str =3D '<object ';
  for (var i in objAttrs)
    str +=3D i + '=3D"' + objAttrs[i] + '" ';
  str +=3D '>';
  for (var i in params)
    str +=3D '<param name=3D"' + i + '" value=3D"' + params[i] + '" /> =
';
  str +=3D '<embed ';
  for (var i in embedAttrs)
    str +=3D i + '=3D"' + embedAttrs[i] + '" ';
  str +=3D ' ></embed></object>';

  document.write(str);
}

function AC_FL_RunContent(){
  var ret =3D=20
    AC_GetArgs
    (  arguments, ".swf", "movie", =
"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret =3D=20
    AC_GetArgs
    (  arguments, ".dcr", "src", =
"clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret =3D new Object();
  ret.embedAttrs =3D new Object();
  ret.params =3D new Object();
  ret.objAttrs =3D new Object();
  for (var i=3D0; i < args.length; i=3Di+2){
    var currArg =3D args[i].toLowerCase();   =20

    switch (currArg){=09
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] =3D args[i+1];
        break;
      case "src":
      case "movie":=09
        args[i+1] =3D AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] =3D args[i+1];
        ret.params[srcParamName] =3D args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] =3D args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace":=20
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "id":
      case "tabindex":
        ret.embedAttrs[args[i]] =3D ret.objAttrs[args[i]] =3D args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] =3D ret.params[args[i]] =3D args[i+1];
    }
  }
  ret.objAttrs["classid"] =3D classid;
  if (mimeType) ret.embedAttrs["type"] =3D mimeType;
  return ret;
}

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://test.canadianzinc.com/scripts/fValidate/fValidate.config.js

function fValConfig()
{
	/*	Globals.  Modify these to suit your setup
	------------------------------------------- */
	=09
	//	Attribute used for fValidate Validator codes
	this.code =3D 'alt';
=09
	//	Attribute used for custom error messages (override built-in error =
messages)
	this.emsg =3D 'emsg';
=09
	//	Attribute used for pattern with custom validator type
	this.pattern =3D 'pattern';
=09
	//	Change this to the classname you want for the error highlighting
	this.errorClass =3D 'errHilite';

	//	If you wish fValidate to use only single classNames for errors
	this.useSingleClassNames =3D false; // or true
=09
	//	This is the even that triggers the clearing of the errorClass =
hilighting
	this.clearEvent =3D 'change'; // 'change' | 'blur' | null
=09
	//	For browsers that don't support attachEvent or addEventListere - =
override existing events for error reverting?
	this.eventOverride =3D false;
=09
	//	If the bConfirm flag is set to true, the users will be prompted with =
CONFIRM box with this message
	//	See your language file for this value
	this.confirmMsg =3D fvalidate.i18n.config.confirmMsg;
=09
	//	If user cancels CONFIRM, then this message will be alerted.  If you =
don't want this alert to show, then
	//	empty the variable (  this.confirmAbortMsg =3D '';  )
	//	See your langauge file for this value
	this.confirmAbortMsg =3D fvalidate.i18n.config.confirmAbortMsg;
=09
	//	Enter the name/id of your form's submit button here.  Can be a =
string or array of strings
	this.submitButton =3D ['Submit','Submit2'];
=09
	//	Enter the name/id of your form's reset button here
	this.resetButton =3D 'Reset';
=09
	//	Ender the name or id of the SELECT object here. Make sure you pay =
attention to the values (CC Types)
	//	used in the case statement for the function validateCC()
	this.ccType =3D 'CardType';
=09
	//	NOTE: The config value below exists for backwards compatibility with =
fValidate 3.55b.  If you have a newer=20
	//	version, use the above this.ccType instead.
	//	Enter the DOM name of the SELECT object here. Make sure you pay =
attention to the values (CC Types)
	//	used in the case statement for the function validateCC()
	this.ccTypeObj =3D 'form1.Credit_Card_Type';
=09
	//	Element where box errors will appear
	this.boxError =3D 'errors';
=09
	//	Prefix given to all error paragraphs in box error mode
	this.boxErrorPrefix =3D 'fv_error_';
}
//	EOF
------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://test.canadianzinc.com/scripts/fValidate/fValidate.core.js

/************************************************************************=
***************************
*
*-- Form validation script by Peter Bailey, Copyright (c) 2001-2003
*	Version 5.01b
*	Updated on Feb 07, 2004
*	www.peterbailey.net
*	me@peterbailey.net
*
*	IF YOU USE THIS SCRIPT, GIVE ME CREDIT PLEASE =3D)
*
*	Visit http://www.peterbailey.net/fValidate/ for more info
*
*	Feel free to contact me with any questions, comments, problems, or =
suggestions
*
*	Note: This document most easily read with tab spacing set to 4
*
*************************************************************************=
******************************/

/*	Create static fvalidate object
------------------------------------------- */
if ( typeof fvalidate =3D=3D 'undefined' )
{
	var fvalidate =3D new Object();
}

/*	Generic event handling
------------------------------------------- */
fvalidate.addEvent =3D function( obj, evt, fn, useCapture )
{
	if ( typeof obj.attachEvent !=3D 'undefined' )
	{
		obj.attachEvent( "on" + evt, fn );
	}
	else if ( typeof obj.attachEventListener !=3D 'undefined' )
	{
		obj.addEventListener( evt, fn, Boolean( useCapture ) );
	}
}
fvalidate.addEvents =3D function( obj, evts, fn, useCapture )
{
	var i =3D 0, evt;
	while( evt =3D evts[i++] )
	{
		this.addEvent( obj, evt, fn, Boolean( useCapture ) );
	}
}

/*	Main validation routine
------------------------------------------- */
function validateForm( f, bConfirm, bDisable, bDisableR, groupError, =
errorMode )
{
	//	Set defaults
	bConfirm	=3D Boolean( bConfirm );
	bDisable	=3D Boolean( bDisable );
	bDisableR	=3D Boolean( bDisableR );
	groupError	=3D Boolean( groupError );
	errorMode	=3D ( typeof errorMode !=3D 'undefined' ) ? parseInt( =
errorMode, 0) : 0;

	//	Init vars and fValidate object
	var params, fvCode, type;
	if ( typeof f.fv =3D=3D 'undefined' )
	{
		f.fv =3D new fValidate( f, errorMode, groupError );
	} else {	=09
		f.fv._reset();
		f.fv.errorMode =3D errorMode;
	}
=09
	//	Loop through all form elements=09
	var elem, i =3D 0, attr =3D f.fv.config.code;
	while ( elem =3D f.elements[i++] )
	{
		//	Skip fieldsets
		if ( elem.nodeName =3D=3D "FIELDSET" ) continue;

		//	Does element have validator attribute? (short-circuit check)
		fvCode			=3D ( elem[attr] ) ? elem[attr] : elem.getAttribute( attr );
		if ( !( typeof fvCode =3D=3D 'undefined' || fvCode =3D=3D null || =
fvCode =3D=3D "" ) )
		{
			//	Set params, validation type, and validation state
			params			=3D fvCode.split( "|" );
			type			=3D params[0];
			elem.validated	=3D true;
		=09
			//	Valid validator type?
			if ( typeof f.fv[type] =3D=3D 'undefined' )
			{			=09
				f.fv.devError( [type, elem.name], 'notFound' );
				return false;
			}
		=09
			//	Check for modifiers
			switch( params.last() )
			{			=09
				case 'bok'	:	//	bok requested
					params =3D params.reduce( 1, 1 );
					elem.bok =3D true;
					break;
				case 'if'	:	//	Conditional validation requested
					params =3D params.reduce( 1, 1 );
					elem._if_ =3D true;
					break;
				case 'then'	:	//	Conditional validation requested
					params =3D params.reduce( 1, 1 );
					elem._then_ =3D true;
					break;
				default		:	//	No modifiers
					params =3D params.reduce( 1, 0 );
			=09
			}

			//	Is element an array?
			if ( /radio|checkbox/.test( elem.type ) )
			{
				//	Set group property
				elem.group =3D f.elements[elem.name];
			}
		=09
			//	Add events if not already added
			if ( typeof elem.fName =3D=3D 'undefined' )
			{
				//	If element is an array		=09
				if ( typeof elem.group !=3D 'undefined' )
				{
					for ( var j =3D 0; j < elem.group.length; j++ )			=09
					{
						//	Apply event-function to each child
						if ( f.fv.config.clearEvent !=3D null )
						{
						//	fvalidate.addEvent( elem.group.item( j ), fv.config.clearEvent, =
fv.revertError, false );
							addEvent( elem.group.item( j ), f.fv.config.clearEvent, f.fv, =
'revertError', false );
						}
					}
				}
				else
				{
					//	Apply event-function to element
				//	fvalidate.addEvent( elem, fv.config.clearEvent, fv.revertError, =
false );
					addEvent( elem, f.fv.config.clearEvent, f.fv, 'revertError', false =
);
				}
			}
		=09
			//	Set formatted name, current element
			elem.fName	=3D elem.name.format();
			f.fv.elem		=3D elem;
			f.fv.type		=3D type;

			//	Create function to call the proper validator method of the =
fValidate class
			var func =3D new Function( "obj", "method", "obj[method]( " + =
params.toArgString() + " );" );
			func( f.fv, type );
	=09
			//	If element test failed AND group error is off, return false
			if ( elem.validated =3D=3D false && groupError =3D=3D false ) return =
false;
		=09
			//	Clear error if field okay
			if ( elem.validated =3D=3D true ) f.fv.revertError();
		}
	} //	end of element loop
=09
	//	If group error, show it
	if ( groupError ) f.fv.showGroupError();

	//	Return false if errors found
	if ( f.fv.errors.length > 0 ) return false;

	//	Show pre-submission confirmation
	if ( bConfirm && !confirm( f.fv.config.confirmMsg ) )
	{
		if ( f.fv.config.confirmAbortMsg !=3D '' ) alert( =
f.fv.config.confirmAbortMsg );
		return false;
	}
=09
	//	Disable reset and/or submit buttons if requested
	if ( bDisable )=20
	{
		if ( typeof f.fv.config.submitButton =3D=3D 'object' )
		{
			var sb, j =3D 0;
			while( sb =3D f.fv.config.submitButton[j++] )
			{
				if ( f.fv.elementExists( sb ) )
				{
					f.elements[sb].disabled =3D true;
				}
			}
		}
		else if ( f.fv.elementExists( f.fv.config.submitButton ) )
		{
			f.elements[f.fv.config.submitButton].disabled =3D true;
		}
	}
	if ( bDisableR && f.fv.elementExists( f.fv.config.resetButton ) )
	{
		f.elements[f.fv.config.resetButton].disabled =3D true;
	}

	//	Successful Validation.  Submit form
	return true;
=09
	function addEvent( elem, evt, obj, method, capture )
	{
		var self =3D elem;
		if ( typeof elem.attachEvent !=3D 'undefined' )
		{
			elem.attachEvent( "on" + evt, function() { obj[method]( self ) } );
		}
		else if ( typeof elem.addEventListener !=3D 'undefined' )
		{
			elem.addEventListener( evt, function() { obj[method]( self ) }, =
capture );
		}
		else if ( f.fv.config.eventOverride )
		{
			eleme['on' + evt] =3D function() { obj[method]( self ) };
		}
	}
}

/*	Constructor
------------------------------------------- */
function fValidate( f, errorMode, groupError )
{
	var self        =3D this;
	this.form       =3D f;
	this.errorMode  =3D errorMode;
	this.groupError =3D groupError;
	this.errors     =3D new Array();
	this.validated  =3D true;
	this.config     =3D new fValConfig();
	this.i18n		=3D fvalidate.i18n;
=09
	//	Add reset action to clear visual error cues
	f.onreset =3D function()
	{
		var elem, i =3D 0;
		while ( elem =3D this.elements[i++] )
		{
			self.revertError( elem );
		}
	}
=09
	addLabelProperties();
=09
	//	Parses form and adds label properties to elements that have one =
specified
	function addLabelProperties()
	{
		//	Collect all label elements in form, init vars	=09
		if ( typeof f.getElementsByTagName =3D=3D 'undefined' ) return;
		var labels =3D f.getElementsByTagName( "label" );
		var label, i =3D j =3D 0;
		var elem;

		//	Loop through labels retrieved
		while ( label =3D labels[i++] )
		{
			//	For Opera 6
			if ( typeof label.htmlFor =3D=3D 'undefined' ) return;
		=09
			//	Retrieve element
			elem =3D f.elements[label.htmlFor];
			if ( typeof elem =3D=3D 'undefined' )
			{	//	No element found for label			=09
				self.devError( [label.htmlFor], 'noLabel' );
			}
			else if ( typeof elem.label !=3D 'undefined' )
			{	//	label property already added
				continue;
			}
			else if ( typeof elem.length !=3D 'undefined' && elem.length > 1 && =
elem.nodeName !=3D 'SELECT' )
			{	//	For arrayed elements
				for ( j =3D 0; j < elem.length; j++ )
				{
					elem.item( j ).label =3D label;
				}
			}
			//	Regular label
			elem.label =3D label;
		}
	}	=09
}

/*	Reset for another validation
------------------------------------------- */
fValidate.prototype._reset =3D function()
{
	this.errors		=3D new Array();
	this.showErrors	=3D new Array();
}

/*	Checks if element exists in form
------------------------------------------- */
fValidate.prototype.elementExists =3D function( elemName )
{
	return Boolean( typeof this.form.elements[elemName] !=3D 'undefined' );
}

/*	Receives error message and determines action
------------------------------------------- */
fValidate.prototype.throwError =3D function( args, which )
{
	var elem  =3D this.elem;

	//	Arrayed element?
	if ( typeof elem.name =3D=3D 'undefined' )
	{
		elem =3D elem[0];
	}

	//	Bok requested AND element blank OR conditional validation?
	if ( elem.bok && this.isBlank() )
	{	//	skip	=09
		elem.validated =3D true;
		return;
	}

	//	Part of a conditional validation?
	if ( elem.cv )
	{
		return;
	}
=09
	//	Set failsafe to false=09
	elem.validated =3D false;

	//	Create error message
	which	=3D this.setArg( which, 0 );
	args	=3D this.setArg( args, [] );
	emsgElem =3D ( typeof this.elem.getAttribute =3D=3D "undefined" ) ?
			this.elem[0]:
			this.elem;
	if ( emsgElem.getAttribute( this.config.emsg ) )
	{
		var error =3D emsgElem.getAttribute( this.config.emsg );
	}
	var error =3D this.translateMessage( args, =
this.i18n.errors[this.type][which] );

	//	Group error mode?
	if ( this.groupError )
	{
		//	Push error onto stack
		this.errors.push( {'elem':elem, 'msg': error} );	=09
	}
	else
	{
		//	Process error message	=09
		this.showError( error, false, emsgElem );

		var focusElem =3D ( typeof elem.fields !=3D 'undefined' )?
			elem.fields[0]:
			elem;
	=09
		//	Focus and select elements, if possible
		this.selectFocus( focusElem );
	}
}


/*	Shows error message to user
------------------------------------------- */
fValidate.prototype.showError =3D function( emsg, last, elem )
{
	//	Set variables
	var self		=3D this,
		elem		=3D this.setArg( elem, this.elem ),
		isHidden	=3D Boolean( elem.type =3D=3D 'hidden' ),
		label		=3D ( isHidden ) ? null : elem.label || null,
		emsg		=3D ( elem.getAttribute( this.config.emsg ) ) ? =
elem.getAttribute( this.config.emsg ).replace( /\\n/g, "\n" ) : emsg,
		errorClass	=3D this.config.errorClass,
		singleCSS	=3D this.config.useSingleClassNames;

	if ( typeof this.showErrors =3D=3D 'undefined' ) this.showErrors =3D =
new Array();=09
=09
	//	Determine which error modes to use
	switch( this.errorMode )
	{	//	This represents all possible combinations
		case 0  : alertError(); break;
		case 1  : inputError(); break;
		case 2  : labelError(); break;
		case 3  : appendError(); break;
		case 4  : boxError(); break;
		case 5  : inputError(); labelError(); break;
		case 6  : inputError(); appendError(); break;
		case 7  : inputError(); boxError(); break;
		case 8  : inputError(); alertError(); break;
		case 9  : labelError(); appendError(); break;
		case 10 : labelError(); boxError(); break;
		case 11 : labelError(); alertError(); break;
		case 12 : appendError(); boxError(); break;
		case 13 : appendError(); alertError(); break;
		case 14 : boxError(); alertError(); break;
		case 15 : inputError(); labelError(); appendError(); break;
		case 16 : inputError(); labelError(); boxError(); break;
		case 17 : inputError(); labelError(); alertError(); break;
		case 18 : inputError(); appendError(); boxError(); break;
		case 19 : inputError(); appendError(); alertError(); break;
		case 20 : inputError(); boxError(); alertError(); break;
		case 21 : labelError(); appendError(); boxError(); break;
		case 22 : labelError(); appendError(); alertError(); break;
		case 23 : appendError(); boxError(); alertError(); break;
		case 24 : inputError(); labelError(); appendError(); boxError(); =
break;
		case 25 : inputError(); labelError(); appendError(); alertError(); =
break;
		case 26 : inputError(); appendError(); boxError(); alertError(); =
break;
		case 27 : labelError(); appendError(); boxError(); alertError(); =
break;
		case 28 : inputError(); labelError(); appendError(); boxError(); =
alertError(); break;	=09
	}
	//	Regular alert error
	function alertError()
	{
		if ( self.groupError ) self.showErrors.push( emsg );
		else alert( emsg );
		if ( last ) alert( self.i18n.groupAlert + self.showErrors.join( "\n\n- =
" ) );		=09
	}
	//	Applies class to form element
	function inputError()
	{
		if ( ( typeof elem.length !=3D 'undefined' && elem.length > 1 && =
elem.nodeName !=3D 'SELECT' ) || isHidden )
		{
			var subelem, i =3D 0;
			while( subelem =3D ( isHidden ) ? elem.fields[i++] : elem.item( i++ ) =
)		=09
			{
				if ( subelem.className !=3D '' && singleCSS )
				{
					subelem.revertClass =3D subelem.className;
					subelem.className =3D errorClass;
				} else {
					self.addCSSClass( subelem, errorClass );
				}			=09
			}
		}
		else
		{
			if ( singleCSS )
			{
				elem.revertClass =3D elem.className;
				elem.className =3D errorClass;
			} else {
				self.addCSSClass( elem, errorClass );
			}
		}
	}
	//	Applies class to element's label
	function labelError()
	{
		if ( label =3D=3D null ) return;
		if ( self.config.useSingleClassNames )
		{
			label.className =3D errorClass;
		} else {
			self.addCSSClass( label, errorClass );
		}
	=09
	}
	//	Appends error message to element's label
	function appendError()
	{
		if ( label =3D=3D null || typeof label.innerHTML =3D=3D 'undefined' ) =
return;
		if ( typeof label.original =3D=3D 'undefined' )
			label.original =3D label.innerHTML;
		label.innerHTML =3D label.original + " - " + emsg.toHTML();
	}
	//	Appends Error message to pre-defined element
	function boxError()
	{
		if ( typeof self.boxError =3D=3D 'undefined' ) self.boxError =3D =
document.getElementById( self.config.boxError );
		if ( self.boxError =3D=3D null )
		{		=09
			self.devError( [self.config.boxError], 'noBox' );
			return;
		}
		if ( typeof self.elem.name =3D=3D 'undefined' || self.elem.name =3D=3D =
"" )
		{
			self.devError( [self.elem[self.config.code]], 'missingName' );
			return;
		}
		var errorId =3D self.config.boxErrorPrefix + self.elem.name,
			errorElem;
		if ( errorElem =3D document.getElementById( errorId ) ) // =
short-circuit
		{
			errorElem.firstChild.nodeValue =3D emsg.toHTML();
		}
		else
		{
			errorElem =3D document.createHTMLElement( 'li', { id: errorId, =
'innerHTML': emsg.toHTML(), title: self.i18n.boxToolTip } );
			self.boxError.appendChild( errorElem );
			errorElem.onclick =3D function()
			{
				var elem =3D self.form.elements[this.id.replace( =
self.config.boxErrorPrefix, "" )];
				if ( typeof elem.fields !=3D 'undefined' ) elem =3D elem.fields[0];
				if ( typeof elem.select !=3D 'undefined' ) elem.select();
				if ( typeof elem.focus !=3D 'undefined' ) elem.focus();
			}
		}
		self.boxError.style.display =3D "block";
	}
}

/*	Handles element className manipulation
------------------------------------------- */
fValidate.prototype.removeCSSClass =3D function( elem, className )
{
	elem.className =3D elem.className.replace( className, "" ).trim();
}
fValidate.prototype.addCSSClass =3D function( elem, className )
{
	this.removeCSSClass( elem, className );
	elem.className =3D ( elem.className + " " + className ).trim();
}

/*	Processes errors in stack for group error mode
------------------------------------------- */
fValidate.prototype.showGroupError =3D function()
{
	for ( var error, firstElem, i =3D 0; ( error =3D this.errors[i] ); i++ =
)
	{
		if ( i =3D=3D 0 ) firstElem =3D error.elem;
		this.elem =3D error.elem;
		this.showError( error.msg, Boolean( i =3D=3D ( this.errors.length - 1 =
) ) );
	}
	var focusElem =3D ( typeof firstElem.fields !=3D 'undefined' )?
		firstElem.fields[0]:
		firstElem;
	this.selectFocus( focusElem );
}

/*	Reverts any visible error notification upon event
------------------------------------------- */
fValidate.prototype.revertError =3D function( elem )
{
	elem =3D this.setArg( elem, this.elem );
	var isHidden	=3D Boolean( elem.type =3D=3D 'hidden' ),
		errorClass	=3D this.config.errorClass,
		i			=3D 0,
		errorElem,
		subelem;

	if ( ( typeof elem.length !=3D 'undefined' && elem.length > 1 && =
elem.nodeName !=3D 'SELECT' ) || isHidden )
	{
		if ( isHidden && typeof elem.fields !=3D 'undefined' )
		{	=09
			while( subelem =3D ( isHidden ) ? elem.fields[i++] : elem.item( i++ ) =
)	=09
			{
				if ( typeof subelem.revertClass !=3D 'undefined' )
				{
					subelem.className =3D subelem.revertClass;
				}
			}
		}
	} else {
		if ( this.config.useSingleClassNames )
		{
			if ( typeof subElement.revertClass !=3D 'undefined' )
			{
				elem.className =3D elem.revertClass;
			}
		} else {
			this.removeCSSClass( elem, errorClass );
		}	=09
	}
	if ( typeof elem.label !=3D 'undefined' )
	{
		if ( this.config.useSingleClassNames )
		{
			elem.label.className =3D '';
		} else {
			this.removeCSSClass( elem.label, errorClass );
		}
		elem.label.innerHTML =3D ( elem.label.original || elem.label.innerHTML =
);
	}
	if ( typeof this.boxError !=3D 'undefined' )
	{
		if ( typeof this.boxError.normalize !=3D 'undefined' ) =
this.boxError.normalize();
		if ( errorElem =3D document.getElementById( this.config.boxErrorPrefix =
+ elem.name ) )
		{
			this.boxError.removeChild( errorElem );
		}
		if ( this.boxError.childNodes.length =3D=3D 0 ) =
this.boxError.style.display =3D "none";
	}
}

/*	Focus and select elements, if possible
------------------------------------------- */
fValidate.prototype.selectFocus =3D function( elem )
{
	if ( typeof elem.select !=3D 'undefined' ) elem.select();
	if ( typeof elem.focus !=3D 'undefined' )  elem.focus();
}

/*	Developer assistance method - shows error if validator/element-type =
mismatch
------------------------------------------- */
fValidate.prototype.typeMismatch =3D function()
{
	var pats =3D {
		'text':		'text|password|textarea',
		'ta':		'textarea',
		'hidden':	'hidden',
		's1':		'select-one',
		'sm':		'select-multiple',
		'select':	'select-one|select-multiple',
		'rg':		'radio',
		'radio':	'radio',
		'cb':		'checkbox',
		'file':		'file'
		};
	var fail		=3D false,
		expected	=3D new Array(),
		result =3D key =3D type =3D regex =3D "";
	for ( var i =3D 0; i < arguments.length; i++ )
	{
		type	=3D pats[arguments[i]];
		regex	=3D new RegExp( type );
		result	+=3D ( regex.test( this.elem.type ) ) ? "1" : "0";
		key		+=3D "0";
		expected.push( type );	=09
	}
	if ( key ^ result =3D=3D 0 )
	{
		this.devError( [this.elem.fName, this.elem.type, expected.join( "|" =
).replace( /\|/g, this.i18n.or )], 'mismatch' );
		this.elem.validated =3D false;
		return true;
	}
	return false;
}

/*	Returns value(s) of reference element passed
------------------------------------------- */
fValidate.prototype.getValue =3D function( elem )
{
	switch ( elem.type )
	{
		case 'text' :
		case 'password' :
		case 'textarea' :
		case 'hidden' :
		case 'file' :
			return elem.value;
		case 'radio':
		case 'select-single':
			if ( typeof elem.length =3D=3D 'undefined' )
			{
				return elem.value;
			} else {
				for ( var i =3D 0; i < elem.length; i++ )
				{
					choice =3D ( elem.type =3D=3D 'radio' ) ? "checked" : "selected";
					if ( elem[i][choice] )
					{
						return elem[i].value;
					}
				}
			}
		case 'select-multiple' :
		case 'checkbox' :
			if ( typeof elem.length =3D=3D 'undefined' )
			{
				return elem.value
			} else {
				var returnValues =3D new Array();
				for ( var i =3D 0; i < elem.length; i++ )
				{
					choice =3D ( elem.type =3D=3D 'checkbox' ) ? "checked" : =
"selected";
					if ( elem[i][choice] )
					{
						returnValues.push( elem[i].value );
					}
				}
				return returnValues;
			}
		default: return null;
	}
}

/*	Generic argument setting method
------------------------------------------- */
fValidate.prototype.setArg =3D function( arg, def )
{
	return ( typeof arg =3D=3D 'undefined' || arg =3D=3D '' || arg =3D=3D =
null ) ? def : arg;
}

/*	Blank checker.  Optional string argument for evaluating element other =
than current
------------------------------------------- */
fValidate.prototype.isBlank =3D function( el )
{
	var elem =3D this.form.elements[el] || this.elem;
	return Boolean( /^\s*$/.test( elem.value ) );
}

/*	Translates messages using language file
------------------------------------------- */
fValidate.prototype.translateMessage =3D function( args, format )
{
	var msg		=3D ""
	for ( var i =3D 0; i < format.length; i++ )
	{		=09
			msg +=3D ( typeof format[i] =3D=3D 'number' ) ? args[format[i]] : =
format[i];
	}
	return msg;
}

/*	Throws developer errors
------------------------------------------- */
fValidate.prototype.devError =3D function( args, which )
{
	if ( typeof args =3D=3D 'string' )
	{
		which =3D args;
		args =3D [];
	}
	which =3D this.setArg( which, this.type );
	var format =3D this.i18n.devErrors[which];
	var a =3D [
		this.i18n.devErrors.lines[0],
		=
'------------------------------------------------------------------------=
----------------------',
		this.translateMessage( args, format ),
		=
'------------------------------------------------------------------------=
----------------------',
		this.i18n.devErrors.lines[1]
		];
	alert( a.join( "\n" ) );
}

/*	Throws specific developer error
------------------------------------------- */
fValidate.prototype.paramError =3D function( param, elemName )
{
	elemName =3D this.setArg( elemName, this.elem.name );
	this.devError( [param, this.type, elemName], 'paramError' );
}
/* Non-fValidate methods *****************************************/

/*	For easy creation of DOM nodes
------------------------------------------- */
document.createHTMLElement =3D function( elemName, attribs )
{
	if ( typeof document.createElement =3D=3D 'undefined' ) return;
	var elem =3D document.createElement( elemName );
	if ( typeof attribs !=3D 'undefined' )
	{
		for ( var i in attribs )
		{
			switch ( true )
			{
				case ( i =3D=3D 'text' )  : elem.appendChild( =
document.createTextNode( attribs[i] ) ); break;
				case ( i =3D=3D 'class' ) : elem.className =3D attribs[i]; break;
				default : elem.setAttribute( i, '' ); elem[i] =3D attribs[i];
			}
		}
	}
	return elem;   =20
}

/*	Trims b items from the beginning of the array, e items from the end
------------------------------------------- */
Array.prototype.reduce =3D function( b, e )
{
	var a =3D new Array();
	var count =3D 0;
	for ( var i =3D b; i < this.length - e; i++ )
	{
		a[count++] =3D this[i];
	}
	return a;
}

/*	Returns array as argument-compatible string
------------------------------------------- */
Array.prototype.toArgString =3D function()
{
	var a =3D new Array();
	for ( var i =3D 0; i < this.length; i++ )
	{
		a.push( "'" + this[i] + "'" );
	}=09
	return a.toString();
}

/*	Prototype push if missing
------------------------------------------- */
if ( typeof Array.push =3D=3D 'undefined' )
Array.prototype.push =3D function()
{
	var arg, i =3D 0;
	while( arg =3D arguments[i++] )
	{
		this[this.length] =3D arg;
	}
	return this.length;
}

/*	Returns last item of the array
------------------------------------------- */
Array.prototype.last =3D function()
{
	return this[this.length-1];
}

/*	Removes the follow charaters _[] from an elements name for =
human-reading
------------------------------------------- */
String.prototype.format =3D function()
{
	return this.replace( /\_/g, " ").replace( /\[|\]/g, "" );
}

/*	Replaces newline characters with XHTML BR tags
------------------------------------------- */
String.prototype.toHTML =3D function()
{
	return this.replace( /\n/g, "<br />" ).replace( /\t/g, =
"&nbsp;&nbsp;&nbsp;&nbsp;" );
}

/*	Trims leading and trailing whitespace from string
------------------------------------------- */
String.prototype.trim =3D function()
{
	return this.replace( /^\s+|\s+$/, "" );
}

/*	Escapes necessary charactes for string-generated regular expressions
------------------------------------------- */
String.prototype.toPattern =3D function()
{
	return this.replace( /([\.\*\+\{\}\(\)\<\>\^\$\\])/g, "\\$1" );
}
//	EOF
------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://test.canadianzinc.com/scripts/fValidate/fValidate.lang-enUS.js

/*********************************************************
*
*--	fValidate US-English language file.
*
*	Translation by: Peter Bailey
*	Email: me@peterbailey.net
*
*	Visit http://www.peterbailey.net/fValidate/api/i18n/
*	for additional translations and instructions on
*	making your own translation.
*
*	!!! WARNING !!! Changing anything but the literal=20
*	strings will likely cause script failure!
*
*	Note: This document most easily read/edited with tab-
*	spacing set to 4
*
*********************************************************/

if ( typeof fvalidate =3D=3D 'undefined' )
{
	var fvalidate =3D new Object();
}

fvalidate.i18n =3D
{
	//	Validation errors
	errors:
	{
		blank:		[
			["Please enter ", 0]
			],
		length:		[
			[0, " must be at least ", 1, " characters long"],
			[0, " must be no more than ", 1, " characters long.\nThe current text =
is ", 2, " characters long."]
			],
		equalto:	[
			[0, " must be equal to ", 1]
			],
		number:		[
			["The number you entered for ", 0, " is not valid"]
			],
		numeric:	[
			["Only numeric values are valid for the ", 0],
			["A minimum of ", 0, " numeric values are required for the ", 1]
			],
		alnum:		[
			["The data you entered, \"", 0, "\", does not match the requested =
format for ", 1, =20
			"\nMinimum Length: ", 2,
			"\nCase: ", 3,
			"\nNumbers allowed: ", 4,
			"\nSpaces allowed: ", 5,
			"\nPunctuation characters allowed: ", 6, "\n"]
			],
		decimal:	[
			["The data you entered,", 0, " is not valid.  Please re-enter the ", =
1]
			],
		decimalr:	[
			[0, " is not a valid. Please re-enter."]
			],
		ip:			[
			["Please enter a valid IP"],
			["The port number you specified, ", 0, ",  is out of range.\nIt must =
be between ", 1, " and ", 2]
			],
		ssn:		[
			["You need to enter a valid Social Security Number.\nYour SSN must be =
entered in 'XXX-XX-XXXX' format."]
			],
		money:		[
			[0, " does not match the required format of ", 1]
			],
		cc:			[
			["The ", 0, " you entered is not valid. Please check again and =
re-enter."]
			],
		ccDate:		[
			["You credit card has expired! Please use a different card."]
			],
		zip:		[
			["Please enter a valid 5 or 9 digit Zip code."]
			],
		phone:		[
			["Please enter a valid phone number plus Area Code."],
			["Please enter a valid phone number - seven or ten digits."]
			],
		email:		[
			["Please enter a valid email address"]
			],
		url:		[
			[0, " is not a valid domain"]
			],
		date:		[
			["The data entered for ", 0, " is not a valid date\nPlease enter a =
date using the following format: ", 1],
			["Date must be before ", 0],
			["Date must be on or before ", 0],
			["Date must be after ", 0],
			["Date must be on or after ", 0]
			],
		select:		[
			["Please select a valid option for ", 0]
			],
		selectm:	[
			["Please select between ", 0, " and ", 1, " options for ", 2, ".\nYou =
currently have ", 3, " selected"]
			],
		selecti:	[
			["Please select a valid option for ", 0]
			],
		checkbox:	[
			["Please check ", 0, " before continuing"],
			["Please select between ", 0, " and ", 1, " options for ", 2, ".\nYou =
currently have ", 3, " selected"]
			],
		radio:		[
			["Please check ", 0, " before continuing"],
			["Please select an option for ", 0 ]
			],
		comparison:	[
			[0, " must be ", 1, " ", 2]
			],
		eitheror:	[
			["One and only one of the following fields must be entered:\n\t-", 0, =
"\n"]
			],
		atleast:	[
			["At least ", 0, " of the following fields must be entered:\n\t-", 1, =
"\n\nYou have only ", 2, " filled in.\n"]
			],
		allornone:	[
			["All or none of the following fields must be entered and =
accurate:\n\t-", 0, "\nYou have only ", 1, " accurate field entered.\n"]
			],
		file:		[
			["The file must be one of the following types:\n", 0, "\nNote: File =
extension may be case-sensitive."]
			],
		custom:		[
			[0, " is invalid."]
			],
		cazip:		[
			["Please enter a valid postal code."]
			],
		ukpost:		[
			["Please enter a valid postcode."]
			],
		germanpost:	[
			["Please enter a valid postcode."]
			],
		swisspost:	[
			["Please enter a valid postcode."]
			]
	},

	comparison:
	{
		gt:		"greater than",
		lt:		"less than",
		gte:	"greater than or equal to",
		lte:	"less than or equal to",
		eq:		"equal to",
		neq:	"not equal to"
	},

	//	Developer assist errors
	devErrors:
	{
		number:		["The lower-bound (", 0, ") is greater than the upper-bound =
(", 1, ") on this element: ", 2],
		length:		["The minimum length (", 0, ") is greater than the maxiumum =
legnth (", 1, ") on this element: ", 2],
		cc:			["Credit Card type (", 0, ") not found."],

		lines:		["! WARNING ! -- fValidate developer-assist error\n", "\nIf =
you are not the developer, please contact the website administrator =
regarding this error."],
		paramError: ["You must include the '", 0, "' parameter for the '", 1, =
"' validator type on this field: ", 2],
		notFound:	["The validator '", 0, "' was not found.\nRequested by: ", =
1],
		noLabel:	["No element found for label: ", 0],
		noBox:		["An element with the requested id '", 0, "' was not found for =
the 'boxError' config value."],
		missingName:["The hidden input calling the following logical validator =
must have a valid name\nattribute when used in conjunction with the =
'box' error-type.\n\t", 0],
		mismatch:	["Validator/Element type mismatch.\n\nElement: ", 0, =
"\nElement type: ", 1, "\nType required by validator: ", 2],
		noCCType:	["You must include a SELECT item with Credit Card type =
choices!"]
	},

	//	Config values
	config :
	{
		confirmMsg :		"Your data is about to be sent.\nPlease click 'Ok' to =
proceed or 'Cancel' to abort.",
		confirmAbortMsg :	"Submission cancelled.  Data has not been sent."
	},

	//	Tooltip attached to Box-item errors
	boxToolTip:	"Click to target field",

	//	Message displayed at top of alert error in group mode
	groupAlert:	"The following errors occured:\n\n- ",

	//	Literal translation of the English 'or', include padding spaces.
	or:			" or "
}
------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://test.canadianzinc.com/scripts/fValidate/fValidate.validators.js

/*< blank basic =
*******************************************************************/
fValidate.prototype.blank =3D function()
{
	if ( this.typeMismatch( 'text' ) ) return;
	if ( this.isBlank() )
	{
		this.throwError( [this.elem.fName] );
	}
}
/*/>*/
/*< number numbers =
*******************************************************************/
fValidate.prototype.number =3D function( type, lb, ub )
{
	if ( this.typeMismatch( 'text' ) ) return;
	var num  =3D ( type =3D=3D 0 ) ? parseInt( this.elem.value, 10 ) : =
parseFloat( this.elem.value );
	lb       =3D this.setArg( lb, 0 );
	ub       =3D this.setArg( ub, Number.infinity );
	if ( lb > ub )
	{
		this.devError( [lb, ub, this.elem.name] );
		return;
	}
	var fail =3D Boolean( isNaN( num ) || num !=3D this.elem.value );
	if ( !fail )
	{
		switch( true )
		{
			case ( lb !=3D false && ub !=3D false ) : fail =3D !Boolean( lb <=3D =
num && num <=3D ub ); break;
			case ( lb !=3D false ) : fail =3D Boolean( num < lb ); break;
			case ( ub !=3D false ) : fail =3D Boolean( num > ub ); break;
		}
	}
	if ( fail )
	{
		this.throwError( [this.elem.fName] );
		return;
	}
	this.elemPass =3D true;
}
/*/>*/
/*< numeric numbers =
*******************************************************************/
fValidate.prototype.numeric =3D function( len )
{
	if ( this.typeMismatch( 'text' ) ) return;
	len =3D this.setArg( len, '*' );
	var regex =3D new RegExp( ( len =3D=3D '*' ) ? "^\\d+$" : "^\\d{" + =
parseInt( len, 10 ) + "}\\d*$" );
	if ( !regex.test( this.elem.value ) )
	{
		if ( len =3D=3D "*" )
		{
			this.throwError( [this.elem.fName] );
		} else {
			this.throwError( [len, this.elem.fName], 1 );
		}
	}
}
/*/>*/
/*< length basic =
*******************************************************************/
fValidate.prototype.length =3D function( len, maxLen )
{
	if ( this.typeMismatch( 'text' ) ) return;
	var vlen =3D this.elem.value.length;
	len		=3D Math.abs( len );
	maxLen	=3D Math.abs( this.setArg( maxLen, Number.infinity ) );
	if ( len > maxLen )
	{
		this.devError( [len, maxLen, this.elem.name] );
		return;
	}
	if ( len > parseInt( vlen, 10 ) )
	{
		this.throwError( [this.elem.fName, len] );
	}=09
	if ( vlen > maxLen )
	{
		this.throwError( [this.elem.fName, maxLen, vlen], 1 );
	}
}
/*/>*/
/*< alnum extended =
*******************************************************************/
fValidate.prototype.alnum =3D function( minLen, tCase, numbers, spaces, =
puncs )
{
	if ( this.typeMismatch( 'text' ) ) return;

	tCase =3D this.setArg( tCase, "a" );
=09
	//alert( [minLen,tCase,numbers,spaces,puncs] );

	numbers =3D ( numbers =3D=3D "true" || numbers =3D=3D "1" );
	spaces =3D ( spaces =3D=3D "true" || spaces =3D=3D "1" );

	//alert( [minLen,tCase,numbers,spaces,puncs] );
	=09
	var okChars =3D "",
		arrE	=3D ['None','Any','No','No','Any'];

	if ( minLen !=3D '*' )
	{
		minLen =3D  parseInt( minLen, 10 );
		arrE[0] =3D minLen;
	} else {
		minLen =3D 0;
	}

	switch( tCase.toUpperCase() )
	{
		case 'U':
			okChars +=3D 'A-Z';
			arrE[1] =3D  'UPPER';
			break;
		case 'L':
			okChars +=3D 'a-z';
			arrE[1] =3D  'lower';
			break;
		case 'C':
			okChars +=3D 'A-Z][a-z';
			arrE[1] =3D  'Intial capital';
			minLen--;
			break;
		default:
			okChars +=3D 'a-zA-Z';
			break;	=09
	}

	if ( numbers =3D=3D true )
	{
		okChars +=3D '0-9';
		arrE[2] =3D  'Yes';
	}
	if ( spaces =3D=3D true )
	{
		okChars +=3D ' ';
		arrE[3] =3D  'Yes';
	}
	if ( puncs =3D=3D "any" )
	{
		arrE[4]  =3D "Any";
	}
	else if ( puncs =3D=3D "none" )
	{
		arrE[4] =3D "None";
	}
	else=20
	{
		puncs =3D puncs.replace( /pipe/g, "|" );
		okChars +=3D puncs;
		arrE[4] =3D  puncs; //.toPattern().replace( /\\/g, "" );
	}
	var length =3D ( minLen !=3D "*" )?
		"{" + minLen + ",}":
		"+";
	var regex =3D ( puncs =3D=3D "any" ) ?
		new RegExp( "^([" + okChars + "]|[^a-zA-Z0-9\\s])" + length + "$" ):
		new RegExp( "^[" + okChars + "]" + length + "$" );
=09
	if ( !regex.test( this.elem.value ) )
	{
		this.throwError( [this.elem.value, this.elem.fName, arrE[0], arrE[1], =
arrE[2], arrE[3], arrE[4]] );
	}
}
/*/>*/
/*< equalto logical =
*******************************************************************/
fValidate.prototype.equalto =3D function( oName )
{
	if ( this.typeMismatch( 'text' ) ) return;
	if ( typeof oName =3D=3D 'undefined' )
	{
		this.paramError( 'oName' );
	}
	var otherElem =3D this.form.elements[oName];
	if ( this.elem.value !=3D otherElem.value )
	{
		this.throwError( [this.elem.fName,otherElem.fName] );		=09
	}
}
/*/>*/
/*< ssn extended =
*******************************************************************/
fValidate.prototype.ssn =3D function()
{
	if ( this.typeMismatch( 'text' ) ) return;
	if ( !( /^\d{3}\-\d{2}\-\d{4}$/.test( this.elem.value ) ) )
		this.throwError();
}
/*/>*/
/*< select controls =
*******************************************************************/
fValidate.prototype.select =3D function()
{
	if ( this.typeMismatch( 's1' ) ) return;
	if ( this.elem.selectedIndex =3D=3D 0 )
	{
		this.throwError( [this.elem.fName] );
	}
}
/*/>*/
/*< selectm controls =
*******************************************************************/
fValidate.prototype.selectm =3D function( minS, maxS )
{
	if ( this.typeMismatch( 'sm' ) ) return;
	if ( typeof minS =3D=3D 'undefined' )
	{
		this.paramError( 'minS' );
	}
	if ( maxS =3D=3D 999 || maxS =3D=3D '*' || typeof maxS =3D=3D =
'undefined' || maxS > this.elem.length ) maxS =3D this.elem.length;

	var count =3D 0;=09
	for ( var opt, i =3D 0; ( opt =3D this.elem.options[i] ); i++ )
	{
		if ( opt.selected ) count++;
	}

	if ( count < minS || count > maxS )
	{
		this.throwError( [minS, maxS, this.elem.fName, count] );
	}
}
/*/>*/
/*< selecti controls =
*******************************************************************/
fValidate.prototype.selecti =3D function( indexes )
{
=09
	if ( this.typeMismatch( 's1' ) ) return;
	if ( typeof indexes =3D=3D 'undefined' )
	{
		this.paramError( 'indexes' );
		return;
	}
	indexes =3D indexes.split( "," );
	var selectOK =3D true;

	for ( var i =3D 0; i < indexes.length; i++ )
	{
		if ( this.elem.options[indexes[i]].selected )
		{
			selectOK =3D false;
			break;
		}
	}
	if ( !selectOK )
	{
		this.throwError( [this.elem.fName] );
	}
}
/*/>*/
/*< cazip international =
*******************************************************************/
fValidate.prototype.cazip =3D function()
{
	var elem =3D this.elem;
	if ( this.typeMismatch( 'text' ) ) return;
	elem.value =3D elem.value.toUpperCase();
	if ( !( /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/.test( elem.value ) ) )
	{
		this.throwError();
	}
}
fValidate.prototype.capost =3D fValidate.prototype.cazip;
/*/>*/
/*< ukpost international =
*******************************************************************/
fValidate.prototype.ukpost =3D function()
{
	var elem =3D this.elem;
	if ( this.typeMismatch( 'text' ) ) return;
	elem.value =3D elem.value.toUpperCase();
	if ( !( /^[A-Z]{1,2}\d[\dA-Z] ?\d[A-Z]{2}$/.test( elem.value ) ) )
	{
		this.throwError();
	}
}
/*/>*/
/*< germanpost international =
*******************************************************************/
fValidate.prototype.germanpost =3D function()
{
	var elem =3D this.elem;
	if ( this.typeMismatch( 'text' ) ) return;
	elem.value =3D elem.value.toUpperCase();
	if ( !( /^(?:CH\-)\d{4}$/.test( elem.value ) ) )
	{
		this.throwError();
	}
}
/*/>*/
/*< swisspost international =
*******************************************************************/
fValidate.prototype.swisspost =3D function()
{
	var elem =3D this.elem;
	if ( this.typeMismatch( 'text' ) ) return;
	elem.value =3D elem.value.toUpperCase();
	if ( !( /^(?:D\-)\d{5}$/.test( this.elem.value ) ) )
	{
		this.throwError();
	}
}
/*/>*/
/*< email web =
*******************************************************************/
fValidate.prototype.email =3D function( level )
{
	if ( this.typeMismatch( 'text' ) ) return;
	if ( typeof level =3D=3D 'undefined' ) level =3D 0;
	var emailPatterns =3D [
		/.+@.+\..+$/i,
		/^\w.+@\w.+\.[a-z]+$/i,
		/^\w[-_a-z~.]+@\w[-_a-z~.]+\.[a-z]{2}[a-z]*$/i,
		/^\w[\w\d]+(\.[\w\d]+)*@\w[\w\d]+(\.[\w\d]+)*\.[a-z]{2,7}$/i
		];
	if ( ! emailPatterns[level].test( this.elem.value ) )
	{
		this.throwError();
	}=09
}=09
/*/>*/
/*< url web =
*******************************************************************/
fValidate.prototype.url =3D function( hosts, hostOptional, allowQS )
{
	if ( this.typeMismatch( 'text' ) ) return;

	this.setArg( hosts, "http" );
=09
	var front =3D "^(?:(" + hosts.replace( /\,/g, "|" ) + ")\\:\\/\\/)";
	var end   =3D ( Boolean( allowQS ) =3D=3D true ) ? "(\\?.*)?$" : "$";

	if ( Boolean( hostOptional ) =3D=3D true ) front +=3D "?";
	var regex =3D new RegExp( front + "([\\w\\d-]+\\.?)+" + end );
=09
	if ( !regex.test( this.elem.value ) )
	{
		this.throwError( [this.elem.fName] );
	}
}=09
/*/>*/
/*< ip web =
*******************************************************************/
fValidate.prototype.ip =3D function( portMin, portMax )
{
	if ( this.typeMismatch( 'text' ) ) return;
	portMin =3D this.setArg( portMin, 0 );
	portMax =3D this.setArg( portMax, 99999 );
	if ( !( /^\d{1,3}(\.\d{1,3}){3}(:\d+)?$/.test( this.elem.value ) ) )
	{
		this.throwError();
	}
	else
	{
		var part, i =3D 0, parts =3D this.elem.value.split( /[.:]/ );
		while ( part =3D parts[i++] )
		{
			if ( i =3D=3D 5 ) // Check port
			{
				if ( part < portMin || part > portMax )
				{
					this.throwError( [part, portMin, portMax], 1 );
				}
			}
			else if ( part < 0 || part > 255 )
			{
				this.throwError();
			}
		}
	}
}
/*/>*/
/*< decimal numbers =
*******************************************************************/
fValidate.prototype.decimal =3D function( lval, rval )
{
	if ( this.typeMismatch( 'text' ) ) return;
	var regex =3D '', elem =3D this.elem;
	if ( lval !=3D '*' ) lval =3D parseInt( lval, 10 );
	if ( rval !=3D '*' ) rval =3D parseInt( rval, 10 );
=09
	if ( lval =3D=3D 0 )
		regex =3D "^\\.[0-9]{" + rval + "}$";=09
	else if ( lval =3D=3D '*' )
		regex =3D "^[0-9]*\\.[0-9]{" + rval + "}$";
	else if ( rval =3D=3D '*' )
		regex =3D "^[0-9]{" + lval + "}\\.[0-9]+$";
	else
		regex =3D "^[0-9]{" + lval + "}\\.[0-9]{" + rval + "}$";
	=09
	regex =3D new RegExp( regex );

	if ( !regex.test( elem.value ) )
	{
		this.throwError( [elem.value,elem.fName] );
	}=09
}
/*/>*/
/*< decimalr numbers =
*******************************************************************/
fValidate.prototype.decimalr =3D function( lmin, lmax, rmin, rmax )
{
	if ( this.typeMismatch( 'text' ) ) return;
	lmin =3D ( lmin =3D=3D '*' )? 0 : parseInt( lmin, 10 );
	lmax =3D ( lmax =3D=3D '*' )? '': parseInt( lmax, 10 );
	rmin =3D ( rmin =3D=3D '*' )? 0 : parseInt( rmin, 10 );
	rmax =3D ( rmax =3D=3D '*' )? '': parseInt( rmax, 10 );
	var	decReg =3D "^[0-9]{"+lmin+","+lmax+"}\\.[0-9]{"+rmin+","+rmax+"}$"
	var regex =3D new RegExp(decReg);
	if ( !regex.test( this.elem.value ) )
	{
		this.throwError( [this.elem.fName] );
	}
	return true;
}
/*/>*/
/*< zip extended =
*******************************************************************/
fValidate.prototype.zip =3D function( sep )
{
	if ( this.typeMismatch( 'text' ) ) return;
	sep =3D this.setArg( sep, "- " );
	var regex =3D new RegExp( "^[0-9]{5}(|[" + sep.toPattern() + =
"][0-9]{4})?$" );
	if ( ! regex.test( this.elem.value ) )
	{
		this.throwError();
	}
}
/*/>*/
/*< phone extended =
*******************************************************************/
fValidate.prototype.phone =3D function( format )
{
	if ( this.typeMismatch( 'text' ) ) return;
	format       =3D this.setArg( format, 0 );
	var patterns =3D [
		/^(\(?\d\d\d\)?)?[ -]?\d\d\d[ -]?\d\d\d\d$/,	//	loose
		/^(\(\d\d\d\) )?\d\d\d[ -]\d\d\d\d$/			//	strict
		];
	if ( !patterns[format].test( this.elem.value ) )
	{
		if ( format =3D=3D 1 )
		{
			this.throwError();
		} else {
			this.throwError( [], 1 );
		}
	}
}
/*/>*/
/*< date datetime =
*******************************************************************/
fValidate.prototype.date =3D function( formatStr, delim, code, specDate =
)
{
	if ( this.typeMismatch( 'text' ) ) return;
	if ( typeof formatStr =3D=3D 'undefined' )
	{
		this.paramError( 'formatStr' );
		return;
	}

	delim =3D this.setArg( delim, "/" );

	var error	=3D [this.elem.fName, formatStr.replace( /\//g, delim )];
	var format  =3D formatStr.split( "/" );
	var compare =3D this.elem.value.split( delim );
	var order   =3D new Object();
=09
	for ( var i =3D 0; i < format.length; i++ )
	{
		switch( format[i].charAt( 0 ).toLowerCase() )
		{
			case 'm' :
				order.months =3D i;
				break;
			case 'd' :
				order.days =3D i;
				break;
			case 'y' :
				order.years =3D i;
				break;
		}
	}
	var thisDate =3D new Date( compare[order.years], =
compare[order.months]-1, compare[order.days] );
=09
	if ( isNaN( thisDate ) || thisDate.getDate() !=3D compare[order.days] =
|| thisDate.getMonth() !=3D compare[order.months]-1 || =
thisDate.getFullYear().toString().length !=3D formatStr.match( /y/g =
).length )
	{
		this.throwError( error );
		return;
	}
=09
	var compareElem =3D this.form.elements[specDate];
	if ( typeof compareElem !=3D 'undefined' )
	{
		specDate =3D compareElem.validDate || compareElem.value;
	}
	var compareDate =3D ( specDate =3D=3D 'today' )?
		new Date():
		new Date( specDate );
	compareDate.setHours(0);
	compareDate.setMinutes(0);
	compareDate.setSeconds(0);
	compareDate.setMilliseconds(0);
=09
	var timeDiff =3D compareDate.getTime() - thisDate.getTime();
	var dateOk   =3D false;
=09
	switch ( parseInt( code ) ) {
		case 1 :	// Before specDate
			dateOk	=3D Boolean( timeDiff > 0 );
			error	=3D 1;
			break;
		case 2 :	// Before or on specDate
			dateOk	=3D Boolean( ( timeDiff + 86400000 ) > 0 );
			error	=3D 2;
			break;
		case 3 :	// After specDate
			dateOk	=3D Boolean( timeDiff < 0 );
			error	=3D 3;
			break;
		case 4 :	// After or on specDate
			dateOk	=3D Boolean( ( timeDiff - 86400000 ) < 0 );
			error	=3D 4;
			break;
		default : dateOk =3D true;
		}
	if ( !dateOk )
	{
		this.throwError( [specDate], error );
	}
	this.elem.validDate =3D thisDate.toString();
}=09
/*/>*/
/*< money ecommerce =
*******************************************************************/
fValidate.prototype.money =3D function( ds, grp, dml )
{
	if ( this.typeMismatch( 'text' ) ) return;
=09
	ds  =3D ( ds =3D=3D ' ' )  ? false : ds.toPattern();
	grp =3D ( grp =3D=3D ' ' ) ? false : grp.toPattern();
	dml =3D ( dml =3D=3D ' ' ) ? false : dml.toPattern();
=09
	var moneySyntax, pattern;
=09
	switch( true )
	{
		case Boolean( ds && grp && dml ):		// Dollar sign, grouping, and =
decimal
			pattern		=3D "^" + ds + "(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + =
grp + ")*[0-9]{3}|[0-9]{1,3})(" + dml + "[0-9]{2})$";
			moneySyntax =3D ds + "XX" + grp + "XXX" + dml + "XX";
			break;
		case Boolean( ds && grp && !dml ):		// Dollar sign and grouping
			pattern		=3D "^" + ds + "(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + =
grp + ")*[0-9]{3}|[0-9]{1,3})$";
			moneySyntax =3D "" + ds + "XX" + grp + "XXX";
			break;
		case Boolean( ds && !grp && dml ):		// Dollar sign and decimal
			pattern		=3D"^" + ds + "[0-9]*(\\.[0-9]{2})$";
			moneySyntax =3D"" + ds + "XXXXX" + dml + "XX";
			break;
		case Boolean( !ds && grp && dml ):		// Grouping and decimal
			pattern		=3D"^(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + grp + =
")*[0-9]{3}|[0-9]{1,3})(" + dml + "[0-9]{2})?$";
			moneySyntax =3D"XX" + grp + "XXX" + dml + "XX";
			break;
		case Boolean( ds && !grp && !dml ):		// Dollar sign only
			pattern		=3D"^" + ds + "[0-9]*$";
			moneySyntax =3D"" + ds + "XXXXX";
			break;
		case Boolean( !ds && grp && !dml ):		// Grouping only
			pattern		=3D"^(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + grp + =
")*[0-9]{3}|[0-9]{1,3})$";
			moneySyntax =3D"XX" + grp + "XXX";
			break;
		case Boolean( !ds && !grp && dml ):		// Decimal only
			pattern		=3D"^[0-9]*(" + dml + "[0-9]{2})$";
			moneySyntax =3D"XXXXX" + dml + "XX";
			break;
		case Boolean( !ds && !grp && !dml ):	// No params set, all special =
chars become optional
			pattern		=
=3D"^.?(?:(?:[0-9]{1,3}.?)(?:[0-9]{3}.?)*[0-9]{3}|[0-9]{1,3})(.[0-9]{2})?=
$";
			moneySyntax =3D"[?]XX[?]XXX[?XX]";
	}
		=09
	var regex =3D new RegExp( pattern );
	if ( !regex.test( this.elem.value ) )
	{
		this.throwError( [this.elem.fName, moneySyntax.replace( /\\/g, '' )] =
);
	}
}
/*/>*/
/*< checkbox controls =
*******************************************************************/
fValidate.prototype.checkbox =3D function( minC, maxC )
{
	if ( this.typeMismatch( 'cb' ) ) return;
	if ( typeof minC =3D=3D 'undefined' )
	{
		this.paramError( 'minC' );
		return;
	}
	if ( this.elem =3D=3D this.form.elements[this.elem.name] && =
!this.elem.checked )
	{
		this.throwError( [this.elem.fName] );
	}
	else
	{
		this.elem =3D this.form.elements[this.elem.name];
		var len   =3D this.elem.length;
		var count =3D 0;
	=09
		if ( maxC =3D=3D 999 || maxC =3D=3D '*' || typeof maxC =3D=3D =
'undefined' || maxC > this.elem.length )
		{
			maxC =3D=3D len;
		}
		var i =3D len;
		while( i-- > 0 )
		{
			if ( this.elem[i].checked )
			{
				count++;
			}
		}
		if ( count < minC || count > maxC )
		{
			this.throwError( [minC, maxC, this.elem[0].fName, count] );
		}		=09
	}
}
/*/>*/
/*< radio controls =
*******************************************************************/
fValidate.prototype.radio =3D function()
{
	if ( this.typeMismatch( 'rg' ) ) return;
	if ( this.elem =3D=3D this.form.elements[this.elem.name] && =
!this.elem.checked )
	{
		this.throwError( [this.elem.fName] );
	}
	else
	{
		this.elem =3D this.form.elements[this.elem.name];
	=09
		for ( var i =3D 0; i < this.elem.length; i++ )
		{
			if ( this.elem.item( i ).checked )
			{
				return;
			}
		}
		this.throwError( [this.elem[0].fName] );
	}
}
/*/>*/
/*< eitheror logical =
*******************************************************************/
fValidate.prototype.eitheror =3D function()
{
	if ( this.typeMismatch( 'hidden' ) ) return;
	if ( typeof arguments[0] =3D=3D 'undefined' )
	{
		this.paramError( 'delim' );
		return;
	}
	if ( typeof arguments[1] =3D=3D 'undefined' )
	{
		this.paramError( 'fields' );
		return;
	}
	var arg, i  =3D 0,
		fields  =3D new Array(),
		field,
		nbCount =3D 0,	=09
		args    =3D arguments[1].split( arguments[0] );	=09

	this.elem.fields =3D new Array();
=09
	while ( arg =3D args[i++] )
	{
		field =3D this.form.elements[arg];
		fields.push( field.fName );
		this.elem.fields.push( field );

		if ( !this.isBlank( arg ) )
		{
			nbCount++;
		}
	}
	if ( nbCount !=3D 1 )
	{
		this.throwError( [fields.join( "\n\t-" )] );
	}
}
/*/>*/
/*< atleast logical =
*******************************************************************/
fValidate.prototype.atleast =3D function()
{
	if ( this.typeMismatch( 'hidden' ) ) return;
	if ( typeof arguments[0] =3D=3D undefined )
	{
		this.paramError( 'qty' );
		return;
	}
	if ( typeof arguments[1] =3D=3D undefined )
	{
		this.paramError( 'delim' );
		return;
	}
	if ( typeof arguments[2] =3D=3D undefined )
	{
		this.paramError( 'fields' );
		return;
	}
	var arg, i  =3D 0,
		fields  =3D new Array(),
		field,
		nbCount =3D 0,
		args    =3D arguments[2].split( arguments[1] );

	this.elem.fields =3D new Array();
=09
	while ( arg =3D args[i++] )
	{
		field =3D this.form.elements[arg];
		fields.push( field.fName );
		this.elem.fields.push( field );

		if ( !this.isBlank( arg ) )
		{
			nbCount++;
		}
	}
	if ( nbCount < arguments[0] )
	{
		this.throwError( [arguments[0], fields.join( "\n\t-" ), nbCount] );
	}
}
/*/>*/
/*< allornone logical =
*******************************************************************/
fValidate.prototype.allornone =3D function()
{
	if ( this.typeMismatch( 'hidden' ) ) return;
	if ( typeof arguments[0] =3D=3D 'undefined' )
	{
		this.paramError( 'delim' );
		return;
	}
	if ( typeof arguments[1] =3D=3D 'undefined' )
	{
		this.paramError( 'fields' );
		return;
	}
	var arg, i  =3D 0,
		fields  =3D new Array(),
		field,
		nbCount =3D 0,
		args    =3D arguments[1].split( arguments[0] );
=09
	this.elem.fields =3D new Array();

	while ( arg =3D args[i++] )
	{
		field =3D this.form.elements[arg];
		fields.push( field.fName );
		this.elem.fields.push( field );

		if ( !this.isBlank( arg ) )
		{
			nbCount++;
		}
	}
	if ( nbCount > 0 && nbCount < args.length )
	{
		this.throwError( [fields.join( "\n\t-" ), nbCount] );
	}
}
/*/>*/
/*< comparison logical =
*******************************************************************/
fValidate.prototype.comparison =3D function( field1, operator, field2 )
{
	if ( this.typeMismatch( 'hidden' ) ) return;
	var elem1	=3D this.form.elements[field1],
		elem2	=3D this.form.elements[field2],
		value1	=3D this.getValue( elem1 ),
		value2	=3D this.getValue( elem2 );
		i18n	=3D this.i18n.comparison;
		i		=3D -1;
=09
	var operators =3D
	[
		['>',	i18n.gt],
		['<',	i18n.lt],
		['>=3D',	i18n.gte],
		['<=3D',	i18n.lte],
		['=3D=3D',	i18n.eq],
		['!=3D',	i18n.neq]
	];
	while( operators[++i][0] !=3D operator ){ }
	this.elem.fields =3D [elem1, elem2];
	if ( ! eval( value1 + operator + value2 ) )
	{
		this.throwError( [elem1.fName, operators[i][1], elem2.fName] );
	}
}
/*/>*/
/*< file controls =
*******************************************************************/
fValidate.prototype.file =3D function( extensions, cSens )
{
	if ( this.typeMismatch( 'file' ) ) return;
	if ( typeof extensions =3D=3D 'undefined' )
	{
		this.paramError( 'extensions' );
		return;
	}
	cSens =3D Boolean( cSens ) ? "" : "i";
	var regex =3D new RegExp( "^.+\\.(" + extensions.replace( /,/g, "|" ) + =
")$", cSens );
	if ( ! regex.test( this.elem.value ) )
	{
		this.throwError( [extensions.replace( /,/g, "\n" )] );
	}
}
/*/>*/
/*< custom special =
*******************************************************************/
fValidate.prototype.custom =3D function( flags, reverseTest )
{
	if ( this.typeMismatch( 'text' ) ) return;
	flags     =3D ( flags ) ? flags.replace( /[^gim]/ig ) : "";
	var regex =3D new RegExp( this.elem.getAttribute( this.config.pattern =
), flags );
	if ( !regex.test( this.elem.value ) )
	{
		this.throwError( [this.elem.fName] );
	}=09
}
/*/>*/
/*< cc ecommerce =
*******************************************************************/
fValidate.prototype.cc =3D function()
{
	if ( this.typeMismatch( 'text' ) ) return;
	var typeElem =3D this.form.elements[this.config.ccType];

	if ( !typeElem )
	{
		this.devError( 'noCCType' )
		return;
	}
	var ccType   =3D =
typeElem.options[typeElem.selectedIndex].value.toUpperCase();

	var types    =3D {
		'VISA'    : /^4\d{12}(\d{3})?$/,
		'MC'      : /^5[1-5]\d{14}$/,
		'DISC'    : /^6011\d{12}$/,
		'AMEX'    : /^3[4|7]\d{13}$/,       =20
		'DINERS'  : /^3[0|6|8]\d{12}$/,
		'ENROUTE' : /^2[014|149]\d{11}$/,
		'JCB'     : /^3[088|096|112|158|337|528]\d{12}$/,
		'SWITCH'  : =
/^(49030[2-9]|49033[5-9]|49110[1-2]|4911(7[4-9]|8[1-2])|4936[0-9]{2}|5641=
82|6333[0-4][0-9]|6759[0-9]{2})\d{10}(\d{2,3})?$/,
		'DELTA'   : =
/^4(1373[3-7]|462[0-9]{2}|5397[8|9]|54313|5443[2-5]|54742|567(2[5-9]|3[0-=
9]|4[0-5])|658[3-7][0-9]|659(0[1-9]|[1-4][0-9]|50)|844[09|10]|909[6-7][0-=
9]|9218[1|2]|98824)\d{10}$/,
		'SOLO'    : /^(6334[5-9][0-9]|6767[0-9]{2})\d{10}(\d{2,3})?$/
		};
	if ( typeElem.validated =3D=3D false && this.groupError =3D=3D true ) =
return;
	if ( typeof types[ccType] =3D=3D 'undefined' && typeElem.validated =
=3D=3D false && this.groupError =3D=3D false )
	{
		this.devError( [ccType] );
		return;
	}
	this.elem.value =3D this.elem.value.replace( /[^\d]/g, "" );
	if ( !types[ccType].test( this.elem.value ) || !this.elem.value.luhn() =
)
	{
		this.throwError( [this.elem.fName] );
	}
}

String.prototype.luhn =3D function()
{
	var i =3D this.length;
	var checkSum =3D "", digit;
	while ( digit =3D this.charAt( --i ) )
	{
		checkSum +=3D ( i % 2 =3D=3D 0 ) ? digit * 2 : digit;
	}
	checkSum =3D eval( checkSum.split('').join('+') );
	return ( checkSum % 10 =3D=3D 0 );
}
/*/>*/
/*< ccDate ecommerce =
*******************************************************************/
fValidate.prototype.ccDate =3D function( month, year )
{
	if ( this.typeMismatch( 's1' ) ) return;
	year	=3D parseInt( this.getValue( this.form.elements[year] ), 10 ) + =
2000;
	month	=3D parseInt( this.getValue( this.form.elements[month] ), 10 );

	var today	=3D new Date();
	var expDate =3D new Date( year, month )

	if ( expDate < today )
	{
		alert( ["Card Expired",today,expDate].join( "\n" ) );
	}
}
/*/>*/
/*	EOF */
------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://test.canadianzinc.com/scripts/JSMenu/dhtmllib.js

/************************************************************************=
******
* dhtmllib.js                                                            =
     *
*                                                                        =
     *
* Copyright 1999 by Mike Hall.                                           =
     *
* Web address: http://www.brainjar.com                                   =
     *
* Last update: February 26, 2000.                                        =
     *
*                                                                        =
     *
* Provides basic functions for DHTML positioned elements which will work =
on   *
* both Netscape Communicator and Internet Explorer browsers (version 4.0 =
and  *
* up).                                                                   =
     *
*************************************************************************=
*****/

// Determine browser.

var isMinNS4 =3D (navigator.appName.indexOf("Netscape") >=3D 0 &&
                parseFloat(navigator.appVersion) >=3D 4) ? 1 : 0;
var isNS6 	 =3D (navigator.appName.indexOf("Netscape") >=3D 0 &&
                parseFloat(navigator.appVersion) >=3D 5) ? 1 : 0;

var isMinIE4 =3D (document.all) ? 1 : 0;
var isMinIE5 =3D (isMinIE4 && navigator.appVersion.indexOf("5.") >=3D 0) =
? 1 : 0;

//-----------------------------------------------------------------------=
------
// Layer visibility.
//-----------------------------------------------------------------------=
------

function hideLayer(layer) {
  if (isMinNS4)
    layer.visibility =3D "hide";
  if (isMinIE4)
    layer.style.visibility =3D "hidden";
}

function showLayer(layer) {
  if (isMinNS4)
    layer.visibility =3D "show";
  if (isMinIE4)
    layer.style.visibility =3D "visible";
}

function inheritLayer(layer) {
  if (isMinNS4)
    layer.visibility =3D "inherit";
  if (isMinIE4)
    layer.style.visibility =3D "inherit";
}

function getVisibility(layer) {
  if (isMinNS4) {
    if (layer.visibility =3D=3D "show")
      return "visible";
    if (layer.visibility =3D=3D "hide")
      return "hidden";
    return layer.visibility;
  }
  if (isMinIE4)
    return layer.style.visibility;
  return "";
}

//-----------------------------------------------------------------------=
------
// Layer positioning.
//-----------------------------------------------------------------------=
------

function moveLayerTo(layer, x, y) {
  if (isMinNS4)
    layer.moveTo(x, y);
  if (isMinIE4) {
    layer.style.left =3D x;
    layer.style.top  =3D y;
  }
}

function moveLayerBy(layer, dx, dy) {
  if (isMinNS4)
    layer.moveBy(dx, dy);
  if (isMinIE4) {
    layer.style.pixelLeft +=3D dx;
    layer.style.pixelTop  +=3D dy;
  }
}

function getLeft(layer) {
  if (isMinNS4)
    return layer.left;
  if (isMinIE4)
    return layer.style.pixelLeft;
  return -1;
}

function getTop(layer) {
  if (isMinNS4)
    return layer.top;
  if (isMinIE4)
    return layer.style.pixelTop;
  return -1;
}

function getRight(layer) {
  if (isMinNS4)
    return layer.left + getWidth(layer);
  if (isMinIE4)
    return layer.style.pixelLeft + getWidth(layer);
  return -1;
}

function getBottom(layer) {
  if (isMinNS4)
    return layer.top + getHeight(layer);
  if (isMinIE4)
    return layer.style.pixelTop + getHeight(layer);
  return -1;
}

function getPageLeft(layer) {
  var x;
  if (isMinNS4)
    return layer.pageX;
  if (isMinIE4) {
    x =3D 0;
    while (layer.offsetParent !=3D null) {
      x +=3D layer.offsetLeft;
      layer =3D layer.offsetParent;
    }
    x +=3D layer.offsetLeft;
    return x;
  }
  return -1;
}

function getPageTop(layer) {
  var y;
  if (isMinNS4)
    return layer.pageY;
  if (isMinIE4) {
    y =3D 0;
    while (layer.offsetParent !=3D null) {
      y +=3D layer.offsetTop;
      layer =3D layer.offsetParent;
    }
    y +=3D layer.offsetTop;
    return y;
  }
  return -1;
}

function getWidth(layer) {
  if (isMinNS4) {
    if (layer.document.width)
      return layer.document.width;
    else
      return layer.clip.right - layer.clip.left;
  }
  if (isMinIE4) {
    if (layer.style.pixelWidth)
      return layer.style.pixelWidth;
    else
      return layer.clientWidth;
  }
  return -1;
}

function getHeight(layer) {
  if (isMinNS4) {
    if (layer.document.height)
      return layer.document.height;
    else
      return layer.clip.bottom - layer.clip.top;
  }
  if (isMinIE4) {
    if (layer.style.pixelHeight)
      return layer.style.pixelHeight;
    else
      return layer.clientHeight;
  }
  return -1;
}

function getzIndex(layer) {
  if (isMinNS4)
    return layer.zIndex;
  if (isMinIE4)
    return layer.style.zIndex;

  return -1;
}

function setzIndex(layer, z) {
  if (isMinNS4)
    layer.zIndex =3D z;
  if (isMinIE4)
    layer.style.zIndex =3D z;
}

//-----------------------------------------------------------------------=
------
// Layer clipping.
//-----------------------------------------------------------------------=
------

function clipLayer(layer, clipleft, cliptop, clipright, clipbottom) {

  if (isMinNS4) {
    layer.clip.left   =3D clipleft;
    layer.clip.top    =3D cliptop;
    layer.clip.right  =3D clipright;
    layer.clip.bottom =3D clipbottom;
  }
  if (isMinIE4)
    layer.style.clip =3D 'rect(' + cliptop + ' ' +  clipright + ' ' + =
clipbottom + ' ' + clipleft +')';
}

function getClipLeft(layer) {
  if (isMinNS4)
    return layer.clip.left;
  if (isMinIE4) {
    var str =3D  layer.style.clip;
    if (!str)
      return 0;
    var clip =3D getIEClipValues(layer.style.clip);
    return(clip[3]);
  }
  return -1;
}

function getClipTop(layer) {
  if (isMinNS4)
    return layer.clip.top;
  if (isMinIE4) {
    var str =3D  layer.style.clip;
    if (!str)
      return 0;
    var clip =3D getIEClipValues(layer.style.clip);
    return clip[0];
  }
  return -1;
}

function getClipRight(layer) {
  if (isMinNS4)
    return layer.clip.right;
  if (isMinIE4) {
    var str =3D  layer.style.clip;
    if (!str)
      return layer.style.pixelWidth;
    var clip =3D getIEClipValues(layer.style.clip);
    return clip[1];
  }
  return -1;
}

function getClipBottom(layer) {
  if (isMinNS4)
    return layer.clip.bottom;
  if (isMinIE4) {
    var str =3D  layer.style.clip;
    if (!str)
      return layer.style.pixelHeight;
    var clip =3D getIEClipValues(layer.style.clip);
    return clip[2];
  }
  return -1;
}

function getClipWidth(layer) {
  if (isMinNS4)
    return layer.clip.width;
  if (isMinIE4) {
    var str =3D layer.style.clip;
    if (!str)
      return layer.style.pixelWidth;
    var clip =3D getIEClipValues(layer.style.clip);
    return clip[1] - clip[3];
  }
  return -1;
}

function getClipHeight(layer) {
  if (isMinNS4)
    return layer.clip.height;
  if (isMinIE4) {
    var str =3D  layer.style.clip;
    if (!str)
      return layer.style.pixelHeight;
    var clip =3D getIEClipValues(layer.style.clip);
    return clip[2] - clip[0];
  }
  return -1;
}

function getIEClipValues(str) {
  var clip =3D new Array();
  var i;
  // Parse out the clipping values for IE layers.
  i =3D str.indexOf("(");
  clip[0] =3D parseInt(str.substring(i + 1, str.length), 10);
  i =3D str.indexOf(" ", i + 1);
  clip[1] =3D parseInt(str.substring(i + 1, str.length), 10);
  i =3D str.indexOf(" ", i + 1);
  clip[2] =3D parseInt(str.substring(i + 1, str.length), 10);
  i =3D str.indexOf(" ", i + 1);
  clip[3] =3D parseInt(str.substring(i + 1, str.length), 10);
  return clip;
}

//-----------------------------------------------------------------------=
------
// Layer scrolling.
//-----------------------------------------------------------------------=
------

function scrollLayerTo(layer, x, y, bound) {
  var dx =3D getClipLeft(layer) - x;
  var dy =3D getClipTop(layer) - y;
  scrollLayerBy(layer, -dx, -dy, bound);
}

function scrollLayerBy(layer, dx, dy, bound) {
  var cl =3D getClipLeft(layer);
  var ct =3D getClipTop(layer);
  var cr =3D getClipRight(layer);
  var cb =3D getClipBottom(layer);
  if (bound) {
    if (cl + dx < 0)
      dx =3D -cl;
    else if (cr + dx > getWidth(layer))
      dx =3D getWidth(layer) - cr;
    if (ct + dy < 0)
      dy =3D -ct;
    else if (cb + dy > getHeight(layer))
      dy =3D getHeight(layer) - cb;
  }
  clipLayer(layer, cl + dx, ct + dy, cr + dx, cb + dy);
  moveLayerBy(layer, -dx, -dy);
}

//-----------------------------------------------------------------------=
------
// Layer background.
//-----------------------------------------------------------------------=
------
function setBgColor(layer, color) {
  if (isMinNS4)
    layer.bgColor =3D color;
  if (isMinIE4)
    layer.style.backgroundColor =3D color;
}

function setBgImage(layer, src) {
  if (isMinNS4)
    layer.background.src =3D src;
  if (isMinIE4)
    layer.style.backgroundImage =3D "url(" + src + ")";
}

//-----------------------------------------------------------------------=
------
// Layer utilities.
//-----------------------------------------------------------------------=
------

function getLayer(name) {
  if (isMinNS4)
    return findLayer(name, document);
  if (isMinIE4)
    return eval('document.all.' + name);
  return null;
}

function findLayer(name, doc) {
  var i, layer;
  for (i =3D 0; i < doc.layers.length; i++) {
    layer =3D doc.layers[i];
    if (layer.name =3D=3D name)
      return layer;
    if (layer.document.layers.length > 0)
      if ((layer =3D findLayer(name, layer.document)) !=3D null)
        return layer;
  }
  return null;
}

//-----------------------------------------------------------------------=
------
// Image utilities.
//-----------------------------------------------------------------------=
------
function getImage(name) {
  if (isMinNS4) {
    return findImage(name, document);
  }
  if (isMinIE4)
    return eval('document.all.' + name);
  return null;
}

function findImage(name, doc) {
  var i, img;
  for (i =3D 0; i < doc.images.length; i++)
    if (doc.images[i].name =3D=3D name)
      return doc.images[i];
  for (i =3D 0; i < doc.layers.length; i++)
    if ((img =3D findImage(name, doc.layers[i].document)) !=3D null) {
      img.container =3D doc.layers[i];
      return img;
    }
  return null;
}

function getImagePageLeft(imgName, offset) {
  img =3D findImage(imgName, document);
 =20
  var x, obj;
  if (isMinIE4 || isNS6) {=20
    x =3D 0;
    obj =3D img;
    while (obj.offsetParent !=3D null) {
      x +=3D obj.offsetLeft;
      obj =3D obj.offsetParent;
    }
    x +=3D obj.offsetLeft;
    return x+offset;
  }
 =20
  if (isMinNS4) {
    if(img.container + "" =3D=3D "undefined") img.container =3D null;
    if (img.container !=3D null){
      return String(img.container.pageX + img.x+offset);
	}
    else
      return String(img.x+offset);
  }
 =20
  return -1;
}

function getImagePageTop(imgName, offset) {
  img =3D findImage(imgName, document);
  var y, obj;

  if (isMinIE4 || isNS6) {
    y =3D 0;
    obj =3D img;
    while (obj.offsetParent !=3D null) {
      y +=3D obj.offsetTop;
      obj =3D obj.offsetParent;
    }
    y +=3D obj.offsetTop;
    return y+offset;
  }
  if (isMinNS4) {
    if(img.container + "" =3D=3D "undefined") img.container =3D null;
    if (img.container !=3D null)
      return String(img.container.pageY + img.y+offset);
    else
      return String(img.y+offset);
  }

  return -1;
}

//-----------------------------------------------------------------------=
------
// Window and page properties.
//-----------------------------------------------------------------------=
------

function getWindowWidth() {
  if (isMinNS4)
    return window.innerWidth;
  if (isMinIE4)
    return document.body.clientWidth;
  return -1;
}

function getWindowHeight() {
  if (isMinNS4)
    return window.innerHeight;
  if (isMinIE4)
    return document.body.clientHeight;
  return -1;
}

function getPageWidth() {
  if (isMinNS4)
    return document.width;
  if (isMinIE4)
    return document.body.scrollWidth;
  return -1;
}

function getPageHeight() {
  if (isMinNS4)
    return document.height;
  if (isMinIE4)
    return document.body.scrollHeight;
  return -1;
}

function getPageScrollX() {
  if (isMinNS4)
    return window.pageXOffset;
  if (isMinIE4)
    return document.body.scrollLeft;
  return -1;
}

function getPageScrollY() {
  if (isMinNS4)
    return window.pageYOffset;
  if (isMinIE4)
    return document.body.scrollTop;
  return -1;
}

------=_NextPart_000_0000_01C9B1DE.479BAAD0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://test.canadianzinc.com/scripts/JSMenu/Loader.js

   JSMenu_DOM =3D (document.getElementById) ? true : false;
   JSMenu_NS4 =3D (document.layers) ? true : false;
    JSMenu_IE =3D (document.all) ? true : false;
   JSMenu_IE4 =3D JSMenu_IE && !JSMenu_DOM;
   JSMenu_Mac =3D (navigator.appVersion.indexOf("Mac") !=3D -1);
  JSMenu_IE4M =3D JSMenu_IE4 && JSMenu_Mac;
 JSMenu_Opera =3D (navigator.userAgent.indexOf("Opera")!=3D-1);
 JSMenu_Konqueror =3D (navigator.userAgent.indexOf("Konqueror")!=3D-1);

JSMenu_IsMenu =3D !JSMenu_Opera && !JSMenu_Konqueror && !JSMenu_IE4M && =
(JSMenu_DOM || JSMenu_NS4 || JSMenu_IE4);

JSMenu_BrowserString =3D JSMenu_NS4 ? "NS4" : JSMenu_DOM ? "DOM" : =
"IE4";


if(window.event + "" =3D=3D "undefined") event =3D null;
function JSMenu_f_PopUp(){return false};
function JSMenu_f_PopDown(){return false};
popUp =3D JSMenu_f_PopUp;
popDown =3D JSMenu_f_PopDown;

//bulletImage 					=3D "<img src=3D/images/logos/CZN-symbol-10wb.gif>";
bulletImage 				=3D "";
JSMenu_GL_MenuWidth          =3D 150;
JSMenu_GL_FontFamily         =3D "Verdana,Arial,Helvetica,sans-serif";
JSMenu_GL_FontSize           =3D 8;
JSMenu_GL_FontBold           =3D false;
JSMenu_GL_FontItalic         =3D false;
JSMenu_GL_FontColor          =3D "white";
JSMenu_GL_FontColorOver      =3D "white";
JSMenu_GL_BGColor            =3D "#336699";
JSMenu_GL_BGColorOver        =3D "#00A1DF";
JSMenu_GL_ItemPadding        =3D 4;

JSMenu_GL_BorderWidth        =3D 1;
JSMenu_GL_BorderColor        =3D "white";
JSMenu_GL_BorderStyle        =3D "dotted";
JSMenu_GL_SeparatorSize      =3D 1;
JSMenu_GL_SeparatorColor     =3D "#B0B0B0";

JSMenu_GL_ImageSrc =3D "/scripts/JSMenu/JSMenu_More_black_right.gif";
JSMenu_GL_ImageSrcLeft =3D "/scripts/JSMenu/JSMenu_More_black_left.gif";

JSMenu_GL_ImageSrcOver =3D =
"/scripts/JSMenu/JSMenu_More_white_right.gif";
JSMenu_GL_ImageSrcLeftOver =3D =
"/scripts/JSMenu/JSMenu_More_white_left.gif";

JSMenu_GL_ImageSize          =3D 5;
JSMenu_GL_ImageHorizSpace    =3D 5;
JSMenu_GL_ImageVertSpace     =3D 2;

JSMenu_GL_KeepHilite         =3D false;
JSMenu_GL_ClickStart         =3D false;
JSMenu_GL_ClickKill          =3D 0;
JSMenu_GL_ChildOverlap       =3D 1;
JSMenu_GL_ChildOffset        =3D -1;
JSMenu_GL_ChildPerCentOver   =3D null;
JSMenu_GL_TopSecondsVisible  =3D .5;
JSMenu_GL_ChildSecondsVisible =3D .3;
JSMenu_GL_StatusDisplayBuild =3D 0;
JSMenu_GL_StatusDisplayLink  =3D 1;
JSMenu_GL_UponDisplay        =3D null;
JSMenu_GL_UponHide           =3D null;

JSMenu_GL_RightToLeft      =3D false;
JSMenu_GL_CreateTopOnly      =3D JSMenu_NS4 ? true : false;
JSMenu_GL_ShowLinkCursor     =3D true;

// the following function is included to illustrate the improved JS =
expression handling of
// the left_position and top_position parameters introduced in 4.0.9
// and modified in 4.1.3 to account for IE6 standards-compliance mode
// you may delete if you have no use for it

function JSMenu_f_CenterMenu(topmenuid) {
	var MinimumPixelLeft =3D 0;
	var TheMenu =3D JSMenu_DOM ? document.getElementById(topmenuid) : =
JSMenu_IE4 ? document.all(topmenuid) : eval("window." + topmenuid);
	var TheMenuWidth =3D JSMenu_DOM ? parseInt(TheMenu.style.width) : =
JSMenu_IE4 ? TheMenu.style.pixelWidth : TheMenu.clip.width;
	var TheWindowWidth =3D JSMenu_IE ? (JSMenu_DOM ? =
JSMenu_IEcanvas.clientWidth : document.body.clientWidth) : =
window.innerWidth;
	return Math.max(parseInt((TheWindowWidth-TheMenuWidth) / =
2),MinimumPixelLeft);
}

if(JSMenu_IsMenu) {
	document.write("<SCR" + "IPT LANGUAGE=3D'JavaScript1.2' =
SRC=3D'/scripts/JSMenu/Arrays.js' TYPE=3D'text/javascript'><\/SCR" + =
"IPT>");
	document.write("<SCR" + "IPT LANGUAGE=3D'JavaScript1.2' =
SRC=3D'/scripts/JSMenu/JSMenu_Script"+ JSMenu_BrowserString +".js' =
TYPE=3D'text/javascript'><\/SCR" + "IPT>");
}


//end
------=_NextPart_000_0000_01C9B1DE.479BAAD0--
